首页 › cost-hacks › 工具清单每轮都计费:MCP正偷吃你的预算

你给 Agent 接上十个八个 MCP 服务器,看着它一条龙帮你读文件、查数据库、开浏览器,爽得不行。但你可能没注意到:你挂的每一个工具,它的名字、描述、参数 JSON schema,都被塞进每一次请求的开头,按输入 token 全价计费——不管这一轮你到底有没有用它。工具被调用是付费的,工具躺在那儿没被调用,照样付费。MCP 爆发一年后,这是 90% 开发者还没意识到的隐藏账单。本文拆解这个"工具税"到底烧掉你多少钱,并给出五招立刻能上手的瘦身方案,附真实省钱计算。

一、这个隐藏账单到底是什么

先说清楚计费机制,这是理解一切的基础。

当你用函数调用(function calling / tool use)时,你不是只把用户的问题发给模型。你是把三样东西一起发:

  1. 系统提示词(system prompt)
  2. 工具定义清单(tools 数组——每个工具的 name、description、input_schema 的完整 JSON)
  3. 对话历史(messages)

这三块全部计入输入 token,每一轮都重发、重新计费。关键点在第 2 项:工具定义是静态的、每轮都一样的,但默认情况下每轮都按全价算钱。

举个例子,一个典型的 MCP 工具定义长这样:

{
  "name": "read_file",
  "description": "Read the complete contents of a file from the local filesystem. You can access files outside the current working directory...",
  "input_schema": {
    "type": "object",
    "properties": {
      "path": {"type": "string", "description": "完整的文件路径,可以是绝对路径或相对路径..."}
    }
  }
}

就这一个工具,描述稍微写详细点,轻松 150-300 tokens。一个 Playwright(浏览器自动化)MCP 服务器,能吐出 20-30 个工具;一个 PostgreSQL MCP、一个 GitHub MCP、一个 Slack MCP……你连上十来个服务器,工具总数奔着 50 个去了。

50 个工具 × 平均 150 tokens ≈ 7500 tokens 的工具定义,每轮雷打不动地注入上下文。

这就是"工具税"。它有两个让人肉痛的特性:

下面这张图把这个累积过程画清楚了:

flowchart TD
    A["连接10个MCP服务器<br/>≈50个工具"] --> B["每个工具schema≈150 tokens"]
    B --> C["每轮固定注入7500 tokens工具定义"]
    C --> D{"这一轮调用了工具吗?"}
    D -->|"没调用"| E["照样按输入价计费 7500 tokens"]
    D -->|"调用了"| F["工具返回结果 再算一轮输入token"]
    E --> G["60轮对话 = 45万token 纯工具定义"]
    F --> G
    G --> H["未开缓存 ≈ $1.35<br/>开了缓存 ≈ $0.16"]

二、真实成本估算:一个普通编码会话烧掉多少

拿 Claude Sonnet 这一档(输入 $3/MTok、输出 $15/MTok,2025-2026 年的稳定挂牌价)来算一笔账。场景:你开着 Claude Code,连了 50 个工具,进行一个 60 轮的编码会话。

只算工具定义这一项的输入成本:

$1.35 听着不多?别急,这只是工具定义的裸税。再叠加系统提示词(Claude Code 自带的系统提示词本身就是 1 万+ tokens)、文件内容、对话历史——一个真实会话输入几百万 tokens 很正常。工具税往往占总输入 token 的 10%-25%,比例惊人。

更要命的是规模化场景。一个团队 50 个开发者天天跑 Claude Code,或者一个面向 C 端的 Agent 产品日均十万次调用——工具税从"零头"变成"账单主力"。海外已经有独立开发者在论坛吐槽:MCP 接太多,月账单莫名翻倍,排查半天才发现是工具定义在作妖。

那开了缓存能省多少? 这才是今天的核心信息差。

三、核心信息差:工具定义天生适合缓存,但多数人没真正用上

Anthropic 和 OpenAI 都提供 prompt caching(提示缓存),而工具定义是缓存的最佳候选——它静态、稳定、位于请求最前面,是完美的"可缓存前缀"。

各家缓存折扣(公开挂牌价):

厂商 普通输入价 缓存写入 缓存读取 Batch 异步
Anthropic(Claude) 基准价 1.25×基准(5分钟)/ 2×(1小时) 0.1×基准(省 90%) 0.5×(省 50%)
OpenAI(GPT 系列) 基准价 基准价 0.5×基准(省 50%) 0.5×(省 50%)

重点看 Anthropic:缓存读取只要基准输入价的 0.1 倍,相当于打一折。工具定义这种每轮都重复的内容,只要进了缓存,第二轮开始几乎白嫖。

继续上面的 60 轮会话,开了缓存后:

光靠"开缓存"这一招,工具税就能砍掉近九成。但这里藏着三个坑,是中国开发者最容易踩的:

