桌面写丢用户 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 in mcp_servers.docs,桌面甚至开不了新任务

先和内部 codex_app 那条分流。报错名字是 codex_app、而且开了 WSL 代理,走「桌面开 WSL 报 invalid transport」那条。这里说的是你自己登记的服务器被写丢。

权宜(社区在隔离家目录里对 CLI 0.153.4 / 0.154.0 验证过):

  1. 从备份恢复用户 config.toml,不要清空 ~/.codex 来「重装」。
  2. 受信任项目里不要只写开关。把完整传输写进项目层,这样用户层表没了也不会变成无 command / 无 url 的残表:
[mcp_servers.docs]
url = "https://mcp.example.com/mcp"
bearer_token_env_var = "DOCS_MCP_TOKEN"
enabled = true

stdio 同样要写全 commandargs、绝对 cwd。密钥继续用变量名,不要写进仓库。

桌面线程经常仍只读用户层。项目里写全传输能挡住 invalid transport,但桌面要用工具,还是得把用户 config.toml 找回来,然后彻底退出再开新线程。网页 Work 不读这份文件。

不要把「桌面开着时 CLI add、过一会儿设置页写回」当成已定位的唯一触发器;维护者还没钉死是哪一次写入。先备份,再避免项目层只有 enabled

来源