Skip to main content

mcp-builder

Builds production MCP servers via 4-phase methodology: research, implement, test, evaluate. Triggers: build MCP, new MCP, MCP integration, MCP server scaffold.

Informations de source

Dépôt
softspark/ai-toolkit
Dernière activité de la source
15 juin 2026 à 19:28
Langue détectée de SKILL.md
anglais
Étoiles
177
Forks
21

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
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
# MCP Builder $ARGUMENTS Build a production-grade MCP server following Anthropic's 4-phase methodology. ## When to Use - Wrapping a third-party REST API as MCP tools - Exposing an internal database or service to Claude - Creating reusable integrations for the team - Migrating a custom tool into the MCP ecosystem For MCP protocol theory, see `mcp-patterns` knowledge skill (auto-loaded). ## 4-Phase Workflow ### Phase 1 — Research & Planning 1. Read the target API's documentation (OpenAPI spec, README, changelog). 2. Identify the 5-15 most useful operations. Prefer workflow-oriented tools over 1:1 API mirror. 3. Decide transport: `stdio` for local dev tools, `streamable-http` for remote/shared. 4. Decide language: **TypeScript recommended** (best SDK), Python acceptable (`mcp` package). 5. List required secrets (API keys, tokens) and their env var names. Output: `PLAN.md` with tool list, transport choice, auth model. ### Phase 2 — Implementation 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: - Input/output schemas (Zod for TS, Pydantic for Python) - Clear `name` with service prefix (e.g. `github_create_issue`) - Description starts with a verb, mentions trigger keywords - Annotations: `readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint` - Pagination support via `cursor` or `page` parameters - Focused responses — filter noise, don't dump raw API payloads ### Phase 3 — Review & Testing - TypeScript: `npm run typecheck && npm run lint && npm test` - Python: `ruff check . && mypy --strict src/ && pytest` - MCP Inspector dry-run: ```bash npx @modelcontextprotocol/inspector node dist/server.js ``` - Verify each tool's schema validates a real request and rejects malformed input. ### Phase 4 — Evaluation 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`: 1. "What issues are open on repo X with label `bug`?" 2. "Create an issue titled Y in repo Z" 3. "Who has the most commits this month in repo X?" When a tool fails an eval, the cause is almost always the description, not the schema. Score each tool against the description rubric in `mcp-patterns` (one-line purpose, WHEN TO USE, WHEN NOT TO USE, CRITICAL, self-test). A tool with an empty **WHEN NOT TO USE** is under-specified — it will misfire the moment a second tool in the same server overlaps with it, so add the boundary before re-running the eval. See `mcp-patterns` → "How to Write a Tool Description" for the full rubric and worked example. ## Tool Design Checklist - [ ] Name has service prefix and is verb-led - [ ] Description mentions when to use it and includes trigger keywords - [ ] Description carries a non-empty **WHEN NOT TO USE** that names overlapping tools (see `mcp-patterns` rubric) - [ ] Input schema is strict, no free-form `object` with `additionalProperties: true` - [ ] Output is focused — essential fields only, with pagination cursor if applicable - [ ] Error responses are actionable ("API returned 403 — check `GITHUB_TOKEN` env var") - [ ] Annotations set correctly (readonly/destructive/idempotent) - [ ] No secrets logged or echoed in errors - [ ] Rate limiting respects the upstream API ## Transport Cheat Sheet | 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 | ## Registration Cheat Sheet Local Claude Code (`.mcp.json`): ```json { "mcpServers": { "my-mcp": { "command": "node", "args": ["dist/server.js"], "env": { "API_KEY": "$MY_API_KEY" } } } } ``` Global Claude Code (user-scope): ```bash 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). ## Common Pitfalls | 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 | ## Rules - **MUST** pick 5-15 workflow-oriented tools, not a 1:1 API mirror. The model routes by task, not by endpoint. - **MUST** use strict input schemas (Zod for TS, Pydantic for Python). `additionalProperties: true` lets the model invent fields and drift. - **MUST** set correct tool annotations: `readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint` — the host uses these for safety UIs and auto-approval policies - **NEVER** expose an MCP server on a public network without auth. MCP clients default to trusting the transport — attackers reach tools directly. - **NEVER** log API keys, tokens, or env vars in error messages. A verbose error thrown at the model becomes a stored credential in the conversation. - **CRITICAL**: with `stdio` transport, **all** logs go to stderr. Any stdout write that is not a JSON-RPC message breaks the client. - **MANDATORY**: every server ships with a README documenting env vars, required scopes, rate limits, and a minimal invocation example. ## Gotchas - `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. - MCP tool descriptions are the only thing the LLM sees when routing. `description: "calls POST /api/v2/tickets"` tells the model nothing about intent. Describe **when to use**, not what it does at the HTTP level. - Annotations (`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. - Pagination cursors must be opaque from the client's perspective but stable across retries. A timestamp cursor that advances on every poll fails if the client retries the same cursor after a transient error. - Claude Desktop caches server capabilities on first connection. After changing tool schemas, users must explicitly reload the server (quit + reopen or remove/re-add the server) — simply restarting the server process is not enough. ## When NOT to Use - For **in-toolkit skills** (slash commands, knowledge docs) — use `/skill-creator` - For **agents** inside ai-toolkit — use `/agent-creator` - For plugin packs bundling multiple agents/skills — use `/plugin-creator` - For protocol-level MCP theory and transport trade-offs — use `/mcp-patterns` (knowledge skill) - For conformance/integration testing of an MCP server — delegate to the `mcp-testing-engineer` agent ## Related - `mcp-patterns` — protocol reference (auto-loaded knowledge skill) - `mcp-specialist` agent — for deep MCP design questions - `mcp-testing-engineer` agent — for protocol conformance testing - https://modelcontextprotocol.io/ - https://github.com/anthropics/skills/tree/main/skills/mcp-builder
Voir sur GitHub