-
Notifications
You must be signed in to change notification settings - Fork 2k
docs: add v3.0.0rc1 features to v3-features tracking #3145
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,6 +4,72 @@ title: v3.0 Feature Tracking | |
|
|
||
| This document tracks major features in FastMCP v3.0 for release notes preparation. | ||
|
|
||
| ## 3.0.0rc1 | ||
|
|
||
| ### Concurrent Tool Execution in Sampling | ||
|
|
||
| When an LLM returns multiple tool calls in a single sampling response, they can now be executed concurrently ([#3022](https://github.com/jlowin/fastmcp/pull/3022)). Default behavior remains sequential; opt in with `tool_concurrency`. Tools can declare `sequential=True` to force sequential execution even when concurrency is enabled. | ||
|
|
||
| ```python | ||
| result = await context.sample( | ||
| messages="Fetch weather for NYC and LA", | ||
| tools=[fetch_weather], | ||
| tool_concurrency=0, # Unlimited parallel execution | ||
| ) | ||
| ``` | ||
|
|
||
| ### OpenAPI `validate_output` Option | ||
|
|
||
| `OpenAPIProvider` and `FastMCP.from_openapi()` now accept `validate_output=False` to skip output schema validation ([#3134](https://github.com/jlowin/fastmcp/pull/3134)). Useful when backends don't conform to their own OpenAPI response schemas — structured JSON still flows through, only the strict schema checking is disabled. | ||
|
|
||
| ```python | ||
| mcp = FastMCP.from_openapi( | ||
| openapi_spec=spec, | ||
| client=client, | ||
| validate_output=False, | ||
| ) | ||
| ``` | ||
|
|
||
| ### Auth Token Injection and Azure OBO Dependencies | ||
|
|
||
| New dependency injection for accessing the authenticated user's token directly in tool parameters ([#2918](https://github.com/jlowin/fastmcp/pull/2918)). Works with any auth provider. | ||
|
|
||
| ```python | ||
| from fastmcp.server.dependencies import CurrentAccessToken, TokenClaim | ||
| from fastmcp.server.auth import AccessToken | ||
|
|
||
| @mcp.tool() | ||
| async def my_tool( | ||
| token: AccessToken = CurrentAccessToken, | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The new example passes Useful? React with 👍 / 👎. |
||
| user_id: str = TokenClaim("oid"), | ||
| ): ... | ||
| ``` | ||
|
|
||
| For Azure/Entra, the new `fastmcp[azure]` extra adds `EntraOBOToken` and `MSALApp` dependencies that handle the On-Behalf-Of token exchange declaratively: | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This release note says Useful? React with 👍 / 👎. |
||
|
|
||
| ```python | ||
| from fastmcp.server.auth.providers.azure import EntraOBOToken | ||
|
|
||
| @mcp.tool() | ||
| async def get_emails( | ||
| graph_token: str = EntraOBOToken(["https://graph.microsoft.com/Mail.Read"]), | ||
| ): | ||
| # graph_token is ready — OBO exchange happened automatically | ||
| ... | ||
| ``` | ||
|
|
||
| ### `generate-cli` Agent Skill Generation | ||
|
|
||
| `fastmcp generate-cli` now produces a `SKILL.md` alongside the CLI script ([#3115](https://github.com/jlowin/fastmcp/pull/3115)) — a Claude Code agent skill with pre-computed invocation syntax for every tool. Agents reading the skill can call tools immediately without running `--help`. On by default; pass `--no-skill` to opt out. | ||
|
|
||
| ### Background Task Notification Queue | ||
|
|
||
| Background tasks now use a distributed Redis notification queue for reliable delivery ([#2906](https://github.com/jlowin/fastmcp/pull/2906)). Elicitation switches from polling to BLPOP (single blocking call instead of ~7,200 round-trips/hour), and notification delivery retries up to 3x with TTL-based expiration. | ||
|
|
||
| ### Breaking: `ui=` Renamed to `app=` | ||
|
|
||
| The MCP Apps decorator parameter has been renamed from `ui=ToolUI(...)` / `ui=ResourceUI(...)` to `app=AppConfig(...)` ([#3117](https://github.com/jlowin/fastmcp/pull/3117)). `ToolUI` and `ResourceUI` are consolidated into a single `AppConfig` class. Wire format is unchanged. See the MCP Apps section under beta2 for full details. | ||
|
|
||
| ## 3.0.0beta2 | ||
|
|
||
| ### CLI: `fastmcp list` and `fastmcp call` | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: jlowin/fastmcp
Length of output: 14020
🏁 Script executed:
Repository: jlowin/fastmcp
Length of output: 1224
Add prose clarification for
tool_concurrency=0semantics.The inline code comment is clear and correct, but per documentation guidelines, add explicit mention in the prose (before the code example) that
tool_concurrency=0enables unlimited parallel execution. This helps readers who scan the text without reading code comments.Note: The codebase does not provide alternative constants (
None,math.inf, etc.) for unlimited concurrency;0is the intentional API design.