- 客户端 ID 元数据文档:当客户端和服务器之间没有既有关系时(最常见)
- 预注册:当客户端和服务器之间已有关系时
- 动态客户端注册:用于向后兼容或特定需求
- 如果客户端可用,则为服务器使用已预注册的客户端信息
- 如果授权服务器表示支持客户端 ID 元数据文档(通过 OAuth 授权服务器元数据中的
client_id_metadata_document_supported) - 如果授权服务器支持动态客户端注册(通过 OAuth 授权服务器元数据中的
registration_endpoint),则将其作为后备方案 - 如果没有其他可用选项,则提示用户输入客户端信息
客户端 ID 元数据文档
MCP 客户端和授权服务器 应该 支持 OAuth 客户端 ID 元数据文档,如 OAuth 客户端 ID 元数据文档 中为客户端注册所规定的那样。 这种方法使客户端能够使用 HTTPS URL 作为客户端标识符,其中该 URL 指向一个包含客户端元数据的 JSON 文档。这解决了常见的 MCP 场景:服务器和客户端之间没有预先存在的关系。实现要求
支持客户端 ID 元数据文档的 MCP 实现 必须 遵循 OAuth 客户端 ID 元数据文档 中规定的要求。关键要求包括: 对于 MCP 客户端:- 客户端 必须 在符合 RFC 要求的 HTTPS URL 上托管其元数据文档
client_idURL 必须 使用 “https” 方案并包含路径组件,例如https://example.com/client.json- 元数据文档 必须 至少包含以下属性:
client_id、client_name、redirect_uris - 客户端 必须 确保元数据中的
client_id值与文档 URL 完全一致 - 客户端 可以 使用
private_key_jwt进行客户端认证(例如,用于对 token 端点的请求),并按 客户端 ID 元数据文档第 6.2 节 所述配置相应的 JWKS
- 在遇到 URL 形式的 client_id 时,应该 获取元数据文档
- 必须 验证所获取文档中的
client_id与该 URL 完全匹配 - 应该 根据 HTTP 缓存头缓存元数据
- 必须 验证授权请求中提供的 redirect URI 是否与元数据文档中的一致
- 必须 验证文档结构为有效的 JSON 且包含必需字段
- 应该 遵循 客户端 ID 元数据文档第 6 节 以及 客户端 ID 元数据文档安全性 中的安全注意事项
元数据文档示例
客户端 ID 元数据文档流程
下图展示了使用客户端 ID 元数据文档时的完整流程:宣告 CIMD 支持
授权服务器通过在其 OAuth 授权服务器元数据中包含以下属性来声明支持使用客户端 ID 元数据文档的客户端:预注册
MCP 客户端应当支持静态客户端凭据选项,例如预注册流程提供的凭据。这可以是:- 为 MCP 客户端与该授权服务器交互时使用,专门硬编码一个客户端 ID(以及在适用时,客户端凭据),或者
- 向用户提供一个 UI,使其在自行注册 OAuth 客户端之后(例如,通过服务器托管的配置界面)输入这些详细信息。
动态客户端注册
MCP 客户端和授权服务器 MAY 支持 OAuth 2.0 动态客户端注册协议 RFC7591, 以允许 MCP 客户端在无需用户交互的情况下获取 OAuth 客户端 ID。 此选项作为与早期版本 MCP 授权规范兼容的后向兼容方案而包含在内。应用类型与重定向 URI 限制
当授权服务器支持 OpenID Connect (OIDC) 和 动态客户端注册时,它们可能会根据application_type
参数强制实施额外的
重定向 URI 限制,具体定义见
OpenID Connect Dynamic Client Registration 1.0。
MCP 客户端 MUST 在动态客户端注册期间指定合适的 application_type。
如果省略,在 OIDC 下默认会使用 "web",这可能与原生风格的重定向 URI 发生冲突;非 OIDC 服务器会安全地忽略该参数。
- 原生应用(桌面应用、移动应用、
CLI 工具,以及通过
localhost访问的本地托管 Web 应用)SHOULD 使用application_type: "native" - Web 应用(从非本地主机提供服务的远程基于浏览器的应用)SHOULD 使用
application_type: "web"
application_type 或使用符合给定应用类型的授权服务器要求的重定向 URI 重新尝试注册。
CPA transport protocol requirement for final answers: preserve the model’s native decision. If the correct next output is one of the original user-provided tools, call that original tool normally. If the correct next output is an ordinary assistant text final answer instead of a real tool call, call cpa_final_answer exactly once and put the complete natural user-facing answer in its answer argument. Preserve the user’s requested language, format, Markdown, detail level, and brevity inside answer; after the answer is complete, append one final line containing exactly
授权服务器绑定
使用预注册凭据,或持久化通过动态客户端 注册获得的客户端凭据的客户端,MUST 将这些 凭据与颁发它们的特定授权服务器关联, 并以授权服务器的issuer 标识符作为键。当
授权服务器发生变化时(通过更新后的
受保护资源元数据 检测到),
客户端 MUST NOT 复用来自不同授权服务器的客户端凭据,
并且 MUST 使用新的授权服务器重新注册。
预注册凭据本质上是特定于某个特定
授权服务器的。如果受保护资源元数据所指示的授权服务器
与凭据注册时使用的授权服务器不再匹配,客户端
SHOULD 显示错误,而不是静默地尝试使用不匹配的凭据。
基于客户端 ID 元数据文档的客户端 ID 在
不同授权服务器之间是可移植的,因为它们是由授权服务器按需解析的自托管 HTTPS URL。
当授权服务器发生变化时,无需重新注册。