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官方文档

相关推荐
水如烟3 小时前
孤能子视角:“组织行为学–组织文化“
人工智能
大山同学3 小时前
图片补全-Context Encoder
人工智能·机器学习·计算机视觉
薛定谔的猫19824 小时前
十七、用 GPT2 中文对联模型实现经典上联自动对下联:
人工智能·深度学习·gpt2·大模型 训练 调优
壮Sir不壮4 小时前
2026年奇点:Clawdbot引爆个人AI代理
人工智能·ai·大模型·claude·clawdbot·moltbot·openclaw
PaperRed ai写作降重助手4 小时前
高性价比 AI 论文写作软件推荐:2026 年预算友好型
人工智能·aigc·论文·写作·ai写作·智能降重
玉梅小洋4 小时前
Claude Code 从入门到精通(七):Sub Agent 与 Skill 终极PK
人工智能·ai·大模型·ai编程·claude·ai工具
-嘟囔着拯救世界-4 小时前
【保姆级教程】Win11 下从零部署 Claude Code:本地环境配置 + VSCode 可视化界面全流程指南
人工智能·vscode·ai·编辑器·html5·ai编程·claude code
正见TrueView4 小时前
程一笑的价值选择:AI金玉其外,“收割”老人败絮其中
人工智能
Imm7774 小时前
中国知名的车膜品牌推荐几家
人工智能·python
风静如云5 小时前
Claude Code:进入dash模式
人工智能