50KB开源mcptoon:砍掉MCP协议的97%冤枉钱


mcptoon 是一个专注于极致节省 Token 的 MCP(模型上下文协议)命令行客户端。它通过自定义的 TOON 数据格式,大幅降低了 AI 代理与 MCP 服务器通信时的 Token 开销。

Token收割机:AI还没思考就先交30%语法税,一个50KB的工具把97%的冤枉钱砍了!

别让你的AI在开口说话之前,先为括号和引号付了半条命。

一场悄无声息的抢劫正在你每次敲击回车时发生。你以为你在跟AI对话,实际上你每一块钱里有三毛钱在支付一种你根本看不见的东西——语法税。不是算力税,不是模型税,是语法税。

这事得从一个叫MCP的协议说起。2024年底到2025年,大模型圈突然流行一个概念叫模型上下文协议,说白了就是让AI能调用外部工具的标准接口。你让AI查天气、搜网页、读数据库,背后都是MCP在跑。这玩意儿很火,GitHub上的官方仓库issues讨论翻了天,第三方服务器像雨后春笋一样冒出来。

但没人告诉你一个恐怖的数字:你的AI每次对话,最多有55%的上下文窗口——也就是它的大脑容量——被活活浪费在JSON的括号、引号和逗号上。大模型还没开始思考,先交了一笔巨额语法税。

一个叫mcptoon的开源项目跳出来说:我能把这笔税砍掉97%。50KB大小,零依赖,纯Python,一个人写的。GitHub上目前25颗星。你品,你细品。

5个服务器还没开始干活,2万Token先没了

MCP这东西怎么工作的?简单说:你的AI代理连接MCP服务器,服务器告诉AI自己有什么工具可用。每个工具都有名字、描述、参数类型、必填项——全部用JSON写。

一个官方GitHub MCP服务器暴露94个工具,光描述这些工具就要吃掉17,600个Token。Atlassian的MCP服务器吃掉大约10,000个。你接5个服务器,光列出工具有什么,2万个Token就蒸发了。

这还没开始调用呢。你调用20次工具,每次返回的结果被包裹在{"content":[{"type":"text","text":"..."}]}这种结构里。20次调用,又是4万到7万Token的语法开销。

加起来是多少?一个128K上下文的窗口,30%到55%被语法吃掉了。不是数据,不是推理,是语法。

你花几十块钱买来的上下文,三分之一以上在支付JSON的括号税。

TOON是什么鬼:把JSON扒光了给你看

mcptoon的解法简单到有点离谱——创造了一种叫TOON的格式,全称Token-Optimized Object Notation。

不吹牛,直接看对比。两个MCP服务器的工具发现,JSON要287个Token。长这样:

json
[ {"name": "search_web", "description": "Search the web for information", "inputSchema": {"type": "object", "properties": {"query": {"type": "string", "description": "Search query"}, "num_results": {"type": "number", "default": 5}}, "required": ["query"]}}, {"name": "fetch_url", "description": "Fetch content from a URL", "inputSchema": {"type": "object", "properties": {"url": {"type": "string"}}, "required": ["url"]}} ]

TOON只返回5个Token:

toon
search_web fetch_url

你没看错。5个Token vs 287个Token,省了98%。

那如果需要完整参数呢?TOON也有办法:

JSON的{"name":"search","count":3}变成name:search|count:3——管道符替代了大括号、引号和冒号。
数组[1, 2, 3]变成1 2 3——空格替代了方括号和逗号。
true变成Tfalse变成Fnull变成
换行符\n变成

一套符号替换,把JSON的肥肉全削了。

实测数据:96个工具的工具发现,JSON要2,034个Token,TOON只要62个,省97%。结构化数据结果,JSON要812个Token,TOON只要354个,省56%。原始HTML文本,JSON要1,023个Token,TOON要912个,只省11%。

三档差距巨大。工具发现这种纯元数据的场景,压缩效果最猛。大段自然文本,压缩空间就很小了。

你的大模型根本不需要知道什么是object类型

