HTTP MCP 的 bearer_token_env_var 读 Codex 进程,不是刚 export 的 shell
变量必须在启动 Codex 的那个进程里。mcp list 显示 Bearer 不等于请求带了头。不要对 bearer 跑 mcp login,也不要把 HTTP 写成 env_vars。
HTTP MCP 的 bearer_token_env_var 读的是启动 Codex 的那个进程里的环境变量,不是你刚在另一个终端 export 的值,也不是 stdio 那套 env_vars。
[mcp_servers.docs]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "DOCS_MCP_TOKEN"
enabled = true
先 codex mcp add docs --url https://mcp.example.com/mcp,再在 TOML 里写这个键。本机 codex mcp add --help 若列出 --bearer-token-env-var 也可以一次加完。键里填的是变量名,不是 token 本身。
codex mcp list / codex mcp get docs 只要配置了这个键,就可能显示 Auth: Bearer token,即使当前进程里变量缺失、发出去的 initialize 根本没有 Authorization。工具数为 0、HTTP 401、或提示去 codex mcp login docs:先查进程环境。Bearer 服务器没有 OAuth 流程,不要跑 login。codex doctor 有时会标缺失的 MCP 环境变量,list 却仍看起来正常。
从已经 export DOCS_MCP_TOKEN 的终端启动 codex。Dock / 开始菜单打开的桌面没有 zshrc / bashrc。改完环境必须彻底退出再开新进程,旧线程不会热加载。不要把 token 字面量写进 config.toml 或 http_headers。自定义头用 env_http_headers,同样读进程环境。stdio 的 env_vars 对 HTTP 无效。OAuth 服务器继续 codex mcp login docs。