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) 共享同一个工具集。

  • 安全拦截: 客户端会拦截匹配危险模式的操作 (例如,deletedroppurge),除非传递了 --destructive 标志。

  • 使用情况追踪: 本地追踪的总调用次数、成功率和预估的令牌 (token) 节省量存储在 ~/.cache/mcptoon/usage.json 中。

  • 模式缓存: 包含一个具有 5 分钟 TTL 的模式 (schema) 缓存,以进一步减少发现开销。

技术社区批评

虽然项目强调令牌 (token) 节省,但 Hacker News 社区的几位开发者对 TOON 表示法的实际效果提出了质疑:

  • 令牌化与字符数: 批评者认为作者可能混淆了字符数与令牌 (token) 数。例如,用户指出,在现代分词器 (tokenizers) 中,true/falsenull 通常是单个令牌,这意味着用 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
  • 项目
  • 项目