DSH 大型 MCP 目录与 Deferred Tools
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 需要补齐的三层能力
- 目录层:MCP Client 允许将工具标记为 deferred,并保留来源与版本。
- 内容层:Harness 能识别
tool_reference,把它写入 Session,再在下一轮恢复。 - 执行层:引用解析为普通工具后,继续沿用现有审批、权限与结果截断。
只改请求数组不够。Session 重放、Compaction、模型切换和动态工具更新都必须理解相同的引用语义,否则长会话仍可能在恢复时失败。
当前可用的目录网关
社区项目 dsh-capability-catalog 提供了一个现实折中:固定暴露少量目录工具,例如能力检索、Schema 查看和调用代理,再由目录按需返回具体能力。复现报告称首轮输入约为 9.2K Token,低于完整目录的约 249K。
代价也很明确:模型多走一步,原生工具调用可观测性变弱,目录网关本身还成为权限集中点。它适合在受控环境中验证架构,不应绕过 DSH 的批准机制。
实施顺序
- 记录工具数量、Schema 字节数和空白首轮输入 Token,建立基线;
- 按域拆分 MCP Server,默认只启用当前任务需要的一组;
- 若使用目录网关,先暴露只读搜索与描述,再开放调用;
- 为目录结果设置数量上限、稳定排序和版本标识;
- 分别测试新 Session、恢复、压缩、模型切换和插件热更新;
- 同时记录成功率、额外轮次、输入 Token 与缓存命中,避免只优化一个数字。
动态工具更新和缓存前缀的关系可继续阅读 DSH 动态工具与 KV Cache;如果工具增删已经让旧 Session 返回 400,参考动态工具更新与会话恢复。