用 AI Agent 的都知道 MCP(Model Context Protocol),Anthropic 搞的这套工具协议现在挺火的。但有个问题很多人没注意到:MCP 在 token 消耗上其实挺浪费的。
最近在 Hacker News 上看到一篇文章,作者做了个实验,用 CLI 替代 MCP 来调用同样的工具,结果 token 成本直接降了 94%。
MCP 的 token 税
问题出在 MCP 的设计上。
每次会话开始,MCP 会把所有可用工具的完整 JSON Schema 一股脑塞进上下文。每个工具的名称、描述、参数定义、类型约束……全部加载。
假设你接了 6 个 MCP 服务器,每个有 14 个工具,总共 84 个工具。光是工具定义就要吃掉大约 15,540 个 token。
这还没开始干活呢,token 已经烧了一大截。
CLI 的思路:按需加载
作者的方案很简单:把 MCP 工具转成 CLI,然后用懒加载的方式。
会话开始时,不加载完整的工具定义,只加载一个轻量级的工具列表:
<available_tools>
<tool>
<name>notion</name>
<description>CLI for Notion</description>
<location>~/bin/notion</location>
</tool>
<tool>
<name>linear</name>
<description>CLI for Linear</description>
<location>~/bin/linear</location>
</tool>
<!-- 更多工具... -->
</available_tools>6 个工具的列表大概只需要 300 个 token。
当 Agent 真正需要用某个工具时,再通过 --help 获取详细参数。这样只有实际用到的工具才会消耗 token。
数据对比
| 场景 | MCP | CLI | 节省 |
|---|---|---|---|
| 会话启动 | ~15,540 | ~300 | 98% |
| 用 1 个工具 | ~15,570 | ~910 | 94% |
| 用 10 个工具 | ~15,840 | ~964 | 94% |
| 用 100 个工具 | ~18,540 | ~1,504 | 92% |
即使用了 100 个工具,CLI 方案也只需要 1,504 token,而 MCP 要 18,540。差距是数量级的。
跟 Anthropic Tool Search 比呢?
Anthropic 自己也意识到了这个问题,推出了 Tool Search 功能,思路类似:先加载索引,按需获取工具定义。官方说能降低 85% 的 token 消耗。
但 CLI 方案更便宜:
| 场景 | Tool Search | CLI | CLI 额外节省 |
|---|---|---|---|
| 会话启动 | ~500 | ~300 | 40% |
| 用 1 个工具 | ~3,530 | ~910 | 74% |
| 用 10 个工具 | ~3,800 | ~964 | 75% |
| 用 100 个工具 | ~12,500 | ~1,504 | 88% |
而且 Tool Search 只能在 Anthropic 的模型上用,CLI 方案对任何模型都有效。
怎么把 MCP 转成 CLI?
作者开源了一个工具叫 CLIHub,一行命令就能把现有的 MCP 服务器转成 CLI。
他还搞了个 CLI 目录站 clihub.sh,收录了常用工具的 CLI 版本。
我的看法
这个思路其实不新鲜。OpenClaw 的 available_skills 格式就是类似的设计——轻量级列表 + 按需加载详情。
但作者把这个思路系统化了,而且给出了具体的数据对比,很有说服力。
对于跑 Agent 工作流的场景,token 成本是实打实的钱。一个任务可能要跑几十轮对话,每轮省 15,000 token,累积下来就是真金白银。
当然,CLI 方案也有代价:每次发现新工具要多一次 --help 调用。但从数据看,这个代价远小于 MCP 的预加载成本。
如果你在做 Agent 相关的项目,而且对成本敏感,这个方案值得试试。
CLIHub 项目:github.com/thellimist/clihub