MCP OAuth 用无端口的 127.0.0.1,不要写 localhost
把 add 打印出的回调原样登记。localhost、IPv6、HTTPS 不会自动补监听端口。远程 Devbox 改 mcp_oauth_callback_url。
预注册客户端:
codex mcp add example --url https://mcp.example.com --oauth-client-id my-client
把终端里打印的 OAuth callback URL 原样登到授权服务器。不要自己加端口,也不要改成 localhost。
无端口的 http://127.0.0.1/callback 才允许 Codex 在授权时插入实际监听端口(RFC 8252)。下面这些不会做端口替换:
http://localhost/callback- 已经带端口的 URL
- IPv6 或 HTTPS
固定端口要两边一致:
mcp_oauth_callback_port = 5555
[mcp_servers.example]
url = "https://mcp.example.com"
[mcp_servers.example.oauth]
client_id = "my-client"
callback_url = "http://127.0.0.1:5555/callback"
callback_port = 5555
远程 Devbox 把 mcp_oauth_callback_url 设成入口 URL。codex mcp login server --oauth-client-registration cimd|dcr 只影响这一次登录,不写进 config。
HTTP 头不要写进仓库:用 http_headers_helper 打出 JSON 头,或 bearer_token_env_var。显式 bearer / OAuth 优先于 helper 的 Authorization。