生命周期

ℹ️
协议版本: 2024-11-05

模型上下文协议(MCP)为客户端-服务器连接定义了严格的生命周期,确保适当的能力协商和状态管理。

  1. 初始化:能力协商和协议版本协议
  2. 操作:正常协议通信
  3. 关闭:连接的优雅终止
sequenceDiagram
    participant Client
    participant Server

    Note over Client,Server: 初始化阶段
    activate Client
    Client->>+Server: 初始化请求
    Server-->>Client: 初始化响应
    Client--)Server: 已初始化通知

    Note over Client,Server: 操作阶段
    rect rgb(200, 220, 250)
        note over Client,Server: 正常协议操作
    end

    Note over Client,Server: 关闭
    Client--)-Server: 断开连接
    deactivate Server
    Note over Client,Server: 连接已关闭

生命周期阶段

初始化

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

  • 建立协议版本兼容性
  • 交换和协商能力
  • 共享实现细节

客户端必须通过发送一个包含以下内容的initialize请求来启动此阶段:

{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "initialize",
    "params": {
        "protocolRevision": "2024-11-05",
        "capabilities": {
            "sampling": {
                "provider": true
            }
        }
    }
}

服务器必须使用以下结构响应initialize请求:

{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "capabilities": {
            "resources": {
                "provider": true,
                "subscription": true
            }
        }
    }
}

在接收到初始化响应后,客户端必须发送initialized通知以完成初始化阶段:

{
    "jsonrpc": "2.0",
    "method": "initialized",
    "params": {}
}

操作

初始化完成后,客户端和服务器进入操作阶段,在此阶段可以进行以下活动:

  • 客户端请求服务器公开的资源
  • 服务器向客户端发送通知
  • 客户端请求服务器执行工具操作
  • 服务器请求客户端执行 LLM 采样

操作阶段的持续时间限制仅受传输层约束。

关闭

会话可以通过以下方式终止:

  • 客户端发送shutdown请求,然后发送exit通知
  • 客户端或服务器中断传输层连接

良好行为的客户端应该在关闭连接前发送shutdown请求:

{
    "jsonrpc": "2.0",
    "id": 42,
    "method": "shutdown"
}

服务器应该以空结果响应:

{
    "jsonrpc": "2.0",
    "id": 42,
    "result": null
}

收到关闭响应后,客户端应该发送exit通知:

{
    "jsonrpc": "2.0",
    "method": "exit"
}

收到exit通知后,服务器必须结束其进程或关闭连接。

能力

MCP 使用能力系统在初始化期间协商功能支持。客户端和服务器都声明它们支持的功能,这些声明构成了会话期间可用的功能集。

能力为协议提供以下好处:

  • 逐步采用新功能
  • 避免协议分支
  • 实现特定功能的清晰通信

每个能力的支持水平是静态的,在会话期间不得更改。

初始化能力

客户端在初始化请求中提供其能力,服务器在初始化响应中提供其能力。最终的功能集由这两个能力声明的交集确定,但客户端能力主要用于指示其支持什么,而服务器能力指示其提供什么。

所有工具、资源处理程序和其他特性都是可选的。客户端和服务器可以协商它们需要和支持的确切功能集。

以下能力类别可用:

服务器能力

能力描述
resources访问和订阅资源
prompts使用提示模板和上下文感知提示
tools调用定义的工具和操作
utilities日志记录和参数补全等辅助功能

客户端能力

能力描述
sampling执行 LLM 采样
workspaceRoot报告工作空间根目录