掘金 人工智能 04月28日 17:12
MCP 生命周期
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了模型上下文协议(MCP)的生命周期,包括初始化、运行和终止三个阶段。初始化阶段涉及协议版本兼容性确认和能力协商,客户端通过发送初始化请求启动,服务器响应其能力和信息。运行阶段基于协商的能力进行消息交互。终止阶段通常由客户端主动关闭连接。文章还阐述了版本协商、能力协商、超时机制和异常处理等关键细节,为开发者提供了关于MCP协议的全面理解。

🤝 **初始化阶段**:MCP的起始阶段,客户端与服务器需确认协议版本兼容性,交换并协商支持的能力。客户端通过发送初始化请求启动,服务器则响应自身的能力和信息。

🔄 **运行阶段**:在初始化成功后,客户端和服务器进入运行阶段,根据协商确定的能力进行消息交互。双方需严格遵守协商的协议版本,并仅使用已成功协商通过的功能。

🛑 **终止阶段**:通常由客户端主动关闭协议连接,无需特定的终止消息,直接通过底层传输机制发出连接终止信号即可。文章还提供了针对stdio和HTTP传输的终止流程说明。

✅ **版本协商与能力协商**:客户端在初始化请求中发送支持的协议版本,服务器则返回兼容版本。能力协商则确定会话期间可用的可选协议功能,包括文件系统、LLM采样、提示词模版、资源和工具等。

⏰ **超时机制与异常处理**:所有实现方案均应设置请求超时机制,避免连接挂起。文章还详细说明了异常场景的处理,例如协议版本不匹配、必需能力协商失败和请求超时等。

模型上下文协议(MCP)为客户端-服务器连接定义了严格的生命周期,确保能力协商与状态管理的规范性:

初始化阶段(Initialization)

初始化阶段必须是客户端与服务器的首次交互。在此阶段,双方需完成以下操作:

客户端必须通过发送初始化 (initialize) 请求来启动该阶段,请求中需包含以下内容:

{  "jsonrpc": "2.0",  "id": 1,  "method": "initialize",  "params": {    "protocolVersion": "2024-11-05",    "capabilities": {      "roots": {        "listChanged": true      },      "sampling": {}    },    "clientInfo": {      "name": "ExampleClient",      "version": "1.0.0"    }  }}

服务器必须响应其自身的能力和信息:

{  "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",      "version": "1.0.0"    },    "instructions": "Optional instructions for the client"  }}

成功初始化后,客户端必须发送一个初始化通知 (initialized notification),表明已准备好开始正常操作:

{  "jsonrpc": "2.0",  "method": "notifications/initialized"}

版本协商(Version Negotiation)

在初始化请求中,客户端必须发送其支持的协议版本,且该版本应为客户端支持的最新版本。

如果服务器支持客户端请求的协议版本,则必须返回相同版本;否则,服务器必须返回其支持的另一个协议版本(通常应为服务器支持的最新版本)。

若客户端不支持服务器返回的版本,则应断开连接。

能力协商(Capability Negotiation)

客户端与服务器能力协商确定会话期间可用的可选协议功能

关键能力包括:

CategoryCapabilityDescription
Clientroots提供文件系统根目录的能力
Clientsampling支持LLM采样请求
Clientexperimental支持非标准实验性功能的说明
Serverprompts提供提示词模版
Serverresources提供可读资源
Servertools暴露可调用工具
Serverlogging生成结构化日志消息
Serverexperimental支持非标准实验性功能的说明

能力对象可描述以下子功能:

运行阶段(Operation)

在运行阶段,客户端与服务器将根据协商确定的能力进行消息交互。

双方应当遵循以下准则:

    严格遵守协商达成的协议版本仅使用已成功协商通过的功能

终止阶段(Shutdown)

在终止阶段,通常由客户端主动关闭协议连接。

无需定义特定的终止消息——直接通过底层传输机制发出连接终止信号即可。

stdio

在使用标准输入输出传输时,应按以下流程终止连接:

    首先关闭子进程(服务端)的输入流等待服务端退出,若未在合理时间内退出则发送SIGTERM信号发送SIGTERM后若仍未及时退出,则发送SIGKILL信号

服务端可通过关闭向客户端的输出流并退出来主动终止连接。

HTTP

对于HTTP传输协议,终止流程通过关闭相关HTTP连接实现。

超时(Timeouts)

所有实现方案均应设置请求超时机制,以避免连接挂起和资源耗尽。当请求在超时期限内未收到成功或错误响应时,发送方应当发送该请求的取消通知以及停止等待响应。

SDK及中间件应支持按请求单独配置超时参数。

实现方案可选择在收到请求对应的进度通知时重置超时计时器(这表明处理仍在进行)。但无论收到多少进度通知,实现方案都应设置最终超时上限,以限制异常客户端或服务端的影响。

异常处理(Error Handing)

实现方案应妥善处理以下异常场景:

    协议版本不匹配必需能力协商失败请求超时

初始化错误示例:

{  "jsonrpc": "2.0",  "id": 1,  "error": {    "code": -32602,    "message": "Unsupported protocol version",    "data": {      "supported": ["2024-11-05"],      "requested": "1.0.0"    }  }}

参考文档

MCP官方文档

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP 协议 客户端 服务器 API
相关文章