Use when building, extending, or debugging FastMCP v3 Python MCP servers — covers tools, resources, prompts, providers, transforms (including CodeMode and Tool Search), auth (MultiAuth, PropelAuth), client SDK, deployment (nginx reverse proxy), Prefab Apps, and testing. Grounded in local v3.1 docs — zero speculation.
99
Quality
100%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
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.mdfd243f9
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.