mcp-server-patterns
affaan-m/ecc
Build MCP servers with Node/TypeScript SDK—tools, resources, prompts, and transport patterns.
What is mcp-server-patterns?
Build Model Context Protocol servers that let AI assistants call tools, read resources, and use prompts. Use this skill when implementing new MCP servers, adding capabilities, choosing transport (stdio vs HTTP), or debugging registration issues.
- Register tools (callable actions) with input schemas and handlers
- Register resources (read-only data) accessible via URI
- Register prompts (reusable, parameterized templates) for client surfaces
- Choose and configure transport: stdio for local clients (Claude Desktop) or Streamable HTTP for remote (Cursor, cloud)
- Validate inputs with Zod schemas and return structured errors
- Manage SDK version upgrades and API changes across Node/TypeScript SDK versions
How to install mcp-server-patterns
npx skills add null --skill mcp-server-patterns- Node.js and npm installed
- Familiarity with TypeScript (recommended)
- @modelcontextprotocol/sdk package (install via npm)
- Zod or equivalent schema validation library
How to use mcp-server-patterns
- 1.Install the MCP SDK and Zod: npm install @modelcontextprotocol/sdk zod
- 2.Create a McpServer instance with name and version
- 3.Define input schemas for each tool using Zod
- 4.Register tools with registerTool() or tool() (check current SDK docs for method name)
- 5.Register resources with registerResource() or resource(), including URI handlers
- 6.Register prompts with registerPrompt() or equivalent
- 7.Choose transport: use stdio for local clients or Streamable HTTP for remote
- 8.Connect the server using the appropriate transport factory (verify current API in official docs)
Use cases
- Implement a new MCP server that exposes custom tools to Claude or Cursor
- Add a tool to an existing MCP server that calls an external API with rate-limit awareness
- Build a resource handler that serves file contents or API responses on demand
- Configure stdio transport for Claude Desktop integration or HTTP for cloud/remote clients
- Debug MCP registration failures or transport connection issues
- Backend engineers building AI agent integrations
- Full-stack developers adding MCP capabilities to existing applications
- DevOps/platform teams exposing internal tools and APIs to AI assistants
- Developers maintaining or upgrading MCP servers as the SDK evolves
mcp-server-patterns FAQ
The Node/TypeScript SDK API has changed over versions. Check the official MCP documentation or query Context7 for 'MCP' to find the current method names and signatures for your installed SDK version.
Use stdio for local clients like Claude Desktop. Use Streamable HTTP for remote clients (Cursor, cloud). Legacy HTTP/SSE is only for backward compatibility.
Return structured errors or messages the model can interpret, avoiding raw stack traces. Document expected error conditions in the tool description.
Use Zod (recommended) or the SDK's preferred schema format. Define schemas for every tool and document parameters and return shape.
Pin the SDK version in package.json, check release notes when upgrading, and verify that tool/resource registration methods match the new API (use official docs or Context7).
Full instructions (SKILL.md)
Source of truth, from affaan-m/ecc.
name: mcp-server-patterns description: Build MCP servers with Node/TypeScript SDK — tools, resources, prompts, Zod validation, stdio vs Streamable HTTP. Use Context7 or official MCP docs for latest API. metadata: origin: ECC
MCP Server Patterns
The Model Context Protocol (MCP) lets AI assistants call tools, read resources, and use prompts from your server. Use this skill when building or maintaining MCP servers. The SDK API evolves; check Context7 (query-docs for "MCP") or the official MCP documentation for current method names and signatures.
For the broader routing decision of when a capability should be a rule, a skill, MCP, or a plain CLI/API workflow, see docs/capability-surface-selection.md.
When to Use
Use when: implementing a new MCP server, adding tools or resources, choosing stdio vs HTTP, upgrading the SDK, or debugging MCP registration and transport issues.
How It Works
Core concepts
- Tools: Actions the model can invoke (e.g. search, run a command). Register with
registerTool()ortool()depending on SDK version. - Resources: Read-only data the model can fetch (e.g. file contents, API responses). Register with
registerResource()orresource(). Handlers typically receive auriargument. - Prompts: Reusable, parameterised prompt templates the client can surface (e.g. in Claude Desktop). Register with
registerPrompt()or equivalent. - Transport: stdio for local clients (e.g. Claude Desktop); Streamable HTTP is preferred for remote (Cursor, cloud). Legacy HTTP/SSE is for backward compatibility.
The Node/TypeScript SDK may expose tool() / resource() or registerTool() / registerResource(); the official SDK has changed over time. Always verify against the current MCP docs or Context7.
Connecting with stdio
For local clients, create a stdio transport and pass it to your server’s connect method. The exact API varies by SDK version (e.g. constructor vs factory). See the official MCP documentation or query Context7 for "MCP stdio server" for the current pattern.
Keep server logic (tools + resources) independent of transport so you can plug in stdio or HTTP in the entrypoint.
Remote (Streamable HTTP)
For Cursor, cloud, or other remote clients, use Streamable HTTP (single MCP HTTP endpoint per current spec). Support legacy HTTP/SSE only when backward compatibility is required.
Examples
Install and server setup
npm install @modelcontextprotocol/sdk zod
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({ name: "my-server", version: "1.0.0" });
Register tools and resources using the API your SDK version provides: some versions use server.tool(name, description, schema, handler) (positional args), others use server.tool({ name, description, inputSchema }, handler) or registerTool(). Same for resources — include a uri in the handler when the API provides it. Check the official MCP docs or Context7 for the current @modelcontextprotocol/sdk signatures to avoid copy-paste errors.
Use Zod (or the SDK’s preferred schema format) for input validation.
Best Practices
- Schema first: Define input schemas for every tool; document parameters and return shape.
- Errors: Return structured errors or messages the model can interpret; avoid raw stack traces.
- Idempotency: Prefer idempotent tools where possible so retries are safe.
- Rate and cost: For tools that call external APIs, consider rate limits and cost; document in the tool description.
- Versioning: Pin SDK version in package.json; check release notes when upgrading.
Official SDKs and Docs
- JavaScript/TypeScript:
@modelcontextprotocol/sdk(npm). Use Context7 with library name "MCP" for current registration and transport patterns. - Go: Official Go SDK on GitHub (
modelcontextprotocol/go-sdk). - C#: Official C# SDK for .NET.
Related skills
More from affaan-m/ecc and the wider catalog.
messages-ops
Evidence-first live messaging workflow for reading texts, DMs, codes, and thread inspection.
ml-adoption-playbook
Agent skill from affaan-m/ecc.
mle-workflow
Production ML workflow: data contracts, reproducible training, evaluation gates, deployment, monitoring, and rollback.
motion-advanced
Advanced motion patterns for React/Next.js: drag, gestures, text animations, SVG drawing, and imperative sequences.
motion-foundations
Foundation layer for React/Next.js animations: tokens, springs, accessibility rules, and SSR safety using motion/react.
motion-patterns
Production-ready animation patterns for React/Next.js built on motion-foundations tokens.