Skip to main content

fastmcp.server.dependencies

Dependency injection for FastMCP. DI features (Depends, CurrentContext, CurrentFastMCP) work without pydocket using the uncalled-for DI engine. The docket-specific dependencies (CurrentDocket, CurrentWorker) and background task execution live in the fastmcp-tasks package.

Functions

bind_request_context

Bind a FastMCPRequestContext for the duration of a handler. Constructs the wrapper from the SDK’s per-request context and sets/resets the fastmcp_request_ctx ContextVar. Every request adapter and the initialize middleware enters this so Context and dependency helpers can read the active request from the ContextVar.

extract_version_spec

Extract the FastMCP component version from a lifted _meta block.

set_background_context_factory

Install (or clear) the background-task Context factory. The factory returns an already-entered Context (so _current_context is set for cleanup) when called inside a worker, or None when there is no task context. Passing None restores core’s no-worker-fallback behavior.

set_worker_server_resolver

Install (or clear) the worker-server resolver used by get_server().

is_docket_available

Check if a compatible pydocket (>= 0.19.0) is installed and importable. Three things have to be true for fastmcp’s task features to work:
  1. pydocket distribution metadata is discoverable
  2. its version is at least _MIN_DOCKET_VERSION (older versions are missing symbols like docket.dependencies.current_execution, which fastmcp imports on the request hot path)
  3. the package actually imports — guards against broken/partial installs where metadata exists but import docket blows up
Any of those failing means we treat docket as unavailable and fall back to the no-tasks code paths instead of crashing deep inside a request.

transform_context_annotations

Transform injected-by-type params into Dependency-defaulted params. Transforms ALL params typed as Context (into = CurrentContext()) and as UserSession (into = CurrentSession()) to use Docket’s DI system, unless they already have a Dependency-based default. This unifies the legacy type annotation DI with Docket’s Depends() system, allowing both patterns to work through a single resolution path. Note: Only POSITIONAL_OR_KEYWORD parameters are reordered (params with defaults after those without). KEYWORD_ONLY parameters keep their position since Python allows them to have defaults in any order. Args:
  • fn: Function to transform
Returns:
  • Function with modified signature (same function object, updated signature)

get_context

Get the current FastMCP Context instance directly.

get_server

