桌面写丢用户 MCP 时,项目层要写完整传输,不要只写 enabled
开放 bug:桌面改设置、插件或信任,可能把 ~/.codex 里的 mcp_servers 整表写没。项目只剩 enabled = true 会 invalid transport。权宜是项目里写全 command 或 url,并自己留备份。
这是开放缺陷,不是功能。Windows 桌面、以及 macOS 桌面连远程 Linux 主机,都有人复现:用户 ~/.codex/config.toml 被桌面原子写回之后,原来的 [mcp_servers.docs] 整张表消失。上游 MCP 还活着,环境变量也还在,但:
codex mcp get docs变成 No MCP server named docs found- 当前任务看不到这台服务器的工具
- 项目
.codex/config.toml如果只写了enabled = true去覆盖用户层定义,加载器会报 invalid transport inmcp_servers.docs,桌面甚至开不了新任务
先和内部 codex_app 那条分流。报错名字是 codex_app、而且开了 WSL 代理,走「桌面开 WSL 报 invalid transport」那条。这里说的是你自己登记的服务器被写丢。
权宜(社区在隔离家目录里对 CLI 0.153.4 / 0.154.0 验证过):
- 从备份恢复用户
config.toml,不要清空~/.codex来「重装」。 - 受信任项目里不要只写开关。把完整传输写进项目层,这样用户层表没了也不会变成无
command/ 无url的残表:
[mcp_servers.docs]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "DOCS_MCP_TOKEN"
enabled = true
stdio 同样要写全 command、args、绝对 cwd。密钥继续用变量名,不要写进仓库。
桌面线程经常仍只读用户层。项目里写全传输能挡住 invalid transport,但桌面要用工具,还是得把用户 config.toml 找回来,然后彻底退出再开新线程。网页 Work 不读这份文件。
不要把「桌面开着时 CLI add、过一会儿设置页写回」当成已定位的唯一触发器;维护者还没钉死是哪一次写入。先备份,再避免项目层只有 enabled。