FastMCP 2.14 begins adopting the MCP 2025-11-25 specification, headlined by protocol-native background tasks that let long-running operations report progress without blocking clients. This release also graduates the OpenAPI parser to standard, adds first-class support for several new spec features, and removes deprecated APIs accumulated across the 2.x series.
Background Tasks (SEP-1686)
Long-running operations (like tool calls) normally block MCP clients until they complete. The new MCP background task protocol (SEP-1686) lets clients start operations, track progress, and retrieve results without blocking. For FastMCP users, taking advantage of this new functionality is as easy as adding task=True to any async decorator. Under the hood, it's powered by Docket, the enterprise task scheduler at the heart of that handles millions of concurrent tasks every day.
from fastmcp import FastMCP
from fastmcp.dependencies import Progress
mcp = FastMCP("MyServer")
@mcp.tool(task=True)
async def train_model(dataset: str, progress: Progress = Progress()) -> str:
await progress.set_total(100)
for epoch in range(100):
# ... training work ...
await progress.increment()
return "Model trained successfully"
Clients that call this tool in task-augmented mode (for FastMCP clients, that merely means another task=True!) receive a task ID immediately, poll for progress updates, and fetch results when ready. Background tasks work out-of-the-box with an in-memory backend, and users can optionally provide a Redis URL for persistence, horizontal scaling, and single-digit millisecond task pickup latency. When using Redis, users can also add additional Docket workers to scale out their task processing.
The experimental OpenAPI parser graduates to standard. The new architecture delivers improved performance through single-pass schema processing and cleaner internal abstractions. Existing code works unchanged; users of the experimental module should update their imports.
MCP 2025-11-25 Spec Support
This release begins adopting the MCP 2025-11-25 specification. Beyond the core SDK updates, FastMCP adds first-class developer experiences for:
SEP-986: Tool name validation at registration time
As the MCP SDK continues to adopt more of the specification, FastMCP will add corresponding high-level APIs.
Breaking Changes & Cleanup
This release removes deprecated APIs accumulated across the 2.x series: BearerAuthProvider, Context.get_http_request(), the dependencies parameter, legacy resource prefix formats, and several deprecated methods. The upgrade guide provides migration paths for each.
What's Changed
New Features ๐
Switch to new OpenAPI parser as default by @jlowin in https://github.com/jlowin/fastmcp/pull/2513
[2.14] SEP-1686 tasks by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2378
Enhancements ๐ง
Expose InitializeResult to middleware by @jlowin in https://github.com/jlowin/fastmcp/pull/2516
[2.14] Update for MCP SDK auth changes by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2507
Validate tool names at registration time (SEP-986) by @jlowin in https://github.com/jlowin/fastmcp/pull/2540
Deflake GitHub MCP remote integration tests by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2543
Add SEP-1034 default values support for elicitation by @jlowin in https://github.com/jlowin/fastmcp/pull/2545
Improve rate limit detection for integration tests by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2550
Reduce Marvin Test Failure noise by @strawgate in https://github.com/jlowin/fastmcp/pull/2553
[SEP-1686] Raise ValueError when sync functions have task=True by @jlowin in https://github.com/jlowin/fastmcp/pull/2554
refactor: move task attribute to function-based variants only [SEP-1686] by @jlowin in https://github.com/jlowin/fastmcp/pull/2560
Fix type errors for ty 0.0.1-alpha.31 upgrade by @jlowin in https://github.com/jlowin/fastmcp/pull/2561
Add regression tests for functools.wraps + Context (#2524) by @jlowin in https://github.com/jlowin/fastmcp/pull/2566
Update VersionBadge to use Mintlify native Badge component by @jlowin in https://github.com/jlowin/fastmcp/pull/2571
Add TaskConfig for SEP-1686 execution modes by @jlowin in https://github.com/jlowin/fastmcp/pull/2570
Add execution field to base Tool class by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2576
SEP-1699: Add SSE polling support with EventStore by @jlowin in https://github.com/jlowin/fastmcp/pull/2564
SEP-1330 enum schema support by @jlowin in https://github.com/jlowin/fastmcp/pull/2549
Expose get_session_id callback by @mathewjhan in https://github.com/jlowin/fastmcp/pull/2486
Remove TaskConfig and client from root exports by @jlowin in https://github.com/jlowin/fastmcp/pull/2580
Remove overly restrictive MIME type validation from Resource by @jlowin in https://github.com/jlowin/fastmcp/pull/2585
feat: handle error from the initialize middleware by @tonyxwz in https://github.com/jlowin/fastmcp/pull/2531
Remove tests/test_examples.py by @jlowin in https://github.com/jlowin/fastmcp/pull/2593
Fixes ๐
Fix RFC 8414 path-aware authorization server metadata discovery by @jlowin in https://github.com/jlowin/fastmcp/pull/2533
Make fastapi.cli a runnable package by @paulo-raca in https://github.com/jlowin/fastmcp/pull/2532
Move TokenHandler to OAuthProvider for consistent OAuth error codes by @jlowin in https://github.com/jlowin/fastmcp/pull/2538
Update FastMCP server documentation link by @sskim91 in https://github.com/jlowin/fastmcp/pull/2529
Fix: Include signature modification in create_function_without_params by @AidanAllchin in https://github.com/jlowin/fastmcp/pull/2563
add client kwargs to proxy clients and meta to proxy tool calls by @cegersdoerfer in https://github.com/jlowin/fastmcp/pull/2520
Prefix Docket function names to avoid collisions in multi-mount setups by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2575
Fix OAuth client to preserve full URL path for metadata discovery by @jlowin in https://github.com/jlowin/fastmcp/pull/2577
Do not run windows tests in parallel by @jlowin in https://github.com/jlowin/fastmcp/pull/2579
Fix proxy tool result meta attribute forwarding by @dherrman in https://github.com/jlowin/fastmcp/pull/2526
Fix nested server mount routing for 3+ levels deep by @jlowin in https://github.com/jlowin/fastmcp/pull/2586
Add smart fallback for missing access token expiry by @jlowin in https://github.com/jlowin/fastmcp/pull/2587
fix: preserve exception propagation through transport cleanup by @jlowin in https://github.com/jlowin/fastmcp/pull/2591
Breaking Changes ๐ซ
Remove enable_docket setting; Docket is now always on by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2558
Forbid task execution through proxies, add mount/proxy task tests by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2574
Remove enable_tasks setting, enable task protocol by default by @chrisguidry in https://github.com/jlowin/fastmcp/pull/2578
Remove deprecated from fastmcp.settings import settings by @jlowin in https://github.com/jlowin/fastmcp/pull/2581
Remove deprecated mount/import argument order and separator params by @jlowin in https://github.com/jlowin/fastmcp/pull/2582
2.14 deprecation removals by @jlowin in https://github.com/jlowin/fastmcp/pull/2329
Note that #2329 includes the following PRs:
Remove deprecated FASTMCP_SERVER_ environment variable prefix by @jlowin in https://github.com/jlowin/fastmcp/pull/2330
Remove deprecated Context.get_http_request method by @jlowin in https://github.com/jlowin/fastmcp/pull/2332
Remove fastmcp.Image top-level import (deprecated 2.8.1) by @jlowin in https://github.com/jlowin/fastmcp/pull/2334
Remove deprecated client parameter from FastMCPProxy by @jlowin in https://github.com/jlowin/fastmcp/pull/2333
Remove deprecated run_streamable_http_async method by @jlowin in https://github.com/jlowin/fastmcp/pull/2338
Remove deprecated sse_app method by @jlowin in https://github.com/jlowin/fastmcp/pull/2337
Remove deprecated run_sse_async method by @jlowin in https://github.com/jlowin/fastmcp/pull/2335
Remove deprecated streamable_http_app method by @jlowin in https://github.com/jlowin/fastmcp/pull/2336
Remove deprecated dependencies parameter (fixes #2177) by @jlowin in https://github.com/jlowin/fastmcp/pull/2340
Remove output_schema=False support (deprecated 2.11.4) by @jlowin in https://github.com/jlowin/fastmcp/pull/2339
Remove deprecated BearerAuthProvider module by @jlowin in https://github.com/jlowin/fastmcp/pull/2341
Remove resource_prefix_format="protocol" support (deprecated 2.4.0) by @jlowin in https://github.com/jlowin/fastmcp/pull/2342
Remove from_client classmethod (deprecated 2.8.0) by @jlowin in https://github.com/jlowin/fastmcp/pull/2343
Remove add_resource_fn method (deprecated 2.7.0) by @jlowin in https://github.com/jlowin/fastmcp/pull/2345
Docs ๐
Add OCI integration to docs navigation by @jlowin in https://github.com/jlowin/fastmcp/pull/2515
Add supabase docs by @jlowin in https://github.com/jlowin/fastmcp/pull/2030
Add v2.14.0 upgrade guide by @jlowin in https://github.com/jlowin/fastmcp/pull/2565
docs: document stateless_http for horizontal scaling by @alexjacobs08 in https://github.com/jlowin/fastmcp/pull/2547
Rewrite background tasks documentation by @jlowin in https://github.com/jlowin/fastmcp/pull/2567
[Draft] Add documentation for read-only tool patterns by @strawgate in https://github.com/jlowin/fastmcp/pull/2536
New Contributors
@paulo-raca made their first contribution in https://github.com/jlowin/fastmcp/pull/2532
@sskim91 made their first contribution in https://github.com/jlowin/fastmcp/pull/2529
@AidanAllchin made their first contribution in https://github.com/jlowin/fastmcp/pull/2563
@alexjacobs08 made their first contribution in https://github.com/jlowin/fastmcp/pull/2547
@mathewjhan made their first contribution in https://github.com/jlowin/fastmcp/pull/2486
@dherrman made their first contribution in https://github.com/jlowin/fastmcp/pull/2526
@tonyxwz made their first contribution in https://github.com/jlowin/fastmcp/pull/2531
Full Changelog: https://github.com/jlowin/fastmcp/compare/v2.13.2...v2.14.0