mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-11 16:19:10 +02:00
Co-authored-by: marvin-context-protocol[bot] <225465937+marvin-context-protocol[bot]@users.noreply.github.com>
300 lines
12 KiB
Text
300 lines
12 KiB
Text
---
|
|
title: transports
|
|
sidebarTitle: transports
|
|
---
|
|
|
|
# `fastmcp.client.transports`
|
|
|
|
## Functions
|
|
|
|
### `infer_transport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L1026" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
infer_transport(transport: ClientTransport | FastMCP | FastMCP1Server | AnyUrl | Path | MCPConfig | dict[str, Any] | str) -> ClientTransport
|
|
```
|
|
|
|
|
|
Infer the appropriate transport type from the given transport argument.
|
|
|
|
This function attempts to infer the correct transport type from the provided
|
|
argument, handling various input types and converting them to the appropriate
|
|
ClientTransport subclass.
|
|
|
|
The function supports these input types:
|
|
- ClientTransport: Used directly without modification
|
|
- FastMCP or FastMCP1Server: Creates an in-memory FastMCPTransport
|
|
- Path or str (file path): Creates PythonStdioTransport (.py) or NodeStdioTransport (.js)
|
|
- AnyUrl or str (URL): Creates StreamableHttpTransport (default) or SSETransport (for /sse endpoints)
|
|
- MCPConfig or dict: Creates MCPConfigTransport, potentially connecting to multiple servers
|
|
|
|
For HTTP URLs, they are assumed to be Streamable HTTP URLs unless they end in `/sse`.
|
|
|
|
For MCPConfig with multiple servers, a composite client is created where each server
|
|
is mounted with its name as prefix. This allows accessing tools and resources from multiple
|
|
servers through a single unified client interface, using naming patterns like
|
|
`servername_toolname` for tools and `protocol://servername/path` for resources.
|
|
If the MCPConfig contains only one server, a direct connection is established without prefixing.
|
|
|
|
**Examples:**
|
|
|
|
```python
|
|
# Connect to a local Python script
|
|
transport = infer_transport("my_script.py")
|
|
|
|
# Connect to a remote server via HTTP
|
|
transport = infer_transport("http://example.com/mcp")
|
|
|
|
# Connect to multiple servers using MCPConfig
|
|
config = {
|
|
"mcpServers": {
|
|
"weather": {"url": "http://weather.example.com/mcp"},
|
|
"calendar": {"url": "http://calendar.example.com/mcp"}
|
|
}
|
|
}
|
|
transport = infer_transport(config)
|
|
```
|
|
|
|
|
|
## Classes
|
|
|
|
### `SessionKwargs` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L63" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Keyword arguments for the MCP ClientSession constructor.
|
|
|
|
|
|
### `ClientTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L75" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Abstract base class for different MCP client transport mechanisms.
|
|
|
|
A Transport is responsible for establishing and managing connections
|
|
to an MCP server, and providing a ClientSession within an async context.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `connect_session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L86" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect_session(self, **session_kwargs: Unpack[SessionKwargs]) -> AsyncIterator[ClientSession]
|
|
```
|
|
|
|
Establishes a connection and yields an active ClientSession.
|
|
|
|
The ClientSession is *not* expected to be initialized in this context manager.
|
|
|
|
The session is guaranteed to be valid only within the scope of the
|
|
async context manager. Connection setup and teardown are handled
|
|
within this context.
|
|
|
|
**Args:**
|
|
- `**session_kwargs`: Keyword arguments to pass to the ClientSession
|
|
constructor (e.g., callbacks, timeouts).
|
|
|
|
|
|
#### `close` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L112" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
close(self)
|
|
```
|
|
|
|
Close the transport.
|
|
|
|
|
|
### `WSTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L121" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport implementation that connects to an MCP server via WebSockets.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `connect_session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L139" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect_session(self, **session_kwargs: Unpack[SessionKwargs]) -> AsyncIterator[ClientSession]
|
|
```
|
|
|
|
### `SSETransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L160" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport implementation that connects to an MCP server via Server-Sent Events.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `connect_session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L196" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect_session(self, **session_kwargs: Unpack[SessionKwargs]) -> AsyncIterator[ClientSession]
|
|
```
|
|
|
|
### `StreamableHttpTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L230" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport implementation that connects to an MCP server via Streamable HTTP Requests.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `connect_session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L266" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect_session(self, **session_kwargs: Unpack[SessionKwargs]) -> AsyncIterator[ClientSession]
|
|
```
|
|
|
|
### `StdioTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L301" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Base transport for connecting to an MCP server via subprocess with stdio.
|
|
|
|
This is a base class that can be subclassed for specific command-based
|
|
transports like Python, Node, Uvx, etc.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `connect_session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L351" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect_session(self, **session_kwargs: Unpack[SessionKwargs]) -> AsyncIterator[ClientSession]
|
|
```
|
|
|
|
#### `connect` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L363" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect(self, **session_kwargs: Unpack[SessionKwargs]) -> ClientSession | None
|
|
```
|
|
|
|
#### `disconnect` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L398" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
disconnect(self)
|
|
```
|
|
|
|
#### `close` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L413" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
close(self)
|
|
```
|
|
|
|
### `PythonStdioTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L484" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport for running Python scripts.
|
|
|
|
|
|
### `FastMCPStdioTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L537" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport for running FastMCP servers using the FastMCP CLI.
|
|
|
|
|
|
### `NodeStdioTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L566" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport for running Node.js scripts.
|
|
|
|
|
|
### `UvStdioTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L619" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport for running commands via the uv tool.
|
|
|
|
|
|
### `UvxStdioTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L698" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport for running commands via the uvx tool.
|
|
|
|
|
|
### `NpxStdioTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L763" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport for running commands via the npx tool.
|
|
|
|
|
|
### `FastMCPTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L825" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
In-memory transport for FastMCP servers.
|
|
|
|
This transport connects directly to a FastMCP server instance in the same
|
|
Python process. It works with both FastMCP 2.x servers and FastMCP 1.0
|
|
servers from the low-level MCP SDK. This is particularly useful for unit
|
|
tests or scenarios where client and server run in the same runtime.
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `connect_session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L844" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect_session(self, **session_kwargs: Unpack[SessionKwargs]) -> AsyncIterator[ClientSession]
|
|
```
|
|
|
|
### `MCPConfigTransport` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L892" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
|
|
Transport for connecting to one or more MCP servers defined in an MCPConfig.
|
|
|
|
This transport provides a unified interface to multiple MCP servers defined in an MCPConfig
|
|
object or dictionary matching the MCPConfig schema. It supports two key scenarios:
|
|
|
|
1. If the MCPConfig contains exactly one server, it creates a direct transport to that server.
|
|
2. If the MCPConfig contains multiple servers, it creates a composite client by mounting
|
|
all servers on a single FastMCP instance, with each server's name, by default, used as its mounting prefix.
|
|
|
|
In the multi-server case, tools are accessible with the prefix pattern `{server_name}_{tool_name}`
|
|
and resources with the pattern `protocol://{server_name}/path/to/resource`.
|
|
|
|
This is particularly useful for creating clients that need to interact with multiple specialized
|
|
MCP servers through a single interface, simplifying client code.
|
|
|
|
**Examples:**
|
|
|
|
```python
|
|
from fastmcp import Client
|
|
from fastmcp.utilities.mcp_config import MCPConfig
|
|
|
|
# Create a config with multiple servers
|
|
config = {
|
|
"mcpServers": {
|
|
"weather": {
|
|
"url": "https://weather-api.example.com/mcp",
|
|
"transport": "http"
|
|
},
|
|
"calendar": {
|
|
"url": "https://calendar-api.example.com/mcp",
|
|
"transport": "http"
|
|
}
|
|
}
|
|
}
|
|
|
|
# Create a client with the config
|
|
client = Client(config)
|
|
|
|
async with client:
|
|
# Access tools with prefixes
|
|
weather = await client.call_tool("weather_get_forecast", {"city": "London"})
|
|
events = await client.call_tool("calendar_list_events", {"date": "2023-06-01"})
|
|
|
|
# Access resources with prefixed URIs
|
|
icons = await client.read_resource("weather://weather/icons/sunny")
|
|
```
|
|
|
|
|
|
**Methods:**
|
|
|
|
#### `connect_session` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L974" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
connect_session(self, **session_kwargs: Unpack[SessionKwargs]) -> AsyncIterator[ClientSession]
|
|
```
|
|
|
|
#### `close` <sup><a href="https://github.com/jlowin/fastmcp/blob/main/src/fastmcp/client/transports.py#L980" target="_blank"><Icon icon="github" style="width: 14px; height: 14px;" /></a></sup>
|
|
|
|
```python
|
|
close(self)
|
|
```
|