﻿---
title: "MCP OAuth 用无端口的 127.0.0.1，不要写 localhost"
summary: "把 add 打印出的回调原样登记。localhost、IPv6、HTTPS 不会自动补监听端口。远程 Devbox 改 mcp_oauth_callback_url。"
category: mcp
level: advanced
surfaces: [cli, app, ide]
tags: ["MCP", "OAuth", "回调"]
canonical: /tips/mcp-oauth-loopback-callback/
---

# MCP OAuth 用无端口的 127.0.0.1，不要写 localhost

把 add 打印出的回调原样登记。localhost、IPv6、HTTPS 不会自动补监听端口。远程 Devbox 改 mcp_oauth_callback_url。

预注册客户端：

```bash
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

固定端口要两边一致：

```toml
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`。

## 来源

- [OpenAI · Model Context Protocol](https://learn.chatgpt.com/docs/extend/mcp)
