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.
Builds deployable MCP servers in Python from natural language descriptions of tools, resources, and prompts.
npx claudepluginhub jezweb/claude-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
assets/SCRIPTS-TEMPLATE.mdassets/api-client-pattern.pyassets/basic-server.pyassets/client-example.pyassets/error-handling.pyassets/openapi-integration.pyassets/prompts-examples.pyassets/pyproject.tomlassets/requirements.txtassets/resources-examples.pyassets/script-template.tsassets/self-contained-server.pyassets/tools-examples.pyreferences/cli-commands.mdreferences/cloud-deployment.mdreferences/common-errors.mdreferences/context-features.mdreferences/deploy-checklist.mdreferences/integration-patterns.mdreferences/production-patterns.mdBuild a working MCP server from a description of the tools you need. Produces a deployable Python server using FastMCP.
Ask what the server needs to provide:
A brief like "MCP server for querying our customer database" is enough.
pip install fastmcp
Copy 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()
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.json
CLI 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.
# 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 .
For comprehensive automated testing, generate a test script using the FastMCP Client. See references/testing-pattern.md for the async test pattern.
FastMCP Cloud (simplest):
Before deploying, work through the pre-deploy checklist in references/deploy-checklist.md to catch common issues (missing module-level server, hardcoded secrets, etc.).
fastmcp deploy server.py --name my-server
Docker (self-hosted):
See references/cloud-deployment.md for Dockerfile patterns.
Cloudflare Workers (edge): See the cloudflare-worker-builder skill for Workers-based MCP servers.
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 mcp
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."""
...
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}"
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 templatereferences/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 injectionreferences/testing-pattern.md — FastMCP Client async test patternreferences/deploy-checklist.md — Pre-deploy validation checklistCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.