I have a confession to make.
FastMCP 2.0 hides a dark secret. For the last year, we have been scrambling. We were riding the adoption curve of one of the fastest-growing technologies on the planet, trying to keep up with a spec that seemed to change every week.
On the one hand, it worked. FastMCP 1.0 proved the concept so well that Anthropic made it the foundation of the official MCP SDK. FastMCP 2.0 introduced the features necessary to build a real server ecosystem, coinciding with the massive MCP hype wave. The community responded: Today, FastMCP is downloaded a million times a day, and some version of it powers 70% of all MCP servers.
But as someone who cares deeply about framework design, the way v2 evolved was frustrating. It was reactive. We were constantly bolting on new infrastructure to match the present, hacking in new features just to make sure you didnât have to build them yourself.
Over the last year, something shifted. We had enough data, from millions of downloads and countless conversations with teams building real servers, to see the patterns underneath all the ad-hoc features. We could finally see what a âdesignedâ framework would look like.
FastMCP 3.0 is that framework.
It is the platform MCP deserves in 2026, built to be as durable as it is future-proof.
We are moving beyond simple âtool servers.â We are entering the era of Context Applicationsârich, adaptive systems that manage the information flow to agents.
The real challenge was never implementing the protocol. Itâs delivering the right information at the right time. FastMCP 3 is built for that:
- Source components from anywhere.
- Compose and transform them freely.
- Personalize what each user sees.
- Track state across sessions.
- Control access at every level.
- Run long operations in the background.
- Version your APIs.
- Observe everything.
Itâs time to move fast and make things.
đ Get Started
FastMCP 3.0.0 beta 1 is available now.
For a deeper dive into all the new features, please read the Whatâs New in FastMCP 3.0 post.
The Architecture
FastMCP 2 was a collection of features. FastMCP 3 is a system built on three fundamental primitives. If you understand these, you understand the entire framework.
- Components define the logic.
- Providers source the components.
- Transforms shape the components.
A Component is the atom of MCPâspecifically, a Tool, Resource, or Prompt. While they often wrap Python functions or data sources to define their business logic, the Component itself is the standardized interface that the model interacts with.
A Provider answers the question: âWhere do the components come from?â They can come from Python decorators, a directory of files, an OpenAPI spec, a remote MCP server, or pretty much anything else. In fact, a FastMCP server is itself just a Provider that happens to speak the MCP protocol.
A Transform functions as middleware for Providers. It allows you to modify the behavior of a Provider without touching its code. This decouples the author from the consumer: Person A can source the tools (via a Provider), while Person B adapts them to their specific environment (via a Transform)ârenaming them, adding namespaces to prevent collisions, filtering versions, or applying security rules.
The real power lies in the composition of these primitives.
In v2, âmountingâ a sub-server was a massive, specialized subsystem. In v3 itâs just a Provider (sourcing the components) plus a Transform (adding a namespace prefix).
Proxying a remote server? Thatâs a Provider backed by a FastMCP client.
Hiding developer tools from read-only users? Thatâs a Transform applied to a specific session.
This architecture means features that used to require massive amounts of glue code now fall out naturally from the design. It allows us to ship a massive amount of new functionality without breaking the foundation.
Sourcing Context: Providers
Because the architecture is decoupled, we can now source components from anywhere.
LocalProvider
This workhorse powers the classic FastMCP experience you know and love. You define a function, decorate it with @tool, and it becomes a component. It is simple, explicit, and remains the best way to get started. But what if your tools arenât local?
FileSystemProvider
This is a fundamentally different way to organize MCP servers. Instead of importing a server instance and decorating functions, you point the provider at a directory. It scans the files, finds the components, and builds your interface. With reload=True, it watches those files and updates the server instantly on any change.
SkillsProvider
Skills are having a moment. Claude Code, Cursor, Copilotâthey all learn new capabilities from instruction files. SkillsProvider exposes these as MCP resources, which means any MCP client can discover and download skills from your server. Weâre delivering skills over MCP. Itâs a small example of what happens when âwhere do components come from?â becomes an open question: someone had a weird idea, wrote a provider, and now itâs a capability.
OpenAPIProvider
This feature was so popular in FastMCP 2 that people stopped designing servers and started regurgitating REST APIs, forcing me to write a blog post asking you to stop. But we know: itâs useful. In FastMCP 3, OpenAPI returns as a provider. It is available for responsible use, and when paired with ToolTransforms (to rename and curate the output), it finally becomes a tool for building good context rather than blindly accumulating more of it.
Production Realities
FastMCP 2 was great for scripts. FastMCP 3 is built for systems that need to survive in production.
Component Versioning
This was a massive request. You can now serve multiple versions of a tool side-by-side using the @tool(version="1.0") parameter. FastMCP automatically exposes the highest version to clients, while preserving older versions for legacy compatibility. You can even use a VersionFilter transform to run a âv1 Serverâ and a âv2 Serverâ from the exact same codebase.
Authorization & Security
We introduced OAuth in v2, but v3 gives you granular control. You can attach authorization logic to individual components using the auth parameter. You can also apply AuthMiddleware to gate entire groups of components (e.g., by tag) for defense-in-depth.
Native OpenTelemetry
Observability is no longer an afterthought. FastMCP 3 has native OpenTelemetry instrumentation. Drop in your OTEL configuration, and every tool call, resource read, and prompt render is traced with standardized attributes. You can finally see exactly where your latency is coming from.
Background Tasks
Weâve integrated support for SEP-1686, allowing tools to kick off long-running background tasks via Docket integration. This prevents tool timeouts on heavy workloads while keeping the agent responsive.
Developer Joy
We heard you. You wanted a framework that felt less like a hacked-together library and more like a modern Python toolchain.
- Hot Reload:
fastmcp dev server.pywatches your files and reloads instantly. No more kill-restart cycles. - Callable Functions: In v2, decorators turned your functions into objects. In v3, your functions stay functions. You can import them, call them, and unit test them just like normal Python code.
- Sync that Works: Synchronous tools are now automatically dispatched to a threadpool, meaning a slow calculation wonât block your serverâs event loop.
Playbooks
I want to close by showing you why this architecture actually matters.
A common problem in MCP is âcontext crowding.â If you dump 500 tools into a context window, the model gets confused. You want progressive disclosure: start with a few tools, and reveal more based on the userâs role or the conversation state.
In FastMCP 3, we donât need a special âProgressive Disclosureâ feature1. We just compose the primitives weâve already built:
- Providers to source the hidden tools.
- Visibility to hide them by default.
- Auth to act as the gatekeeper.
- Session State to remember who has unlocked what.
Here is what that looks like. We mount a directory of admin tools, hide them from the world, and then provide a secure, authenticated tool that unlocks them only for the current session.
from fastmcp import FastMCP, Contextfrom fastmcp.server.auth import require_scopesfrom fastmcp.server.providers import FileSystemProvider
mcp = FastMCP("Enterprise Server")
# 1. Source admin tools from a file systemadmin_provider = FileSystemProvider("./admin_tools")mcp.mount(admin_provider)
# 2. Hide them by default using the Visibility systemmcp.disable(tags={"admin"})
# 3. Create a gatekeeper tool with Authorization@mcp.tool(auth=require_scopes("super-user"))async def unlock_admin_mode(ctx: Context): """Unlock administrative tools for this session."""
# 4. Modify Session State to reveal the hidden tools await ctx.enable_components(tags={"admin"})
return "Admin mode unlocked. New tools are available."The agent connects, sees a safe environment, authenticates, and the server evolves to match the new trust level.
This composition creates a new primitive entirely. When you chain these stateful unlocks togetherârevealing context A, which unlocks context Bâyou get what we call playbooks. Playbooks are a way to build dynamic MCP-native workflows. More on them soon!
This is the future of Context Applications. Static lists of API wrappers are being replaced by dynamic systems that actively guide the agent through a process.
The Future
We know that as capabilities grow, context windows get crowded. The hundred tools that make your server powerful are the same hundred tools that overwhelm your agent.
Our next wave of features is focused on context optimization: search transforms, curator agents, and deeper skills integration. The architecture of FastMCP 3 is specifically designed to support these patterns.
Because what you donât show the agent matters just as much as what you do.
Today, organizations with a competitive advantage donât have access to smarter AI. They have access to smarter context. FastMCP 3 is the fastest to build it.
Itâs available in beta today.
Happy (Context) Engineering!
About This Beta
FastMCP is an extremely widely used framework. While 3.0 introduces almost no breaking changes, we want to make sure that users arenât caught off guard. Therefore, the beta period will last a few weeks to allow for feedback and testing.
Install: pip install fastmcp==3.0.0b1
- Upgrade Guide: gofastmcp.com/development/upgrade-guide
- Full Documentation: gofastmcp.com
- GitHub: github.com/jlowin/fastmcp
Footnotes
-
Though of course weâll have an amazing DX for it as patterns emerge. ⤴ď¸
Subscribe
Comments
Join the conversation by posting on social media.