Hotdry.
ai-systems

Claude Code 中 MCP 输出减少 98%:上下文窗口优化的工程实践

通过 Context Mode MCP 服务器、提示优化和 token 高效工作流,在 Claude Code 长代理编码会话中将 MCP 输出压缩 98%,提供安装参数、阈值监控与回滚清单。

在 Claude Code 的代理编码场景中,上下文窗口(200K tokens)是核心瓶颈。MCP(Modular Compute Protocol)工具调用频繁产生海量 raw 输出,如 Playwright 截图 56KB、GitHub issues 59KB 或日志文件 45KB,仅 30 分钟即可消耗 40% 上下文,导致 “上下文腐烂”(context rot),模型性能急剧下降。

本文聚焦单一技术点:通过上下文截断、提示优化和 token 高效工作流,将 MCP 输出减少 98%,将会话时长从 30 分钟延长至 3 小时。基于 Mert Köseoğlu 的 Context Mode 项目,提供可落地参数与监控清单。

MCP 输出爆炸的核心机制

Claude Code 通过 MCP 服务器调用外部工具(如 WebFetch、gh CLI),但默认将完整 stdout 注入上下文。典型场景:

  • 测试调试:Playwright snapshot + 测试日志 → 60+ KB / 调用。
  • 代码审查:git log + issues → 70 KB / 调用。
  • 文档检索:fetch URL → 完整 HTML/markdown。

累计 10-20 调用后,上下文剩余 <60%,触发 auto-compact,丢失细粒度细节。量化阈值:每 KB raw 输出 ≈ 250 tokens,98% 减少即节省 245 tokens/KB。

“Every MCP tool call in Claude Code dumps raw data into your 200K context window.”(引自 Context Mode 博客)。

方案一:Context Mode MCP 服务器(核心截断层)

Context Mode 是一个中介 MCP 服务器,拦截高体积工具调用,在 sandbox 中执行,仅返回总结或搜索片段。核心技术:

  • Sandbox 执行:spawn 隔离子进程,支持 10 种运行时(JS/TS/Python/Shell/Ruby/Go/Rust/PHP/Perl/R),Bun 加速 JS 3-5x。凭证透传支持 gh/aws/kubectl 等 CLI。
  • 知识库:SQLite FTS5 + BM25 排名 + Porter stemming。index 工具分块 markdown(保留代码块),search 返回相关 snippet(非摘要)。
  • 模糊搜索:三层 fallback(stemming → trigram → Levenshtein),智能 snippet 围绕查询词提取。

基准数据(11 场景):

场景 Raw (KB) 输出 (KB) 节省
Playwright snapshot 56 0.3 99%
GitHub issues (20) 59 1.1 98%
Access log (500) 45 0.2 100%
Repo research 986 62 94%
全 сессия 315 5.4 98%

安装与参数

  1. 插件模式(推荐,含 hook/slash):
    /plugin marketplace add mksglu/claude-context-mode
    /plugin install context-mode@claude-context-mode
    
    重启 Claude Code。
  2. MCP-only:
    claude mcp add context-mode -- npx -y context-mode
    
  3. 开发:git clone https://github.com/mksglu/claude-context-mode && npm install

关键参数

  • 输出阈值:>5KB 自动 intent-driven 过滤(index → search)。
  • 搜索限流:1-3 调用全结果,4-8 减半,9+ 强制 batch_execute。
  • Hook:PreToolUse 自动路由 WebFetch/curl → fetch_and_index + search。

方案二:提示优化(上游精简)

在 Context Mode 前,提示工程减少无效调用:

  • 指定 intentexecute(intent: "find TypeScript errors in log", code: "cat error.log") → 仅返回匹配片段。
  • 批量化:用 batch_execute(scripts: [...])search(queries: ["q1", "q2"]),单调用多任务。
  • 子代理路由:Hook 注入指令,Bash 子代理升级为 general-purpose,优先 batch_execute。
  • 示例提示:
    分析 repo:fetch_and_index("https://github.com/...") → search(["architecture", "issues", "contributors"]) → summarize。
    然后 /context-mode:stats 查看节省。
    

阈值:单调用输出 >1KB → 强制 intent;会话前 5 调用监控 /context

方案三:Token 高效工作流(系统级)

  • On-demand loading:Claude Code 新特性,仅加载活跃 MCP schema,闲置 overhead 从 25% →14%。
  • Compaction 策略:定期 /compact,或用 Recall MCP hook(pre-compact 保存状态)。
  • Router MCP:最小 schema(500 tokens)路由,避免全加载。
  • 监控清单
    1. /context:实时查看 MCP 输出占比,阈值 >20% → 优化。
    2. /context-mode:stats:会话节省(tokens / 工具),目标 >95%。
    3. /context-mode:doctor:诊断 runtime/hook/FTS5。
    4. 告警:tokens >150K → 手动 compact 或新 сессия。

回滚策略

  • 信息丢失风险:省略 intent 获取 raw(head 60%/tail 40%)。
  • 兼容:并存其他 MCP(如 Context7),hook 只拦截大输出。
  • 失败:fallback 到原工具,监控 stats 对比。

实践案例:长代理编码 сессия

模拟 45 分钟调试:

  • 无优化:20 调用,315KB → 60% 上下文剩,性能降 40%。
  • 有优化:5.4KB → 99% 剩,3h 无降级。

参数调优:BM25 k1=1.2(默认),b=0.75(文档长规范化);search limit=2/query。

此方案不复述新闻,而是工程化落地:最小改动(单插件),高 ROI(6x 时长)。适用于 RAG / 代理系统。

资料来源

  • Context Mode 博客与 GitHub(mksg.lu/blog/context-mode, github.com/mksglu/claude-context-mode)。
  • HN 讨论(news.ycombinator.com/item?id=47148025)。

(正文字数:约 1250 字)

查看归档