
FastMCP - FastAPI MCP Framework & Runner
io.github.Manas-makerv0.1.0Updated Oct 3, 2026
FastAPI-native Model Context Protocol framework and stdio runner.
Overview
A Python framework that turns tagged FastAPI routes and custom functions into MCP tools, with a local stdio runner for desktop AI clients.
- What it does
- FastMCP is a FastAPI-native framework for exposing an existing FastAPI application as an MCP server. Routes tagged with tags=["mcp"] are reflected into MCP tools, with Pydantic models, path/query/body parameters and docstrings converted into input schemas and descriptions; untagged routes stay private. It also supports custom tools via the @mcp.tool decorator, progressive tool discovery through a search_tools meta-tool, error trapping that returns isError results, custom serializers, and an embedded browser inspector at /mcp/docs. A stdio CLI runner connects desktop clients such as Claude Desktop or Cursor to the app over standard I/O.
- When to use it
- Use it when you already have a FastAPI backend and want its endpoints callable by an AI assistant without writing a separate MCP server. It also suits teams that need many tools exposed without flooding the model context, or that want a local stdio bridge to a desktop AI client.
- Requirements
- Python with the mcp-fastapi package installed (pip or uv). Runs locally as a stdio process or mounted in an ASGI app served by uvicorn. Optional FASTMCP_LOG_LEVEL environment variable controls log verbosity. No accounts or API keys are declared by the server itself; authentication is whatever the underlying FastAPI app implements.
Installation
In SourceWeft
- Open FastMCP - FastAPI MCP Framework & Runner in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
fast-mcp
FastAPI-native Model Context Protocol (MCP) framework with automatic route reflection, ASGI scope bridging, dynamic progressive tool discovery, resilient error recovery, and interactive in-chat MCP Apps (SEP-1865).
[PyPI] [Tests] [Documentation] [Python] [FastAPI] [Glama]
Highlights
- ⚡ Hybrid Dual-Citizen ASGI Mount: Mounts directly onto any existing
FastAPIinstance in-process over standard ASGI—zero external proxying, zero hanging subprocesses. - 🔌 Local stdio CLI Runner & Desktop AI Bridge: Run
fast-mcp stdio main:apporpython -m fast_mcp stdio main:appto connect desktop AI clients (Claude Desktop, Cursor) over standard I/O pipes with zero network setup. - 🔍 Route Reflection: Opt-in tags (
tags=["mcp"]) automatically convert FastAPI endpoints, Pydantic models, docstrings, path/query/body parameters into MCP tools. - 🛠️ Custom AI Tools (
@mcp.tool): Define AI-tailored composite tools alongside reflected routes with automatic schema and docstring extraction. - 🔐 ASGI Scope Bridging: Client authorization headers (
Authorization: Bearer <token>, cookies, API keys) captured during the MCP handshake are bridged into an in-memory ASGIRequest, natively resolving FastAPI'sDepends()andSecurity()providers without code changes. - 🧠 Dynamic Progressive Tool Discovery: Protect agent context windows via progressive discovery (
dynamic_discovery=True), thesearch_tools(query: str)meta-tool, and zero-dependencyKeywordTagRouter. - 🛡️ Resilient Error Recovery & Minified JSON: Traps route
HTTPExceptionand Pydantic validation errors into informativeCallToolResult(isError=True)responses so LLMs can self-correct without protocol failures. Output defaults to compact, token-conscious minified JSON with custom@mcp.serializerformatting hooks. - 🖥️ Dual UI & In-Chat MCP Apps (SEP-1865): Embedded browser inspector at
/mcp/docsplus native support for in-chat interactive iframes in desktop AI clients (Claude Desktop, Cursor, VS Code) via_meta.ui.resourceUri, the built-ininspect()tool, and the@mcp.app()decorator.
Installation
Or using uv:
Quickstart
Run with standard ASGI servers:
Core Capabilities
1. Route Reflection
Routes tagged with tags=["mcp"] (configurable via route_tag) are automatically inspected upon mcp.mount():
- Endpoint docstrings (Google, Sphinx, NumPy format) become tool descriptions and parameter docs.
- Pydantic request models, query parameters, and path variables become MCP input schemas.
- Untagged endpoints remain standard HTTP routes and are never leaked to LLMs.
2. Custom AI Tools (@mcp.tool)
Register AI-specialized tools that don't need dedicated REST endpoints:
3. ASGI Scope Bridging & Native Auth
Incoming headers (Authorization: Bearer ..., cookies, API keys) from the MCP client's SSE handshake or message posts are captured into an active request context:
If authorization fails or headers are omitted, fast-mcp unwraps the resulting HTTPException(401) into CallToolResult(is_error=True) so the agent receives an actionable authentication error rather than crashing the transport.
4. Dynamic Progressive Tool Discovery
Prevent LLM context window bloat on large FastAPI applications with hundreds of endpoints:
- When active,
tools/listexposes only baseline tools plus thesearch_tools(query: str)meta-tool. - Calling
search_tools(query="invoice")executes the pluggableToolRouter(defaults to zero-dependencyKeywordTagRouterwith tokenized name/tag/description ranking) and returns matching tool definitions with full JSON schemas.
5. Resilient Error Interception & Custom Serializers
- Exception Traps:
HTTPException(400, 404, 422) and Pydantic validation errors return clean, concise messages withisError=True. - Minified Output: Responses serialize to compact minified JSON (
{"id":1,"name":"widget"}) saving prompt tokens. - Custom Serializers: Format return types into tailored markdown or summaries:
6. Dual UI: Browser Inspector & In-Chat MCP Apps (SEP-1865)
Embedded Browser Inspector
Open http://localhost:8000/mcp/docs in any browser to inspect registered tools, view schemas, and execute test invocations interactively without external Node.js CLIs. (Disable with FastMCP(app, enable_ui=False)).
In-Chat MCP Apps (SEP-1865)
Render rich interactive HTML/JS widgets directly in modern desktop AI clients (Claude Desktop, Cursor, VS Code):
7. Local stdio CLI Runner & Desktop AI Bridge
Connect desktop AI clients (Claude Desktop, Cursor) directly to your FastAPI backend or FastMCP instance over standard input/output (stdio) pipes with zero network setup, port conflicts, or external proxying.
Command-Line Usage
Claude Desktop Configuration (claude_desktop_config.json)
Configure Claude Desktop to launch your FastMCP server directly:
Or using uv to manage the virtual environment automatically:
Programmatic Stdio Runner
You can also run stdio mode programmatically from Python:
Testing & Verification
fast-mcp exercises external behavior across the ASGI Protocol Seam using httpx.AsyncClient with ASGITransport:
Specification & Architectural Documents
- Interactive Documentation Website
- AI Agent Index (llms.txt)
- Specification: fast-mcp Core Framework (V1)
- GLOSSARY.md
- ADR 0001: Architecture Foundation and Hybrid Scope
- ADR 0002: Dual-UI, ASGI Scope Bridging, and Resilient Error Handling
License
MIT
Source: README.md at commit 2fb6e40
Tools
0Version history
1- v0.1.0LatestOct 3, 2026


