前言¶
在 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 條目支持 id、kind、transport(http 或 stdio)、url、command / args、apiKey、apiKeyEnv、authStyle、authParam、toolName、maxResults 等字段。常用 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-mcpweb-search-deepseek.disabled: truetool-web.disabled: falsetool-web.searchMaxResults: 50
插件倉庫內也可運行 npm test、npm run check 做自動檢查。
適用場景與注意¶
適合需要在 DSH Web 環境中統一 web_search 入口、並按需切換 Tavily / Brave / Exa / Perplexity / DuckDuckGo 或自定義 MCP 搜索後端的開發者。DuckDuckGo 預設無需 API key,其餘多數 provider 需要有效憑據。
幾點注意:
- 插件以當前 DSH 進程權限運行,安裝前應檢查源碼與 MIT 許可證,確認 endpoint 和憑據管理方式符合你的環境要求。
- 不要只禁用
search-mcp插件行:bundle 同時覆蓋了web、web-search-deepseek和tool-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 設置頁集中維護的場景。