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

相关推荐
东风西巷26 分钟前
NealFun安卓版:创意无限,娱乐至上
android·人工智能·智能手机·娱乐·软件需求
肥猪猪爸1 小时前
BP神经网络对时序数据进行分类
人工智能·深度学习·神经网络·算法·机器学习·分类·时序数据
Keep learning!1 小时前
深度学习入门代码详细注释-ResNet18分类蚂蚁蜜蜂
人工智能·深度学习·分类
Liudef062 小时前
神经辐射场 (NeRF):重构三维世界的AI新视角
人工智能·重构
音视频牛哥3 小时前
打造实时AI视觉系统:OpenCV结合RTSP|RTMP播放器的工程落地方案
人工智能·opencv·计算机视觉·大牛直播sdk·rtsp播放器·rtmp播放器·android rtmp
归去_来兮4 小时前
生成式对抗网络(GAN)模型原理概述
人工智能·深度学习·生成对抗网络
在努力的韩小豪5 小时前
如何从0开始构建自己的第一个AI应用?(Prompt工程、Agent自定义、Tuning)
人工智能·python·llm·prompt·agent·ai应用·mcp
云卓SKYDROID5 小时前
无人机环境感知系统运行与技术难点!
人工智能·计算机视觉·目标跟踪·无人机·科普·高科技·云卓科技
网安INF5 小时前
深度学习中的 Seq2Seq 模型与注意力机制
人工智能·深度学习·神经网络·注意力机制·seq2seq
火山引擎开发者社区5 小时前
ByteBrain x 清华 VLDB25|时序多模态大语言模型 ChatTS
人工智能·语言模型·自然语言处理