坑 1:缓存有 5 分钟 TTL,空闲就失效。 Anthropic 默认缓存 5 分钟(也可选 1 小时但更贵)。如果你和 Agent 聊两句,去倒了杯咖啡回来再聊,5 分钟已过,缓存全失效,下一轮重新全价写入。长会话中途的思考停顿,是缓存杀手。

坑 2:工具列表一动,整段缓存作废。 缓存的本质是"前缀完全一致"。你中途加了个 MCP 服务器、删了个工具、甚至改了个工具描述——工具定义这段变了,从变化点往后的所有缓存全部失效。热插拔 MCP 是缓存的最大敌人。

坑 3:工具定义的位置必须在可缓存前缀里。 有些自建 Agent 框架把工具定义塞在 messages 中间,或每轮动态重排顺序,导致缓存命中率极低。工具定义要放在系统提示之后、对话之前,且顺序固定不变。

四、五招给 Agent 工具瘦身

缓存是"治标",真正治本的是减少工具定义本身的体积。下面五招,从最省事到最彻底,按需取用。

招式 1:把工具定义锁进缓存前缀(立省 80%+)

最划算的一招,几乎零成本。具体做法:

招式 2:工具目录 / 网关模式(杀手锏,省 90%+)

这是海外高手在用的终极方案。思路是:别把 50 个工具直接暴露给模型,只暴露 1 个元工具(meta-tool)。

flowchart LR
    subgraph "优化前:50个工具常驻"
      A1["Agent"] --> T1["read_file 150t"]
      A1 --> T2["write_file 150t"]
      A1 --> T3["browser_navigate 150t"]
      A1 --> T4["... 共50个"]
      A1 --> T50["slack_post 150t"]
    end
    subgraph "优化后:1个网关工具"
      B1["Agent"] --> M["search_tool 搜索+路由<br/>单个 ≈150t"]
      M --> C["按需返回真正要用的工具schema"]
    end

做法:自己包一层 MCP 服务器(或一个 gateway),对外只提供一个 search_tool / run_tool 接口。Agent 想用某个能力时,先调用这个元工具说"我要读文件",网关再把对应的真实工具 schema 动态喂进去。

效果:每轮常驻工具定义从 7500 tokens 暴跌到 ~150 tokens(就一个元工具),省掉约 98%。代价是多一次路由调用、模型选工具的准确率略降——但对工具数 >20 的场景,净赚巨大。开源界已有类似思路的 tool-gateway / MCP router 项目可参考。

招式 3:按需挂载,别全局常驻(省 50%-70%)

最朴素的道理:这个项目用不到的 MCP,就别连。

招式 4:削减 schema 描述(省 30%-50%)

很多人写工具描述时恨不得把整个 README 塞进去。描述越长,每轮税越重。 优化原则:

招式 5:合并细粒度工具(省 20%-40%)

把 create_file / read_file / delete_file / move_file 合并成一个 file_operation(action: ...),把 list_issues / get_issue / close_issue 合并成一个 issue(action: ...)。工具数量减半,schema 总量直接腰斩,且合并后的"动作枚举"比一堆独立 schema 更省 token。代价是模型有时要靠 action 参数路由,但现代模型这点不在话下。

五、不同预算的推荐方案

你的情况 推荐组合 预期省幅
个人开发者 / 单人 Claude Code 招式 1(开缓存)+ 招式 3(按需挂载) 80%+
小团队 / 多项目 上述 + 招式 4(削减描述) 85%+
Agent 产品 / 工具数 >20 招式 2(工具网关)为主,其余配合 95%+
超长会话 / 批量任务 叠加 Batch API(异步再省 50%) 极致

一句话:工具越多,越要上缓存 + 网关;工具少,按需挂载 + 削描述就够。

六、信息差总结

维度 多数人以为的 你现在知道的
工具定义计费 只在调用工具时才付费 每轮都按输入价全计费,调没调用都收
工具数量影响 工具越多越强 工具越多,每轮固定税越重,与能力无关
缓存作用 只是加速 是砍工具税的核心武器,Anthropic 读取打一折
缓存失效原因 不清楚 5 分钟 TTL、工具列表变动、位置不对都会废
终极方案 多装 MCP 工具网关:N 个工具 → 1 个元工具,省 98%

七、行动指南(今晚就能做)

  1. 先体检:跑 claude mcp list(或你的 Agent 框架的等价命令),数一下你常驻多少工具。超过 20 个就要警觉。
  2. 开缓存:确认你的 SDK / 客户端给 tools 块打了 cache_control;自建框架则手动加。
  3. 瘦身连接:把全局 MCP 改成项目级,砍掉本任务用不到的服务器。
  4. 削描述:挑你最常用的 5 个工具,把 description 砍到 80 tokens 以内,细节挪进运行时返回。
  5. 重度用户上网关:工具数 >20 或做产品的,搭一个 search_tool 网关层,常驻 token 直接打骨折。
  6. 盯账单:在 provider 后台看 input token 占比,如果工具定义占输入 >20%,说明上面几招还没做到位。

参考来源

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护。 聚焦5G/6G核心网、3GPP标准、AI工具实战。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入