在 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% |
安装与参数:
- 插件模式(推荐,含 hook/slash):
重启 Claude Code。/plugin marketplace add mksglu/claude-context-mode /plugin install context-mode@claude-context-mode - MCP-only:
claude mcp add context-mode -- npx -y context-mode - 开发:
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 前,提示工程减少无效调用:
- 指定 intent:
execute(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)路由,避免全加载。
- 监控清单:
/context:实时查看 MCP 输出占比,阈值 >20% → 优化。/context-mode:stats:会话节省(tokens / 工具),目标 >95%。/context-mode:doctor:诊断 runtime/hook/FTS5。- 告警: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 字)