导航菜单

  • 1.什么是MCP
  • 2.架构概览
  • 3.理解MCP服务器
  • 4.理解MCP客户端
  • 5.版本控制
  • 6.连接本地MCP服务器
  • 7.连接远程MCP服务器
  • 8.构建MCP服务器
  • 9.构建MCP客户端
  • 10.SDKs
  • 11.理解MCP中的授权
  • 12.安全最佳实践
  • 13.MCP Inspector
  • 14.规范
  • 15.关键变更
  • 16.架构
  • 17.基础协议概述
  • 18.生命周期
  • 19.传输
  • 20.授权
  • 21.取消
  • 22.Ping
  • 23.进度
  • 24.任务
  • 25.根
  • 26.采样
  • 27.引导
  • 29.提示
  • 30.资源
  • 31.工具
  • 32.补全
  • 33.日志
  • 34.分页
  • 35.模式参考
  • Keycloak
  • 28.服务器功能
  • 1. 什么是生命周期?
  • 2. 本章你将学到
  • 3. 生命周期一览
  • 4. 流程图
  • 5. 初始化阶段
    • 5.1 初始化流程
    • 5.2 客户端 initialize 请求示例
    • 5.3 服务器 initialize 响应示例
    • 5.4 initialized 通知
    • 5.5 版本协商
    • 5.6 能力协商
  • 6. 运行阶段
  • 7. 关闭阶段
    • 7.1 stdio 传输
    • 7.2 HTTP 传输
  • 8. 超时与错误处理
    • 8.1 超时
    • 8.2 错误处理

1. 什么是生命周期? #

生命周期描述 MCP 客户端与服务器从建立连接到断开连接的完整过程。协议规定三个阶段,确保能力协商正确、状态管理清晰。

协议修订版:2025-11-25

通俗理解 说明
像 TCP 握手 先协商版本和能力,再正常通信,最后优雅关闭
必须遵守 所有 MCP 实现都必须支持生命周期管理
三个阶段 初始化 → 运行 → 关闭

2. 本章你将学到 #

  • 生命周期的三个阶段及其顺序
  • 初始化时客户端与服务器如何交换能力
  • 版本协商与能力协商的规则
  • 关闭连接、超时与错误处理

3. 生命周期一览 #

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   初始化    │ ──► │    运行     │ ──► │    关闭    │
│ 能力协商    │     │ 正常通信    │     │ 优雅终止    │
└─────────────┘     └─────────────┘     └─────────────┘
阶段 说明
初始化 客户端发 initialize,服务器响应能力,客户端发 initialized 通知
运行 按协商的能力交换消息(工具调用、资源读取、采样等)
关闭 通过传输层(如关闭 stdio、断开 HTTP)终止连接

4. 流程图 #

sequenceDiagram participant Client as 客户端 participant Server as 服务器 Note over Client,Server: 初始化阶段 activate Client Client->>Server: initialize 请求 activate Server Server-->>Client: 初始化响应(能力、版本) Client->>Server: initialized 通知 deactivate Client Note over Client,Server: 运行阶段 Note over Client,Server: 正常协议操作 Note over Client,Server: 关闭阶段 activate Client Client->>Server: 断开连接(传输层) deactivate Server deactivate Client

5. 初始化阶段 #

初始化必须是客户端与服务器之间的首次交互。在此阶段:

目标 说明
版本兼容 协商双方都支持的协议版本
能力交换 客户端声明能做什么,服务器声明能提供什么
实现信息 交换名称、版本、描述等,便于调试和展示

5.1 初始化流程 #

  1. 客户端发送 initialize 请求(协议版本、能力、实现信息)
  2. 服务器响应 initialize(协议版本、能力、实现信息)
  3. 客户端发送 initialized 通知,表示准备就绪

在收到 initialized 之前,服务器不应发送除 ping、logging 以外的请求。

5.2 客户端 initialize 请求示例 #

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-11-25",
    "capabilities": {
      "roots": { "listChanged": true },
      "sampling": {},
      "elicitation": { "form": {}, "url": {} }
    },
    "clientInfo": {
      "name": "ExampleClient",
      "title": "Example Client",
      "version": "1.0.0"
    }
  }
}
关键字段 说明
protocolVersion 客户端支持的协议版本(如 2025-11-25)
capabilities 客户端能力(roots、sampling、elicitation 等)
clientInfo 客户端名称、版本、描述、图标等

5.3 服务器 initialize 响应示例 #

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-11-25",
    "capabilities": {
      "tools": { "listChanged": true },
      "resources": { "subscribe": true, "listChanged": true },
      "prompts": { "listChanged": true },
      "logging": {}
    },
    "serverInfo": {
      "name": "ExampleServer",
      "title": "Example Server",
      "version": "1.0.0"
    },
    "instructions": "Optional instructions for the client"
  }
}
关键字段 说明
protocolVersion 协商后的协议版本
capabilities 服务器能力(tools、resources、prompts 等)
serverInfo 服务器名称、版本、描述、图标等

5.4 initialized 通知 #

初始化成功后,客户端必须发送:

{
  "jsonrpc": "2.0",
  "method": "notifications/initialized"
}

5.5 版本协商 #

规则 说明
客户端 发送其支持的最新协议版本
服务器 若支持请求版本,以相同版本响应;否则以自身支持的最新版本响应
不兼容 若客户端不支持服务器返回的版本,应当断开连接
HTTP 后续请求须包含 MCP-Protocol-Version 头

5.6 能力协商 #

类别 能力 说明
客户端 roots 提供文件系统根目录列表
客户端 sampling 支持 LLM 采样请求
客户端 elicitation 支持服务器征询(向用户请求信息)
客户端 tasks 支持任务增强
服务器 tools 暴露可调用工具
服务器 resources 提供可读资源
服务器 prompts 提供提示模板
服务器 logging 发送结构化日志
服务器 completions 支持参数自动补全
服务器 tasks 支持任务增强

子能力示例:

  • listChanged:支持列表变更通知(提示、资源、工具)
  • subscribe:支持订阅单个资源的变更

6. 运行阶段 #

在运行阶段,客户端和服务器根据已协商的能力交换消息。

要求 说明
遵守版本 使用协商的协议版本
遵守能力 仅使用已成功协商的能力

7. 关闭阶段 #

一方(通常为客户端)通过底层传输终止连接,无专用「关闭消息」。

7.1 stdio 传输 #

角色 关闭方式
客户端 1. 关闭对服务器子进程的输入流
2. 等待退出,或超时后发 SIGTERM
3. 仍不退出则发 SIGKILL
服务器 关闭输出流并退出

7.2 HTTP 传输 #

通过关闭关联的 HTTP 连接表示关闭。

8. 超时与错误处理 #

8.1 超时 #

建议 说明
请求超时 为每个请求设置超时,防止连接挂起
超时后 发送取消通知,停止等待
进度通知 收到进度通知时可重置超时,但应强制执行最大超时

8.2 错误处理 #

实现应当处理以下情况:

  • 协议版本不匹配
  • 无法协商所需能力
  • 请求超时

初始化错误示例(版本不兼容):

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Unsupported protocol version",
    "data": {
      "supported": ["2024-11-05"],
      "requested": "1.0.0"
    }
  }
}
← 上一节 17.基础协议概述 下一节 19.传输 →

访问验证

请输入访问令牌

Token不正确,请重新输入