輕量級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 不是變便宜了,是你終于不再喂它吃垃圾。