在创建会话之前,客户端必须通过调用
initialize 方法来初始化连接,并提供:
它们应该还向代理提供名称和版本。
协议版本
出现在initialize 请求和响应中的协议版本是一个标识主要协议版本的单个整数。此版本仅在引入重大变更时才会递增。
客户端和代理必须就协议版本达成一致,并根据其规范进行操作。
请参阅功能了解如何引入非破坏性特性。
版本协商
initialize 请求必须包含客户端支持的最新协议版本。
如果代理支持请求的版本,它必须用相同的版本进行响应。否则,代理必须用它支持的最新版本进行响应。
如果客户端不支持代理在 initialize 响应中指定的版本,客户端应该关闭连接并通知用户。
功能
功能描述了客户端和代理支持的特性。initialize 请求中包含的所有功能都是可选的。客户端和代理应该支持其对等方功能的所有可能组合。
引入新功能不被视为破坏性变更。因此,客户端和代理必须将 initialize 请求中省略的所有功能视为不支持。
功能是高级别的,不附加到特定的基础协议概念。
功能可以指定协议方法、通知的可用性,或其参数的子集。它们还可以信号代理或客户端实现的行为。
实现还可以使用 _meta 字段宣告自定义功能来指示对协议扩展的支持。
客户端功能
客户端应该指定是否支持以下功能:文件系统
fs/read_text_file 方法可用。fs/write_text_file 方法可用。了解更多关于文件系统方法
终端
所有
terminal/* 方法都可用,允许代理执行和管理 shell 命令。了解更多关于终端
代理功能
代理应该指定是否支持以下功能:session/load 方法可用。提示功能
作为基线,所有代理必须在session/prompt 请求中支持 ContentBlock::Text 和 ContentBlock::ResourceLink。
可选地,它们可以通过指定以下功能来支持更丰富的内容类型:
提示可以包含
ContentBlock::Image提示可以包含
ContentBlock::Audio提示可以包含
ContentBlock::ResourceMCP 功能
代理支持通过 HTTP 连接到 MCP 服务器。
代理支持通过 SSE 连接到 MCP 服务器。注意:此传输已被 MCP 规范弃用。
会话功能
作为基线,所有代理必须支持session/new、session/prompt、session/cancel 和 session/update。
可选地,它们可以通过指定附加功能来支持其他会话方法和通知。
session/load 仍由顶级 load_session 功能处理。
这将在未来版本的协议中统一。实现信息
客户端和代理应该分别在clientInfo 和 agentInfo 字段中提供关于其实现的信息。两者都包含以下三个字段:
用于编程或逻辑使用,但如果 title 不存在,可用作显示名称回退。
用于 UI 和最终用户场景 — 优化为易于阅读和理解的格式。如果未提供,名称应用于显示。
实现的版本。可以显示给用户或用于调试或指标目的。
注意:在未来版本的协议中,此信息将是必需的。
连接初始化完成后,您就可以创建会话并开始与代理对话了。