context-mode:把 MCP 工具输出挡在上下文窗口之外,315 KB 变 5.4 KB,并用 SQLite 记住压缩前的会话

Published · AI Daily — AI-assisted deep research, methodology & disclosure

mksglu/context-mode 是一个 MCP 服务器,针对编码智能体的上下文窗口被工具输出塞满的问题:沙箱工具让原始数据不进入上下文,README 的示例是 315 KB 变成 5.4 KB(减少 98%);会话事件写入 SQLite,并在对话压缩后用 FTS5 和 BM25 只取回相关部分。它支持 17 个客户端,包含 11 个 MCP 工具。仓库约 2.7 万星标;README 标注的许可是 ELv2,GitHub 的许可检测则显示“NOASSERTION”。

编码智能体最容易被忽视的成本,是上下文窗口。mksglu/context-mode 的 README 开篇就把这件事说得很直白:每次 MCP 工具调用都会把原始数据倒进上下文窗口。一次 Playwright 快照要 56 KB,20 个 GitHub issue 要 59 KB,一份访问日志要 45 KB,半小时之后,40% 的上下文就没有了。等智能体为了腾出空间压缩对话,它还会忘记自己正在编辑哪些文件、有哪些任务在进行、用户上一句要什么。context-mode 是一个 MCP 服务器,目标就是同时处理这几个问题。截至 2026 年 10 月 13 日,仓库约有 27,340 个星标、1,948 个派生,用 TypeScript 编写,最近一次推送在 10 月 12 日。 它的方案分四块。第一是“节省上下文”:沙箱工具让原始数据留在沙箱里,不进入上下文窗口,README 给出的例子是 315 KB 变成 5.4 KB,减少 98%。第二是“会话连续性”:每一次文件编辑、git 操作、任务、错误和用户决定都会记录在 SQLite 里;对话被压缩时,它不会把这些记录整块塞回上下文,而是把事件索引进 FTS5,再用 BM25 搜索只取回相关内容,模型因此能接着上次的位置继续。README 特别写明,如果不使用 --continue,之前的会话数据会被立即删除,每次新会话都是干净的。第三是“用代码思考”:让大模型去编写分析程序,而不是自己当数据处理器。比如要统计 50 个文件里的函数数量,不要把 50 个文件读进上下文,而是写一小段脚本,只把结果打印出来;README 的对比是读 47 次文件约 700 KB,对比一次 ctx_execute 只有 3.6 KB。第四是不强制回答文风:它只把原始数据挡在上下文外,不规定模型怎样写最终答案,并引用 Moonshot AI 在 kimi-k2.5 上的 issue 指出,过度强调简短的提示词会损害编码和推理基准的成绩。

从工具层面看,它提供 11 个 MCP 工具:6 个沙箱工具(ctx_batch_execute、ctx_execute、ctx_execute_file、ctx_index、ctx_search、ctx_fetch_and_index)和 5 个元工具(ctx_stats、ctx_doctor、ctx_upgrade、ctx_purge、ctx_insight)。在 Claude Code 里它以插件形式安装,注册 PreToolUse、PostToolUse、UserPromptSubmit、PreCompact、SessionStart 和 Stop 这几类钩子,路由是自动的,SessionStart 钩子会在运行时注入路由指令,不会往你的项目里写文件。安装只需要 /plugin marketplace add mksglu/context-mode 和 /plugin install context-mode@context-mode 两条命令,然后重启 Claude Code。想先试一试的人,也可以只加 MCP:claude mcp add context-mode -- npx -y context-mode,不过那样没有钩子,也就没有自动路由,模型不一定会优先用它。斜杠命令包括 ctx-stats 看节省了多少,ctx-doctor 做诊断,ctx-index 和 ctx-search 管理本地知识库,ctx-purge 永久删除索引内容。

它覆盖的平台之多是另一个特点。README 说支持 17 个客户端,并按安装复杂度分组:有钩子能力的平台会自动强制路由,没有钩子的平台需要一次性复制一份路由说明文件。除了 Claude Code,文档还写到了 Gemini CLI、VS Code Copilot、JetBrains Copilot、Copilot CLI、OpenCode、KiloCode 等,大多数要求 Node.js 22.5 以上或 Bun。其中 OpenCode 和 KiloCode 缺少真正的 SessionStart 钩子,项目用一个实验性的系统提示变换钩子来代替,并用 chat.message 钩子替代缺失的 UserPromptSubmit。另有 ctx_insight 会打开托管的 Insight 仪表盘,面向 AI 辅助工程团队做组织层面的分析,这是与本地工具并列的一个托管服务入口。

许可是一个需要单独提醒的细节。README 的徽章写的是 ELv2,也就是 Elastic License 2.0,而 GitHub 的许可检测结果是 NOASSERTION,说明它没有被识别为某个标准的 SPDX 许可。ELv2 属于源码可见的许可,与 MIT、Apache-2.0 这类开源许可不同,它对把软件作为托管服务提供等用法设有限制。因此如果你打算在公司产品或对外服务里使用它,请先自己读仓库里的 LICENSE 文件。 使用中怎么看效果,README 也给了入口。除了 ctx-stats 的分工具统计之外,Claude Code 还可以手动在 settings.json 里配置一个可选的状态栏:因为插件清单没有办法声明状态栏,所以需要手动编辑一次,配置完成并重启后,状态栏会显示“本次会话节省的金额、跨会话累计节省的金额,以及效率百分比”,让节省量随使用实时累积。ctx-doctor 则会检查运行时、钩子、FTS5 和插件注册是否都正常,所有检查项应显示为通过。对想评估的团队,这两个入口比单看 README 的示例数字更有说服力。

我们的判断是,这个项目抓住了一个真实而昂贵的痛点,方案也有清晰的工程逻辑:不让原始数据进上下文、让会话事件可检索、让模型多写脚本少读数据。但需要保持克制。第一,98% 和 315 KB 变 5.4 KB 是 README 的示例数字,实际节省取决于你的工具输出和工作习惯,可以先用 ctx_stats 在自己的任务上量一量。第二,它依赖钩子来强制路由,在没有钩子的平台上效果要靠模型自觉。第三,会话数据会存进本地 SQLite,涉及敏感代码或日志时,要弄清楚存放位置、保留策略和 ctx_purge 的行为。建议先在一个中等规模的真实任务上对比开启前后的上下文消耗和完成质量,再决定是否推广到团队。

Sources

FAQ

context-mode 解决的是什么问题?

README 把问题分成四面:工具输出把原始数据倒进上下文(一次 Playwright 快照 56 KB,20 个 GitHub issue 59 KB,一份访问日志 45 KB,半小时后 40% 的上下文就没了);对话压缩后智能体会忘记正在编辑的文件和任务;让模型自己计算而不是写脚本;以及不应强制规定回答文风。它对四面分别给出方案。

它如何在对话压缩后保持连续?

每一次文件编辑、git 操作、任务、错误和用户决定都会记录在 SQLite 里。对话压缩时,它不会把这些数据整块塞回上下文,而是索引进 FTS5,再用 BM25 搜索只取回相关内容。README 说明,如果不使用 --continue,之前的会话数据会被立即删除。

安装与许可有什么要注意?

在 Claude Code 中用 /plugin marketplace add mksglu/context-mode 与 /plugin install context-mode@context-mode 安装,也可以只加 MCP:claude mcp add context-mode -- npx -y context-mode。多数平台要求 Node.js 22.5 以上。README 徽章标明许可为 ELv2,GitHub 检测结果是 NOASSERTION,用于商业场景前请先阅读 LICENSE 文件。