Skip to main content
FastMCP v4 serves the sessionless 2026-07-28 protocol era and the session-based handshake eras from a single server, with per-connection auto-detection. This page catalogs what FastMCP provides for the modern era — both the protocol machinery it inherits from the MCP Python SDK and the capabilities FastMCP implements itself on top of that layer. It is the reference for what a v4 deployment can actually do on the modern protocol today.

Identity assertion (SEP-990)

SEP-990 defines enterprise “on-behalf-of” access: a corporate identity provider (Okta, Microsoft Entra, etc.) issues a signed ID-JAG asserting an employee’s identity, the employee’s agent presents it at the MCP authorization server’s token endpoint via the RFC 7523 jwt-bearer grant, and receives a short-lived access token — no browser login, no per-user consent screen, and revocation lives at the IdP. The protocol layer for this flow — grant parsing, the exchange_identity_assertion provider hook, and metadata advertisement — comes from the SDK. The validation and issuance logic that makes the flow actually work is FastMCP’s implementation, and enabling it is one parameter on the existing auth providers:
Behind that one parameter, FastMCP performs the full SEP-990 §5.1 / RFC 7523 §3 processing: JWKS-based signature verification with automatic OIDC discovery of issuer keys, typ/iss/aud/sub validation, temporal checks (exp, iat, nbf, maximum assertion lifetime), enforcement of the assertion’s signed client_id and resource bindings, jti replay rejection, scope derivation from the signed assertion (client requests can narrow but never widen), short-lived token issuance with no refresh token, and revocation tracking for the issued tokens. The asserted subject flows into the normal FastMCP auth context, so tools read it through get_access_token() like any other identity. See Identity Assertion for the full documentation. This slots into FastMCP’s existing authorization-server stack — the OAuth proxy’s dynamic client registration, the consent flow, and self-issued JWTs — which is what makes a one-parameter enterprise deployment possible.

Modern-era capability inventory

The complete picture of what a FastMCP v4 server and client provide on the 2026-07-28 era:

Still in the program

Elicitation on the modern protocol is now shipped in its guard form — a tool returns an InputRequiredResult and re-runs per round to gather user input via multi-round trips (see Elicitation on the modern protocol). The declarative Resolve(...) layer over that primitive remains staged, tracked in the Feature Program, along with the unified subscriptions/listen stream. The Known Gaps page tracks the upstream dependencies that gate them.