MCP 服务器消耗多少 token,如何减少
MCP 服务器在三个地方消耗 token:代理携带的工具清单、加载的工具定义,以及留在对话中的结果。下面逐项说明查看方法和减少开销的设置。
模型只能调用事先描述给它的工具,而描述会放进请求里:名称、几句说明和输入参数的 JSON schema。Anthropic 的工具使用定价把这些都计作输入 token,与提示的其他部分一样。因此 MCP 服务器确实消耗 token;编码代理每一轮都会重发完整上下文,也就每轮都会产生这类开销。
具体多少取决于代理是否延迟加载定义。以 2026 年 9 月为准,在支持的模型上,Claude Code 和新版 Codex CLI 都会先保留大部分 MCP 工具定义,等模型需要时才加载。闲置服务器如今开销较小,但不是零;某些配置会悄悄恢复完整开销。
MCP 服务器给请求增加了什么
- 工具定义:每个工具的名称、说明和 JSON 输入 schema。Anthropic 的工具搜索文档举例说,GitHub、Slack、Sentry、Grafana 和 Splunk 五个常见服务器,可能在模型开始工作前就带来约 55,000 token 的定义。
- 服务器指令:服务器连接时返回的一小段说明,告诉模型它的用途。Claude Code 在会话开始时加载,默认截断至 2,048 个字符。
- 调用与结果:模型发出的调用和服务器返回的结果都进入对话记录。包含问题清单或数据库 schema 的结果可能有数千 token;直到压缩或清空把它移除前,之后每一轮都会重发,缓存有效时按缓存价格计费。
- 工具使用系统提示:只要请求包含任何工具,Claude API 就会加入自己的指令。按 Anthropic 2026 年 9 月公布的表格,Opus 5.5 为 286 token、Sonnet 5 为 354、Haiku 4.5 为 496。编码代理本来就有内置工具,因此本来就会承担这项成本;MCP 服务器不会使它翻倍。
延迟加载还是预先加载:先确认自己的设置
Claude Code 默认开启工具搜索。会话开始时,只有工具名称和服务器指令进入上下文;Claude 搜索某个工具时,才加载完整 schema。Anthropic 称工具搜索通常能把定义开销降低 85% 以上,每次请求只加载所需的三到五个工具。已加载的定义之后会留在对话中,与历史记录一起重发。
以下情况会让 MCP 定义完整进入每次请求:
ANTHROPIC_BASE_URL指向非 Anthropic 的代理或网关。如果网关会转发工具搜索所依赖的块,可设置ENABLE_TOOL_SEARCH=true。- 设置了
ENABLE_TOOL_SEARCH=false,或设置了CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS;后者即使同时设置ENABLE_TOOL_SEARCH,也会关闭工具搜索。 - 设置
ENABLE_TOOL_SEARCH=auto:只要定义总量少于上下文窗口的 10%,就会预先加载。 - 服务器标记为
alwaysLoad: true:该服务器的工具会预先加载。 - 部署环境不支持工具搜索:Google Cloud Agent Platform 上早于 4.5 代的 Claude 模型,以及托管在 Azure 的 Microsoft Foundry 部署。
在 Claude Code 中查看开销
/context all按类别拆分上下文窗口,并列出每个已加载 MCP 工具占用的 token。
/context 按类别显示窗口中的所有内容:系统提示、系统工具、MCP 工具、记忆文件、技能和消息。加上 all 可展开每一项的明细。会话刚开始、尚未输入时运行一次,查看配置本身的成本;调用几次工具后再运行一次,看看结果增加了多少。
/mcp列出各服务器的状态和工具数量,并可为当前项目启用或停用服务器。
Pro、Max、Team 和 Enterprise 套餐中的 /usage 还会把近期用量归到各个 MCP 服务器,只统计携带该服务器结果的请求。它告诉你哪个服务器用起来昂贵,而不是哪个服务器闲置时昂贵。通常前者更有参考价值。
单个 MCP 结果超过 10,000 token 时,Claude Code 也会警告。它默认通过 MAX_MCP_OUTPUT_TOKENS 将结果上限设为 25,000 token。更大的结果会保存到文件,对话中只收到路径。
在 Claude Code 中减少开销
- 关闭项目用不到的服务器。在
/mcp中关闭,或输入/mcp disable <server>。Claude Code 会按项目记录选择并保留配置。 - 只让需要的项目加载服务器。
claude mcp add默认采用 local 范围,只限当前项目。--scope user会在机器上所有项目加载;纳入版本控制的.mcp.json则供仓库中批准它的人加载。 - 检查 claude.ai 连接器。使用 claude.ai 订阅登录时,Claude Code 会自动加载在 claude.ai 添加的连接器。可在项目
.claude/settings.json中设置"disableClaudeAiConnectors": true,或以ENABLE_CLAUDEAI_MCP_SERVERS=false启动 Claude Code,将其排除。 - 有命令行工具时就使用它。Anthropic 的成本建议指出,
gh、aws、gcloud和sentry-cli不增加逐工具清单开销,Claude 可以直接运行。 - 保持延迟加载开启。只为每轮都需要的少数工具设置
alwaysLoad。 - 移除永远不想使用的单个工具。用
mcp__<server>__<tool>格式写一条权限拒绝规则,它就不会进入 Claude 的上下文。
工具清单太长,也会影响准确性
庞大的工具目录还有第二项代价。Anthropic 文档称,可用工具达到 30 至 50 个后,Claude 选择工具的能力开始下降。延迟加载有帮助,因为 Claude 只看到搜索到的少数工具;更短的目录则更有帮助。
如果你编写或挑选服务器,Anthropic 的工具设计建议也指向同一方向:用带 action 参数的一个工具合并相关操作,而不是每个动作一个工具;按服务给名称加前缀(github_、slack_),让一次搜索找到整组;只返回下一步需要的字段。更少、覆盖面更广的工具会缩短定义;精简结果则会减少留在对话记录中的内容。
工具变化何时会破坏缓存
提示缓存依赖前缀匹配。Claude API 按固定顺序构建前缀:先是 tools,再是 system,最后是 messages。任何工具的名称、说明或参数改变,都会使整个缓存失效。下一次请求会把整段对话当作新输入重新处理,而不是从缓存读取;以 2026 年 9 月为准,多数模型的缓存读取只需普通输入价格的十分之一。
在 Claude Code 中,结果取决于加载方式。延迟加载时,服务器连接、断开或修改工具清单,只会向对话末尾追加内容,缓存前缀仍有效。预先加载时,这些变化都会使缓存失效,而且可能在你没有操作时发生:本地服务器进程退出、远程会话到期、服务器短暂故障后重连。MCP 配置修改要到下次启动才生效。因此,预先加载工具时,最好在两次会话之间增删服务器。
Codex CLI
Codex CLI 在 ~/.codex/config.toml,或可信项目的 .codex/config.toml 中保存 MCP 服务器配置;每个服务器有一张 [mcp_servers.<name>] 表。CLI、IDE 扩展和 ChatGPT 桌面应用共用该配置,因此为其中一个添加的服务器,也可供另外两个使用。
成本结构相同:Codex 暴露给模型的每个工具都要描述,结果都会进入对话记录。以 2026 年 9 月的 0.156 版本为准,支持的模型会通过搜索工具延迟加载 MCP 定义,同时预先列出服务器。这一行为来自开源代码,而非文档,应视为当前实现,不应视为永久承诺。
/mcp verbose在 Codex 终端界面中列出本会话可调用的 MCP 工具及服务器诊断信息。
/status 显示会话 token 用量和剩余上下文。相关开关在同一配置文件中:
enabled = false在不删除配置的情况下关闭服务器。enabled_tools只暴露列出的工具;disabled_tools再从允许清单中排除部分工具。- 服务器表中的
tools.<tool>.output_token_limit为单个工具输出设定 token 预算,覆盖模型默认的截断设置。 - 只有一个仓库需要的服务器应放在它的
.codex/config.toml,而非全局文件。
其余成本来自哪里
定义采用延迟加载、闲置服务器已关闭后,剩下的主要是上下文本身:代理读取的文件、命令输出,以及承载两者的历史。capsul 可驱动你已经登录的 Claude Code 或 Codex CLI,发送任务所需内容,达到你设定的预算时停止,并告知哪些内容未被纳入。
capsul ask 'why does the webhook handler retry twice' --budget 3000常见问题
不调用 MCP 服务器也会消耗 token 吗?
会。以 2026 年 9 月为准,在支持的模型上,Claude Code 默认延迟加载;闲置服务器仍会在每次请求中带上工具名称和服务器指令。关闭延迟加载后,每个工具完整的名称、说明和 JSON schema 都会出现在每次请求中。为项目关闭服务器,才能把这部分开销降为零。
怎样查看 Claude Code 中 MCP 工具用了多少 token?
运行 /context all,它按类别拆分上下文窗口,并列出每个已加载 MCP 工具占用的 token。/mcp 显示各服务器的状态和工具数量。在 Pro、Max、Team 和 Enterprise 套餐中,/usage 还会依据携带结果的请求,显示近期用量归属到各服务器的比例。
Claude Code 连接多少 MCP 工具算太多?
Anthropic 文档称,可用工具超过 30 至 50 个后,Claude 的工具选择能力开始下降;五个常见服务器在全部预先加载时,还可能带来约 55,000 token 的定义。Claude Code 默认开启的工具搜索,只加载一次请求需要的少数工具,从而缓解两者。最简单的原则仍是每个项目只连接它用得上的服务器。
会话中途添加 MCP 服务器会破坏提示缓存吗?
预先加载工具定义时会,因为工具位于缓存前缀开头,任何变化都会使后面的内容失效。在支持的模型上,Claude Code 默认延迟加载;服务器连接或断开只会追加内容,缓存可以保留。配置修改在下次启动时生效,因此在会话之间调整服务器不会额外破坏当前缓存。
Codex CLI 在哪里配置 MCP 服务器?
在 ~/.codex/config.toml 中,每个服务器对应一张 [mcp_servers.<name>] 表;可信项目也可用 .codex/config.toml。enabled = false 可以不删配置就关闭服务器,enabled_tools 或 disabled_tools 可限制暴露的工具。Codex CLI、IDE 扩展和 ChatGPT 桌面应用共用该配置。
$ npm i -g @penra/capsul