Building mcp servers
Skill mjunaidca/mjs-agent-skills/.claude/skills/building-mcp-servers
A curated collection of Agent Skills — reusable units of intelligence that teach AI General Agents how to perform specific tasks autonomously.
npx -y skills add mjunaidca/mjs-agent-skills --skill building-mcp-serversAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its author says it does
Copied from the file, not written here
Guides creation of high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK). Covers tool design, authentication, Docker deployment, and evaluation creation. NOT when consuming existing MCP servers (use the server directly).
SKILL.md
5.4 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
MCP Server Development Guide
Overview
Create MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. The quality of an MCP server is measured by how well it enables LLMs to accomplish real-world tasks.
High-Level Workflow
Creating a high-quality MCP server involves four main phases:
Phase 1: Deep Research and Planning
1.1 Understand Modern MCP Design
API Coverage vs. Workflow Tools: Balance comprehensive API endpoint coverage with specialized workflow tools. When uncertain, prioritize comprehensive API coverage.
Tool Naming and Discoverability:
Use consistent prefixes (e.g., github_create_issue, github_list_repos) and action-oriented naming.
Context Management: Design tools that return focused, relevant data. Support filtering/pagination.
Actionable Error Messages: Error messages should guide agents toward solutions with specific suggestions.
1.2 Study MCP Protocol Documentation
Start with the sitemap: https://modelcontextprotocol.io/sitemap.xml
Fetch pages with .md suffix (e.g., https://modelcontextprotocol.io/specification/draft.md).
Key pages: Specification overview, transport mechanisms, tool/resource/prompt definitions.
1.3 Study Framework Documentation
Recommended stack:
- Language: TypeScript (high-quality SDK, good AI code generation)
- Transport: Streamable HTTP for remote servers, stdio for local servers
Load framework documentation:
- MCP Best Practices - Core guidelines
- TypeScript Guide - TypeScript patterns
- Python Guide - Python/FastMCP patterns
SDK Documentation:
- TypeScript:
https://raw.githubusercontent.com/modelcontextprotocol/typescript-sdk/main/README.md - Python:
https://raw.githubusercontent.com/modelcontextprotocol/python-sdk/main/README.md
1.4 Plan Your Implementation
Review the service's API documentation. List endpoints to implement, starting with most common operations.
Phase 2: Implementation
2.1 Set Up Project Structure
See language-specific guides:
- TypeScript Guide - Project structure, package.json, tsconfig.json
- Python Guide - Module organization, dependencies
2.2 Implement Core Infrastructure
Create shared utilities:
- API client with authentication
- Error handling helpers
- Response formatting (JSON/Markdown)
- Pagination support
2.3 Implement Tools
For each tool:
Input Schema:
- Use Zod (TypeScript) or Pydantic (Python)
- Include constraints and clear descriptions
Output Schema:
- Define
outputSchemawhere possible - Use
structuredContentin responses
Tool Description:
- Concise summary, parameter descriptions, return type
Annotations:
readOnlyHint,destructiveHint,idempotentHint,openWorldHint
Phase 3: Review and Test
3.1 Code Quality
Review for: DRY principle, consistent error handling, full type coverage, clear descriptions.
3.2 Build and Test
TypeScript:
npm run build
npx @modelcontextprotocol/inspector
Python:
python -m py_compile your_server.py
# Test with MCP Inspector
Phase 4: Create Evaluations
Create 10 evaluation questions to test LLM effectiveness with your server.
Requirements for each question:
- Independent, read-only, complex, realistic, verifiable, stable
Output Format:
<evaluation>
<qa_pair>
<question>Your question here</question>
<answer>Expected answer</answer>
</qa_pair>
</evaluation>
See Evaluation Guide for complete guidelines.
Docker/Containerization
Transport Security (allowed_hosts)
FastMCP validates Host headers. For Docker, configure:
from mcp.server.fastmcp import FastMCP
from mcp.server.transport_security import TransportSecuritySettings
transport_security = TransportSecuritySettings(
allowed_hosts=[
"127.0.0.1:*", "localhost:*", "[::1]:*",
"mcp-server:*", # Docker container name
"0.0.0.0:*",
],
)
mcp = FastMCP("my_server", transport_security=transport_security)
Health Check Endpoint
Add /health endpoint via middleware (see references for full example).
Verification
Run: python3 scripts/verify.py
Expected: ✓ building-mcp-servers skill ready
If Verification Fails
- Run diagnostic: Check references/ folder exists
- Check: All reference files present
- Stop and report if still failing
References
- MCP Best Practices - Universal guidelines
- Python Guide - Python/FastMCP patterns
- TypeScript Guide - TypeScript patterns
- TaskFlow Patterns - Internal server patterns
- Evaluation Guide - Creating evaluations
Gives 6 of the 12 instructions most mcp tooling skills give in ~1.1k tokens
Counted across 638 of the 750 authors here whose files we hold, read 2026-08-06
- create ten complex read-only evaluation questionshere, and in 71 of 638, across 17 files
- test servers using MCP Inspectorhere, and in 60 of 638, across 18 files
- provide actionable error messageshere, and in 56 of 638, across 14 files
- prioritize comprehensive API coverage over specific workflowshere, and in 54 of 638, across 12 files
- use TypeScript and Streamable HTTP for remote serversin 53 of 638, across 7 files
- define structured output schemas where possiblehere, and in 51 of 638, across 9 files
- use Zod or Pydantic for input schemashere, and in 48 of 638, across 6 files
- fetch MCP specification pages with markdown suffixin 46 of 638, across 4 files
- load framework documentation using WebFetchin 45 of 638, across 3 files
- verify each evaluation answer independentlyin 45 of 638, across 3 files
- implement API client with authentication and paginationin 45 of 638, across 3 files
- Define input schemas with validationin 28 of 638, across 10 files
Said here and by no other author read
- use consistent prefixes for tool naming
- load relevant framework documentation
- list endpoints to implement
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.