MCP 多服务器管理:工具发现与 OAuth 集成
MCP 多服务器管理:工具发现与 OAuth 集成
1. 概念定义
Model Context Protocol(MCP)是一个开放协议,标准化 AI 模型与外部数据源和工具的集成方式。在多服务器场景下,Agent 需要管理多个 MCP 服务器的连接、工具发现、缓存和认证。
核心组件:
- MultiServerMCPClient:统一管理多个 MCP 服务器的客户端
- 懒加载:工具在首次使用时加载,而非启动时全部加载
- 缓存失效:配置文件变更时自动刷新工具缓存
- OAuth 认证:HTTP/SSE 传输的令牌流
2. 传输协议
MCP 支持三种传输方式:
| 传输 | 协议 | 适用场景 |
|---|---|---|
| stdio | 进程标准输入/输出 | 本地工具服务器 |
| SSE | Server-Sent Events | 远程服务器,单向推送 |
| HTTP | HTTP 请求/响应 | 远程服务器,双向通信 |
2.1 stdio 传输
启动子进程,通过 stdin/stdout 与 MCP 服务器通信。适合本地工具(如文件系统操作、CLI 工具)。
2.2 SSE/HTTP 传输
连接到远程 HTTP 服务器,使用 SSE 接收服务器推送的事件。适合云服务。
3. OAuth 集成
对于 HTTP/SSE 传输,MCP 支持标准 OAuth 令牌流:
- client_credentials:服务器到服务器认证
- refresh_token:用户授权 + 令牌刷新
自动令牌刷新流程:
- 从配置读取
client_id、client_secret、token_endpoint - 请求 access token
- 每次请求附加
Authorization: Bearer <token>头 - Token 过期时自动刷新
4. 懒加载与缓存
MCP 工具发现的性能优化:
4.1 mtime 缓存失效
配置文件修改后,通过比较 mtime 判断是否需要重新发现工具,避免不必要的重连。
5. 陷阱与规避
5.1 服务器不可用
MCP 服务器可能未启动或网络不可达。
规避:懒加载 + 超时重试,失败时降级为不可用而非阻塞 Agent。
5.2 Token 刷新失败
OAuth 令牌过期且刷新失败。
规避:
- 缓存旧 token 直到新的获取成功
- 刷新失败时返回错误 ToolMessage 而非抛出异常