ai
  • index
  • 1.首页
  • 2.介绍
  • 3.架构概览
  • 4.服务器概念
  • 5.客户端概念
  • 6.版本控制
  • 7.连接到远程MCP服务器
  • 8.连接到本地MCP服务器
  • json_rpc
  • 9.构建一个MCP服务器
  • 10.检查员
  • 11.构建一个MCP客户端
  • 14.架构
  • 15.基础协议概述
  • 16.生命周期
  • 17.传输
  • 18.授权
  • 19.安全最佳实践
  • 20.取消
  • 21.Ping
  • 22.进展
  • 23.Roots
  • 24.采样
  • 25.启发
  • 26.服务器特性
  • 27.提示词
  • 28.资源
  • 29.工具
  • 30.完成
  • 31.日志记录
  • 32.分页
  • 33.架构参考
  • URI模板
  • 12.实现
  • http.server
  • 动态客户端注册协议
  • 受保护资源元数据
  • 授权服务器元数据
  • JWKS
  • PKCE
  • PyJWT
  • secrets
  • watchfiles
  • 实现authorization
  • 实现cancel
  • 实现completion
  • 实现logging
  • 实现pagination
  • 实现process
  • 实现transport
  • psutil
  • pytz
  • zoneinfo
  • contextlib
  • Starlette
  • mcp.1.starter
  • mcp.2.Resource
  • mcp.3.structured_output
  • mcp.4.prompts
  • mcp.5.context
  • mcp.6.streamable
  • mcp.7.lowlevel
  • mcp.8.Completion
  • mcp.9.Elicitation
  • mcp.10.oauth
  • mcp.11.integration
  • mcp.12.best
  • mysql-mcp
  • databases
  • uvicorn
  • asynccontextmanager
  • AsyncExitStack
  • streamable
  • aiohttp
  • publish
  • email
  • schedule
  • twine
  • 1.教学文档总览
  • 2.教师使用指南
  • 3.教学系统快速参考
  • 4.新生入门指南
  • 5.学生使用指南
  • 1.协议修订信息
  • 2. 生命周期概述
    • 2.1 生命周期阶段
  • 3. 生命周期阶段详解
    • 3.1 初始化阶段
      • 3.1.1 初始化请求
      • 3.1.2 初始化响应
      • 3.1.3 初始化通知
      • 3.1.4 版本协商
      • 3.1.5 能力协商
    • 3.2 操作阶段
    • 3.3 关闭阶段
      • 3.3.1 标准输入输出 (STDIO)
      • 3.3.2 HTTP
  • 4. 超时处理
  • 5. 错误处理
    • 5.1 示例初始化错误
  • 6. 总结

1.协议修订信息 #

协议修订: 2025-06-18

2. 生命周期概述 #

Model Context Protocol (MCP) 定义了一套严格的客户端-服务器连接生命周期,确保能力协商与状态管理的正确性。

2.1 生命周期阶段 #

MCP连接包含三个主要阶段:

  1. 初始化 - 能力协商与协议版本确认
  2. 操作 - 正常协议通信
  3. 关闭 - 连接的优雅终止

3. 生命周期阶段详解 #

3.1 初始化阶段 #

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

  • 建立协议版本兼容性 - 确保双方使用相同的协议版本
  • 交换与协商能力 - 确定可用的功能特性
  • 分享实现细节 - 交换客户端和服务器信息

3.1.1 初始化请求 #

客户端必须通过发送一个initialize请求包含:

  • 支持的协议版本 - 客户端支持的MCP协议版本
  • 客户端能力 - 客户端支持的功能特性
  • 客户端实现信息 - 客户端名称、版本等详细信息
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "roots": {
        "listChanged": true
      },
      "sampling": {},
      "elicitation": {}
    },
    "clientInfo": {
      "name": "ExampleClient",
      "title": "Example Client Display Name",
      "version": "1.0.0"
    }
  }
}

3.1.2 初始化响应 #

服务器必须回应其自身的能力和信息:

{
  "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",
      "title": "Example Server Display Name",
      "version": "1.0.0"
    },
    "instructions": "Optional instructions for the client"
  }
}

3.1.3 初始化通知 #

客户端初始化成功后,必须发送一个initialized表示已准备好开始正常操作的通知:

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

3.1.4 版本协商 #

在initialize请求中,客户端必须发送它支持的协议版本。应该成为最新客户端支持的版本。

如果服务器支持请求的协议版本,它必须返回相同的版本。否则,服务器必须响应其支持的另一个协议版本。应该成为最新服务器支持的版本。

如果客户端不支持服务器响应中的版本,它应该断开连接。

3.1.5 能力协商 #

客户端与服务器能力决定了会话期间哪些可选协议功能可用。

核心功能包括:

分类 能力 描述
客户端 roots 能够提供文件系统功能根源
客户端 sampling 支持LLM采样请求
客户端 elicitation 服务器支持启发请求
服务器 prompts 提供提示词模板
服务器 resources 提供可读性资源
服务器 tools 暴露可调用接口工具
服务器 logging 发出结构化日志消息

3.2 操作阶段 #

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

双方必须:

  • 遵守协商的协议版本 - 确保使用一致的协议版本
  • 仅使用已成功协商的功能 - 避免使用未协商的功能

3.3 关闭阶段 #

在关闭阶段,其中一方(通常是客户端)会干净利落地终止协议连接。未定义特定的关闭消息——而是应利用底层传输机制来发出连接终止信号。

3.3.1 标准输入输出 (STDIO) #

对于stdio传输,客户端应该通过以下方式启动关闭:

  1. 首先,关闭子进程(服务器)的输入流
  2. 等待服务器退出,或发送SIGTERM如果服务器未在合理时间内退出
  3. 发送SIGKILL如果服务器在合理时间内未退出SIGTERM

3.3.2 HTTP #

对于HTTP传输关机信号通过关闭相关联的HTTP连接来指示。

4. 超时处理 #

实现应该为所有发送的请求设置超时,以防止连接挂起和资源耗尽。当请求在超时期限内未收到成功或错误响应时,发送方应该发出取消通知对于该请求并停止等待响应。

5. 错误处理 #

实现应该准备好处理这些错误情况:

  • 协议版本不匹配 - 客户端和服务器支持的协议版本不一致
  • 未能协商所需功能 - 无法就必要功能达成一致
  • 请求超时 - 请求在规定时间内未收到响应

5.1 示例初始化错误 #

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Unsupported protocol version",
    "data": {
      "supported": ["2024-11-05"],
      "requested": "1.0.0"
    }
  }
}

6. 总结 #

MCP生命周期管理提供了:

  1. 标准化的连接流程 - 明确的初始化、操作和关闭阶段
  2. 版本兼容性保证 - 确保客户端和服务器使用兼容的协议版本
  3. 能力协商机制 - 动态确定可用的功能特性
  4. 优雅的错误处理 - 完善的错误处理和超时机制
  5. 灵活的传输支持 - 支持STDIO和HTTP等多种传输方式

这种设计确保了MCP连接的可靠性和稳定性,同时提供了足够的灵活性来适应不同的应用场景。

访问验证

请输入访问令牌

Token不正确,请重新输入