mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-09 15:19:10 +02:00
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
256 lines
10 KiB
Text
256 lines
10 KiB
Text
---
|
|
title: fastmcp_provider
|
|
sidebarTitle: fastmcp_provider
|
|
---
|
|
|
|
# `fastmcp.server.providers.fastmcp_provider`
|
|
|
|
|
|
FastMCPProvider 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.
|
|
|
|
|
|
## Classes
|
|
|
|
### `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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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>
|
|
|
|
```python
|
|
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.
|
|
|