Use FastMCP to act as an intermediary or change transport for other MCP servers.
New in version: 2.0.0
FastMCP provides a powerful proxying capability that allows one FastMCP server instance to act as a frontend for another MCP server (which could be remote, running on a different transport, or even another FastMCP instance). This is achieved using the FastMCP.as_proxy()
class method.
tools/call
or resources/read
), it forwards that request to a backend MCP server, receives the response, and then relays that response back to the original client.
New in version: 2.10.3
New in version: 2.10.3
The recommended way to create a proxy is using ProxyClient
, which provides full MCP feature support with automatic session isolation:
as_proxy()
. This will automatically create a ProxyClient
instance for you.
Finally, you can pass a regular FastMCP Client
instance to as_proxy()
. This will work for many use cases, but may break if advanced MCP features like sampling or elicitation are invoked by the server.
New in version: 2.10.3
FastMCP proxies provide session isolation to ensure safe concurrent operations. The session strategy depends on how the proxy is configured:
New in version: 2.10.3
ProxyClient
automatically forwards advanced MCP protocol features between the backend server and clients connected to the proxy, ensuring full MCP compatibility.
None
for specific handlers:
FastMCP.as_proxy()
, it automatically creates a ProxyClient
internally to ensure full feature support.
New in version: 2.4.0
You can create a proxy directly from a configuration dictionary that follows the MCPConfig schema. This is useful for quickly setting up proxies to remote servers without manually configuring each connection detail.
New in version: 2.10.5
When you access tools, resources, or prompts from a proxy server, they are “mirrored” from the remote server. Mirrored components cannot be modified directly since they reflect the state of the remote server. For example, you can not simply “disable” a mirrored component.
However, you can create a copy of a mirrored component and store it as a new locally-defined component. Local components always take precedence over mirored ones because the proxy server will check its own registry before it attempts to engage the remote server.
Therefore, to enable or disable a proxy tool, resource, or prompt, you should first create a local copy and add it to your own server. Here’s an example of how to do that for a tool:
FastMCPProxy
ClassFastMCP.as_proxy()
uses the FastMCPProxy
class. You generally don’t need to interact with this class directly, but it’s available if needed for advanced scenarios.
client
: [DEPRECATED] A Client
instance. Use client_factory
instead for explicit session management.client_factory
: A callable that returns a Client
instance when called. This gives you full control over session creation and reuse strategies.FastMCPProxy
requires explicit session management - no automatic detection is performed. You must choose your session strategy:
FastMCP.as_proxy()
instead.