服务器
代理服务器
使用FastMCP作为其他MCP服务器的中介或传输变更。
New in version: 2.0.0
FastMCP提供强大的代理能力,允许一个FastMCP服务器实例作为另一个MCP服务器(可能是远程的、运行在不同传输协议上、甚至是另一个FastMCP实例)的前端。这一功能通过FastMCP.from_client()类方法实现。
什么是代理?
代理意味着设置一个不直接实现自身工具或资源的FastMCP服务器。当它收到请求(如tools/call或resources/read)时,会将请求转发至后端MCP服务器,接收响应后再将该响应传回原始客户端。
使用场景
- 传输桥接: 通过不同的传输方式(如本地Stdio用于Claude桌面版)暴露运行在一种传输方式上的服务器(如远程SSE服务器)。
- 添加功能: 在现有服务器前插入一个层级,用于添加缓存、日志记录、身份验证,或修改请求/响应(但直接修改需要继承
FastMCPProxy类)。 - 安全边界: 将代理作为内部服务器的受控网关使用。
- 简化客户端配置: 即使后端服务器的位置或传输方式发生变化,也能提供单一稳定的端点(代理)。
创建代理
创建代理的最简单方法是使用FastMCP.from_client()类方法。这会创建一个标准的FastMCP服务器,将请求转发到另一个MCP服务器。
from_client 的工作原理:
- 它使用提供的客户端连接到后端服务器。
- 它能发现后端服务器上所有可用的工具、资源、资源模板和提示词。
- 它会创建对应的"代理"组件,将请求转发到后端。
- 它返回一个标准的
FastMCP服务器实例,可以像其他实例一样使用。
目前,代理功能主要侧重于暴露主要的MCP对象(工具、资源、模板和提示)。在当前版本中,代理尚未完全支持通知和采样等高级MCP功能。这些附加功能的支持可能会在未来的版本中添加。
桥接传输
一个常见的使用场景是桥接传输协议。例如,通过Stdio使远程SSE服务器在本地可用:
内存代理
你也可以代理一个内存中的FastMCP实例,这对于调整你无法完全控制的服务器配置或行为非常有用。
FastMCPProxy 类
在内部,FastMCP.from_client()使用了FastMCPProxy类。通常您不需要直接与此类交互,但在需要时可以使用。
在高级场景中可能需要直接使用该类,例如继承FastMCPProxy以在转发请求前后添加自定义逻辑。