跳到主要内容
返回写作

MCP 工具输出太大怎么办?先别截断,正常路径 Token 减少 76%

MCP 工具目录和大结果为什么挤占上下文?本文拆解渐进式发现、一次上游调用和可逆结果交付,并用 24 项任务与 8000 行压力测试说明 76% Token 减少何时成立。

本文索引18
  1. 01MCP 工具输出过大,应该先优化哪一段
  2. 02一次 MCP 调用,Token 花在两个地方
  3. 03模型还没选工具,目录已经进来了
  4. 04模型只要一个答案,结果却整包返回
  5. 05减少 MCP Token 的四条路解决不同问题
  6. 06少连接一些 Server
  7. 07让模型按需发现工具
  8. 08在代码执行环境里过滤结果
  9. 09在结果交付层保留可逆路径
  10. 10压缩之前,调用约束要先成立
  11. 1176% 是怎样算出来的
  12. 12一组反例更能说明适用边界
  13. 13哪些场景值得试
  14. 14常见问题
  15. 15MCP 为什么会占这么多 Token?
  16. 16可以直接截断工具结果吗?
  17. 17减少 76% Token,账单也会少 76% 吗?
  18. 18什么时候应该保留直接 MCP?

Agent 只是想从一段日志里找一个错误码。

它先收到了十几个工具的名称、描述和参数 schema。工具调用结束,又迎面撞上一整份日志。那个错误码也许只占十几个字符,为了找到它,模型却要先读完几万行上下文。

MCP 用久以后,这笔开销很难忽略。工具还没开始工作,目录先占一遍;工具已经做完,结果又占一遍。

直接截断最省事,可模型发现后半段不够用,往往会再问一次。上游只是搜索或读文件,代价可能只是变慢;上游会发邮件、创建工单、写数据库,第二次调用就可能变成第二次现实动作。

处理 MCP Token 时,需要同时守住三件事。

  • 工具只在需要时交付完整 schema。
  • 一次请求最多执行一次上游工具。
  • 首次结果可以缩短,原始结果仍能精确取回。

MCP Slim Guard 把工具发现、上游执行和结果交付拆开处理,紧凑结果来自原始结果的可恢复视图,不依赖模型猜测一段摘要。

MCP 工具输出过大,应该先优化哪一段

可以先按任务习惯判断。

  1. 工具很多,每次只用一两个,先做渐进式发现,避免整张 schema 目录提前进入上下文。
  2. 结果很大,任务通常只看局部,先保存原始结果,再交付紧凑视图,需要时局部恢复。
  3. 任务必须读完全部数据,直接交付往往更省,没有必要额外分页。
  4. 工具会产生副作用,恢复原文不能依赖再次执行上游工具。

收益取决于这次任务最终要读多少原始信息。压缩比例只是结果。

一次 MCP 调用,Token 花在两个地方

MCP 的调用流程很直接。

Host 先通过 tools/list 取得工具定义。模型根据名称、描述和 input schema 选择工具,再通过 tools/call 执行。MCP 官方 Tools 规范允许工具返回文本或结构化内容,也允许 Server 提供 output schema,帮助客户端验证结果。

工具数量增加以后,两笔开销会变得明显。

模型还没选工具,目录已经进来了

三个工具时,把 schema 全放进上下文很方便。三十个、三百个工具时,这张目录会变成每轮对话的固定成本。

在 Slim Guard 的 24 任务公开夹具里,一个任务只需要搜索产品目录并返回三条结果。Baseline 仍然先交付 12 个工具定义。那次 tools/list 响应有 5,909 个字符,使用 o200k_base 计算为 1,380 个 Token。

最后只调用了一个工具,另外 11 份 schema 也一起进入上下文。

模型只要一个答案,结果却整包返回

工具选对以后,日志、搜索结果、长文档和大型 JSON 可能一次返回几万行。模型也许只需要状态为 failed 的三条记录,完整结果已经成为会话历史的一部分。

两笔开销都来自“以后可能会用,现在先全部给模型”的默认方式。调整交付时机后,当前需要的内容先出现,其余内容等任务真的需要时再取。

减少 MCP Token 的四条路解决不同问题

不同方法处理的是不同层,适合叠加使用。

少连接一些 Server

一场会话只需要文件和 Git 时,可以先关掉不相关的系统。这是最便宜、最容易回滚的优化。

它也依赖人工预判。通用 Agent、企业工作台和长期会话很难提前知道下一步会用哪个工具。

让模型按需发现工具

Anthropic 在 Code execution with MCP 中给出过两类办法。可以把工具映射成可探索的代码文件,也可以提供 search_tools 一类入口,让模型只加载当前需要的定义。

Slim Guard 的 Compact 和 Extreme 模式采用渐进发现。Host 最初只看到 find_toolcall_toolread_result。Agent 搜索工具时,最多拿到三个匹配项,以及匹配工具的完整原始 schema。

schema 仍然完整,只在任务需要时出现。

在代码执行环境里过滤结果

Agent 有安全的代码沙箱时,可以让大结果先留在执行环境中,只把筛选、聚合后的内容交给模型。处理一万行表格时,这通常比让模型逐行阅读更自然。

团队也要承担沙箱、资源限制、权限隔离和监控。模型上下文缩小了,Harness 的运行复杂度会增加。

