Build MCP servers in Python with FastMCP. Workflow: define tools and resources, build server, test locally, deploy to FastMCP Cloud or Docker. Use when creating MCP servers, exposing tools/resources/prompts to LLMs, building Claude integrations, or troubleshooting FastMCP module-level server, storage, lifespan, middleware, OAuth, or deployment errors.
Install
npx skillscat add jezweb/claude-skills/mcp-builder Install via the SkillsCat registry.
This skill provides a workflow for building MCP servers in Python using FastMCP. It guides developers through defining tools and resources, creating the server, testing locally, and deploying to FastMCP Cloud or Docker. Use it when creating MCP servers to expose tools, resources, and prompts to LLMs, building Claude integrations, or troubleshooting FastMCP deployment issues.
MCP Builder
Build a working MCP server from a description of the tools you need. Produces a deployable Python server using FastMCP.
Workflow
Step 1: Define What to Expose
Ask what the server needs to provide:
- Tools — Functions Claude can call (API wrappers, calculations, file operations)
- Resources — Data Claude can read (database records, config, documents)
- Prompts — Reusable prompt templates with parameters
A brief like "MCP server for querying our customer database" is enough.
Step 2: Scaffold the Server
pip install fastmcpCopy and customise assets/basic-server.py:
from fastmcp import FastMCP
# MUST be at module level for FastMCP Cloud
mcp = FastMCP("My Server")
@mcp.tool()
async def search_customers(query: str) -> str:
"""Search customers by name or email."""
# Implementation here
return f"Found customers matching: {query}"
@mcp.resource("customers://{customer_id}")
async def get_customer(customer_id: str) -> str:
"""Get customer details by ID."""
return f"Customer {customer_id} details"
if __name__ == "__main__":
mcp.run()Step 3: Add Companion CLI Scripts (Optional)
For Claude Code terminal use, add scripts alongside the MCP server:
my-mcp-server/
├── src/index.ts # MCP server (for Claude.ai)
├── scripts/
│ ├── search.ts # CLI version of search tool
│ └── _shared.ts # Shared auth/config
├── SCRIPTS.md # Documents available scripts
└── package.jsonCLI scripts provide file I/O, batch processing, and richer output that MCP can't.
See assets/SCRIPTS-TEMPLATE.md and assets/script-template.ts for TypeScript templates.
Step 4: Test Locally
# Run server directly
python server.py
# With FastMCP dev mode (auto-reload)
fastmcp dev server.py
# HTTP mode for remote clients
python server.py --transport http --port 8000
# Test with MCP Inspector
fastmcp dev server.py --with-editable .Step 5: Deploy
FastMCP Cloud (simplest):
fastmcp deploy server.py --name my-serverDocker (self-hosted):
See references/cloud-deployment.md for Dockerfile patterns.
Cloudflare Workers (edge):
See the cloudflare-worker-builder skill for Workers-based MCP servers.
Critical Patterns
Module-Level Server Instance
FastMCP Cloud requires the server instance at module level:
# CORRECT
mcp = FastMCP("My Server")
@mcp.tool()
def my_tool(): ...
# WRONG — Cloud can't find the server
def create_server():
mcp = FastMCP("My Server")
return mcpType Annotations Required
FastMCP uses type annotations to generate tool schemas:
@mcp.tool()
async def search(
query: str, # Required parameter
limit: int = 10, # Optional with default
tags: list[str] = [] # Complex types supported
) -> str:
"""Docstring becomes the tool description."""
...Error Handling
Return errors as strings, don't raise exceptions:
@mcp.tool()
async def get_data(id: str) -> str:
try:
result = await fetch_data(id)
return json.dumps(result)
except NotFoundError:
return f"Error: No data found for ID {id}"Asset Files
assets/basic-server.py— Minimal FastMCP server templateassets/self-contained-server.py— Server with storage and middlewareassets/tools-examples.py— Tool patterns and type annotationsassets/resources-examples.py— Resource URI patternsassets/prompts-examples.py— Prompt template patternsassets/client-example.py— MCP client usageassets/SCRIPTS-TEMPLATE.md— CLI companion docs templateassets/script-template.ts— TypeScript CLI script template
Reference Files
references/common-errors.md— 30+ documented errors with fixesreferences/cli-commands.md— FastMCP CLI referencereferences/cloud-deployment.md— Deployment patterns (Cloud, Docker, Workers)references/production-patterns.md— Auth, middleware, storage backendsreferences/integration-patterns.md— FastAPI mount, OpenAPI importreferences/context-features.md— Lifespan, dependency injection