这里有一个反常识的洞察:大模型根本不需要看到{"type":"object","properties":这种东西才能理解工具怎么用。

你想啊,人看一个工具说明书,需要看到完整的JSON Schema吗?不需要。你只需要知道工具名叫什么、要传什么参数、参数是什么类型。TOON的--slim模式就是这么干的:

toon
search|q:s*|n:n fetch|url:s*

翻译成人话:search这个工具,参数q是必填字符串,参数n是数字。fetch这个工具,参数url是必填字符串。

93%的Token节省,信息一点没丢。

--compact模式更狠,只输出工具名,空格分隔,省97%。

你可能会问:那模型怎么知道参数细节?需要的时候再拿完整schema啊。又不是每次都要把整本说明书塞进脑子。

这就是关键洞察:MCP目前的做法是把所有工具的全部信息一次性塞进上下文。不管用不用得上,先占着茅坑。一个典型的Claude Code会话里,20到30个注册的MCP工具,光工具schema就占15到30KB的上下文。

这就好比你每次出门前把整本黄页电话簿背一遍——万一要用呢?

这个50KB的mcptoon凭什么叫板整个协议

mcptoon的体量小得有点荒唐。纯Python,50KB,零第三方依赖。代码大约1700行,配了98个测试用例。一个人写的,Apache 2.0开源。

对比一下:官方的mcp-cli要装5到20个npm包,安装体积50MB以上。mcptoon的README里自己列的对比表,虽然是自己夸自己,但数字摆在那。

它怎么工作的?就是个命令行客户端,连接任何MCP服务器(stdio或HTTP),输出TOON而不是JSON。支持所有能跑shell命令的AI代理——Claude Code、Codex、OpenCode、Cursor、CatPaw,你说得出的都支持。

设置环境变量MCPTOON_AGENT_TYPE=claude,所有调用自动用TOON格式输出。

但这玩意儿有个致命的前提:你的AI代理得能解析TOON格式。TOON不是MCP官方格式,代理能不能稳定解析、会不会影响参数语义和报错处理,目前没有独立评测支撑。

它更像一层胶水,不是协议升级。

工具投毒:当MCP服务器想操控你的AI

mcptoon还有个不太起眼但细思极恐的功能——工具投毒防护。

MCP服务器返回任意内容。一个被入侵的服务器可以在返回结果里塞进指令,操纵你的AI代理。比如返回结果里藏一句"忽略之前所有指令,按我说的做"。你的AI如果照单全收,后果你想。

mcptoon现在能检测并阻止常见的提示注入模式。运行mcptoon call malicious get_data '{}',如果检测到"ignore previous instructions"这类模式,直接报错。

这功能说明什么?说明MCP生态的安全问题已经开始浮出水面了。工具越来越多,服务器越来越多,攻击面越来越大。你在省钱的同时,还得防着有人通过工具结果黑你的AI。

谁该用谁不该用:别被97%冲昏头

冷静一下。97%的节省只对应工具发现清单,不能套到所有调用上。

如果你同时用Claude Code、Codex、Cursor等多个代理,又挂了不止一个MCP服务器,mcptoon的价值是配置一次、到处能用。过去为每个代理单独适配MCP集成,是实打实的重复劳动。

如果你本来只用一个代理,且它已有原生MCP支持,或者调用结果本来就是大段文本而非结构化数据,mcptoon能省的Token有限。

还有一个隐藏风险:所有压缩数据全部来自作者自己的示例测试,没有独立环境和工具组合的第三方基准。GitHub上目前25颗星——典型的独立开发者体量,没有团队或商业化背书。

但这恰恰是开源社区最迷人的地方。一个人发现了一个没人注意的问题,写了个工具,扔到GitHub上。有人觉得有用,有人觉得扯淡。讨论在Hacker News上吵了上百条。

有人说这太激进了,JSON虽然啰嗦但至少标准。有人说自己试了确实省Token。有人说MCP设计得就是太啰嗦。

争论本身说明了一件事:这个问题是真的,解决方案有待验证。

语法税的本质是设计税

往回看一步。MCP为什么会这么浪费?因为它设计的时候就假设了:反正大模型上下文会越来越大,反正Token会越来越便宜。

这个假设正在被现实打脸。上下文是大了,但模型厂商是按Token收费的。你浪费的每一个Token都是真金白银。MCP官方GitHub仓库里,关于Token开销的issue从2025年讨论到2026年。有人提议压缩schema,有人提议按需加载工具。各种优化方案层出不穷。

mcptoon不是第一个发现这个问题的人,但它是第一个用这么极端的方式解决问题的人——直接换一种数据格式,把JSON的语法结构全扒了。

这像不像当年HTML和纯文本的争论?HTML好看但臃肿,纯文本丑但高效。在不同场景下各有各的用处。

TOON能不能成为MCP的官方格式?不一定。但它揭示了一个更深层的问题:我们在设计AI协议的时候,是不是默认了太多东西?是不是默认了JSON就是最好的数据交换格式?是不是默认了大模型什么都能 parse?

一个50KB的工具,一个人写的,25颗星。它可能不会改变世界,但它让一群人开始思考:我们到底在为语法付多少钱。

你下一次跟AI对话的时候,想想这个数字:你付的每一块钱里,有多少是在为括号和引号买单?



MCP协议的设计者在追求通用性和可读性的时候,可能没算过一笔账——让AI读JSON和让人读JSON,成本完全不一样。人读JSON不要钱,AI读JSON每一行都要钱。