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

相关推荐
刘简爱学习2 分钟前
用于病理图像多类分割的弱监督状态空间模型PathMamba
人工智能·深度学习·计算机视觉
心勤则明2 分钟前
使用 Spring AI Alibaba MCP 结合 Nacos 实现企业级智能体应用
java·人工智能·spring
70asunflower3 分钟前
AI Infra 架构全景介绍
人工智能·架构
wggmrlee8 分钟前
模型训练流程
人工智能
逆境不可逃12 分钟前
【用AI学Agent】Agent入门前置:大模型基础(开发向)
人工智能·深度学习·机器学习
热爱生活的猴子14 分钟前
PyTorch导出ONNX报错(ShapeInferenceError)问题笔记(含dynamo=False作用解析)
人工智能·pytorch·笔记
新缸中之脑16 分钟前
用Kreuzberg提取文档结构
人工智能
Gauss松鼠会16 分钟前
【GaussDB】GaussDB技术解读之AI大模型在智能运维场景的应用
运维·人工智能·gaussdb
财经汇报19 分钟前
Unloq发布SC+平台 包括智能合约解决清算难题
大数据·人工智能·智能合约
2401_8322981021 分钟前
模型军备竞赛白热化:OpenClaw 3 月模型生态爆发,GPT-5.4 / 国产模型双轮驱动
网络·人工智能