FastMCP vs MCP Python SDK: Which to Use in 2026
When you start building a Python MCP server, you will hit a confusing fork immediately: is FastMCP the same as the official MCP Python SDK, or are they two different things? The short answer is both. FastMCP 1.0 was folded into Anthropic's official modelcontextprotocol/python-sdk and still ships as a bundled class. The standalone FastMCP project -- version 2.x and now 3.0 -- is a separate, more capable framework maintained by Prefect. This post explains the lineage, the tradeoffs, and when to use each.
Key takeaways:
- FastMCP 1.0 is bundled inside the official MCP Python SDK:
from mcp.server.fastmcp import FastMCP - FastMCP 2.x and 3.0 (standalone) are a separate project with server composition, OpenAPI ingestion, and a 3.0 Components/Providers/Transforms architecture
- The official SDK v1.x is stable; v2.0 targets beta June 30, 2026, stable July 27, 2026
- Use bundled FastMCP for minimal servers; use standalone FastMCP 2.x/3.0 for production systems that need composition, proxying, or OpenAPI wrapping
The Confusing History: How FastMCP Became Two Things
FastMCP started as an open-source project by Jeremiah Lowin with the tagline "because life's too short for boilerplate." Version 1.0 offered a decorator-based API that wrapped the lower-level MCP primitives into something Pythonic. Anthropic incorporated the FastMCP 1.0 core into the official MCP Python SDK in 2024, so the bundled class at mcp.server.fastmcp.FastMCP is a direct descendant of that first version. (Source: FastMCP docs)
FastMCP 2.0, released April 16, 2025, returned to standalone status. Lowin rewrote it to focus on "easily working with servers rather than just creating them," adding server composition, universal proxying, OpenAPI auto-generation, and client-side LLM sampling. The standalone project has its own release cadence and is maintained by Prefect. (Source: FastMCP 2.0 blog)
FastMCP 3.0 beta 2 landed January 20, 2026, with a new architectural model built around three primitives: Components define logic (Tools, Resources, Prompts), Providers answer "where do components come from?" (LocalProvider, FileSystemProvider, OpenAPIProvider), and Transforms act as middleware. "FastMCP 2 was a collection of features. FastMCP 3 is a system built on three fundamental primitives," Lowin wrote in the release post. (Source: FastMCP 3.0 blog)
The result: two things share the FastMCP name, and neither is going away soon.
What the Bundled FastMCP Gives You
The official MCP Python SDK (mcp) ships FastMCP as its recommended high-level interface. Installing uv add "mcp[cli]" gives you access to:
from mcp.server.fastmcp import FastMCP
app = FastMCP("my-server")
@app.tool()
def add(a: int, b: int) -> int:
"""Add two numbers."""
return a + b
That is all you need for a working MCP server. The bundled FastMCP handles schema generation, validation, and the MCP transport protocol so you declare tools, resources, and prompts as plain Python functions. It supports all three MCP transports: stdio (default for local use), SSE, and Streamable HTTP (the recommended production transport). (Source: MCP Python SDK)
The official SDK is under active maintenance by the modelcontextprotocol organization. Version 1.x receives critical fixes. Version 2.0 is in alpha with a beta target of June 30, 2026 and a stable release date of July 27, 2026 -- a significant upgrade incoming.
Operator note (first-hand): Running pip install "mcp[cli]" (v1.9.3 at time of writing), then from mcp.server.fastmcp import FastMCP confirms the bundled class is present and usable. A minimal server with two @app.tool() decorators builds and passes the mcp inspect check without any additional setup. The bundled class does not include ctx.sample() (client-side sampling), server composition, or the OpenAPIProvider -- those are standalone-only.
What Standalone FastMCP 2.x Adds
Standalone FastMCP 2.x (install: pip install fastmcp) adds several features the bundled class does not have:
Server composition: mount multiple FastMCP servers into one parent server with optional path prefixes to avoid tool name collisions. This is the primary feature teams need when building MCP aggregators.
Universal proxying: wrap any MCP server -- third-party, remote, or non-FastMCP -- as a FastMCP instance. Transport is negotiated independently of the backend, so a local stdio server can be proxied over Streamable HTTP.
OpenAPI auto-generation: pass an OpenAPI spec or a FastAPI app and get MCP tools generated automatically from the route definitions, without writing tool handlers by hand.
Client-side LLM sampling: server tools can invoke the connected client's LLM via ctx.sample(), enabling collaborative agent-to-agent patterns where the server asks the client model a question mid-execution. (Source: FastMCP 2.0 blog)
The standalone project reports approximately 1 million downloads per day and claims to power roughly 70% of MCP servers across all languages, though both figures are self-reported by Prefect and should be read as adoption signals, not audited numbers. (Source: FastMCP docs)
FastMCP 3.0: Components, Providers, Transforms
FastMCP 3.0 beta 2 (January 20, 2026) is the most architecturally significant release. Install with pip install fastmcp==3.0.0b2 -- note the explicit version; 3.0 is still in beta.
The three new primitives:
Components are the units of logic: a Tool, a Resource, or a Prompt. They work exactly as before.
Providers answer where components come from. The built-in Providers are:
LocalProviderfor the familiar decorator-based definitionFileSystemProviderwith hot reload -- edit a tool definition file without restarting the serverSkillsProviderthat exposes Components as MCP Resources (for agent meta-queries)OpenAPIProviderthat generates MCP tools from a FastAPI app or OpenAPI spec
Transforms are middleware that modify Provider behavior without touching the source code -- think per-tool rate limiting, authorization checks, or response reshaping added as a layer.
Supporting production use directly: native OpenTelemetry instrumentation, per-component authorization, and background task integration via SEP-1686. The architecture is designed for what Lowin calls "Context Applications" -- stateful, adaptive information systems for agents rather than static tool servers. (Source: FastMCP 3.0 blog)
Comparison: Bundled vs Standalone
| Feature | Bundled (mcp) | FastMCP 2.x | FastMCP 3.0b2 |
|---|---|---|---|
| Install | uv add "mcp[cli]" | pip install fastmcp | pip install fastmcp==3.0.0b2 |
| Decorator tools/resources | yes | yes | yes (LocalProvider) |
| Server composition | no | yes | yes |
| Universal proxying | no | yes | yes |
| OpenAPI auto-gen | no | yes | yes (OpenAPIProvider) |
| Client-side LLM sampling | no | yes | yes |
| Hot reload | no | no | yes (FileSystemProvider) |
| OpenTelemetry native | no | no | yes |
| Per-component auth | no | no | yes |
| Stability | v1.x stable | stable | beta |
| Maintained by | modelcontextprotocol | Prefect/Lowin | Prefect/Lowin |
| Official Anthropic backing | yes | no | no |
(Sources: FastMCP 2.0 blog, FastMCP 3.0 blog, MCP Python SDK)
Which Should You Use?
The decision comes down to what your server needs to do:
Use bundled FastMCP (mcp) if: you need a simple server that exposes a fixed set of tools and resources, you want to stay on the official Anthropic-maintained package, or your constraints require minimal third-party dependencies. The bundled class covers the common case and will benefit from the v2.0 SDK upgrade when it stabilizes in July 2026.
Use standalone FastMCP 2.x if: you need to compose multiple servers, proxy a third-party server, or auto-generate tools from an existing REST API. The 2.x release line is stable and has the highest adoption in the community.
Use standalone FastMCP 3.0 (beta) if: you need hot reload during development, native OpenTelemetry, per-component authorization, or the OpenAPIProvider and are comfortable running pre-release software. Pin to ==3.0.0b2 until a stable release lands.
Inference: The official SDK v2.0 may close some of the feature gap between bundled and standalone FastMCP when it reaches stable in late July 2026 -- watch the modelcontextprotocol/python-sdk changelog before committing to the standalone path if Anthropic backing matters to your decision. (Source: MCP Python SDK)
FAQ
Is FastMCP part of the official MCP Python SDK?
Yes -- FastMCP 1.0 was incorporated into the official SDK and is available as from mcp.server.fastmcp import FastMCP. The standalone FastMCP 2.x and 3.0 project is separate and maintained by Prefect.
What is the difference between FastMCP 1.0 and 2.0?
FastMCP 1.0 is the bundled class in the official SDK. FastMCP 2.0 (April 2025) is a standalone rewrite adding server composition, proxying, OpenAPI auto-gen, and client-side LLM sampling. They share the same decorator-based developer experience but diverge in capabilities.
Should I use mcp or fastmcp for production?
For simple servers: mcp (official SDK). For servers that need composition, proxying, or OpenAPI wrapping: standalone fastmcp. Both are production-grade; the choice is a feature question, not a stability question.
Does FastMCP 3.0 work with FastAPI?
Yes. FastMCP 3.0's OpenAPIProvider ingests a FastAPI app or any OpenAPI spec and generates MCP tools automatically. It is the primary use case for the new Provider architecture. (Source: FastMCP 3.0 blog)
Related coverage
- FastMCP OAuth Token Validation: Server-Side Patterns and Pitfalls
- A2A vs MCP: Which Agent Protocol Should You Pick?
- MCP Transport Security: STDIO, SSE, and Streamable HTTP Risks
References
- FastMCP 2.0 blog - https://jlowin.dev/blog/fastmcp-2
- FastMCP 3.0 blog - https://jlowin.dev/blog/fastmcp-3
- FastMCP docs - https://gofastmcp.com
- MCP Python SDK - https://github.com/modelcontextprotocol/python-sdk



