初始化
所有 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 应该 指定是否支持以下能力:
| 字段 | 类型 | 描述 |
|---|---|---|
session | SessionCapabilities 对象 | Agent 支持 session/* 方法面。省略或为 null 表示 Agent 不支持会话方法。提供 {} 表示 Agent 支持基线会话方法:session/new、session/prompt、session/cancel 和 session/update。 |
auth | AgentAuthCapabilities 对象 | Agent 支持的认证相关能力。 |
会话能力
提供 session: {} 表示 Agent 支持 session/new、session/prompt、session/cancel 和 session/update。
可选地,Agent 可以通过指定嵌套能力来支持提示扩展、MCP 服务器传输和额外的会话方法。
| 字段 | 类型 | 描述 |
|---|---|---|
prompt | PromptCapabilities 对象 | 指示可在 session/prompt 请求中包含的不同内容类型。省略或为 null 表示 Agent 不声明 session/prompt 所需的基线文本和 resource-link 内容之外的任何提示扩展。 |
mcp | McpCapabilities 对象 | 指示可在会话生命周期请求中包含的 MCP 服务器传输。省略或为 null 表示 Agent 不声明会话的 MCP 服务器传输支持。 |
load | SessionLoadCapabilities 对象 | session/load 方法可用。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持加载会话。 |
delete | SessionDeleteCapabilities 对象 | session/delete 方法可用。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持从 session/list 中删除会话。 |
additionalDirectories | SessionAdditionalDirectoriesCapabilities 对象 | Agent 在支持的会话生命周期请求中支持 additionalDirectories。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持额外的工作区根目录。 |
会话提示能力
作为基线,声明 session 的 Agent 必须 在 session/prompt 请求中支持 ContentBlock::Text 和 ContentBlock::ResourceLink。
可选地,它们可以通过指定以下能力来支持更丰富的内容类型:
| 字段 | 类型 | 描述 |
|---|---|---|
image | PromptImageCapabilities 对象 | 提示可以包含 ContentBlock::Image。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持提示中的图像内容。 |
audio | PromptAudioCapabilities 对象 | 提示可以包含 ContentBlock::Audio。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持提示中的音频内容。 |
embeddedContext | PromptEmbeddedContextCapabilities 对象 | 提示可以包含 ContentBlock::Resource。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持提示中的嵌入上下文。 |
会话 MCP 能力
| 字段 | 类型 | 描述 |
|---|---|---|
stdio | McpStdioCapabilities 对象 | Agent 支持通过 stdio 连接到 MCP 服务器。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持 stdio MCP 服务器传输。 |
http | McpHttpCapabilities 对象 | Agent 支持通过 HTTP 连接到 MCP 服务器。省略或为 null 表示 Agent 不声明支持。提供 {} 表示 Agent 支持 HTTP MCP 服务器传输。 |
认证能力
| 字段 | 类型 | 描述 |
|---|---|---|
logout | LogoutCapabilities 对象 | logout 方法可用。 |
实现信息
客户端和 Agent 都 应该 在 clientInfo 和 agentInfo 字段中分别提供其实现信息。两者都接受以下三个字段:
| 字段 | 类型 | 描述 |
|---|---|---|
name | string | 用于编程或逻辑用途,但在 title 不存在时可作为显示名称的回退。 |
title | string | 用于 UI 和终端用户场景 - 优化为人类可读且易于理解。如果未提供,应使用 name 进行显示。 |
version | string | 实现的版本。可向用户显示或用于调试或指标目的。 |
注意:在协议的未来版本中,此信息将是必需的。
一旦连接初始化完成,你就可以创建会话并开始与 Agent 的对话。