MCP OAuth 与 Callback
选择预注册 client、CIMD 或 DCR,并正确区分 callback URL 和本地监听端口。
OAuth 登录失败时,先区分服务器注册方式、回调地址、监听端口和 issuer 验证。它与 Codex 自身的 ChatGPT 登录是不同流程。
预注册客户端
codex mcp add example --url https://mcp.example.com --oauth-client-id my-client示例需替换为实际 URL 和 client ID。将 codex mcp add 显示的完整 callback 注册到提供方,不能仅复制文档里的通用地址。
服务器声明 authorization_response_iss_parameter_supported=true 且提供 metadata issuer 时,新预注册 client 可用稳定 callback。未声明 issuer 支持时需要服务器特定 callback ID,该 ID 由 MCP URL(含 path/query)派生。
已有 client_id 却没有保存 callback 的配置,继续使用带 callback ID 的地址。不匹配的显式 callback 可能回退到全局/default 加服务器 ID,且不会改写保存的值。
URL 与监听端口
顶层 mcp_oauth_callback_url 设置 callback 路径或远程 ingress;mcp_oauth_callback_port 设置本地全局监听端口,单服务器 oauth.callback_port 可以覆盖。
URL 中写端口不会自动设置 listener。直接 loopback 回调可用不带端口的 http://127.0.0.1,让登录时插入实际端口;显式固定端口时需同时配置 URL 与 listener。localhost、IPv6、HTTPS 和已有端口 URL 不使用该自动替换。经代理的外部端口可以与本地 listener 不同。
注册方式
服务器支持 CIMD、token endpoint 允许 none、callback 使用受支持 loopback 时,Codex 可自动选 CIMD;否则在可用时使用 DCR。已有 client ID 优先,跳过自动注册。
单次登录可指定:
codex mcp login <server-name> --oauth-client-registration cimd
codex mcp login <server-name> --oauth-client-registration dcr默认 auto,选择只作用于当前登录,不保存到 config.toml。自定义 callback 主机、路径或 query 需要 DCR 或预注册 client。
验证失败
返回的 iss 不匹配总会拒绝;服务器声明 issuer 支持却缺少 iss 也会拒绝。这些情况不会交换 code 或尝试另一个 callback。畸形 URL、声明支持但 metadata 无 issuer 同样硬失败。
服务器声明 scopes_supported 时优先使用其 scopes,否则回退 config.toml 配置。插件 OAuth 使用 camelCase 字段,但遵循相同 callback 选择规则。