适用场景:Linux 远程服务器 + VS Code Remote-SSH + VS Code Codex 插件。
目标:把原来在 VS Code 或 Warp 中可用的 MCP Server,迁移到 Codex 的
~/.codex/config.toml中,让 Codex CLI / Codex IDE Extension 能识别和调用这些 MCP 工具。
1. 背景
你原来有两类 MCP 配置来源:
-
VS Code MCP 配置
通常放在
.vscode/mcp.json或 VS Code 用户配置中,主要给 VS Code 内部的 Copilot Chat / Agent Mode / 自定义 Agent 使用。 -
Warp MCP 配置
Warp 中也有自己的 MCP 配置格式,里面记录了 MCP Server 的
command、args、env等信息。
但是你现在想让 VS Code 中的 Codex 插件 使用这些 MCP 工具。这里的关键点是:
text
VS Code / Warp 的 MCP 配置
≠
Codex 自动可用的 MCP 配置
Codex 有自己的配置文件:
bash
~/.codex/config.toml
Codex CLI 和 Codex IDE Extension 共享这套配置。根据 OpenAI Codex 官方文档,Codex 的 MCP server 配置需要写到 config.toml 中,并使用:
toml
[mcp_servers.<server-name>]
这种 TOML table 格式。
参考:
- OpenAI Codex MCP 文档:https://developers.openai.com/codex/mcp
- OpenAI Codex Config Basics:https://developers.openai.com/codex/config-basic
- VS Code MCP 文档:https://code.visualstudio.com/docs/agent-customization/mcp-servers
2. 为什么 VS Code 的 MCP 工具不能直接被 Codex 使用
2.1 MCP 不是系统级全局工具
MCP 是一种协议,但每个客户端都要自己连接 MCP Server。
也就是说:
text
VS Code 是一个 MCP Client
Codex 也是一个 MCP Client
Warp 也是一个 MCP Client
你在 VS Code 中配置 MCP,只代表 VS Code Agent 能看到这些工具;并不代表 Codex 自动能看到。
2.2 配置文件位置不同
| 工具 | MCP 配置位置 | 配置格式 |
|---|---|---|
| VS Code | .vscode/mcp.json 或用户级 MCP 配置 |
JSON |
| Warp | Warp 内部 MCP 配置 | JSON |
| Codex | ~/.codex/config.toml |
TOML |
所以需要做一次格式迁移。
2.3 Remote-SSH 场景中,本地路径不能直接用
你的原始 Warp / VS Code 配置中有 Windows 路径:
text
D:/Document/code/ScholAI/main.py
D:/Document/code/Office-Word-MCP-Server/word_mcp_server.py
D:/Document/code/arxiv-mcp-server
但是现在 Codex 运行在 Linux 远程服务器上,Linux 无法访问 D:/...。
因此这些路径必须改成远程服务器上的 Linux 路径,例如:
text
/workspace/ScholAI/main.py
/workspace/Office-Word-MCP-Server/word_mcp_server.py
/workspace/arxiv-mcp-server
如果远程服务器上没有这些文件,就算配置成 enabled = true,MCP Server 也无法正常启动。
3. 原始 MCP 工具列表
你之前 Warp / VS Code 中的 MCP 工具包括:
text
chrome-devtools
context7
sequential-thinking
schoAi
arxiv-mcp-server
word-document-server
drawio
它们大致作用如下:
| MCP Server | 作用 | 依赖 |
|---|---|---|
chrome-devtools |
连接 Chrome DevTools,辅助浏览器调试 | npx |
context7 |
查询库文档 / 技术文档 | npx + CONTEXT7_API_KEY |
sequential-thinking |
结构化分步思考工具 | npx |
arxiv-mcp-server |
查询 arXiv 论文 | npx + SILICONFLOW_API_KEY |
drawio |
操作 / 生成 draw.io 图 | drawio-mcp-server 或 npx |
schoAi |
本地 Python 学术工具 | Python 脚本路径 |
word-document-server |
Word 文档相关 MCP | Python 脚本路径 |
4. API Key 处理方式
4.1 不建议把 API Key 明文写进 config.toml
不推荐:
toml
[mcp_servers.context7.env]
CONTEXT7_API_KEY = "真实 key"
原因是你经常会把 config.toml 发给别人排查问题,一旦里面有真实 key,就会泄露。
4.2 简化方案:写入 ~/.bashrc
你最后选择先使用简单方案:把环境变量写入 ~/.bashrc。
命令模板如下:
bash
cat >> ~/.bashrc <<'EOF'
# MCP API Keys for Codex
export CONTEXT7_API_KEY="在这里粘贴你的 Context7 API Key"
export SILICONFLOW_API_KEY="在这里粘贴你的 SiliconFlow API Key"
EOF
source ~/.bashrc
检查是否生效时,不建议直接完整打印 key,可以用:
bash
python3 - <<'PY'
import os
for k in ["CONTEXT7_API_KEY", "SILICONFLOW_API_KEY"]:
v = os.environ.get(k, "")
if v:
print(f"{k}: OK, {v[:6]}...{v[-4:]}")
else:
print(f"{k}: MISSING")
PY
注意:~/.bashrc 也是明文文件。这个方案只是比把 key 直接写入 config.toml 更方便排查和迁移,并不是绝对安全。更安全的方式是使用单独的 ~/.codex/secrets.env 并设置权限,但当前阶段你选择先用简化方案。
5. Codex MCP 配置写法
5.1 原有 Codex 配置
你的远程服务器 ~/.codex/config.toml 原本类似:
toml
model = "gpt-5.4"
model_reasoning_effort = "high"
[plugins."github@openai-curated"]
enabled = true
[projects."/workspace"]
trust_level = "trusted"
[projects."/workspace/xDiT"]
trust_level = "trusted"
MCP 配置可以直接追加在后面。
5.2 完整 MCP 配置示例
注意:如果你之前已经追加过同名
[mcp_servers.xxx],不要重复追加。TOML 不允许重复 table。正确做法是先备份,然后删除旧 MCP 段,再粘贴下面的完整配置。
先备份:
bash
cp ~/.codex/config.toml ~/.codex/config.toml.bak.$(date +%Y%m%d_%H%M%S)
编辑:
bash
nano ~/.codex/config.toml
在文件末尾加入:
toml
# =========================
# MCP Servers
# Migrated from Warp / VS Code MCP config
# Linux remote version for Codex
# =========================
[mcp_servers.chrome-devtools]
command = "npx"
args = ["-y", "chrome-devtools-mcp@latest"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = true
[mcp_servers.context7]
command = "npx"
args = ["-y", "@upstash/context7-mcp"]
env_vars = ["CONTEXT7_API_KEY"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = true
[mcp_servers.sequential-thinking]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-sequential-thinking"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = true
[mcp_servers.arxiv-mcp-server]
command = "npx"
args = ["-y", "@langgpt/arxiv-mcp-server@latest"]
env_vars = ["SILICONFLOW_API_KEY"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = true
[mcp_servers.arxiv-mcp-server.env]
WORK_DIR = "/workspace/arxiv-mcp-server"
[mcp_servers.drawio]
command = "drawio-mcp-server"
args = ["--extension-port", "8081"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = true
# =========================
# Local Python MCP servers
# 注意:这些原来是 Windows D:/ 路径
# Linux 远程服务器上必须改成真实 Linux 路径
# 如果文件不存在,建议先 enabled = false
# =========================
[mcp_servers.schoAi]
command = "python3"
args = ["/workspace/ScholAI/main.py"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = false
[mcp_servers.word-document-server]
command = "python3"
args = ["/workspace/Office-Word-MCP-Server/word_mcp_server.py"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = false
这里把 schoAi 和 word-document-server 暂时设置为:
toml
enabled = false
原因是这两个原本依赖 Windows 本地路径。只有当你把对应项目复制到 Linux 服务器并确认路径存在之后,才建议改成:
toml
enabled = true
6. drawio 的特殊情况
你认为 drawio 也应该放在启用区域,这个判断是对的。
如果远程服务器上已经有:
bash
drawio-mcp-server
那么可以用:
toml
[mcp_servers.drawio]
command = "drawio-mcp-server"
args = ["--extension-port", "8081"]
enabled = true
检查命令:
bash
which drawio-mcp-server
drawio-mcp-server --help
如果找不到 drawio-mcp-server,可以改成 npx 方式:
toml
[mcp_servers.drawio]
command = "npx"
args = ["-y", "@next-ai-drawio/mcp-server@latest"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = true
注意不要同时保留两个 [mcp_servers.drawio],否则配置文件会报错。
7. 创建 arxiv MCP 工作目录
配置中写了:
toml
[mcp_servers.arxiv-mcp-server.env]
WORK_DIR = "/workspace/arxiv-mcp-server"
所以需要创建目录:
bash
mkdir -p /workspace/arxiv-mcp-server
如果没有 /workspace 权限,可以改到 home 目录:
bash
mkdir -p ~/arxiv-mcp-server
并把配置改成:
toml
[mcp_servers.arxiv-mcp-server.env]
WORK_DIR = "/home/你的用户名/arxiv-mcp-server"
8. 检查依赖
远程服务器需要有 Node.js / npm / npx / Python:
bash
node -v
npm -v
npx -v
python3 --version
如果没有 node / npm / npx,以下 MCP 会启动失败:
text
chrome-devtools
context7
sequential-thinking
arxiv-mcp-server
Ubuntu / Debian 可以安装:
bash
sudo apt update
sudo apt install -y nodejs npm
如果当前用户是 root:
bash
apt update
apt install -y nodejs npm
9. 检查 TOML 格式
配置完成后,检查 ~/.codex/config.toml 是否语法正确:
bash
python3 - <<'PY'
import os
try:
import tomllib
except ModuleNotFoundError:
print("Python < 3.11, skip TOML check.")
raise SystemExit(0)
path = os.path.expanduser("~/.codex/config.toml")
with open(path, "rb") as f:
tomllib.load(f)
print("config.toml OK")
PY
如果出现重复 table 报错,例如:
text
Cannot declare ('mcp_servers', 'context7') twice
说明你重复写了同一个 MCP server,需要删除旧的那一段。
10. 重新加载 Codex 插件
修改 ~/.codex/config.toml 后,当前已经打开的 Codex 会话通常不会自动热加载新 MCP。
推荐顺序:
text
1. 保存 ~/.codex/config.toml
2. 关闭当前 Codex 会话
3. 新建 Codex 会话
如果 MCP 还没出现:
text
Ctrl + Shift + P
→ Developer: Reload Window
如果环境变量仍然没有被 VS Code Codex 插件继承:
text
Ctrl + Shift + P
→ Remote-SSH: Kill VS Code Server on Host
→ 重新连接远程服务器
11. 如何判断迁移成功
在 VS Code Codex 插件的 MCP 面板中,你看到类似:
text
arxiv-mcp-server 已启用
chrome-devtools 已启用
codex_apps 已启用
context7 已启用
drawio 已启用
sequential-thinking 已启用
schoAi 已禁用
word-document-server 已禁用
这说明大部分迁移已经成功。
其中:
text
不支持身份验证
不是错误。它只是说明 Codex MCP 面板没有为这个 server 提供 OAuth / 登录按钮。像 context7 和 arxiv-mcp-server 的 key 是通过环境变量传入的,所以不会显示成"已通过身份验证"。
真正重要的是右侧状态:
text
已启用
12. 为什么 schoAi 和 word-document-server 仍然是已禁用
原因通常是配置里仍然写了:
toml
enabled = false
这是合理的,因为它们依赖远程服务器上的 Python 脚本路径。
检查配置:
bash
grep -A8 -n "mcp_servers.schoAi" ~/.codex/config.toml
grep -A8 -n "mcp_servers.word-document-server" ~/.codex/config.toml
检查文件是否存在:
bash
ls /workspace/ScholAI/main.py
ls /workspace/Office-Word-MCP-Server/word_mcp_server.py
如果文件存在,可以改成:
toml
enabled = true
如果文件不存在,不要强行启用,否则 MCP Server 会启动失败。
13. 最终推荐状态
当前阶段推荐:
| MCP Server | 推荐状态 | 原因 |
|---|---|---|
chrome-devtools |
启用 | npx 可直接启动 |
context7 |
启用 | 通过 CONTEXT7_API_KEY 使用 |
sequential-thinking |
启用 | 不需要额外认证 |
arxiv-mcp-server |
启用 | 通过 SILICONFLOW_API_KEY 使用 |
drawio |
启用 | 如果命令可用,建议启用 |
schoAi |
暂时禁用 | 需要把 Windows 本地项目迁移到 Linux |
word-document-server |
暂时禁用 | 需要把 Windows 本地项目迁移到 Linux |
14. 常见问题与解决方式
问题 1:MCP 面板显示"不支持身份验证"
这不是错误。说明该 MCP Server 不支持在 Codex 面板里点击登录。API Key 可以通过环境变量传入。
问题 2:MCP 显示已启用,但调用失败
检查依赖:
bash
node -v
npm -v
npx -v
python3 --version
检查环境变量:
bash
python3 - <<'PY'
import os
for k in ["CONTEXT7_API_KEY", "SILICONFLOW_API_KEY"]:
print(k, "OK" if os.environ.get(k) else "MISSING")
PY
问题 3:VS Code Codex 插件看不到环境变量
说明插件进程没有继承新的 .bashrc 环境变量。
解决:
text
Ctrl + Shift + P
→ Remote-SSH: Kill VS Code Server on Host
→ 重新连接远程服务器
问题 4:配置文件报错
通常是重复写了同一个 MCP table,例如:
toml
[mcp_servers.context7]
出现了两次。
解决:打开 ~/.codex/config.toml,只保留一份。
问题 5:Linux 远程服务器找不到 Windows 路径
例如:
text
D:/Document/code/ScholAI/main.py
Linux 无法访问。必须传到远程服务器后改成:
text
/workspace/ScholAI/main.py
15. 本次实际验证结果:Reload Window 后 MCP 可用
后续实际测试中发现:
text
在 VS Code Codex 插件中,MCP 面板虽然已经显示多个 MCP Server 为"已启用",
但当前 Codex 会话最初仍可能无法直接看到或调用这些工具。
最终有效的操作是:
text
Ctrl + Shift + P
→ Developer: Reload Window
→ 重新打开 / 新建 Codex 会话
重新加载窗口后,已启用的 MCP 工具可以被 Codex 正常识别和使用。
因此,这次迁移中得到的一个重要经验是:
text
修改 ~/.codex/config.toml 后,
如果 MCP 面板显示已启用但当前会话仍说"看不到工具",
优先执行 Developer: Reload Window。
如果涉及 .bashrc 中新增环境变量,Reload Window 后仍不生效,再执行:
text
Ctrl + Shift + P
→ Remote-SSH: Kill VS Code Server on Host
→ 重新连接远程服务器
实际推荐刷新顺序更新为:
text
1. 保存 ~/.codex/config.toml
2. 关闭当前 Codex 会话,新建会话
3. 如果仍不可用,执行 Developer: Reload Window
4. 如果环境变量仍不可用,再 Kill VS Code Server 并重连 Remote-SSH
16. 手动测试 MCP 是否可用的方法
16.1 查看 Codex 是否识别 MCP Server
如果远程服务器上可以使用 Codex CLI,可以在终端执行:
bash
codex
进入 Codex TUI 后输入:
text
/mcp
如果能看到类似:
text
context7
sequential-thinking
arxiv-mcp-server
drawio
chrome-devtools
说明 Codex CLI 已经识别这些 MCP Server。
在 VS Code Codex 插件中,也可以通过 MCP 面板查看状态。右侧显示:
text
已启用
表示配置层面已经被 Codex 识别。
16.2 检查基础依赖是否存在
大部分 MCP Server 依赖 node / npm / npx,本地 Python MCP 依赖 python3:
bash
node -v
npm -v
npx -v
python3 --version
如果 npx 不存在,下面这些 MCP 很可能无法启动:
text
chrome-devtools
context7
sequential-thinking
arxiv-mcp-server
drawio 的 npx 版本
16.3 检查 API Key 是否进入当前环境
不要完整打印 API Key,可以只检查是否存在:
bash
python3 - <<'PY2'
import os
for k in ["CONTEXT7_API_KEY", "SILICONFLOW_API_KEY"]:
v = os.environ.get(k, "")
if v:
print(f"{k}: OK, {v[:6]}...{v[-4:]}")
else:
print(f"{k}: MISSING")
PY2
如果这里显示 OK,说明当前终端可以读取环境变量。
如果终端里是 OK,但 VS Code Codex 插件仍然调用失败,说明插件进程没有继承环境变量,执行:
text
Developer: Reload Window
仍不行再执行:
text
Remote-SSH: Kill VS Code Server on Host
→ 重新连接远程服务器
16.4 手动启动 stdio MCP Server 做排错
注意:stdio 类型 MCP Server 通常由 Codex 自动启动,不需要你长期手动后台运行。
手动运行这些命令的目的只是排查:
text
这个 MCP Server 的启动命令是否可执行;
依赖是否完整;
环境变量是否缺失;
是否存在路径错误。
测试 context7
bash
timeout 10s npx -y @upstash/context7-mcp
echo $?
如果返回:
text
124
通常表示进程成功启动并等待 MCP 客户端输入,属于正常现象。
测试 sequential-thinking
bash
timeout 10s npx -y @modelcontextprotocol/server-sequential-thinking
echo $?
返回 124 通常也说明能启动,只是没有客户端连接。
测试 arxiv-mcp-server
先确保工作目录存在:
bash
mkdir -p /workspace/arxiv-mcp-server
然后测试:
bash
timeout 10s env WORK_DIR=/workspace/arxiv-mcp-server \
SILICONFLOW_API_KEY="$SILICONFLOW_API_KEY" \
npx -y @langgpt/arxiv-mcp-server@latest
echo $?
如果不是 124,并且输出报错,需要根据报错检查 SILICONFLOW_API_KEY、WORK_DIR 或 npx。
测试 chrome-devtools
bash
timeout 10s npx -y chrome-devtools-mcp@latest
echo $?
如果出现 Chrome / sandbox / display 相关错误,说明远程服务器上的浏览器环境不完整。
测试 drawio
如果配置使用本地命令:
toml
[mcp_servers.drawio]
command = "drawio-mcp-server"
args = ["--extension-port", "8081"]
先检查命令是否存在:
bash
which drawio-mcp-server
drawio-mcp-server --help
如果找不到,可以测试 npx 版本:
bash
timeout 10s npx -y @next-ai-drawio/mcp-server@latest
echo $?
如果 npx 版本可用,可以把 Codex 配置改成:
toml
[mcp_servers.drawio]
command = "npx"
args = ["-y", "@next-ai-drawio/mcp-server@latest"]
startup_timeout_sec = 30
tool_timeout_sec = 120
enabled = true
不要同时保留两个 [mcp_servers.drawio]。
16.5 测试 Python 类 MCP Server
schoAi 和 word-document-server 依赖具体 Python 脚本。先检查文件是否存在:
bash
ls /workspace/ScholAI/main.py
ls /workspace/Office-Word-MCP-Server/word_mcp_server.py
然后手动运行:
bash
python3 /workspace/ScholAI/main.py
以及:
bash
python3 /workspace/Office-Word-MCP-Server/word_mcp_server.py
如果路径不存在,说明还没有把 Windows 本地项目迁移到 Linux 服务器,应该继续保持:
toml
enabled = false
16.6 在 Codex 会话中做实际调用测试
MCP Server 显示"已启用"只能说明配置被识别。最终还要在 Codex 中做真实任务测试。
测试 context7:
text
请使用 context7 查询 PyTorch DistributedDataParallel 的文档,并总结关键点。
测试 sequential-thinking:
text
请使用 sequential-thinking MCP 帮我拆解:如何把 VS Code MCP 配置迁移到 Codex。
测试 arxiv-mcp-server:
text
请使用 arxiv-mcp-server 搜索最近关于 distributed diffusion inference 的论文,并列出标题、年份和摘要。
测试 drawio:
text
请使用 drawio MCP 创建一个简单的 pipeline parallelism 架构图,包含 4 个 GPU、2 个 pipeline stage 和数据流箭头。
如果 Codex 仍然回答"没有看到该 MCP 工具",但 MCP 面板显示"已启用",优先执行:
text
Developer: Reload Window
本次实际测试表明,Reload Window 后这些 MCP 工具能够在 Codex 插件中正常使用。
16.7 不建议手动后台启动 stdio MCP
不要这样启动:
bash
nohup npx -y @upstash/context7-mcp &
原因是:
text
stdio MCP Server 需要由 Codex 启动并接管标准输入 / 标准输出;
你手动后台启动后,Codex 通常无法连接到这个进程。
正确方式是:
text
把 MCP Server 写入 ~/.codex/config.toml;
让 Codex 根据 command + args 自动启动;
手动运行命令只用于排错。
17. 一句话总结
这次迁移的核心是:
text
把 VS Code / Warp 的 MCP JSON 配置
转换成 Codex 的 ~/.codex/config.toml TOML 配置;
把 Windows 本地路径替换为 Linux 远程路径;
把 API Key 放到环境变量中;
然后重启 Codex 会话 / Reload Window / 重连 Remote-SSH。
最终判断标准:
text
Codex MCP 面板中对应 server 显示"已启用"
就说明 Codex 已经识别该 MCP Server。之后还需要通过实际提问测试工具是否能成功调用。