跳转到内容

MCP 多服务器管理:工具发现与 OAuth 集成

MCP 多服务器管理:工具发现与 OAuth 集成

1. 概念定义

Model Context Protocol(MCP)是一个开放协议,标准化 AI 模型与外部数据源和工具的集成方式。在多服务器场景下,Agent 需要管理多个 MCP 服务器的连接、工具发现、缓存和认证。

核心组件:

  • MultiServerMCPClient:统一管理多个 MCP 服务器的客户端
  • 懒加载:工具在首次使用时加载,而非启动时全部加载
  • 缓存失效:配置文件变更时自动刷新工具缓存
  • OAuth 认证:HTTP/SSE 传输的令牌流

2. 传输协议

MCP 支持三种传输方式:

传输协议适用场景
stdio进程标准输入/输出本地工具服务器
SSEServer-Sent Events远程服务器,单向推送
HTTPHTTP 请求/响应远程服务器,双向通信

2.1 stdio 传输

启动子进程,通过 stdin/stdout 与 MCP 服务器通信。适合本地工具(如文件系统操作、CLI 工具)。

2.2 SSE/HTTP 传输

连接到远程 HTTP 服务器,使用 SSE 接收服务器推送的事件。适合云服务。

3. OAuth 集成

对于 HTTP/SSE 传输,MCP 支持标准 OAuth 令牌流:

  • client_credentials:服务器到服务器认证
  • refresh_token:用户授权 + 令牌刷新

自动令牌刷新流程:

  1. 从配置读取 client_idclient_secrettoken_endpoint
  2. 请求 access token
  3. 每次请求附加 Authorization: Bearer <token>
  4. Token 过期时自动刷新

4. 懒加载与缓存

MCP 工具发现的性能优化:

4.1 mtime 缓存失效

配置文件修改后,通过比较 mtime 判断是否需要重新发现工具,避免不必要的重连。

5. 陷阱与规避

5.1 服务器不可用

MCP 服务器可能未启动或网络不可达。

规避:懒加载 + 超时重试,失败时降级为不可用而非阻塞 Agent。

5.2 Token 刷新失败

OAuth 令牌过期且刷新失败。

规避

  • 缓存旧 token 直到新的获取成功
  • 刷新失败时返回错误 ToolMessage 而非抛出异常

参考来源