MCP 描述太长被砍:用环境变量抬上限
MCP 服务器一多,工具说明和 server instructions 很容易写成长文。CLI 会按长度截断,模型看见的就变成「半截说明书」——该选哪个工具、参数叫什么,变得含糊。2.1.280 增加环境变量 CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH,用来改会话里每个 MCP 服务器对工具描述与 server instructions 的字符上限;默认仍是 2048。
这是「上下文预算旋钮」,不是再开一条 MCP 通道。权限、作用域、审批规则照旧,见 MCP 作用域。
默认 2048 卡的是什么
被限制的是进入提示侧的描述文本长度,大致包括:
- 各工具的 description
- MCP server instructions(服务器级说明)
超过上限的部分会被裁掉或压缩展示(具体截断表现随版本微调,但结果一样:模型拿不全长说明)。症状常见是:
- 工具很多时,模型老挑错工具或漏必填参数
- 你明明在 MCP 配置里写了长 SOP,会话里却像没读过后半段
/mcp里服务器正常,对话表现却像「半残文档」
若只是连接慢、首轮卡住,那是另一根轴:用 MCP 启动等待 的 CLAUDE_CODE_MCP_STARTUP_WAIT_MS,别和描述长度混为一谈。
怎么设
在启动 Claude Code 的环境里导出,例如:
export CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH=8192含义:本会话对每一个已连接 MCP 服务器,把工具描述 / server instructions 的长度天花板从 2048 调到你设的值(单位是字符上限,以当前版 changelog 为准)。
建议:
| 场景 | 做法 |
|---|---|
| 官方短描述工具 | 维持默认 2048,少占上下文 |
| 内网 MCP 带长 SOP / 多工具目录 | 适度抬高(如 4k–8k),先在小会话验证 |
| 描述本身注水、重复 | 先精简 MCP 侧文案,再考虑抬上限 |
CI / -p | 抬上限会增加每轮提示体积;和 token、延迟一起评估 |
改完重启会话(或新开终端)再 /mcp 确认服务器仍健康,然后用一条会点到「长说明里才有的细节」的任务做冒烟。
该抬上限,还是该改 MCP 文案
优先顺序:
- 工具名清晰、description 短而可分:比堆小说更有效。
- server instructions 只留跨工具公约(鉴权、环境、禁忌),细节放到工具级。
- 仍不够时再 抬
CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH。 - 单个服务器描述已经远超合理范围:拆服务器或拆工具,而不是无限抬天花板。
上限抬得越高,系统提示越肥,越容易挤掉对话与代码上下文,也更贵。和 Concise 输出、周限额是同一类权衡:能瘦身就别硬堆。
和同版本其他 MCP 相关体验
2.1.280 还修了若干 MCP / 插件界面一致性问题(例如 /mcp 列表与详情的告警符号统一为 ⚠、全屏下搜索框边框等)。它们改善的是可读性;描述长度变量改善的是模型实际读到的说明书完整度。断线通知与诊断仍用 /mcp,见 远程 fork 与 MCP 断线。
小结
- 2.1.280:
CLAUDE_CODE_MAX_MCP_DESCRIPTION_LENGTH可改 MCP 工具描述与 server instructions 的默认 2048 上限。 - 先精简 MCP 文案,再按需抬高;抬高会占上下文、影响成本。
- 连接等待用另一环境变量;权限与审批不在本旋钮范围内。
模型选错工具时,先看描述是不是被砍半截,再怪模型「不聪明」。