MCP 生命周期

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

  • 初始化阶段​:进行能力协商并确定协议版本
  • ​运行阶段​:正常的协议通信
  • ​终止阶段​:连接的优雅关闭

初始化阶段(Initialization)

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

  • ​确认协议版本兼容性​
  • ​交换并协商支持的能力​
  • ​共享实现细节​

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

  • 支持的协议版本​
  • ​客户端能力列表​
  • ​客户端实现信息​
json 复制代码
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "roots": {
        "listChanged": true
      },
      "sampling": {}
    },
    "clientInfo": {
      "name": "ExampleClient",
      "version": "1.0.0"
    }
  }
}

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

json 复制代码
{
  "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),表明已准备好开始正常操作:

json 复制代码
{
  "jsonrpc": "2.0",
  "method": "notifications/initialized"
}
  • 在服务器响应初始化请求之前,客户端不应发送除心跳检测(ping)之外的任何请求。
  • 在收到初始化通知之前,服务器不应发送除心跳检测(ping)和日志记录之外的任何请求。

版本协商(Version Negotiation)

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

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

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

能力协商(Capability Negotiation)

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

关键能力包括:

Category Capability Description
Client roots 提供文件系统根目录的能力
Client sampling 支持LLM采样请求
Client experimental 支持非标准实验性功能的说明
Server prompts 提供提示词模版
Server resources 提供可读资源
Server tools 暴露可调用工具
Server logging 生成结构化日志消息
Server experimental 支持非标准实验性功能的说明

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

  • ​listChanged​:支持列表变更通知(适用于提示词、资源和工具)
  • ​subscribe​:支持订阅单个项目的变更(仅限资源)

运行阶段(Operation)

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

双方应当遵循以下准则:

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

终止阶段(Shutdown)

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

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

stdio

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

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

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

HTTP

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

超时(Timeouts)

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

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

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

异常处理(Error Handing)

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

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

初始化错误示例:

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

参考文档

MCP官方文档

相关推荐
yc_2311 分钟前
KAG:通过知识增强生成提升专业领域的大型语言模型(二)
人工智能·语言模型·自然语言处理
自不量力的A同学24 分钟前
字节 AI 原生 IDE Trae 发布 v1.3.0,新增 MCP 支持
人工智能
涛涛讲AI29 分钟前
当AI浏览器和AI搜索替代掉传统搜索份额时,老牌的搜索引擎市场何去何从。
人工智能·搜索引擎
engchina38 分钟前
来自B站AIGC科技官的“vLLM简介“视频截图
人工智能·vllm
说私域1 小时前
基于开源技术体系的品牌赛道力重构:AI智能名片与S2B2C商城小程序源码驱动的品类创新机制研究
人工智能·小程序·重构·开源·零售
智驱力人工智能1 小时前
无感通行与精准管控:AI单元楼安全方案的技术融合实践
人工智能·安全·智慧城市·智慧园区
Chrome深度玩家1 小时前
谷歌翻译安卓版拍照翻译精准度与语音识别评测【轻松交流】
android·人工智能·语音识别
机器之心1 小时前
ICLR 2025 Oral|差分注意力机制引领变革,DIFF Transformer攻克长序列建模难题
人工智能
机器之心1 小时前
字节Seed团队PHD-Transformer突破预训练长度扩展!破解KV缓存膨胀难题
人工智能
正宗咸豆花1 小时前
开源提示词管理平台PromptMinder使用体验
人工智能·开源·prompt