MCP 工具太多会让模型变笨吗?先分清是数量问题还是描述问题
数据截至 2026-07,各项目能力以官方文档当前版本为准。
工具挂多了之后表现变差是真的,但”模型变笨”这个说法把病因说岔了:模型的推理能力没有下降,下降的是它在一堆长得差不多的选项里挑对那一个的准确率,以及它剩下能用来想事情的上下文空间。这两件事的解法完全不同——前者要改描述和分组,后者要减条目,把它们混成一个问题去治,往往越治越乱。
常见的误解是”工具数量有个安全上限,超过就会出问题”。我没见过任何可以交叉验证的公开基准能给出这样一个通用阈值,各家模型、各家客户端的处理方式也不一样。真实情况更像是:三个功能边界清清楚楚的工具,模型基本不会挑错;三个描述都写着”查询数据”的工具,模型从第一次调用就开始碰运气。数量只是把描述质量的问题放大了而已。
一、“变笨”到底发生在哪一步
把一次带工具的调用拆开看,模型要连着做几件事:读完整份工具清单,理解当前任务,判断该不该调工具,选出哪一个,再把参数填对。挂的工具变多之后,出问题的位置其实相当集中。
最典型的是选错:任务需要的是 A 工具,模型调了功能相近的 B。这类失败往往不报错,B 也能返回一个看起来像样的结果,模型拿着错的数据继续往下推,最后交出一个错得很自然的答案。
第二类是该调不调:清单里明明有现成工具,模型却自己硬编了一段推测的答案。这通常发生在工具描述没有说清”什么时候该用我”的时候,模型判断不出这个任务归它管。
第三类是参数填错:工具选对了,但参数 schema 里的字段含义模糊,模型猜了一个格式。这一类和数量关系最小,纯粹是 schema 写得不够自解释。
第四类才是上下文被挤占:工具清单占掉的位置,本来是留给对话历史和实际资料的。这一类的表现不是选错,而是模型对早前说过的事情记忆变差、长任务中途丢失约束。
前三类是描述问题,第四类才是真正的数量问题。先判断自己撞的是哪一类,比急着删工具有用得多。
二、工具清单的成本是每一轮都要重付的
有一点值得单独说清楚:工具定义不是”注册一次就完事”。在主流的工具调用协议下,每一轮请求都要把当前可用的工具清单随请求一起发过去,模型才知道自己手上有什么。也就是说,这份清单的体积,你在整段对话里要付很多遍。
这带来两个不太直觉的后果。一是长对话比短对话更吃亏,同样一份清单,聊两轮就付两遍,聊二十轮就付二十遍,轮数越多它占的比重越大。二是沉默的工具照样收费,一整段对话里一次都没被调用过的工具,只要挂着,它的名字、描述、参数 schema 就一直在占位。
所以裁剪的收益,不是按”删掉几个”算的,而是按”删掉的体积 × 剩余轮数”算的。一个描述写得又臭又长、参数有二十个字段、但你一个月用一次的工具,值得优先请出去。至于具体占多少,别信任何现成的经验数字,各家客户端序列化工具定义的方式不一样,自己拿真实请求统计一遍最准。上下文预算怎么整体安排,可以另看Agent 上下文管理。
三、描述撞车比数量更致命
模型看不到你的代码,也不知道这个工具背后连的是哪个系统。它眼里的工具只有一张说明书:名字、描述、参数 schema。两个工具如果说明书长得像,模型就只能碰运气。
几种常见的撞车形态:
- 名字撞车:不同 server 里都有
search、query、get_data这种通用名。挂在一起之后,客户端可能会自动加前缀区分,也可能不加,取决于具体实现。 - 描述撞车:两个工具的描述都写成”用于检索相关信息”,模型没有任何依据做区分。
- 覆盖范围重叠:一个通用检索工具和一个专用检索工具同时在场,专用的那个更准,但通用的那个描述更泛,反而更容易被选中。
改法不复杂但需要耐心:给每个工具的描述里明确写清楚什么时候该用它、什么时候不该用,特别是把和它容易混淆的那个工具直接点名写进去(“如果需要查历史订单,请用 xxx 而不是本工具”)。这种”负面边界”的说明,在工具多的时候往往比正面描述更管用。工具说明书本身怎么写,Agent 工具怎么设计那篇讲得更细。
四、自己做一次判断实验
与其猜,不如用半小时跑一组对照,把病因定位下来。做法:
- 挑 10 个左右有代表性的真实任务,覆盖你日常最常问的几类,把每个任务的正确工具调用序列先人工写下来当参照答案。
- 跑基线:保持当前全量工具挂载,逐个任务跑一遍,记录实际调用了哪些工具、对不对。
- 跑精简组:只挂上这批任务真正需要的那几个工具,同样跑一遍。
- 跑改描述组:恢复全量挂载,但只把互相混淆的那几个工具的描述改清楚(加上负面边界),再跑一遍。
对比三组结果就能定位:精简组明显变好、改描述组没变化,说明是数量和上下文占用的问题;改描述组就把问题解决了大半,说明是描述撞车,删工具只是治标。两组都只好一点点,那大概率是任务本身对模型来说就难,跟工具挂载没多大关系。
这个实验的关键是参照答案要先写,不能跑完了再回头判断”这个调用好像也说得通”,那样等于没测。样本量小,结论只对你自己这套配置有效,不要拿去当通用结论。
五、几种可落地的裁剪做法
定位完再动手,可选的做法有这么几种,按侵入性从低到高排:
- 按场景分组,用哪组挂哪组。写代码的时候不需要挂日程和邮件工具,做数据分析的时候不需要挂部署工具。多数客户端支持按项目或按配置文件区分挂载,这是收益最高、成本最低的一步。
- 关掉用不上的写操作。很多 server 同时暴露读和写两套工具,日常只用读的那部分。关掉写工具既省清单体积,也顺手降低了误操作风险。
- 同类工具只留一个。两个 server 都能查同一个系统时,留能力更全的那个,别为了”备份”两个都挂着——模型不会把它们当备份,只会觉得多了一个选项。
- 把描述压短。有些 server 的工具描述写得像文档,包含大段示例。如果客户端允许覆写描述,压到能说清边界即可。
- 用子代理隔离。把某一类任务连同它专属的那组工具,整个交给一个独立的子会话去做,主会话只看结果。这样主上下文里根本不出现那批工具。这个做法侵入性最高,但对工具确实多的复杂项目最有效。
顺带说一句:不要靠”在提示词里嘱咐模型别乱用工具”来解决问题。清单还是照发照占,只是多加了一段文字,成本没降,效果也不稳定。多 server 场景下的其他代价(故障面、授权入口、版本不齐),同时接十几个 MCP server 会怎样那篇有更完整的展开。
六、2026-07-28 新规范在这件事上帮到了什么
MCP 在 2026-07-28 发布了新规范,官方称是协议发布以来最大的一次修订,内容涵盖无状态协议内核、Extensions 框架、Tasks、MCP Apps、授权加固和正式的弃用策略这几块。跟”工具太多”这个话题直接相关的,主要是两处,而且都要说清楚它们管到哪、管不到哪。
一处是官方注册表和 Server Cards。 官方注册表 registry.modelcontextprotocol.io 提供 server 发现、文档和 API 参考;路线图里的 MCP Server Cards 则是一套通过 .well-known URL 暴露 server 元数据的标准,让注册表和爬虫不用实际连接就能了解一个 server 有什么能力。这对选之前的筛查有帮助——你可以在挂载之前就知道某个 server 会往清单里塞多少条工具、分别是干什么的,而不是挂上去才发现它一次性加了几十条。但它不会自动帮你精简已经挂上的东西。
另一处是 Tasks 从核心协议移到了 extension。 长时间运行操作的相关能力不再默认在核心里,用户也可以自建 extension 与官方认可的并存。这意味着能力边界更清楚了,不用的部分可以不引入。
要泼一盆冷水的是:新规范没有、也不打算解决”模型在多个相似工具间选错”这个问题。那是提示词工程和工具设计的范畴,协议层管不着。至于 MCP Apps 具体带来什么,官方博客没有展开细节,以官方规范文档当前版本为准,我不替它猜。
还有一件和裁剪同样值得排进日程的事:这次是破坏性变更。维护者 David Soria Parra 称这是自加入授权以来最实质的变更,原话是 “A lot of things that made MCP are gone.”。新版本的 server 可能无法与旧 client 协同,反之亦然,弃用机制给旧版本留了 12 个月窗口。如果你正打算大改工具挂载配置,不妨和版本迁移一起排,别分两次折腾。详见MCP 新规范落地和MCP 变成无状态了。
七、诚实说局限
有几点必须讲在前面,免得把上面的做法当成万能药:
- 没有可交叉验证的公开基准能告诉你”多少个工具会开始掉点”。本文给的是定位方法和裁剪思路,不是阈值。任何声称有确切数字的说法,先问它的测试条件是什么。
- 结论强依赖具体模型和客户端。同一份工具清单,换个模型、换个客户端,表现可能完全不同,客户端如何序列化工具定义、是否自动加命名空间前缀,都会影响结果。
- 描述改写是有边界的。如果两个工具的功能本来就重叠,再怎么写描述都只是在给模型出选择题,正解是从源头合并或者只留一个。
- 上面那套实验样本量很小,只够帮你定位方向,不足以支撑”某种配置更优”这类结论。要做正经评测得另设方法,参见Agent 评测方法。
- 生态数字只作背景参考。按官方与行业公开资料的口径,公开可用的 MCP server 已超过一万个、SDK 月下载量超过 9,700 万,MCP 从 2024-11 发布到现在约一年八个月,2025-12 由 Anthropic 捐给 Linux 基金会下的 Agentic AI Foundation,OpenAI、Google、Microsoft、AWS 也都已接进各自的 agent 栈。这些说明的是生态规模,不构成任何关于”该挂多少工具”的建议。
另外提一句准入:MCP 协议本身是开放规范,但你要接的模型 API 是另一回事——几家海外厂商官方并未把中国大陆列为受支持地区,注册、控制台与 API 端点都在境外,具体以各官网当前的地区政策页为准;本文不提供也不背书任何第三方中转渠道。
小结
第一,工具变多之后表现下滑是真的,但”模型变笨”这个描述掩盖了病因,实际上是选择准确率和上下文空间两个不同的问题。第二,先做那组对照实验把病因定位清楚,再决定是删条目还是改描述,顺序反了会白费力气。第三,裁剪的优先级是按场景分组、关掉不用的写操作、同类只留一个,子代理隔离留给确实复杂的项目。第四,2026-07-28 新规范带来的注册表和 Server Cards 能帮你在挂载前把关,但选错工具这件事协议层管不了。第五,别去找那个”安全上限数字”,它不存在,你自己那套配置的实测结果才算数。