轻量级MCP Server降低Claude Code上下文token消耗98%实战方案

利用轻量级MCP Server将Claude Code的上下文token消耗降低98%
问题在哪
Claude Code 的上下文开销高得离谱。一个中等长度的代码审查对话,轻松吃掉 2000+ token——其中 90% 是重复的文件路径、函数签名、注释块和之前几轮已确认的结论。小团队没预算为每条请求支付高昂的上下文费用,又不能砍掉上下文,否则模型立刻“失忆”,给出脱离上下文的错误建议。
这不是模型能力问题,是工作流设计问题。
Hacker News 上那个跑通的方案
有人在 HN 发帖:用不到 200 行 Python 搭了个 MCP Server,把 Claude Code 的上下文 token 压到了原来的 2%。不是靠压缩,也不是丢信息,而是让上下文真正“有用”。
背景很实在
团队做 AI 辅助的前端组件生成工具。用户上传一个 React 组件文件,再提几个修改需求(比如“加 loading 状态”“支持 dark mode”)。原始流程是:每次请求都把整个文件 + 所有历史修改指令 + 上一轮生成的代码全塞给 Claude。3 轮交互后,上下文就膨胀到 3500 token,成本翻倍,响应还变慢。
他们试过摘要、滑动窗口、向量检索——效果都不稳定。最后转向 MCP(Model Context Protocol),不是因为它“新”,而是它定义了明确的上下文生命周期:context → action → result → update。
技术怎么落地
MCP 不是跨云协议。它是 Anthropic 提出的、专为 LLM 工作流设计的轻量通信规范,核心就三点:
- 上下文按语义分块(file, diff, requirement, feedback)
- 每块带
id和version,支持增量更新 - Agent 和模型之间只传
id引用,不传原始内容
他们的轻量级 MCP Server 就干三件事:
- 结构化预处理
把用户输入拆成标准 MCP 块:源码存进file://src/Button.tsx@v1,需求转成requirement://add-loading-state,上一轮反馈标记为feedback://v2。 - 上下文裁剪
不传全部块,只传当前任务强依赖的块 ID 列表。比如“加 loading”这步,只引用file://src/Button.tsx@v1和requirement://add-loading-state,跳过前两轮关于 dark mode 的讨论。 - 结果缓存与版本联动
每次 Claude 返回新代码,Server 自动创建file://src/Button.tsx@v2,并把旧块v1标记为deprecated。后续请求自动切换引用。
import mcp
from mcp.server import StdioServer
from claude_code import Client
class ClaudeMCPServer:
def __init__(self):
self.claude = Client()
self.context_db = {} # {id: content}
def handle_context_request(self, req: mcp.ContextRequest):
# 只加载 req.referenced_context_ids 对应的内容
context = []
for cid in req.referenced_context_ids:
if cid in self.context_db:
context.append(mcp.ContextItem(
id=cid,
content=self.context_db[cid]
))
return mcp.ContextResponse(context_items=context)
def handle_action_request(self, req: mcp.ActionRequest):
# 构造精简 prompt:只含 referenced_context_ids 对应的语义块
prompt = self.build_prompt(req)
response = self.claude.chat(prompt)
# 提取新生成的文件块,存入 context_db 并返回 versioned id
new_file_id = self.save_new_file(response)
return mcp.ActionResponse(
result=mcp.Result(
status="success",
output={"new_file_id": new_file_id}
)
)
# 启动:mcp run --server python:main.py部署就是一行命令:
pip install mcp-server claude-code && python server.py不需要 Kubernetes,不连 Redis,单进程跑满 CPU 也能撑住日均 5000 请求。
实测数据
| 场景 | 原始上下文 token | MCP Server 后 | 下降 |
|---|---|---|---|
| 单次代码修复 | 1240 | 38 | 97% |
| 三轮迭代修改 | 3680 | 72 | 98% |
| 多文件关联重构 | 4120 | 95 | 98% |
响应时间平均快 1.8 秒——因为 Claude 不再花 3 秒解析重复的 node_modules 路径和无用的 console.log 示例。
这东西为什么能直接用
- 零训练成本:不碰模型权重,不调超参,纯工作流层改造
- 不改业务逻辑:现有 Agent 只需把
send_to_claude()替成mcp_client.action() - 天然兼容:LangChain、LlamaIndex、AutoGen 都已支持 MCP Action 调用
- 可审计:所有上下文块存本地 JSON 文件,随时查哪次用了哪个版本的文件
怎么自己搭一个
pip install mcp-server- 写
server.py,继承mcp.Server,实现handle_context_request和handle_action_request - 在
handle_action_request里调 Claude,但只拼接req.referenced_context_ids对应的内容 - 把生成结果按语义存成新 context item(比如
file://...@v2) mcp run --server python:server.py
缓存用 dict 就够,要持久化就写 JSON 文件。别一上来就上 Redis——90% 的小团队根本用不到。
MCP 的价值不在协议本身,而在于它逼你把“上下文”从一坨文本,变成可标识、可版本、可裁剪的资源。Claude 不是变便宜了,是你终于不再喂它吃垃圾。