MCP 用 writes 审批,再给吵闹工具单独限输出

default_tools_approval_mode = "writes" 只拦非只读工具。单工具还能设 output_token_limit,避免日志类 MCP 撑爆会话。

[mcp_servers.chrome_devtools]
url = "http://localhost:3000/mcp"
enabled_tools = ["open", "screenshot"]
disabled_tools = ["screenshot"]
default_tools_approval_mode = "writes"
startup_timeout_sec = 20
tool_timeout_sec = 45

[mcp_servers.chrome_devtools.tools.open]
approval_mode = "approve"
output_token_limit = 8000

这张表示例里的 url = "http://localhost:3000/mcp"已经在跑的 Streamable HTTP 服务。官方 Chrome DevTools MCP 包是 stdio:codex mcp add chrome-devtools -- npx chrome-devtools-mcp@latest,不要把两套抄成一台。

writes 只对没标只读的工具提问;approve / prompt 更严;auto 几乎不问。disabled_tools 在白名单之后再生效。

维护 MCP 服务器时,初始化返回的 instructions 前 512 个字符要能独立看懂:跨工具约束、限流、什么时候不该调用。Codex 拿这段决定要不要用这个服务器。

插件自带的 MCP 不要在 [mcp_servers] 里改启动命令,开关和审批写在 [plugins."name@version".mcp_servers.server]codex exec 里键名少了 @marketplace 会静默 miss,表现为 user cancelled MCP tool call

这和顶层 tool_output_token_limit 不是同一键:后者裁所有工具输出进会话历史的预算,不只针对某一个 MCP 工具。

来源