with one click
mcp-builder
// Builds production MCP servers via 4-phase methodology: research, implement, test, evaluate. Triggers: build MCP, new MCP, MCP integration, MCP server scaffold.
// Builds production MCP servers via 4-phase methodology: research, implement, test, evaluate. Triggers: build MCP, new MCP, MCP integration, MCP server scaffold.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | mcp-builder |
| description | Builds production MCP servers via 4-phase methodology: research, implement, test, evaluate. Triggers: build MCP, new MCP, MCP integration, MCP server scaffold. |
| effort | high |
| disable-model-invocation | true |
| argument-hint | [service name or API description] |
| allowed-tools | Read, Write, Edit, Bash, Grep, Glob |
$ARGUMENTS
Build a production-grade MCP server following Anthropic's 4-phase methodology.
For MCP protocol theory, see mcp-patterns knowledge skill (auto-loaded).
stdio for local dev tools, streamable-http for remote/shared.mcp package).Output: PLAN.md with tool list, transport choice, auth model.
Scaffold:
my-mcp/
āāā package.json # or pyproject.toml
āāā src/
ā āāā server.ts # entry point
ā āāā client.ts # API client (axios/httpx)
ā āāā tools/ # one file per tool
ā āāā schemas.ts # Zod/Pydantic schemas
ā āāā errors.ts # typed errors
āāā .env.example
āāā README.md
Per tool:
name with service prefix (e.g. github_create_issue)readOnlyHint, destructiveHint, idempotentHint, openWorldHintcursor or page parametersnpm run typecheck && npm run lint && npm testruff check . && mypy --strict src/ && pytestnpx @modelcontextprotocol/inspector node dist/server.js
Write 10 realistic end-user questions that an LLM should be able to answer using your server. Run them through Claude with the server attached. Grade: did the model call the right tool? Did the response give enough to answer? Fix the description, schema, or response format of any tool that failed.
Example eval questions for a github-mcp:
bug?"object with additionalProperties: trueGITHUB_TOKEN env var")| Scenario | Transport |
|---|---|
| Local dev tool, 1 user | stdio |
| Remote server, multiple users | streamable-http with SSE |
| Internal company tool, auth required | streamable-http + OAuth proxy |
| Embedded in IDE/editor | stdio spawned by editor |
Local Claude Code (.mcp.json):
{
"mcpServers": {
"my-mcp": {
"command": "node",
"args": ["dist/server.js"],
"env": { "API_KEY": "$MY_API_KEY" }
}
}
}
Global Claude Code (user-scope):
claude mcp add my-mcp --scope user -- node /path/to/server.js
Claude Desktop: same JSON, placed in ~/Library/Application Support/Claude/claude_desktop_config.json (macOS).
| Mistake | Fix |
|---|---|
| 1:1 API mirror with 80 tools | Pick 10 workflow-oriented tools |
description: "wrapper for /users endpoint" | description: "Find users by email, role, or team. Use when the user mentions employees, staff, or access" |
| Dumping raw JSON responses | Filter to 3-5 fields the agent actually needs |
| Logging API keys on error | Redact all env vars in error formatters |
exit 1 on transient errors | Retry with exponential backoff, surface final error |
| Stdout pollution (MCP stdio) | All logs go to stderr, stdout is JSON-RPC only |
additionalProperties: true lets the model invent fields and drift.readOnlyHint, destructiveHint, idempotentHint, openWorldHint ā the host uses these for safety UIs and auto-approval policiesstdio transport, all logs go to stderr. Any stdout write that is not a JSON-RPC message breaks the client.stdio transport sends the server's stdout directly to the client as protocol frames. A stray print() or console.log() crashes the client with a parse error and no clear diagnostic. Route all logs through a logger that writes to stderr.description: "calls POST /api/v2/tickets" tells the model nothing about intent. Describe when to use, not what it does at the HTTP level.readOnlyHint, etc.) are optional in the spec but some hosts (Claude Desktop, Cursor) gate auto-approval on them. Missing destructiveHint: true on a delete tool may cause the client to run it silently.streamable-http with SSE requires the server to handle client reconnects with a Last-Event-ID header. Many quick-start templates skip this and drop events on flaky networks./skill-creator/agent-creator/plugin-creator/mcp-patterns (knowledge skill)mcp-testing-engineer agentmcp-patterns ā protocol reference (auto-loaded knowledge skill)mcp-specialist agent ā for deep MCP design questionsmcp-testing-engineer agent ā for protocol conformance testing