初始化

所有 Agent Client Protocol 连接的起始

初始化阶段允许客户端和 Agent 协商协议版本、能力和认证方法。

在创建会话之前,客户端 必须 通过调用 initialize 方法来初始化连接,包含:

  • 支持的最新协议版本
  • 支持的能力

客户端还应该向 Agent 提供名称和版本。

{
  "jsonrpc": "2.0",
  "id": 0,
  "method": "initialize",
  "params": {
    "protocolVersion": 2,
    "capabilities": {},
    "clientInfo": {
      "name": "my-client",
      "title": "My Client",
      "version": "1.0.0"
    }
  }
}

Agent 必须 以所选的协议版本及其支持的能力进行响应。它也应该向客户端提供名称和版本:

{
  "jsonrpc": "2.0",
  "id": 0,
  "result": {
    "protocolVersion": 2,
    "capabilities": {
      "session": {
        "prompt": {
          "image": {},
          "audio": {},
          "embeddedContext": {}
        },
        "mcp": {
          "stdio": {},
          "http": {}
        },
        "load": {}
      }
    },
    "agentInfo": {
      "name": "my-agent",
      "title": "My Agent",
      "version": "1.0.0"
    },
    "authMethods": []
  }
}

协议版本

initialize 请求和响应中出现的协议版本是一个整数,用于标识 主(MAJOR) 协议版本。该版本仅在引入破坏性变更时递增。

客户端和 Agent 必须 就协议版本达成一致,并按照其规范行事。

参阅能力了解非破坏性功能是如何引入的。

版本协商

initialize 请求 必须 包含客户端支持的最新协议版本。

如果 Agent 支持请求的版本,它 必须 以相同版本响应。否则,Agent 必须 以其支持的最新版本响应。

如果客户端不支持 Agent 在 initialize 响应中指定的版本,客户端 应该 关闭连接并通知用户。

能力

能力描述了客户端和 Agent 支持的功能。

initialize 请求中包含的所有能力都是 可选的。客户端和 Agent 应该 支持对方能力的所有可能组合。

引入新能力不被视为破坏性变更。因此,客户端和 Agent 必须initialize 请求中省略的所有能力视为 不支持

能力可以声明顶层方法面或仅在已支持面内适用的嵌套功能。

能力可以指定协议方法、通知或其参数子集的可用性。它们还可以指示 Agent 或客户端实现的行为。

实现还可以使用 _meta 字段声明自定义能力来表示对协议扩展的支持。

客户端能力

客户端可以在 capabilities 中包含已定义的能力字段。省略的字段表示不支持。特定于扩展的能力属于 _meta

Agent 能力

Agent 应该 指定是否支持以下能力:

字段类型描述
sessionSessionCapabilities 对象Agent 支持 session/* 方法面。省略或为 null 表示 Agent 不支持会话方法。提供 {} 表示 Agent 支持基线会话方法:session/newsession/promptsession/cancelsession/update
authAgentAuthCapabilities 对象Agent 支持的认证相关能力。

会话能力

提供 session: {} 表示 Agent 支持 session/newsession/promptsession/cancelsession/update

可选地,Agent 可以通过指定嵌套能力来支持提示扩展、MCP 服务器传输和额外的会话方法。

字段类型描述
promptPromptCapabilities 对象指示可在 session/prompt 请求中包含的不同内容类型。省略或为 null 表示 Agent 不声明 session/prompt 所需的基线文本和 resource-link 内容之外的任何提示扩展。
mcpMcpCapabilities 对象指示可在会话生命周期请求中包含的 MCP 服务器传输。省略或为 null 表示 Agent 不声明会话的 MCP 服务器传输支持。
loadSessionLoadCapabilities 对象session/load 方法可用。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持加载会话。
deleteSessionDeleteCapabilities 对象session/delete 方法可用。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持从 session/list 中删除会话。
additionalDirectoriesSessionAdditionalDirectoriesCapabilities 对象Agent 在支持的会话生命周期请求中支持 additionalDirectories。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持额外的工作区根目录。

会话提示能力

作为基线,声明 session 的 Agent 必须session/prompt 请求中支持 ContentBlock::TextContentBlock::ResourceLink

可选地,它们可以通过指定以下能力来支持更丰富的内容类型:

字段类型描述
imagePromptImageCapabilities 对象提示可以包含 ContentBlock::Image。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持提示中的图像内容。
audioPromptAudioCapabilities 对象提示可以包含 ContentBlock::Audio。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持提示中的音频内容。
embeddedContextPromptEmbeddedContextCapabilities 对象提示可以包含 ContentBlock::Resource。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持提示中的嵌入上下文。

会话 MCP 能力

字段类型描述
stdioMcpStdioCapabilities 对象Agent 支持通过 stdio 连接到 MCP 服务器。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持 stdio MCP 服务器传输。
httpMcpHttpCapabilities 对象Agent 支持通过 HTTP 连接到 MCP 服务器。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持 HTTP MCP 服务器传输。

认证能力

字段类型描述
logoutLogoutCapabilities 对象logout 方法可用。

实现信息

客户端和 Agent 都 应该clientInfoagentInfo 字段中分别提供其实现信息。两者都接受以下三个字段:

字段类型描述
namestring用于编程或逻辑用途,但在 title 不存在时可作为显示名称的回退。
titlestring用于 UI 和终端用户场景 - 优化为人类可读且易于理解。如果未提供,应使用 name 进行显示。
versionstring实现的版本。可向用户显示或用于调试或指标目的。

注意:在协议的未来版本中,此信息将是必需的。

一旦连接初始化完成,你就可以创建会话并开始与 Agent 的对话。