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 运行)
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