MCP协议工作流与架构笔记
1. 核心交互流程
MCP的生命周期严格遵循JSON-RPC 2.0,分为握手协商、资源发现、业务执行三个阶段。
阶段一:握手与能力协商(Handshake & Capability Negotiation)
Step 1: Initialization Request (initialize):Client 向 Server 发起初始化请求。包含客户端信息(clientInfo)及客户端能力声明(如是否支持采样 sampling)。
Step 2: Initialization Response:Server 返回确认响应。包含服务端元数据(名称、版本)及能力清单(Capabilities)。
关键点:此时 Server 仅声明具备“工具调用”的能力(tools: { listChanged: true }),但不返回具体的工具列表(Schema),以降低握手开销。
Step 3: Initialized Notification (notifications/initialized):Client 发送单向通知。标志着协议层连接正式建立,双方状态机进入 Running 状态。
阶段二:动态资源发现 (Dynamic Discovery)
Step 4: Tool Listing (tools/list):Client 主动拉取工具列表(对应代码中的 load_mcp_tools)。Server 返回完整的工具定义,包括名称、描述及详细的 JSON Schema 参数结构。
阶段三:远程过程调用 (RPC Execution)
Step 5: Tool Invocation (tools/call):Client 发送调用请求,附带唯一的 Request ID 和参数。Client 端的 ClientSession 将该 ID 标记为 Pending(挂起),并 await 等待结果。
Step 6: Result Return:Server 执行业务逻辑后,返回带有相同 Request ID 的结果。Client 匹配 ID,解包数据,恢复执行流。
2. 架构分层 (Architecture Layering)
MCP 采用了典型的**关注点分离(Separation of Concerns)**设计模式,将业务协议与底层传输彻底解耦。
| 层级 (Layer) | 组件名称 (Component) | 职责描述 (Responsibilities) |
|---|---|---|
| 协议层 (Protocol Layer) | ClientSession | 核心大脑。 1. 维护 JSON-RPC 状态机(握手、运行、关闭)。 2. 管理消息相关性(Correlation),通过 ID 匹配请求与响应。 3. 序列化/反序列化 Python 对象与 JSON 消息。 |
| 传输层 (Transport Layer) | Transport | 通信管道。 1. 负责二进制或文本数据的物理传输。 2. 对上层屏蔽具体的通信介质(是管道还是网络)。 3. 提供统一的 Read/Write Stream 接口给 Session。 |
3. 官方传输实现 (Official Transports)
MCP SDK (mcp-python) 提供了两种标准传输实现的封装:
Stdio Transport (stdio_client)
机制:利用操作系统的标准输入输出流(Standard I/O Streams)。
场景:本地进程间通信(IPC)。Client 直接作为父进程启动 Server 子进程。
特点:
- 零网络延迟
- 安全(数据不经过网卡)
- 生命周期绑定(Client 停则 Server 停)
SSE Transport (sse_client)
机制:基于 HTTP 协议的 Server-Sent Events。
通信模式:
- 下行:通过 SSE 长连接实现服务端推送(Server -> Client)
- 上行:通过 HTTP POST 请求发送指令(Client -> Server)
场景:分布式部署、微服务架构、远程调试。
特点: - 全双工模拟
- 支持鉴权(Headers)
- 独立部署(Server 可独立于 Client 运行)
更多推荐


所有评论(0)