dsh-search-mcp:用搜索 MCP 替代 DSH 内置网页搜索

前言

在 DeepSeek Harness(DSH)里,模型通过原生 web_search 工具发起联网检索。默认路径走内置 DeepSeek 搜索 provider,provider 和结果格式由框架固定,想换成 Tavily、Brave、Exa 等第三方搜索服务,通常要改组合配置或单独挂 MCP 工具,和 web_search 入口也容易重复。

dsh-search-mcp 的做法是:保留模型侧 web_search 的名称与展示,把实际搜索请求全部转给可配置的搜索类 MCP 服务器,并在启用时关闭内置 DeepSeek 搜索 provider。下面介绍它的定位、安装步骤和配置方式。

这是什么

dsh-search-mcp 是维护者 gxpppp 发布的 DSH 独立插件,归类为联网工具。插件注册稳定 provider id search-mcp,通过 cordis.patch.yml 覆盖 Web profile 的搜索组合:将 web.searchProvider 指向 search-mcp,禁用 web-search-deepseek,并保持 tool-web 启用。

当前兼容基线为 DeepSeek Harness 0.1.0-rc.7,需要 Node.js 20 或更高版本。许可证为 MIT。

核心功能

模型侧继续使用原生 web_search 工具,调用方式与结果展示不变;搜索请求不再走内置 DeepSeek 搜索,而是交给已配置的 MCP 服务器。

支持的 provider 类型包括:

  • Tavily
  • Brave
  • Exa
  • Perplexity
  • DuckDuckGo
  • 自定义 HTTP(Streamable HTTP)或 stdio MCP

配置入口在 Web 设置页:设置 → 插件 → 插件配置 → 搜索 MCP。可在此维护服务器列表、切换默认 provider、填写凭据、调整全局或单服务器结果数与超时。设置保存后对下一次搜索立即生效;安装、升级或卸载浏览器 bundle 后需重启 DSH Web 并刷新页面。卸载插件后 bundle 覆盖层移除,DSH 内置搜索组合恢复。

web_fetch 不在本插件范围内,bundle 中保持关闭(tool-web.config.fetch: false)。

工作方式

插件通过四项组合覆盖完成切换:

- insert:
    - id: search-mcp

- id: web
  config:
    searchProvider: search-mcp

- id: web-search-deepseek
  disabled: true

- id: tool-web
  disabled: false
  config:
    fetch: false
    searchTimeoutMs: 60000
    searchMaxResults: 50

tool-web.searchMaxResults 提高到 50,是为了避免模型侧工具先把 provider 返回结果截断;实际返回数量仍由 Search MCP 的全局或单服务器 maxResults 控制。

Host 侧通过 ctx.web.registerSearchProvider() 注册 search-mcp;每次搜索使用 @modelcontextprotocol/sdk 新建 MCP 连接,在 finally 中关闭。结果经归一化处理:递归收集带 HTTP(S) url 的对象,提取常见 title、snippet、date 字段并按 URL 去重。

安装与启用

1. 获取插件并安装依赖

git clone https://github.com/gxpppp/dsh-search-mcp.git
cd dsh-search-mcp
npm install

2. 链接到 Web profile

dsh plugin --profile web add link:<dsh-search-mcp 的绝对路径>

link: 会让后续源码更新直接作用于 profile,无需重复安装插件。

如果 profile 中已单独配置了 Tavily MCP(例如存在 mcp-tavily 行),建议先从 $DSH_HOME/profiles/web/cordis.patch.yml 删除该行,避免同时出现 mcp__tavily__* 工具和 web_search provider 两套入口。

3. 配置凭据

推荐在 $DSH_HOME/.credentials.yaml 中保存凭据:

TAVILY_API_KEY: <your-key>

默认 bundle 已使用 apiKeyEnv: TAVILY_API_KEY 引用它。也可在设置卡片的 API 密钥框中输入新值;RC7 客户端会将其写入 DSH credentials domain,并自动把服务器配置改为稳定的 apiKeyEnv 引用。密钥不会通过 settings 读取接口返回。

4. 启动或重启 Web

dsh web

刷新浏览器后,打开 设置 → 插件 → 插件配置 → 搜索 MCP 完成服务器配置。

设置页配置

卡片默认收起,展开后可配置以下全局选项:

字段 说明
defaultServer 默认服务器 id;留空时使用第一行
maxResults 全局结果数上限,默认 8,可选 1–50
searchTimeoutMs MCP 搜索超时,默认 30000 ms;界面以秒显示

每个 servers 条目支持 idkindtransporthttpstdio)、urlcommand / argsapiKeyapiKeyEnvauthStyleauthParamtoolNamemaxResults 等字段。常用 provider 可通过快捷按钮添加,默认 endpoint、鉴权位置和工具名会自动补全。

Provider 预设

kind 默认连接 鉴权 默认工具 结果数参数
tavily https://mcp.tavily.com/mcp/ query tavilyApiKey tavily_search max_results
brave https://mcp.brave.com/mcp/ query braveApiKey brave_web_search count
exa https://mcp.exa.ai/mcp header x-api-key web_search_exa numResults
perplexity https://mcp.perplexity.ai/mcp/ query pplx_api_key pplx_search max_results
duckduckgo npx -y duckduckgo-mcp-server 无需 key ddg_web_search
custom 用户配置 用户配置 用户配置

验证组合是否生效

可用以下命令检查 Web profile 的最终组合:

dsh --profile web --dump-config |
  Select-String -Pattern "searchProvider|search-mcp|web-search-deepseek|searchMaxResults"

预期结果:

  • web.searchProvider: search-mcp
  • web-search-deepseek.disabled: true
  • tool-web.disabled: false
  • tool-web.searchMaxResults: 50

插件仓库内也可运行 npm testnpm run check 做自动检查。

适用场景与注意

适合需要在 DSH Web 环境中统一 web_search 入口、并按需切换 Tavily / Brave / Exa / Perplexity / DuckDuckGo 或自定义 MCP 搜索后端的开发者。DuckDuckGo 预设无需 API key,其余多数 provider 需要有效凭据。

几点注意:

  • 插件以当前 DSH 进程权限运行,安装前应检查源码与 MIT 许可证,确认 endpoint 和凭据管理方式符合你的环境要求。
  • 不要只禁用 search-mcp 插件行:bundle 同时覆盖了 webweb-search-deepseektool-web,完整卸载才会恢复内置搜索组合。
  • servers 为空时会出现 configured web provider "search-mcp" is registered but unavailable;未配置密钥时对应 provider 会报 has no API key
  • 若设置页没有 Search MCP 卡片,确认插件 client 模块已加载,重启 DSH Web 后强制刷新页面。

卸载

dsh plugin --profile web remove dsh-search-mcp

随后可按需删除 $DSH_HOME/settings.yaml 中的 search-mcp: 用户覆盖;如需恢复独立 Tavily MCP 工具,重新添加原来的 mcp-tavily 行;最后重启 DSH Web 并刷新页面。

结尾

dsh-search-mcp 在不改动模型侧 web_search 接口的前提下,把 DSH 内置网页搜索替换为可配置的搜索 MCP 后端,适合需要自选搜索 provider 并在 Web 设置页集中维护的场景。

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

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

小夜