1. MCP Client 如何在运行时发现 Server 提供的 Tools 列表(tools/list),Tool 数量膨胀(>50)时模型选择准确率如何下降,应如何分层暴露
MCP Client 如何在运行时通过 tools/list 请求发现 Server 提供的 Tools 列表?当 Tool 数量膨胀到 50 个以上时,模型选择准确率会如何下降,又应如何分层暴露?
- 掌握 tools/list 的发现机制与 JSON-RPC 交互时序
- 理解工具数量过多时模型注意力/上下文稀释导致的准确率下降
- 掌握分层暴露、分组、语义检索等缓解策略
MCP Client 在 initialize 握手完成后,向 Server 发送 tools/list 请求,Server 返回一组 Tool 定义(name、description、inputSchema、annotations 等)。Client 拿到后把这些工具注入到模型上下文,供模型在推理时通过 tools/call 选择调用。当工具总数超过 50 个时,工具描述会占用大量上下文 token,同时模型在庞大工具列表上的注意力被稀释,容易"幻觉式"选错工具或忽略关键工具,选择准确率明显下降。缓解做法是分层暴露:把最常用的工具作为"常驻"列表,低频工具分组或按场景(domain)组织;更进一步是通过工具描述向量化做语义检索,只把与当前用户意图最相关的 Top-K 工具注入上下文;还可以用"工具分组"(一个粗粒度入口,内部再分发)来减少顶层选择数量。对工具功能做明确分类并让模型先选类别再选工具,也能显著降低选择面。
核心矛盾是"能力丰富"与"上下文有限、选择精度"之间的折中。工具列表不是越多越好,模型在多选场景下的准确率会随候选数上升而下降,因此工程上要主动控制每轮注入的工具数量,用语义检索与分层把"选择空间"压缩到模型可以稳定处理的规模。