mcptoon: 令牌效率型 MCP CLI 客户端
使用 mcptoon 减少 MCP 令牌开销
mcptoon 是一个跨平台 CLI 客户端,旨在最大限度地减少与模型上下文协议 (MCP) 相关的令牌 (token) 成本。通过将标准的 JSON 响应替换为一种名为 TOON (Token-Optimized Object Notation) 的专有紧凑表示法,mcptoon 声称可将工具发现成本降低高达 97%,并将工具结果开销降低 40-60%。
问题所在:JSON 语法膨胀
标准的 MCP 支持对话通常在结构化语法而非实际数据上消耗大量令牌。根据项目文档,连接五个 MCP 服务器以列出工具可能需要消耗大约 10,000 个 JSON 令牌。当智能体 (agents) 调用多个工具时,结果会被封装在冗长的 JSON 结构中 (例如,{"content":[{"type":"text","text":"..."}]} ),在 AI 开始处理实际信息之前,这可能会消耗 128K 上下文窗口的 30-55%。
解决方案:TOON (Token-Optimized Object Notation)
mcptoon 通过 stdio 或 HTTP 连接到 MCP 服务器,并将 JSON 输出转换为 TOON。这种表示法使用特定的替换来减少字符和令牌数量:
| JSON | TOON | 逻辑 |
|---|---|---|
{"name":"search","count":3} |
`name:search | count:3` |
[1, 2, 3] |
1 2 3 |
空格替换了方括号和逗号 |
true / false |
T / F |
单字符替换 |
null |
∅ |
单个符号替换 |
"line1\nline2" |
line1↲line2 |
特殊符号替换了转义序列 |
{"a":{"b":[1,2]}} |
a:b:1_2 |
递归压缩 |
性能比较
| 操作 | JSON 令牌 | mcptoon 令牌 | 节省量 |
|---|---|---|---|
| 工具发现 (96 个工具) | ~2,000 | ~60 | 97% |
| 工具结果 (结构化数据) | ~800 | ~350 | 56% |
| 工具结果 (原始 HTML/文本) | ~1,000 | ~900 | 10% |
集成与兼容性
mcptoon 是一个零第三方依赖的 CLI 工具,使用纯 Python (3.10+) 编写。它与任何能够执行 shell 命令的 AI 智能体 (agents) 兼容,包括 Claude Code、Cursor、Codex 和 OpenCode。
部署示例
- Claude Code: 用户可以在
SKILL.md文件中编写mcptoon命令,并设置MCPTOON_AGENT_TYPE=claude以自动选择--toon输出格式。 - Cursor: 该工具可以添加到
.cursorrules中。 - Codex (OpenAI): 指令可以添加到
AGENTS.md或系统提示词中,以使用mcptoon manifest --toon进行工具列表展示。
关键特性与安全性
统一配置: MCP 服务器在
~/.mcptoon/config.json中统一配置,允许多个智能体 (agents) 共享同一个工具集。安全拦截: 客户端会拦截匹配危险模式的操作 (例如,
delete、drop、purge),除非传递了--destructive标志。使用情况追踪: 本地追踪的总调用次数、成功率和预估的令牌 (token) 节省量存储在
~/.cache/mcptoon/usage.json中。模式缓存: 包含一个具有 5 分钟 TTL 的模式 (schema) 缓存,以进一步减少发现开销。
技术社区批评
虽然项目强调令牌 (token) 节省,但 Hacker News 社区的几位开发者对 TOON 表示法的实际效果提出了质疑:
令牌化与字符数: 批评者认为作者可能混淆了字符数与令牌 (token) 数。例如,用户指出,在现代分词器 (tokenizers) 中,
true/false和null通常是单个令牌,这意味着用T/F或∅替换它们并不会带来任何好处,甚至可能因为使用非 ASCII Unicode 符号而增加令牌数。信息损失: 一些用户指出,
--compact模式(仅返回工具名称)会移除关键的描述和输入模式 (schemas),这可能导致 LLM 幻觉或错误的工具调用。
替代方案
- 替代方案: 一些开发者建议,返回工具名称及其参数 (例如,
search_web(query)) 比仅列出名称更有效,防止参数幻觉。
"I think that some of these choices... show that the author has not investigated how tokenization works. Tokenization is not some black box, you can run tokenizers and check them."
快速入门指南
# Install
pip install mcptoon
# Initialize and add a server
mcptoon init
# mcptoon add fetch --stdio npx -y @modelcontextprotocol/server-fetch
# List tools in TOON format
mcptoon manifest --toon
# Call a tool
mcptoon call fetch fetch '{"url":"https://example.com"}' --toon
Sources
相关
- 项目
- 项目
- Dispatch
- 项目
- 项目