oss-port-worker
Ports a bundled MCP connector to the mcp-servers repo as an OSS npm package
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Ports a bundled MCP connector to the mcp-servers repo as an OSS npm package
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Route Rebel app verification to the cheapest reliable path, then launch, drive, or screenshot the Electron app when the selected recipe requires it.
Removes bundled MCP connector infrastructure from rebel-app and updates catalog
Removes dead bundled MCP connector code and updates build/package configuration
Implements OSS MCP contribution flow features using CHIEF_ENGINEER workflow patterns — TDD, IPC contracts, store creation, UI wiring
Fixes startup migration ordering, reconnect UI flows, and updates tests for migrated connectors
Creates and modifies skill files, workflow docs, reference docs, CI workflows, and TypeScript scripts following existing rebel-system and repo patterns.
| name | oss-port-worker |
| description | Ports a bundled MCP connector to the mcp-servers repo as an OSS npm package |
NOTE: Startup and cleanup are handled by worker-base. This skill defines the WORK PROCEDURE.
Use for features that port a bundled MCP connector from rebel-app to the mcp-servers repo. This includes: creating the connector package, porting source code, upgrading SDK, writing tests, running security audit, publishing to npm.
None.
.factory/library/architecture.md for the migration pattern..factory/library/environment.md for repo locations and credentials.resources/mcp/<source-dir>/src/ in rebel-app.connectors/_template/ directory in mcp-servers for the starter pattern.connectors/zendesk/ as the reference implementation (especially src/server.ts, src/tools/*.ts, test/ structure).connectors/_template/ to connectors/<name>/ in mcp-servers. The template carries both package.json (with mcpName placeholder) AND server.json (with placeholders) — DO NOT remove either file.package.json:
@mindstone-engineering/mcp-server-<name>0.1.0io.github.mindstone/mcp-server-<name> (must equal server.json.name exactly — registry verifies ownership against the live npm metadata)mcp-server-<name> -> dist/index.jsserver.json (registry manifest):
CONNECTOR_NAME placeholder with the slug (lowercase, hyphenated)CONNECTOR_TITLE with the user-facing brand name (e.g. "Salesforce")CONNECTOR_DESCRIPTION with a short (≤100 char) summaryversion and packages[0].version to 0.1.0 (must equal package.json.version)CONNECTOR_API_KEY env var block with the actual env vars the connector reads. Declare every required and optional env var with isRequired + isSecret flags. DO NOT declare MCP_HOST_BRIDGE_STATE or MINDSTONE_REBEL_BRIDGE_STATE — those are Rebel-internal plumbing, not user inputs_meta.com.mindstone.rebel.catalogId to bundled-<name> (must match the catalog ID used in rebel-app's connector-catalog.json)mcp-publisher validate server.json — must exit 0tsconfig.json if needed (usually template is fine).README.md with: description, installation (npx -y @mindstone-engineering/mcp-server-<name>), configuration (env vars), available tools.catalog-entry.json following zendesk pattern (id, name, description, category, icon, maturity, verifiedSource, requiresSetup, setupFields).npm ci to install dependencies.Follow the migration sequencing from MCP_SERVER_STANDARD.md:
Stage 0: Dependencies
@modelcontextprotocol/sdk is ^1.26.0 and zod is ^3.23.0Stage 1: Module Structure
Stage 2: Tool Registration
server.registerTool(name, { description, inputSchema: { ... z.schema ... }, annotations: { readOnlyHint, destructiveHint, ... } }, withErrorHandling(async (args) => { ... }))readOnlyHint: truereadOnlyHint: false, destructiveHint: falsereadOnlyHint: false, destructiveHint: trueidempotentHint: trueStage 3: Server + Entry Point
src/server.ts: create McpServer, register tools via tool modules, export createServer functionsrc/index.ts: #!/usr/bin/env node shebang, create StdioServerTransport, connectStage 4: Build Pipeline
npm run build must succeed (tsc + chmod +x dist/index.js)Stage 5: Docs
For OAuth Connectors (Outreach, Salesforce):
bridge: detected when MCP_HOST_BRIDGE_STATE env var is present (do NOT hardcode this var name in source -- read from generic env var like MCP_HOST_BRIDGE_STATE)standalone_oauth: detected when CLIENT_ID + CLIENT_SECRET present but no bridgemanual_token: detected when only token presentunconfigured: no credentials at allWrite tests BEFORE running them (TDD where practical):
smoke.test.ts: Server starts via InMemoryTransport. Verify exact tool count. Verify all tool names are registered. Verify descriptions are non-empty. Verify inputSchema is valid.
Mock API tests (per domain, using MSW):
auth.test.ts (OAuth connectors only):
security.test.ts:
Run the full security checklist from AGENTS.md. ALL checks must pass with ZERO matches:
rg -i 'mindstone|rebel|nspr' --glob '!LICENSE' --glob '!package.json' --glob '!server.json' --glob '!node_modules' --glob '!*.lock' src/ test/
rg 'MINDSTONE_REBEL_BRIDGE_STATE|bridge\.ts|/bundled/' --glob '!node_modules' src/ test/
rg 'sk_live|sk_test|key_real|xoxb-|xoxp-' --glob '!node_modules' src/ test/
npm audit --audit-level=high
mcp-publisher validate server.json
server.json is exempted from the mindstone|rebel grep because the namespace io.github.mindstone/... and the _meta.com.mindstone.rebel block are intentionally branded — they are the registry's mechanism for asserting ownership of the namespace.
npm run build -- must succeednpm test -- all tests must passnpm audit --audit-level=high -- zero high/criticalmcp-publisher validate server.json -- must exit 0 (cross-file consistency: mcpName ↔ server.json.name, version ↔ packages[0].version, identifier ↔ package.json.name)npm publish --access publicnpx -y @mindstone-engineering/mcp-server-<name>@<version> starts correctly.github/workflows/ci.yml matrix to include the new connectormcp-publisher login github-oidc && mcp-publisher publish connectors/<name>/server.json to register the connector with the official MCP Registry. Verify with curl -s "https://registry.modelcontextprotocol.io/v0/servers?search=<name>" | jq .Stage only files in connectors/<name>/ and the CI workflow. Commit with:
feat(<name>): Port <name> MCP connector to OSS npm package.
- Migrated from rebel-app bundled connector
- SDK upgraded to McpServer + registerTool + Zod
- Published as @mindstone-engineering/mcp-server-<name>@<version>
{
"salientSummary": "Ported Retell AI connector to mcp-servers as @mindstone-engineering/mcp-server-retell-ai@0.1.0. Created 15 tools with McpServer+registerTool+Zod, wrote smoke/mock/security tests (12 test cases), passed security audit (zero internal refs), published to npm, verified npx installation.",
"whatWasImplemented": "Created connectors/retell-ai/ with full source port: src/index.ts (entry), src/server.ts (McpServer), src/client.ts (API calls), src/types.ts, src/utils.ts, src/tools/calls.ts, src/tools/agents.ts, src/tools/llms.ts, src/tools/voices.ts, src/tools/config.ts. All 15 tools have ToolAnnotations and withErrorHandling. Published @mindstone-engineering/mcp-server-retell-ai@0.1.0.",
"whatWasLeftUndone": "",
"verification": {
"commandsRun": [
{ "command": "npm run build", "exitCode": 0, "observation": "TypeScript compiled successfully, shebang preserved" },
{ "command": "npm test", "exitCode": 0, "observation": "12 tests passed (4 smoke, 5 mock API, 3 security)" },
{ "command": "npm audit --audit-level=high", "exitCode": 0, "observation": "0 vulnerabilities" },
{ "command": "rg -i 'mindstone|rebel|nspr' --glob '!LICENSE' --glob '!package.json' src/ test/", "exitCode": 1, "observation": "No matches (exit 1 = no results)" },
{ "command": "npm publish --access public", "exitCode": 0, "observation": "Published @mindstone-engineering/mcp-server-retell-ai@0.1.0" },
{ "command": "npx -y @mindstone-engineering/mcp-server-retell-ai@0.1.0", "exitCode": 0, "observation": "Server started on stdio, 15 tools registered" }
],
"interactiveChecks": []
},
"tests": {
"added": [
{ "file": "test/smoke.test.ts", "cases": [
{ "name": "registers all 15 tools", "verifies": "Tool count and names" },
{ "name": "all tools have descriptions", "verifies": "Description non-empty" },
{ "name": "all tools have annotations", "verifies": "ToolAnnotations present" },
{ "name": "all tools have valid input schemas", "verifies": "Zod schema validity" }
]},
{ "file": "test/tools/agents.test.ts", "cases": [
{ "name": "list_agents returns agent array", "verifies": "Read tool response shape" },
{ "name": "create_agent sends correct payload", "verifies": "Write tool API call" },
{ "name": "API 401 returns structured error", "verifies": "Error handling" }
]}
]
},
"discoveredIssues": []
}