From fastmcp-creator
Builds, extends, and debugs FastMCP v3 Python MCP servers including tool/resource creation, providers, transforms (CodeMode, Tool Search), auth (MultiAuth, PropelAuth), client SDK, nginx deployment, and testing.
npx claudepluginhub jamie-bitflight/claude_skills --plugin fastmcp-creatorThis skill uses the workspace's default tool permissions.
**Python version:**
references/advanced.mdreferences/apps.mdreferences/auth.mdreferences/claude-code-mcp-integration.mdreferences/client-sdk.mdreferences/deployment.mdreferences/evaluation-guide.mdreferences/integrations.mdreferences/middleware.mdreferences/migration.mdreferences/providers.mdreferences/real-world-patterns.mdreferences/server-core.mdreferences/testing.mdreferences/transforms.mdreferences/typescript-mcp-server.mdscripts/connections.pyscripts/evaluation.pyscripts/example_evaluation.xmlscripts/get_environment.pyBuilds Python MCP servers with FastMCP: define/expose tools, resources, prompts to LLMs; scaffold code, test locally with inspector, deploy to cloud/Docker.
Provides TypeScript patterns for FastMCP MCP servers: basic setup, tools with Zod schemas, logging, progress reporting, streaming output, multiple content types, and image handling.
Generates complete Model Context Protocol (MCP) servers from specs, including tool definitions, resource handlers, tests, and docs in TypeScript or Python (FastMCP). Use for exposing tools/resources to AI agents.
Share bugs, ideas, or general feedback.
Python version:
!python3 --version 2>/dev/null || python --version 2>/dev/null || echo "Python not found in PATH"
Installed FastMCP version:
!uv run python -c "import fastmcp; print(f'FastMCP {fastmcp.__version__}')" 2>/dev/null || echo "FastMCP not installed — run: uv add 'fastmcp>=3.0' before scaffolding"
When user intent matches, load the reference file listed — do not rely on training data for v3 API facts.
| User intent | v3 feature | Reference file |
|---|---|---|
| Build a new FastMCP server | FastMCP(), @mcp.tool, @mcp.resource | ./references/server-core.md |
| Compose multiple servers | mount(), namespace, providers | ./references/providers.md |
| Bridge remote HTTP server to stdio | ProxyProvider, create_proxy() | ./references/providers.md |
| Serve files or skills as resources | FileSystemProvider, SkillsProvider | ./references/providers.md |
| Rename or filter tools from sub-server | ToolTransform, Namespace | ./references/transforms.md |
| Expose resources as tools | ResourcesAsTools | ./references/transforms.md |
| Search/discover tools in large catalogs | BM25SearchTransform, RegexSearchTransform | ./references/transforms.md |
| Sandbox tool execution via Python scripts | CodeMode (experimental) | ./references/transforms.md |
| Add authentication to a server | require_scopes, OAuth variants | ./references/auth.md |
| Mix OAuth + JWT token verifiers | MultiAuth | ./references/auth.md |
| Use PropelAuth for auth | PropelAuthProvider | ./references/auth.md |
| Write a FastMCP client | Client, transports, BearerAuth | ./references/client-sdk.md |
| Run long tasks without blocking | @mcp.tool(task=True) | ./references/advanced.md |
| Add multi-turn user input to a tool | Elicitation API | ./references/advanced.md |
| Deploy to production | Prefect Horizon, HTTP, stdio, nginx | ./references/deployment.md |
| Deploy behind nginx reverse proxy | SSE config, TLS, subpath mounting | ./references/deployment.md |
| Write tests for a FastMCP server | In-memory Client, pytest patterns | ./references/testing.md |
| Integrate with Anthropic/OpenAI/FastAPI | Integration patterns | ./references/integrations.md |
| Migrate from FastMCP v2 | Breaking changes, syntax fixes | ./references/migration.md |
| Add web UI to a server | Apps HTML API, Prefab Apps | ./references/apps.md |
| Return interactive UI from tools | @mcp.tool(app=True), PrefabApp | ./references/advanced.md |
| Add request/response middleware | Middleware, built-in middleware | ./references/middleware.md |
| Find real-world usage patterns | ProxyProvider, mount(), showcase | ./references/real-world-patterns.md |
| Evaluate MCP server quality | Evaluation harness, QA pairs | ./references/evaluation-guide.md |
flowchart TD
Q1{What do you need?}
Q1 -->|Define tools/resources in this server| LC["LocalProvider — default<br>No mount() needed<br>Source: providers/local.mdx"]
Q1 -->|Add another FastMCP server's tools| MC["FastMCPProvider / mount()<br>mcp.mount(sub, namespace='ns')<br>Source: providers/mounting.mdx"]
Q1 -->|Wrap remote HTTP MCP server| PC["ProxyProvider<br>create_proxy('http://remote/mcp')<br>Source: providers/proxy.mdx"]
Q1 -->|Serve files from disk as resources| FC["FileSystemProvider('path/')<br>reload=True for dev, False for prod<br>Source: providers/filesystem.mdx"]
Q1 -->|Expose Claude/Cursor skill files| SC["SkillsProvider / ClaudeSkillsProvider()<br>skill:// URI scheme<br>Source: providers/skills.mdx"]
Q1 -->|Build a custom provider| CC["Subclass Provider base class<br>Source: providers/custom.mdx"]
flowchart TD
Q1{How will clients connect?}
Q1 -->|Local tool in Claude Code / desktop app| ST["stdio — default<br>fastmcp run server.py:mcp<br>Source: deployment/running-server.mdx"]
Q1 -->|Web service or multi-client| HT["HTTP transport<br>mcp.run(transport='http', port=8000)<br>Source: deployment/http.mdx"]
Q1 -->|Testing — in-process| IT["In-memory transport<br>async with Client(mcp) as client<br>Source: patterns/testing.mdx"]
Q1 -->|Managed cloud deployment| PH["Prefect Horizon<br>fastmcp run via GitHub integration<br>Source: deployment/prefect-horizon.mdx"]
flowchart TD
Q1{Auth requirement?}
Q1 -->|No auth needed| NA["No auth — default FastMCP behavior"]
Q1 -->|Validate bearer tokens per tool| RS["require_scopes('scope')<br>@mcp.tool(auth=require_scopes('write'))<br>Source: servers/auth/token-verification.mdx"]
Q1 -->|Full OAuth2 server built-in| FO["Full OAuth server<br>Source: servers/auth/full-oauth-server.mdx"]
Q1 -->|Delegate to external IdP — Auth0, Azure| OP["OIDC proxy / OAuth proxy<br>Source: servers/auth/oidc-proxy.mdx"]
Q1 -->|Mix OAuth + JWT for hybrid clients| MA["MultiAuth — compose OAuth server<br>+ token verifiers (v3.1)<br>Source: servers/auth/multi-auth.mdx"]
Q1 -->|Use PropelAuth| PA["PropelAuthProvider<br>OAuth + token introspection (v3.1)<br>Source: integrations/propelauth.mdx"]
Q1 -->|Client calling protected server| CA["Client auth — BearerAuth / CIMDAuth / OAuthAuth<br>Source: clients/auth/*.mdx"]
# SOURCE: servers/server.mdx + servers/tools.mdx (accessed 2026-03-05)
from fastmcp import FastMCP
mcp = FastMCP("my-server")
@mcp.tool # RULE: no parentheses — v3 canonical syntax
def greet(name: str) -> str:
"""Return a greeting."""
return f"Hello, {name}!"
if __name__ == "__main__":
mcp.run()
# SOURCE: servers/providers/mounting.mdx (accessed 2026-03-05)
from fastmcp import FastMCP
weather = FastMCP("weather")
main = FastMCP("main")
main.mount(weather, namespace="weather")
# Tools from weather become weather_<tool-name> on main
# SOURCE: servers/tasks.mdx — requires fastmcp[tasks] extra (accessed 2026-03-05)
from fastmcp import FastMCP
mcp = FastMCP("task-server")
@mcp.tool(task=True) # RULE: task=True, NOT task=TaskConfig(...)
async def long_running(data: str) -> str:
"""Process data in background."""
return "done"
CONSTRAINT: These v2 patterns are deprecated or removed. Generate only the v3 form.
| v2 / wrong pattern | v3 correct pattern | Source |
|---|---|---|
@mcp.tool() with parentheses | @mcp.tool without parentheses | quickstart.mdx |
task=TaskConfig(mode="required") | task=True | servers/tasks.mdx |
require_auth | require_scopes("scope") | servers/authorization.mdx |
.mcpb packaging | Prefect Horizon or stdio deploy | deployment/running-server.mdx |
ctx.get_state() / ctx.set_state() | Verify in context.mdx — not confirmed v3 | servers/context.mdx |
All core features (tools, resources, prompts, providers, transforms, auth, tasks, elicitation, client SDK, deployment) are available in FastMCP 3.0.
The following features were added in FastMCP 3.1.0 and require fastmcp>=3.1.0:
BM25SearchTransform, RegexSearchTransform for large tool catalogsfastmcp[code-mode])transforms= kwarg — server-level FastMCP("name", transforms=[...]) constructor parameterPropelAuthProvider for PropelAuth OAuth + token introspection@mcp.tool(app=True) with declarative UI components (fastmcp[apps])-m/--module flag — fastmcp run -m my_package.server for module modeFASTMCP_TRANSPORT env var — default transport selection without CLI flaghttp_client parameter — connection pooling for token verifiersinclude_unversioned option in VersionFilterTool.from_tool() — immediate transformation at registration timeSOURCE: https://github.com/PrefectHQ/fastmcp releases v3.1.0, v3.1.1 (accessed 2026-03-17)
All 13 v3 reference files sourced from https://gofastmcp.com (published docs) and https://github.com/PrefectHQ/fastmcp (source code):
FastMCP(), tools, resources, prompts, context, lifespan, transforms= kwargrequire_scopes, OAuth variants, token verification, MultiAuth, PropelAuth, http_client poolingClient, transports, BearerAuth, CIMD, OAuth, sampling, elicitation, fastmcp discover, fuzzy matchingFASTMCP_TRANSPORTPreserved references (not overwritten):
.mcp.json config, Claude Code deploymentSkill(skill: "fastmcp-creator:fastmcp-python-tests")fastmcp list / fastmcp call / fastmcp discover CLI usage:
Skill(skill: "fastmcp-creator:fastmcp-client-cli")Skill(skill: "python3-development:python3-development").mcp.json): ./references/claude-code-mcp-integration.md