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

相关推荐
饭饭大王6662 分钟前
当 AI 系统开始“自省”——在 `ops-transformer` 中嵌入元认知能力
人工智能·深度学习·transformer
ujainu2 分钟前
CANN仓库中的AIGC可移植性工程:昇腾AI软件栈如何实现“一次开发,多端部署”的跨生态兼容
人工智能·aigc
初恋叫萱萱4 分钟前
CANN 生态实战指南:从零构建一个高性能边缘 AI 应用的完整流程
人工智能
Lethehong7 分钟前
CANN ops-nn仓库深度解读:AIGC时代的神经网络算子优化实践
人工智能·神经网络·aigc
开开心心就好8 分钟前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
TechWJ8 分钟前
CANN ops-nn神经网络算子库技术剖析:NPU加速的基石
人工智能·深度学习·神经网络·cann·ops-nn
凌杰9 分钟前
AI 学习笔记:LLM 的部署与测试
人工智能
心易行者11 分钟前
在 Claude 4.6 发布的当下,一个不懂编程的人聊聊 Claude Code:当 AI 终于学会自己动手干活
人工智能
子榆.12 分钟前
CANN 性能分析与调优实战:使用 msprof 定位瓶颈,榨干硬件每一分算力
大数据·网络·人工智能
爱喝白开水a12 分钟前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag