﻿---
title: "HTTP MCP 的 bearer_token_env_var 读 Codex 进程，不是刚 export 的 shell"
summary: "变量必须在启动 Codex 的那个进程里。mcp list 显示 Bearer 不等于请求带了头。不要对 bearer 跑 mcp login，也不要把 HTTP 写成 env_vars。"
category: mcp
level: intermediate
surfaces: [cli, app, ide]
tags: ["MCP", "bearer_token_env_var", "HTTP", "密钥"]
canonical: /tips/mcp-http-bearer-env/
---

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

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

## 来源

- [OpenAI · Model Context Protocol](https://learn.chatgpt.com/docs/extend/mcp)
- [openai/codex#30125](https://github.com/openai/codex/issues/30125)
- [openai/codex#26760](https://github.com/openai/codex/issues/26760)