Get the current FastMCP server instance directly. In a background-task worker the tasks extension’s resolver is consulted first, so a mounted-child task resolves to the child server rather than the root that started the worker (#3571). Returns:
  • The active FastMCP server
Raises:
  • RuntimeError: If no server in context

get_session

Resolve and validate a Session for an explicit session_id. Pair with a session_id: SessionId tool argument (the agent obtains an id from create_session and passes it back). For a single per-user bucket with nothing for the agent to pass, inject session: UserSession instead. State is keyed by (principal, session_id): the authenticated principal is the isolation wall and session_id organizes sessions within it. The id must have been minted by create_session under the current principal; an id that was never created, or created under a different principal, raises InvalidSession rather than resolving to a fresh empty bucket (the specific reason is logged at debug level, never returned to the caller). Like get_server(), this resolves through the task-aware server, so it needs no foreground context — it works from a task=True tool’s Docket worker as well as a normal request.

get_http_request

Get the current HTTP request. Tries MCP SDK’s request_ctx first, then falls back to FastMCP’s HTTP context.

get_http_headers

Extract headers from the current HTTP request if available. Never raises an exception, even if there is no active HTTP request (in which case an empty dict is returned). By default, strips problematic headers like content-length, and credential headers like authorization and cookie, that cause issues if forwarded to downstream services. If include_all is True, all headers are returned. The include parameter allows specific headers to be included even if they would normally be excluded. This is useful for proxy transports that need to forward authorization headers to upstream MCP servers.

get_access_token

Get the FastMCP access token from the current context. This function first tries to get the token from the current HTTP request’s scope, which is more reliable for long-lived connections where the SDK’s auth_context_var may become stale after token refresh. Falls back to the SDK’s context var if no request is available. Returns:
  • The access token if an authenticated user is available, None otherwise.

without_injected_parameters

Create a wrapper function without injected parameters. Returns a wrapper that excludes Context and Docket dependency parameters, making it safe to use with Pydantic TypeAdapter for schema generation and validation. The wrapper internally handles all dependency resolution and Context injection when called. Handles:
  • Legacy Context injection (always works)
  • Depends() injection (always works - uses docket or vendored DI engine)
Args:
  • fn: Original function with Context and/or dependencies
  • run_in_thread: For sync fn, whether to dispatch the call to a worker thread after resolving dependencies. Defaults to True. Set to False to call fn inline on the event loop thread — required for thread-affinity libraries (e.g. Windows COM). Ignored for async fns.
Returns:
  • Async wrapper function without injected parameters

resolve_dependencies

Resolve dependencies for a FastMCP function. This function:
  1. Filters out any dependency parameter names from user arguments (security)
  2. Resolves Depends() parameters via the DI system
The filtering prevents external callers from overriding injected parameters by providing values for dependency parameter names. This is a security feature. The filtered arguments also feed the resolution frame, so a CallArgument() reference to a dependency parameter resolves the dependency and never a caller-supplied value. Note: Context injection is handled via transform_context_annotations() which converts ctx: Context to ctx: Context = Depends(get_context) at registration time, so all injection goes through the unified DI system. Args:
  • fn: The function to resolve dependencies for
  • arguments: User arguments (may contain keys that match dependency names, which will be filtered out)

CurrentContext

Get the current FastMCP Context instance. This dependency provides access to the active FastMCP Context for the current MCP operation (tool/resource/prompt call). Returns:
  • A dependency that resolves to the active Context instance
Raises:
  • RuntimeError: If no active context found (during resolution)

OptionalCurrentContext

Get the current FastMCP Context, or None when no context is active.

CurrentFastMCP

Get the current FastMCP server instance. This dependency provides access to the active FastMCP server. Returns:
  • A dependency that resolves to the active FastMCP server
Raises:
  • RuntimeError: If no server in context (during resolution)

CurrentRequest

Get the current HTTP request. This dependency provides access to the Starlette Request object for the current HTTP request. Only available when running over HTTP transports (SSE or Streamable HTTP). Returns:
  • A dependency that resolves to the active Starlette Request
Raises:
  • RuntimeError: If no HTTP request in context (e.g., STDIO transport)

CurrentHeaders

Get the current HTTP request headers. This dependency provides access to the HTTP headers for the current request, including the authorization and cookie headers, which get_http_headers() withholds by default. Returns an empty dictionary when no HTTP request is available, making it safe to use in code that might run over any transport. Returns:
  • A dependency that resolves to a dictionary of header name -> value

CurrentAccessToken

Get the current access token for the authenticated user. This dependency provides access to the AccessToken for the current authenticated request. Raises an error if no authentication is present. Returns:
  • A dependency that resolves to the active AccessToken
Raises:
  • RuntimeError: If no authenticated user (use get_access_token() for optional)

TokenClaim

Get a specific claim from the access token. This dependency extracts a single claim value from the current access token. It’s useful for getting user identifiers, roles, or other token claims without needing the full token object. Args:
  • name: The name of the claim to extract (e.g., “oid”, “sub”, “email”)
Returns:
  • A dependency that resolves to the claim value as a string
Raises:
  • RuntimeError: If no access token is available or claim is missing

Classes

FastMCPRequestContext

FastMCP-owned wrapper around the SDK’s per-request context. The SDK v2 runner hands each handler a fresh ServerRequestContext as an argument rather than exposing it through a ContextVar. FastMCP owns this ContextVar (fastmcp_request_ctx) and each request adapter binds a FastMCPRequestContext at the top of the handler (and the initialize middleware binds it too). A wrapper rather than the raw context because the SDK’s ServerRequestContext.meta is a bare RequestParamsMeta TypedDict that only carries progress_token — it does not carry _meta.fastmcp or the distributed-trace parent. Those live in the raw params dict under _meta, which this wrapper lifts once so downstream consumers have a stable surface.

ProgressLike

Protocol for progress tracking interface. Defines the common interface between InMemoryProgress (server context) and Docket’s Progress (worker context). Methods:

current

Current progress value.

total

Total/target progress value.

message

Current progress message.

set_total

Set the total/target value for progress tracking.

increment

Atomically increment the current progress value.

set_message

Update the progress status message.

InMemoryProgress

In-memory progress tracker for immediate tool execution. Provides the same interface as Docket’s Progress but stores state in memory instead of Redis. Useful for testing and immediate execution where progress doesn’t need to be observable across processes. Methods:

current

total

message

set_total

Set the total/target value for progress tracking.

increment

Atomically increment the current progress value.

set_message

Update the progress status message.

Progress

Progress dependency that works in both server and worker contexts. In a Docket worker, delegates to the execution’s Redis-backed progress (observable across processes). Otherwise, uses in-memory tracking. The shared default instance acts as a stateless factory — __aenter__ creates a fresh Progress per invocation so concurrent tasks never share mutable state. Methods:

current

Current progress value.

total

Total/target progress value.

message

Current progress message.

set_total

Set the total/target value for progress tracking.

increment

Atomically increment the current progress value.

set_message

Update the progress status message.