MCP 架构
模型上下文协议(MCP)采用客户端-主机-服务器架构,每个主机可以运行多个客户端实例。这种架构使用户能够跨应用程序集成AI功能,同时保持明确的安全边界和关注点隔离。MCP基于JSON-RPC构建,提供专注于客户端和服务器之间上下文交换和采样协调的有状态会话协议。
核心组件

graph LR
subgraph "应用程序主机进程"
H[主机]
C1[客户端 1]
C2[客户端 2]
C3[客户端 3]
H --> C1
H --> C2
H --> C3
end
subgraph "本地机器"
S1[服务器 1<br>Files 和 Git]
S2[服务器 2<br>数据库]
R1[("本地<br>资源 A")]
R2[("本地<br>资源 B")]
C1 --> S1
C2 --> S2
S1 <--> R1
S2 <--> R2
end
subgraph "互联网"
S3[服务器 3<br>外部API]
R3[("远程<br>资源 C")]
C3 --> S3
S3 <--> R3
end
主机
主机进程作为容器和协调器:
- 创建和管理多个客户端实例
- 控制客户端连接权限和生命周期
- 执行安全策略和同意要求
- 处理用户授权决策
- 协调AI/LLM集成和采样
- 管理跨客户端的上下文聚合
客户端
每个客户端由主机创建,并维护独立的服务器连接:
- 每个服务器建立一个有状态会话
- 处理协议协商和能力交换
- 双向路由协议消息
- 管理订阅和通知
- 维护服务器之间的安全边界
主机应用程序创建和管理多个客户端,每个客户端与特定服务器保持1:1关系。
服务器
服务器提供专门的上下文和功能:
- 通过MCP原语公开资源、工具和提示
- 独立运行,职责明确
- 通过客户端接口请求采样
- 必须遵守安全约束
- 可以是本地进程或远程服务
设计原则
MCP基于几个关键设计原则,这些原则指导其架构和实现:
- 服务器应该极易构建
- 主机应用程序处理复杂的编排责任
- 服务器专注于特定、明确定义的功能
- 简单接口最小化实现开销
- 清晰分离使代码可维护
- 服务器应高度可组合
- 每个服务器在隔离环境中提供专注功能
- 多个服务器可以无缝组合
- 共享协议实现互操作性
- 模块化设计支持可扩展性
服务器不应能读取整个对话,也不应"