DSH 大型 MCP 工具目录:Deferred Tools 与 Token 成本

作者
DeepSeekAgent.io 编辑部
发布
更新

大型 MCP Server 可以一次暴露数百个工具。工具尚未执行,名称、描述和 JSON Schema 就已经进入模型请求。对 DeepSeek Harness 来说,这会同时影响首轮 Token、KV Cache、工具选择准确率和 Provider 兼容性。

一份 2026 年 10 月的社区复现使用 207 个工具、约 668 KB Schema 的 MCP 服务:通过 dsh-mcp-client 注册后,第一次 Headless 请求报告 249,653 个输入 Token。这个数字来自该复现环境,不代表所有 MCP Server;它揭示的是工具目录作为上下文成本的量级。

为什么 PTC 仍可能很重

PTC 可以让模型以代码方式组织工具调用,但 SDK 中的类型与说明仍需要进入上下文。工具从 JSON Schema 换成 TypeScript 形态,不会自动消除同一批能力描述。

真正需要解决的是“什么时候把哪一部分目录交给模型”:

固定发送全部 Schema
  → 首轮成本高,前缀巨大

按需发现
  → 先检索工具引用
  → 再展开少量 Schema
  → 执行普通工具调用

Deferred Tools 的实验结果

该社区复现直接测试 DeepSeek 官方端点,并报告了几条重要边界:

  • 服务端 tool_search 变体返回 422;
  • 所有工具都标记为 deferred 时返回 400,请求至少需要一个普通工具;
  • 1 个普通工具加 150 个大型 deferred 工具时,报告的输入从 261,938 Token 降到 166 Token;
  • 客户端 tool_search 返回 tool_reference 可以成功,下一轮再发出普通 tool_use。

这组结果说明按需引用能够显著缩小首轮上下文,同时也暴露出接入缺口:模型 API 支持某种内容块,不代表 DSH Adapter 和 MCP Client 已经能够完整映射、持久化和回放它。

DSH 需要补齐的三层能力

  1. 目录层:MCP Client 允许将工具标记为 deferred,并保留来源与版本。
  2. 内容层:Harness 能识别 tool_reference,把它写入 Session,再在下一轮恢复。
  3. 执行层:引用解析为普通工具后,继续沿用现有审批、权限与结果截断。

只改请求数组不够。Session 重放、Compaction、模型切换和动态工具更新都必须理解相同的引用语义,否则长会话仍可能在恢复时失败。

当前可用的目录网关

社区项目 dsh-capability-catalog 提供了一个现实折中:固定暴露少量目录工具,例如能力检索、Schema 查看和调用代理,再由目录按需返回具体能力。复现报告称首轮输入约为 9.2K Token,低于完整目录的约 249K。

代价也很明确:模型多走一步,原生工具调用可观测性变弱,目录网关本身还成为权限集中点。它适合在受控环境中验证架构,不应绕过 DSH 的批准机制。

实施顺序

  1. 记录工具数量、Schema 字节数和空白首轮输入 Token,建立基线;
  2. 按域拆分 MCP Server,默认只启用当前任务需要的一组;
  3. 若使用目录网关,先暴露只读搜索与描述,再开放调用;
  4. 为目录结果设置数量上限、稳定排序和版本标识;
  5. 分别测试新 Session、恢复、压缩、模型切换和插件热更新;
  6. 同时记录成功率、额外轮次、输入 Token 与缓存命中,避免只优化一个数字。

动态工具更新和缓存前缀的关系可继续阅读 DSH 动态工具与 KV Cache;如果工具增删已经让旧 Session 返回 400,参考动态工具更新与会话恢复。

参考资料