1.协议修订信息 #
协议修订: 2025-06-18
2. 生命周期概述 #
Model Context Protocol (MCP) 定义了一套严格的客户端-服务器连接生命周期,确保能力协商与状态管理的正确性。
2.1 生命周期阶段 #
MCP连接包含三个主要阶段:
- 初始化 - 能力协商与协议版本确认
- 操作 - 正常协议通信
- 关闭 - 连接的优雅终止
3. 生命周期阶段详解 #
3.1 初始化阶段 #
初始化阶段必须是客户端与服务器之间的首次交互。在此阶段,客户端和服务器:
- 建立协议版本兼容性 - 确保双方使用相同的协议版本
- 交换与协商能力 - 确定可用的功能特性
- 分享实现细节 - 交换客户端和服务器信息
3.1.1 初始化请求 #
客户端必须通过发送一个initialize请求包含:
- 支持的协议版本 - 客户端支持的MCP协议版本
- 客户端能力 - 客户端支持的功能特性
- 客户端实现信息 - 客户端名称、版本等详细信息
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"roots": {
"listChanged": true
},
"sampling": {},
"elicitation": {}
},
"clientInfo": {
"name": "ExampleClient",
"title": "Example Client Display Name",
"version": "1.0.0"
}
}
}3.1.2 初始化响应 #
服务器必须回应其自身的能力和信息:
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
},
"tools": {
"listChanged": true
}
},
"serverInfo": {
"name": "ExampleServer",
"title": "Example Server Display Name",
"version": "1.0.0"
},
"instructions": "Optional instructions for the client"
}
}3.1.3 初始化通知 #
客户端初始化成功后,必须发送一个initialized表示已准备好开始正常操作的通知:
{
"jsonrpc": "2.0",
"method": "notifications/initialized"
}3.1.4 版本协商 #
在initialize请求中,客户端必须发送它支持的协议版本。应该成为最新客户端支持的版本。
如果服务器支持请求的协议版本,它必须返回相同的版本。否则,服务器必须响应其支持的另一个协议版本。应该成为最新服务器支持的版本。
如果客户端不支持服务器响应中的版本,它应该断开连接。
3.1.5 能力协商 #
客户端与服务器能力决定了会话期间哪些可选协议功能可用。
核心功能包括:
| 分类 | 能力 | 描述 |
|---|---|---|
| 客户端 | roots |
能够提供文件系统功能根源 |
| 客户端 | sampling |
支持LLM采样请求 |
| 客户端 | elicitation |
服务器支持启发请求 |
| 服务器 | prompts |
提供提示词模板 |
| 服务器 | resources |
提供可读性资源 |
| 服务器 | tools |
暴露可调用接口工具 |
| 服务器 | logging |
发出结构化日志消息 |
3.2 操作阶段 #
在运行阶段,客户端和服务器根据协商的能力交换消息。
双方必须:
- 遵守协商的协议版本 - 确保使用一致的协议版本
- 仅使用已成功协商的功能 - 避免使用未协商的功能
3.3 关闭阶段 #
在关闭阶段,其中一方(通常是客户端)会干净利落地终止协议连接。未定义特定的关闭消息——而是应利用底层传输机制来发出连接终止信号。
3.3.1 标准输入输出 (STDIO) #
对于stdio传输,客户端应该通过以下方式启动关闭:
- 首先,关闭子进程(服务器)的输入流
- 等待服务器退出,或发送
SIGTERM如果服务器未在合理时间内退出 - 发送
SIGKILL如果服务器在合理时间内未退出SIGTERM
3.3.2 HTTP #
对于HTTP传输关机信号通过关闭相关联的HTTP连接来指示。
4. 超时处理 #
实现应该为所有发送的请求设置超时,以防止连接挂起和资源耗尽。当请求在超时期限内未收到成功或错误响应时,发送方应该发出取消通知对于该请求并停止等待响应。
5. 错误处理 #
实现应该准备好处理这些错误情况:
- 协议版本不匹配 - 客户端和服务器支持的协议版本不一致
- 未能协商所需功能 - 无法就必要功能达成一致
- 请求超时 - 请求在规定时间内未收到响应
5.1 示例初始化错误 #
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Unsupported protocol version",
"data": {
"supported": ["2024-11-05"],
"requested": "1.0.0"
}
}
}6. 总结 #
MCP生命周期管理提供了:
- 标准化的连接流程 - 明确的初始化、操作和关闭阶段
- 版本兼容性保证 - 确保客户端和服务器使用兼容的协议版本
- 能力协商机制 - 动态确定可用的功能特性
- 优雅的错误处理 - 完善的错误处理和超时机制
- 灵活的传输支持 - 支持STDIO和HTTP等多种传输方式
这种设计确保了MCP连接的可靠性和稳定性,同时提供了足够的灵活性来适应不同的应用场景。