Skip to content

MCP 架构规范

Model Context Protocol (MCP) 采用客户端-服务器架构,通过标准化的 JSON-RPC 协议实现 AI 应用程序与外部数据源和工具的安全连接。

整体架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   AI 应用程序    │    │   MCP 客户端    │    │   MCP 服务器    │
│                │    │                │    │                │
│  - Claude       │◄──►│  - 协议处理     │◄──►│  - 工具提供     │
│  - ChatGPT      │    │  - 会话管理     │    │  - 资源访问     │
│  - 自定义应用    │    │  - 安全控制     │    │  - 数据集成     │
└─────────────────┘    └─────────────────┘    └─────────────────┘

核心组件

1. MCP 客户端

职责: 代表 AI 应用程序与 MCP 服务器通信

主要功能:

  • 协议消息处理和路由
  • 会话生命周期管理
  • 安全策略执行
  • 错误处理和重试机制

能力声明:

json
{
  "capabilities": {
    "roots": { "listChanged": true },
    "sampling": {},
    "experimental": {}
  }
}

2. MCP 服务器

职责: 提供工具、资源和提示模板

主要功能:

  • 工具执行和结果返回
  • 资源内容提供
  • 提示模板生成
  • 状态管理和持久化

能力声明:

json
{
  "capabilities": {
    "tools": { "listChanged": true },
    "resources": { "subscribe": true, "listChanged": true },
    "prompts": { "listChanged": true },
    "experimental": {}
  }
}

通信协议

JSON-RPC 2.0

MCP 基于 JSON-RPC 2.0 标准,支持:

  • 请求/响应: 同步操作
  • 通知: 异步事件
  • 批量操作: 多个请求的批处理

消息格式

json
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": {
      "location": "San Francisco"
    }
  },
  "id": 1
}

传输层

支持的传输方式

1. 标准输入/输出 (stdio)

json
{
  "transport": {
    "type": "stdio",
    "command": "python",
    "args": ["-m", "weather_server"]
  }
}

2. 服务器发送事件 (SSE)

json
{
  "transport": {
    "type": "sse",
    "url": "https://api.example.com/mcp"
  }
}

3. WebSocket

json
{
  "transport": {
    "type": "websocket",
    "url": "wss://api.example.com/mcp"
  }
}

安全模型

认证和授权

  • 传输层安全: TLS/SSL 加密
  • 身份验证: API 密钥、OAuth 2.0
  • 授权控制: 基于能力的访问控制

安全边界

┌─────────────────────────────────────────────────────────┐
│                    信任边界                              │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐  │
│  │ AI 应用程序  │    │ MCP 客户端  │    │ MCP 服务器  │  │
│  │   (信任)    │◄──►│   (信任)    │◄──►│  (不信任)   │  │
│  └─────────────┘    └─────────────┘    └─────────────┘  │
└─────────────────────────────────────────────────────────┘

协议生命周期

1. 初始化阶段

mermaid
sequenceDiagram
    participant C as 客户端
    participant S as 服务器
    
    C->>S: initialize
    S->>C: initialized
    C->>S: notifications/initialized

2. 运行阶段

  • 工具调用和执行
  • 资源访问和订阅
  • 提示模板请求
  • 状态同步

3. 终止阶段

  • 清理资源和连接
  • 保存状态信息
  • 优雅关闭

扩展机制

自定义能力

json
{
  "capabilities": {
    "experimental": {
      "customFeature": {
        "version": "1.0",
        "parameters": ["param1", "param2"]
      }
    }
  }
}

插件架构

  • 标准插件: 官方维护的功能扩展
  • 社区插件: 第三方开发的扩展
  • 企业插件: 私有的定制化功能

性能考虑

连接管理

  • 连接池: 复用现有连接
  • 负载均衡: 分布式服务器部署
  • 故障转移: 自动切换备用服务器

缓存策略

  • 客户端缓存: 减少重复请求
  • 服务器缓存: 提高响应速度
  • 分布式缓存: 跨实例数据共享

监控和调试

日志记录

json
{
  "timestamp": "2025-01-01T12:00:00Z",
  "level": "INFO",
  "component": "mcp-client",
  "message": "Tool call completed",
  "metadata": {
    "tool": "get_weather",
    "duration": 150,
    "success": true
  }
}

指标收集

  • 延迟指标: 请求响应时间
  • 吞吐量: 每秒处理的请求数
  • 错误率: 失败请求的百分比
  • 资源使用: CPU、内存、网络

最佳实践

客户端实现

  1. 实现健壮的错误处理
  2. 支持连接重试和故障转移
  3. 提供详细的日志和监控
  4. 遵循安全最佳实践

服务器实现

  1. 设计无状态的服务接口
  2. 实现高效的资源管理
  3. 提供清晰的错误信息
  4. 支持水平扩展

相关规范

🚀 探索模型上下文协议的无限可能 | 连接 AI 与世界的桥梁 | 让智能更智能