在结果交付层保留可逆路径

有些 Host 仍要走普通 MCP 调用,团队也不准备先搭代码执行环境,而大多数任务只读取结果中的局部信息。

Slim Guard 会在有损的首次交付之前保存不可变快照,再返回紧凑视图和 result_ref。需要更多细节时,Agent 使用 read_result 搜索或分页读取本地快照,上游工具不会再次执行。

少接无关 Server 处理配置膨胀,渐进发现缩小工具目录,代码侧过滤适合复杂数据处理,可逆交付则负责先少给、以后仍能精确找回。

压缩之前,调用约束要先成立

只负责缩短结果的代理,很难放心接入写操作。Slim Guard 先给调用过程加了几条限制。

一次 call_tool 只能解析到已经授权的工具。参数先按原始 schema 验证,通过后原样转发,选中的上游工具至多执行一次。参数不合法时,请求在本地失败,上游收不到这次调用。

授权、策略或工具解析失败时,调用路径关闭。系统不能确认工具是否允许执行,就不碰上游。

如果上游已经成功返回,后续的结果投影、快照存储、观测或审计出错,交付层会返回精确的上游结果。优化模块可以退出,合法结果仍会交给 Host。

审计记录不复制凭据、调用参数、结果正文或私有能力引用。它只记录调用经过哪些步骤,避免再生成一份敏感内容副本。

这套约束只覆盖工具访问和结果交付。网络隔离、密钥管理、人工审批、上游权限和代码沙箱仍要由其他层负责。

76% 是怎样算出来的

公开的 2026-08-06 三模式 24 任务证据包含 12 个确定性工具和 24 个中英文任务。

统计使用 o200k_base,计算 prompt,以及所有面向模型的 MCP tools/listtools/call 请求和响应。24 个任务全部走成功路径,每项任务只执行一次上游工具。

模式正常路径 Token相对 Baseline 减少
Baseline71,3880
Native39,52144.64%
Compact16,98376.21%
Extreme16,47876.92%

Native 保留 Host 已授权工具的原始名称,主要收紧结果交付,因此目录成本仍然存在。Compact 把工具发现收敛到三个入口。Extreme 会给符合条件的大结果提供更短的首次交付。

标题里的 76% 来自 Compact 相对 Baseline 的正常路径差值。

这是一组确定性的成功路径协议重放,没有让模型自己选择工具。它也没有测试回答准确率,没有计入缓存命中、供应商价格和会话里的其他提示内容。76% 描述的是这组 fixture 的模型可见协议 Token,不能直接换算成账单折扣。

一组反例更能说明适用边界

100 工具、8000 行结果的压力夹具故意放大了目录和输出。直接路径使用 352,157 个 Token。正常路径下,Compact 只用 1,451,Extreme 只用 1,134,减少接近 99.7%。

随后,测试强制 Agent 把 8000 行全部读完。

Compact 需要 50 次 read_result,协议总量升到 687,741 个 Token;Extreme 为 687,424。恢复结果的哈希与原始结果完全一致,上游仍只执行一次,总 Token 却接近直接交付的两倍。

可逆恢复也有成本。任务没有阅读的内容才构成净节省;任务最终必须逐字消费全部原文时,直接交付通常更便宜。

在日志里找错误码、从搜索结果中找三条证据、在大型 JSON 中查一个对象,都适合按需交付。全量迁移、完整审计和逐行转换更适合在代码执行环境里处理,或者直接交给确定性程序。

哪些场景值得试

以下情况比较适合 Slim Guard。

  • Host 连接的工具越来越多,每次任务通常只用一两个。
  • 工具经常返回日志、长文档、搜索集合或大型 JSON。
  • 大多数任务只读取结果的一小部分。
  • 上游工具带有副作用,读取原文不能导致工具重跑。
  • 团队希望保留授权、原始 schema 验证和审计边界。

工具只有三五个、结果很短,直接 MCP 已经够用。每项任务都要读取完整结果时,分页恢复会增加成本。已有成熟代码执行层的团队,也可以先在沙箱里筛选和聚合数据。当前方案的恢复引用属于当前运行时代,跨运行时持久恢复需要另行设计。

常见问题

MCP 为什么会占这么多 Token?

主要有两部分。模型调用前要读取工具定义,调用后又会接收工具结果。工具越多、schema 越长、结果越大,这两部分越明显。

可以直接截断工具结果吗?

确定后半段永远不需要时可以。任务边界不清楚时,更稳妥的做法是先保存原始结果,再交付紧凑视图;需要细节时读取快照,上游工具不必重跑。

减少 76% Token,账单也会少 76% 吗?

不能直接换算。公开基准统计特定 fixture 中的模型可见协议 Token,不包含模型供应商的缓存、计价、系统提示和其他会话历史。

什么时候应该保留直接 MCP?

工具少、结果短,或者任务必须完整处理全部输出时。多加一层只会增加系统复杂度。

如果你的会话已经被工具目录或大结果拖慢,可以先看 Slim Guard 中文产品页了解交付方式,再到 GitHub 检查源码、三模式基准和恢复证据。旧 Alpha 的发布背景与 Host 路径保留在 MCP Slim Guard 发布记录中。