home / skills / mjunaidca / mjs-agent-skills / building-mcp-servers

building-mcp-servers skill

/.claude/skills/building-mcp-servers

This skill helps you design and deploy high-quality MCP servers that let LLMs securely interact with external services.

npx playbooks add skill mjunaidca/mjs-agent-skills --skill building-mcp-servers

Review the files below or copy the command above to add this skill to your agents.

Files (11)
SKILL.md
5.4 KB
---
name: building-mcp-servers
description: |
  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).
---

# 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](references/mcp_best_practices.md) - Core guidelines
- [TypeScript Guide](references/node_mcp_server.md) - TypeScript patterns
- [Python Guide](references/python_mcp_server.md) - 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](references/node_mcp_server.md) - Project structure, package.json, tsconfig.json
- [Python Guide](references/python_mcp_server.md) - 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 `outputSchema` where possible
- Use `structuredContent` in 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:**
```bash
npm run build
npx @modelcontextprotocol/inspector
```

**Python:**
```bash
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:**
```xml
<evaluation>
  <qa_pair>
    <question>Your question here</question>
    <answer>Expected answer</answer>
  </qa_pair>
</evaluation>
```

See [Evaluation Guide](references/evaluation.md) for complete guidelines.

---

## Docker/Containerization

### Transport Security (allowed_hosts)

FastMCP validates Host headers. For Docker, configure:

```python
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

1. Run diagnostic: Check references/ folder exists
2. Check: All reference files present
3. **Stop and report** if still failing

## References

- [MCP Best Practices](references/mcp_best_practices.md) - Universal guidelines
- [Python Guide](references/python_mcp_server.md) - Python/FastMCP patterns
- [TypeScript Guide](references/node_mcp_server.md) - TypeScript patterns
- [TaskFlow Patterns](references/taskflow_patterns.md) - Internal server patterns
- [Evaluation Guide](references/evaluation.md) - Creating evaluations

Overview

This skill guides creation of high-quality MCP (Model Context Protocol) servers that let large language models interact with external services through well-designed tools. It covers planning, implementation, testing, Docker deployment, and creating evaluations for server quality. Use it to build new MCP servers in Python (FastMCP) or Node/TypeScript (MCP SDK).

How this skill works

The skill walks you through four phases: research and planning, implementation, review and testing, and evaluation creation. It prescribes API coverage decisions, tool naming, schema design (Pydantic/Zod), transport choices, authentication helpers, and containerization tips such as allowed_hosts for FastMCP. It also provides concrete checks and a verification step to confirm readiness.

When to use it

  • Building a new MCP server to expose a service API to LLM agents.
  • Designing tool-level APIs (actions, read-only resources, pagination) for LLM consumption.
  • Implementing authentication, error handling, and structured outputs for tools.
  • Containerizing and configuring transport security for Docker deployments.
  • Creating evaluation suites to measure LLM effectiveness with your server.

Best practices

  • Prioritize clear, action-oriented tool names and consistent prefixes for discoverability.
  • Favor comprehensive API coverage when unsure, but add specialized workflow tools where needed.
  • Define strict input/output schemas (Pydantic or Zod) and include descriptive parameter docs.
  • Return focused, filterable data and support pagination; make errors actionable with next steps.
  • Keep shared infra DRY: centralized auth client, error helpers, response formatting, and tests.
  • Include a /health endpoint and configure allowed_hosts for FastMCP when using Docker.

Example use cases

  • Expose a ticketing system API as MCP tools (create_ticket, list_tickets, search_tickets) with Pydantic schemas.
  • Wrap a payment provider with idempotent charge endpoints and clear destructiveHint annotations.
  • Create a GitHub MCP surface with repo listing, issue creation, and branch operations using TypeScript SDK.
  • Deploy a local FastMCP server in Docker with transport security settings and a health middleware endpoint.
  • Author 10 independent evaluation questions in the specified XML format to validate agent behavior.

FAQ

Should I implement every API endpoint my service offers?

Start with the most common, high-value endpoints and prioritize comprehensive coverage when uncertain; add specialized workflow tools later.

Which schemas should I use for validation?

Use Pydantic in Python (FastMCP) and Zod in TypeScript to enforce input/output contracts and generate clear docs.