
Mcp Developer
Implement Model Context Protocol servers and clients correctly using JSON-RPC 2.0 tools, resources, prompts, and the initialize lifecycle.
Overview
mcp-developer is an agent skill most often used in Build (also Ship review, Operate errors) that teaches the MCP JSON-RPC protocol for tools, resources, prompts, and connection lifecycle.
Install
npx skills add https://github.com/jeffallan/claude-skills --skill mcp-developerWhat is this skill?
- JSON-RPC 2.0 request, success, error, and notification message shapes
- Full connection lifecycle from initialize through shutdown
- tools/list with inputSchema examples for agent-callable tools
- Server notifications such as resources/updated without client responses
- Initialize handshake and capability negotiation between client and server
- Documented 7-step connection lifecycle from connect through shutdown
- JSON-RPC 2.0 request/response/notification patterns with exemplar tools/list payload
Adoption & trust: 2.4k installs on skills.sh; 9.7k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are wiring an MCP server but responses fail handshake, tool schemas confuse clients, or notifications do not match the spec.
Who is it for?
Indie devs shipping their first custom MCP server or extending an existing one with correctly shaped tools and lifecycle handling.
Skip if: Builders who only consume prebuilt MCP servers and never touch JSON-RPC or server code.
When should I use this skill?
Implementing or debugging MCP servers, tools, resources, prompts, or client-server JSON-RPC according to the MCP specification.
What do I get? / Deliverables
You implement MCP messages, initialize flow, and tool listings that interoperate with standard MCP clients without guesswork.
- MCP-compliant tool definitions with inputSchema
- Server implementing initialize, tools/list, and optional notifications
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
MCP servers are built while you wire agent capabilities into your product, though the same spec helps when debugging shipped integrations. Protocol handshake, tools/list schemas, and notifications are core agent-tooling primitives—not generic CRUD backend work.
Where it fits
Define tools/list inputSchema before exposing a repo search tool to Cursor.
Verify initialize and shutdown sequence matches spec before distributing your MCP server.
Trace -32602 invalid params responses when a client sends malformed tool arguments.
How it compares
Protocol reference skill for authoring MCP servers—not a turnkey hosted integration or plain REST OpenAPI guide.
Common Questions / FAQ
Who is mcp-developer for?
Solo builders and small teams implementing or debugging Model Context Protocol servers for Claude Code, Cursor, or similar MCP clients.
When should I use mcp-developer?
Use it in Build while defining tools/list and initialize; in Ship review before publishing a server; in Operate when diagnosing JSON-RPC errors or dropped notifications.
Is mcp-developer safe to install?
It documents protocol behavior; your server still needs secure transports and least-privilege tools—review the Security Audits panel on this Prism page for the skill package itself.
SKILL.md
READMESKILL.md - Mcp Developer
# MCP Protocol Specification ## Protocol Overview MCP is built on JSON-RPC 2.0 and enables bidirectional communication between clients (like Claude Desktop) and servers that provide resources, tools, and prompts. ## Message Types ### Request/Response ```typescript // Request format { "jsonrpc": "2.0", "id": 1, "method": "tools/list", "params": {} } // Success response { "jsonrpc": "2.0", "id": 1, "result": { "tools": [ { "name": "get_weather", "description": "Get weather for a location", "inputSchema": { "type": "object", "properties": { "location": { "type": "string" } }, "required": ["location"] } } ] } } // Error response { "jsonrpc": "2.0", "id": 1, "error": { "code": -32602, "message": "Invalid params", "data": { "details": "location is required" } } } ``` ### Notifications ```typescript // Server sends notification (no response expected) { "jsonrpc": "2.0", "method": "notifications/resources/updated", "params": { "uri": "file:///project/data.json" } } ``` ## Connection Lifecycle ``` 1. Client initiates connection (stdio/HTTP/SSE) 2. Client sends initialize request → Server responds with capabilities 3. Client sends initialized notification 4. Normal operation (requests/notifications) 5. Client/server can ping for keepalive 6. Client sends shutdown request 7. Connection closes ``` ### Initialize Handshake ```typescript // Client initialize request { "jsonrpc": "2.0", "id": 1, "method": "initialize", "params": { "protocolVersion": "2024-11-05", "capabilities": { "roots": { "listChanged": true }, "sampling": {} }, "clientInfo": { "name": "claude-desktop", "version": "1.0.0" } } } // Server response { "jsonrpc": "2.0", "id": 1, "result": { "protocolVersion": "2024-11-05", "capabilities": { "resources": { "subscribe": true, "listChanged": true }, "tools": { "listChanged": true }, "prompts": { "listChanged": true } }, "serverInfo": { "name": "my-mcp-server", "version": "1.0.0" } } } // Client sends initialized notification { "jsonrpc": "2.0", "method": "notifications/initialized" } ``` ## Core Methods ### Resources ```typescript // List available resources resources/list → { resources: Resource[] } // Read resource content resources/read { uri: string } → { contents: ResourceContent[] } // Subscribe to resource updates (if supported) resources/subscribe { uri: string } → {} // Unsubscribe resources/unsubscribe { uri: string } → {} // Server notifies of changes notifications/resources/list_changed → {} notifications/resources/updated { uri: string } → {} ``` ### Tools ```typescript // List available tools tools/list → { tools: Tool[] } // Execute tool tools/call { name: string, arguments: object } → { content: ToolResponse[] } // Server notifies of tool changes notifications/tools/list_changed → {} ``` ### Prompts ```typescript // List available prompts prompts/list → { prompts: Prompt[] } // Get prompt with arguments prompts/get { name: string, arguments?: object } → { messages: PromptMessage[] } // Server notifies of prompt changes notifications/prompts/list_changed → {} ``` ## Error Codes Standard JSON-RPC 2.0 codes plus MCP-specific: ```typescript const ERROR_CODES = { // JSON-RPC 2.0 standard PARSE_ERROR: -32700, INVALID_REQUEST: -32600, METHOD_NOT_FOUND: -32601, INVALID_PARAMS: -32602, INTERNAL_ERROR: -32603, // MCP-specific (implementation defined) RESOURCE_NOT_FOUND: -32001, TOOL_EXECUTION_ERROR: -32002, UNAUTHORIZED: -32003, RATE_LIMIT_EXCEEDED: -32004 }; ``` ## Transport Mechanisms ### stdio (Standard Input/Output) ```typescript // Server reads from stdin, writes to stdout // Each message is newline-delimited JSON // Used for local integration (Claude Desktop default) ``` ### HTTP with