dsh-tool-search:在 DSH 里用索引延迟加载 MCP 工具

前言

在 DeepSeek Harness(DSH) 里接多个 MCP 服务时,常见做法是每次请求都把全部工具定义发给模型。工具一多,单步就要带上成百上千条完整 schema,既占 token,也会让模型在大量选项里更难选对工具。若为了省 token 随意删减工具列表,又可能漏掉能力或打乱会话侧的 prompt cache。

下面介绍社区插件 dsh-tool-search(维护者 GunjanPatel359):把 MCP 工具收成短索引,需要时再拉详情并调用,目标是在不破坏 prompt cache 的前提下降低每步 token,并保留权限与审批链路。插件归类为工作流,当前 GitHub 星标为 0;基于 DSH 构建,并非 DeepSeek 官方项目。

这是什么

dsh-tool-search 面向 DSH 的 Deferred tool loading:默认仍保留 read、bash 等内置工具,对匹配规则的 MCP 工具不再每步发送完整定义,而是发送按服务分组的索引(工具名、参数名与一行摘要,具体粒度由配置决定)。模型通过 tool_details 读取完整 schema,再通过 call_tool 执行;权限策略、审批与 hooks 仍作用于真实工具与参数。

README 中的对比示意:

without:  read, bash, mcp__github__create_issue {full schema}, mcp__github__list_issues {full schema}, ... ×180
with:     read, bash, tool_details {index: 180 names + one-liners}, call_tool

核心功能

降低每步 token

README 称 MCP 工具相关部分单次请求约可节省 88% token(相对「每步全量 schema」的基线)。作者在真实 MCP 环境做了对比(同一小任务、每格三次运行,token 为各模型步累计):

Model Without the plugin With it Change
DeepSeek deepseek-flash, 25 MCP tools 80,777 58,864 -27%
DeepSeek deepseek-flash, 75 MCP tools 183,274 79,838 -56%
Claude claude-haiku-5-5, 25 MCP tools 110,598 94,422 -15%
OpenAI gpt-5.4-mini, 25 MCP tools 50,846 23,398 -54%

同一会话内 5 条消息(DeepSeek,其中两条不需要工具)的累计:

Servers Without the plugin With it Change
25 MCP tools 159,736 106,398 -33%
75 MCP tools 317,040 147,120 -54%

工具连接越多,节省越明显;README 注明每次运行在有/无插件下均完成了任务。

保持 prompt cache 可用

会话内工具列表形态稳定(索引不变),按需加载某个工具的详情不会迫使提供方以全价重读整段对话。

索引仍覆盖全部工具名

索引中始终列出每个工具名称;若模型拼错名或漏写 mcp__server__ 前缀,tool_details 会返回最接近的真实名称,降低「看不见工具」的风险。

不绕过 DSH 安全面

权限策略、用户审批与 hooks 仍看到真实工具名与参数,而非绕过 MCP 层。

安装与启用

作为 profile 中的 bundle 安装(README 以 tui profile 为例):

dsh plugin --profile tui add dsh-tool-search
dsh --profile tui

若从仓库 checkout 做单次试运行,README 给出:

git clone https://github.com/GunjanPatel359/dsh-tool-search
cd dsh-tool-search
dsh tui --patch ./examples/local.patch.yml

package.json 标明运行环境 Node >= 22,插件版本 0.1.0,许可证 MIT。安装前建议自行查看仓库源码与许可证;插件在当前 DSH 进程权限下运行,与任意 DSH 插件相同。

社区目录页:https://www.skillhub.cn/plugins/GunjanPatel359/dsh-tool-search(独立站点,与 DeepSeek / 幻方无官方从属关系)。

配置说明

在 Cordis patch 中增加插件行;patch 会替换整段 config,只改部分字段时须把要保留的键一并写上。README 示例:

- id: dsh-tool-search
  name: dsh-tool-search
  config:
    match: ['mcp__']          # name prefixes to defer
    exclude: []               # ...except these prefixes, e.g. ['mcp__mycore__'] for tools used every turn
    alwaysLoad: []            # exact names always sent in full
    minTools: 10              # defer only when at least this many match
    indexStyle: signature     # names | summary | signature (name, parameter names, summary)
    maxDetails: 10            # most tools one tool_details call returns
    summaryChars: 120         # length of each summary in the index
    indexChars: 12000         # past this, remaining tools are listed by name only
    detailsToolName: tool_details
    callToolName: call_tool

要点:

  1. match / exclude / alwaysLoad:默认延迟 mcp__ 前缀工具;几乎每轮都要用的工具可用 exclude 或 alwaysLoad 保持全量定义。
  2. minTools:匹配工具数低于该阈值时不启用延迟(少量定义比多一步 tool_details 更省)。
  3. indexStyle:控制索引里展示名称、摘要还是「签名」(名 + 参数名 + 摘要)。
  4. maxDetails、summaryChars、indexChars:控制单次详情条数、摘要长度与索引总长度上限(超出部分仅列名)。

典型工作方式

在 Native tool calls 模式下,智能体侧可见的工具面大致为:

  1. 常驻:read、bash 等未进入延迟规则的工具。
  2. 索引:tool_details 携带的 MCP 工具短列表(按 MCP 服务分组)。
  3. 首次使用某个延迟工具前,模型先调 tool_details 取完整 schema(可能一步返回多个,受 maxDetails 限制)。
  4. 执行时走 call_tool,内部映射到真实 MCP 工具;参数校验错误由目标工具返回,而非由模型提供方在 schema 层拦截。

每轮几乎必用的 MCP 工具应通过 exclude 或 alwaysLoad 排除在索引之外,避免多一次详情查询。

权衡与兼容性

权衡(README Trade-offs)

  • 对话中首次使用某个延迟工具时,可能多一步 tool_details。
  • 参数错误表现为工具自身报错,而非提供方在调用前的 schema 校验失败。
  • 部分 UI 会把外层步骤显示为 call_tool,真实工具名在内部。

兼容模式

  • Native tool calls:插件主要为此设计。
  • PTC 模式(run_code):插件自动退让,不向这类 agent 的请求追加内容(代码里已列出全部工具)。
  • 子 agent 与 structured-output 子任务:各 agent 使用自己的工具索引;子任务的 structured_output 仍为普通全量工具。

文档写明面向 DSH 0.2.x;DSH 尚未 1.0,插件接口可能在版本间变化。

适合谁用

适合在 DSH 中挂载较多 MCP 服务、且主要走 native tool call 的工作流。工具数少(低于 minTools)时插件不会改写行为。若你依赖 PTC/run_code 为主,插件对请求无额外影响。

DSH 生态强调「一切皆插件」;dsh-tool-search 是社区贡献的工作流类插件之一。更多说明与 issue 见 GitHub:https://github.com/GunjanPatel359/dsh-tool-search。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye