Agent工坊

【Agent工坊】MCP上下文减负实战:从吃掉10%窗口到近乎零开销

你接了Linear、Notion、Slack、Postgres四个MCP Server后,Claude Code的上下文窗口被工具定义吃掉了10.5%。这不是你的问题,是MCP协议的设计问题。本文给出3种解决方案,附可复制配置。

问题:你的MCP工具在偷吃上下文

2026年5月,Quandri工程团队发了一篇博客《MCP is dead?》,在HN上引发151分146评论的大讨论。他们做了一个简单但惊人的实验:

接4个常见MCP Server后,工具定义占了多少上下文?

MCP Server 工具数 Schema字符数 Token估算
Linear 42个 51,229 chars ~12,807
Notion 14个 16,156 chars ~4,039
Slack 12个 15,168 chars ~3,792
Postgres 9个 1,755 chars ~439
合计 77个 84,308 chars ~21,077

Claude的200K上下文窗口,21K token看起来不多。但实际场景中:

  • 你的代码文件已经占了100K+
  • 对话历史占30K+
  • 项目规则和CLAUDE.md占10K+
  • 再加21K工具定义 = 窗口告急

更要命的是,每次对话开始都会把全部工具定义塞进system prompt,不管这次对话用不用得到Slack或Linear。这就是MCP最被诟病的问题:工具定义不按需加载

HN社区的三种声音

这场讨论里,社区形成了三派:

"MCP该死了"派:

"Skills + 小脚本 > MCP。MCP调用消耗更多token,出错概率更高,调试还麻烦。"

"MCP已经修好了"派:

"Claude Code的progressive discovery + tool nudging早就解决这个问题了。我的体验是MCP比自定义工具更好用。"

"看场景"派(最多人):

"MCP在组织级别有用——统一、安全、允许非技术人员使用内部Agent工具。但个人开发场景下,CLI往往更高效。"

三种声音都有道理。但作为AI创业者,你最关心的是:怎么让我的Agent在工具繁多的情况下还能高效工作?

下面给出3种实操方案,从简单到深入。

方案1:Claude Code Tool Search + Deferred Loading(推荐)

Claude Code在2026年初引入了Tool Search with Deferred Loading机制。核心逻辑:

传统MCP加载:
启动 → 加载全部77个工具schema → 填满system prompt → 开始对话

Deferred Loading:
启动 → 加载工具名称列表(少量) → 开始对话 
     → Agent需要用某个工具时 → 才加载该工具的完整schema

实测效果:上下文占用从21K token降至约3K token(仅工具名列表),降低85%+

配置步骤

第一步:确认Claude Code版本

claude --version
# 需要 ≥ 2.0.0(2026年3月后的版本都支持)

第二步:启用Tool Search

在项目根目录创建或编辑 .claude/settings.json

{
  "mcp": {
    "toolSearch": {
      "enabled": true,
      "mode": "deferred"
    }
  }
}

第三步:配置MCP Server

.claude/mcp.json 示例(关键:每个server加 toolSearch: true):

{
  "mcpServers": {
    "linear": {
      "command": "npx",
      "args": ["-y", "@linear/mcp-server"],
      "env": {
        "LINEAR_API_KEY": "${LINEAR_API_KEY}"
      },
      "toolSearch": true
    },
    "postgres": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-server-postgres", "postgresql://localhost/mydb"],
      "toolSearch": true
    }
  }
}

第四步:验证

启动Claude Code后,运行:

/mcp

你会看到工具列表,但注意观察首次启动速度——应该比之前快很多(因为没加载完整schema)。当你第一次调用Linear的 linear_search_issues 时,Claude Code会实时加载该工具的完整定义。后续调用同一工具不再重复加载。

进阶:手动Tool Nudging

有时你想让Claude主动搜索某个工具,可以在对话中使用 /tools 命令:

/tools search "create issue"

Claude会返回匹配的工具列表,你可以选择需要的工具,它会自动加载schema。

方案2:裁剪MCP Server(适合工具数>30的场景)

不是所有MCP Server的所有工具你都需要。比如Linear MCP Server提供42个工具,但你可能只需要5个。

做法:用自定义MCP Wrapper过滤工具

创建一个过滤脚本 ~/.mcp/filter-linear.py

#!/usr/bin/env python3
"""MCP工具过滤器:只暴露Linear核心工具"""
import json
import sys

# 只保留这些工具
KEEP_TOOLS = [
    "linear_search_issues",
    "linear_get_issue",
    "linear_create_issue",
    "linear_update_issue",
    "linear_add_comment"
]

def filter_tools(input_json):
    data = json.loads(input_json)
    if "tools" in data:
        data["tools"] = [t for t in data["tools"] if t.get("name") in KEEP_TOOLS]
    return json.dumps(data)

if __name__ == "__main__":
    for line in sys.stdin:
        print(filter_tools(line.strip()), flush=True)

然后在 mcp.json 里用wrapper:

{
  "linear": {
    "command": "python3",
    "args": ["~/.mcp/filter-linear.py"],
    "transport": "stdio",
    "toolSearch": true
  }
}

效果: Linear从42个工具→5个工具,schema从51K chars→~6K chars,单Server减少88%。

方案3:用CLI替代MCP(适合固定工作流)

很多场景下,直接用命令行工具比MCP更高效。原因是:

维度 MCP CLI
上下文占用 每个工具有schema定义 零工具定义开销
调用延迟 MCP Server进程通信 直接shell执行
调试难度 需要看MCP日志 标准stdout/stderr
灵活性 受限于工具定义 可以pipe/chain任意命令
安全性 MCP Server隔离 需要自行控制权限

实例:用CLI替代Notion MCP Server

# 不用MCP,用Notion CLI(如果有的话)
# 或者直接用API curl
# 在Claude Code中:
# 告诉Claude: "用bash执行以下命令查询Notion"

curl -s -X POST "https://api.notion.com/v1/databases/{DB_ID}/query" \
  -H "Authorization: Bearer $NOTION_TOKEN" \
  -H "Notion-Version: 2022-06-28" \
  -H "Content-Type: application/json" \
  -d '{"filter":{"property":"Status","select":{"equals":"In Progress"}}}'

.claude/settings.json 中允许bash执行Notion相关命令:

{
  "permissions": {
    "allowBash": {
      "patterns": ["curl *notion*", "notion-cli *"]
    }
  }
}

效果: Notion从16K chars工具定义→0 chars,且调用速度更快(少了MCP进程中转)。

决策框架:什么时候用哪种方案

你的MCP Server数量
  ├─ 1-3  直接全量加载,不需要优化
  ├─ 4-10  方案1Tool Search + Deferred Loading
             5分钟配置,85%+上下文节省)
  └─ 11+  方案1 + 方案2组合
              Deferred Loading + 过滤不需要的工具)

你的使用频率?
  ├─ 每天多次调用  MCP值得保留tool search模式
  ├─ 每周几次  考虑方案3,用CLI替代低频工具
  └─ 几乎不用  直接移除该MCP Server

可复制的优化清单

把下面这个checklist放到你的CLAUDE.md或项目文档里:

## MCP工具优化清单
- [ ] 列出所有MCP Server及其工具数(`/mcp` 查看)
- [ ] 标记每个Server的使用频率(高/中/低/从不)
- [ ] 对「低/从不」的Server:直接移除
- [ ] 对剩余的Server:启用 toolSearch deferred mode
- [ ] 对工具数>30的Server:用filter只保留核心工具
- [ ] 对每周只用1-2次的工具:改用CLI调用
- [ ] 每月复查一次:有没有新增的冗余工具?

总结

MCP不会被"杀死",但它确实需要聪明地使用。核心原则是:

  1. 工具定义是昂贵的:每多一个MCP Server,你就在损失上下文空间
  2. 按需加载是默认选项:Claude Code的Deferred Loading应该默认开启
  3. CLI永远是最轻量的工具调用方式:固定工作流优先考虑CLI
  4. 定期审查工具清单:就像定期清理node_modules,MCP Server也需要清理

你的Agent聪明不聪明,不只看模型能力,也看你能不能给它一个干净、高效的"工具工作台"。


AI创业 #Agent工坊 #MCP优化 #ClaudeCode #一人公司