Codex MCP 排查:已配置、已暴露、可调用
两次留存的 Codex CLI 工具调用,把 MCP 配置与实际可用性分开:一次被审批策略拒绝,一次只读搜索成功。
最近更新: 2026-10-03
作者 Stometa · 核验依据与日期见正文中的来源和运行记录。
2026 年 10 月 3 日,Codex CLI 0.157.0 把 tavily MCP server 列为 enabled。随后一次只读 codex exec --json 被审批边界拒绝;第二次在已授权的 bypass 条件下完成 tavily_search,返回 3 个 URL。只看 server 列表,无法预判这两种结果。改 MCP 配置之前,先保存工具调用 event。
代价是一次有边界的工具调用,以及可能包含查询与结果的私有 JSONL trace。原始 trace 留在仓库外;下表只展示必要字段。本次使用已有 server,没有重做安装。
两次运行各证明了什么?
两次输入相同:Codex MCP startup_timeout_sec tool_timeout_sec、include_domains: ["developers.openai.com"]、max_results: 3。两次都使用 codex exec --json --ephemeral 和 gpt-6-sol。第一次是只读 sandbox、审批策略 never;第二次在本次任务的授权下使用 --dangerously-bypass-approvals-and-sandbox。OpenAI 官方 CLI 参考在 10 月 3 日核对:该参数同时取消审批与 sandbox,只应在有外部加固的环境中使用。本次工具调用 trace 无法证明 host 满足这个边界。不要把 bypass 参数当作通用修复办法。
| 10 月 3 日运行 | 留存的 mcp_tool_call event | 结果 | 能证明什么 |
|---|---|---|---|
只读 sandbox,审批 never | tavily / tavily_search,status: failed | MCP tool call requires approval, but approval policy is never | server 已暴露,但当前审批策略拒绝了调用。 |
| 已授权 bypass | tavily / tavily_search,status: completed | 返回 3 个官方文档 URL | 这次只读操作在该运行条件下成功;不能推断其他工具或未来调用。 |
成功返回的是 MCP 指南、配置参考与配置样例。我们在 10 月 3 日另行核对了 MCP 原文,没有把搜索摘要当作文档证据。更窄的审批设置也可能允许同一只读调用;这组运行没有测出最低所需权限。
每项检查回答什么问题?
10 月 3 日核对的 OpenAI 官方 MCP 指南说明:codex mcp list 查看已配置 server,TUI 的 /mcp 查看活跃 server。本次没有保存 /mcp 画面。JSONL event 则提供了前两项清单无法证明的执行结果。
| 检查 | 应保留的证据 | 本次已证明 | 仍未知 |
|---|---|---|---|
codex mcp list | 脱敏后的 server 名、状态与传输方式 | CLI 0.157.0 列出 enabled 的 tavily | 其他 host 或 session 加载了什么 |
目标 TUI 的 /mcp | 活跃 server 与工具名 | 未捕获 | 该 TUI 是否暴露同样工具 |
| 一次有边界的调用 | 输入、event 状态、错误或结果 URL | codex exec 中一次拒绝、一次成功 | 其他权限、工具与后续调用 |
失败时先保留报错所指的层级。审批错误与启动超时不同;调用成功也不能证明全部配置正确。官方指南列出 startup_timeout_sec(默认 10 秒)、tool_timeout_sec(默认 60 秒)和 mcp_optional_startup_grace_ms(默认 1000 毫秒)。可选 server 没进入初始工具目录时要看 grace 设置;工具执行超时属于更后面的阶段。本次两次运行都没有测量这些超时。
配置优先级见config.toml 指南;脚本运行的另一组 trace 见codex exec 排查。讨论质量下降时,应把工具错误与质量检查表分开记录。
最后核验:2026 年 10 月 3 日核对官方 MCP 指南和留存的 CLI event。**未关闭的循环:**在干净 host 重做安装,留存目标 TUI 的 /mcp 清单,并验证更窄的审批策略是否允许同样的只读调用。