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 設置頁集中維護的場景。

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

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

小夜