docs/python-sdk/fastmcp-server-providers-fastmcp_provider.mdx
fastmcp.server.providers.fastmcp_providerFastMCPProvider for wrapping FastMCP servers as providers.
This module provides the FastMCPProvider class that wraps a FastMCP server
and exposes its components through the Provider interface.
It also provides FastMCPProvider* component classes that delegate execution to the wrapped server's middleware, ensuring middleware runs when components are executed.
FastMCPProviderTool <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L42" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>Tool that delegates execution to a wrapped server's middleware.
When run() is called, this tool invokes the wrapped server's
_call_tool_middleware() method, ensuring the server's middleware
chain is executed.
Methods:
wrap <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L64" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>wrap(cls, server: Any, tool: Tool) -> FastMCPProviderTool
Wrap a Tool to delegate execution to the server's middleware.
run <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L121" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>run(self, arguments: dict[str, Any]) -> ToolResult
Delegate to child server's call_tool() without task_meta.
This is called when the tool is used within a TransformedTool forwarding function or other contexts where task_meta is not available.
get_span_attributes <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L140" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_span_attributes(self) -> dict[str, Any]
FastMCPProviderResource <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L147" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>Resource that delegates reading to a wrapped server's read_resource().
When read() is called, this resource invokes the wrapped server's
read_resource() method, ensuring the server's middleware chain is executed.
Methods:
wrap <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L168" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>wrap(cls, server: Any, resource: Resource) -> FastMCPProviderResource
Wrap a Resource to delegate reading to the server's middleware.
get_span_attributes <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L211" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_span_attributes(self) -> dict[str, Any]
FastMCPProviderPrompt <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L218" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>Prompt that delegates rendering to a wrapped server's render_prompt().
When render() is called, this prompt invokes the wrapped server's
render_prompt() method, ensuring the server's middleware chain is executed.
Methods:
wrap <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L239" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>wrap(cls, server: Any, prompt: Prompt) -> FastMCPProviderPrompt
Wrap a Prompt to delegate rendering to the server's middleware.
render <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L290" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>render(self, arguments: dict[str, Any] | None = None) -> PromptResult
Delegate to child server's render_prompt() without task_meta.
This is called when the prompt is used within a transformed context or other contexts where task_meta is not available.
get_span_attributes <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L309" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_span_attributes(self) -> dict[str, Any]
FastMCPProviderResourceTemplate <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L316" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>Resource template that creates FastMCPProviderResources.
When create_resource() is called, this template creates a
FastMCPProviderResource that will invoke the wrapped server's middleware
when read.
Methods:
wrap <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L338" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>wrap(cls, server: Any, template: ResourceTemplate) -> FastMCPProviderResourceTemplate
Wrap a ResourceTemplate to create FastMCPProviderResources.
create_resource <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L359" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>create_resource(self, uri: str, params: dict[str, Any]) -> Resource
Create a FastMCPProviderResource for the given URI.
The uri is the external/transformed URI (e.g., with namespace prefix).
We use _original_uri_template with params to construct the internal
URI that the nested server understands.
read <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L409" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>read(self, arguments: dict[str, Any]) -> str | bytes | ResourceResult
Read the resource content for background task execution.
Reads the resource via the wrapped server and returns the ResourceResult. This method is called by Docket during background task execution.
register_with_docket <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L428" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>register_with_docket(self, docket: Docket) -> None
No-op: the child's actual template is registered via get_tasks().
add_to_docket <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L431" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>add_to_docket(self, docket: Docket, params: dict[str, Any], **kwargs: Any) -> Execution
Schedule this template for background execution via docket.
The child's FunctionResourceTemplate.fn is registered (via get_tasks), and it expects splatted **kwargs, so we splat params here.
get_span_attributes <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L450" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_span_attributes(self) -> dict[str, Any]
FastMCPProvider <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L462" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>Provider that wraps a FastMCP server.
This provider enables mounting one FastMCP server onto another, exposing the mounted server's tools, resources, and prompts through the parent server.
Components returned by this provider are wrapped in FastMCPProvider* classes that delegate execution to the wrapped server's middleware chain. This ensures middleware runs when components are executed.
Methods:
get_app_tool <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L537" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_app_tool(self, app_name: str, tool_name: str) -> Tool | None
Delegate to nested server's get_app_tool, wrapping for middleware.
get_tool_by_hash <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L548" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_tool_by_hash(self, tool_hash: str, tool_name: str) -> Tool | None
Delegate to nested server's get_tool_by_hash, wrapping for middleware.
get_tasks <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L647" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>get_tasks(self) -> Sequence[FastMCPComponent]
Return task-eligible components from the mounted server.
Returns the child's ACTUAL components (not wrapped) so their actual functions get registered with Docket. Gets components with child server's transforms applied, then applies this provider's transforms for correct registration keys.
lifespan <sup><a href="https://github.com/PrefectHQ/fastmcp/blob/main/src/fastmcp/server/providers/fastmcp_provider.py#L688" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>lifespan(self) -> AsyncIterator[None]
Start the mounted server's user lifespan.
This starts only the wrapped server's user-defined lifespan, NOT its full _lifespan_manager() (which includes Docket). The parent server's Docket handles all background tasks.