﻿---
title: "MCP 用 writes 审批，再给吵闹工具单独限输出"
summary: "default_tools_approval_mode = \"writes\" 只拦非只读工具。单工具还能设 output_token_limit，避免日志类 MCP 撑爆会话。"
category: mcp
level: intermediate
surfaces: [cli, app, ide]
tags: ["MCP", "审批", "output_token_limit"]
canonical: /tips/mcp-approval-and-output-limit/
---

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

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

```toml
[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 工具。

## 来源

- [OpenAI · Model Context Protocol](https://learn.chatgpt.com/docs/extend/mcp)
