mcp-searxng:把搜尋後端換成你自己架的 SearXNG
Private web search for AI assistants via SearXNG — supports Claude, Cursor, and any MCP client
秒懂
- 它是什麼?
- 這是一個 TypeScript 寫的 MCP server,讓 Claude、Cursor 等 MCP 客戶端透過 SearXNG 實例取得網頁搜尋與 URL 內文。它的價值不在功能多,而在搜尋流量不必經過第三方搜尋 API 供應商。
- 適合誰用?
- 如果你已經有一台自己控制的 SearXNG,或願意為此架一台,mcp-searxng 是目前把搜尋接進 MCP 客戶端最直接的一條路;若你只想貼一個 API key 就開始用,Brave MCP 或 Exa MCP 的摩擦更小。動手前先確認三件事:你的 SearXNG 是否允許 format=json,否則得靠 HTML fallback;你的查詢是否會落到公開實例上被記錄;以及你的 MCP 客戶端是否吃得下這個 server 暴露的完整工具集,必要時改用 lite tools 模式。
- 可以商用嗎?
- 可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫在最近一天內有新的提交。
- 用什麼語言寫的?
- 主要是 TypeScript(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
它解決的是「搜尋請求要經過誰」這個問題
多數 AI 助理的網頁搜尋是接商業搜尋 API:你申請 key,查詢字串送到對方伺服器,對方回傳結果。方便,但查詢內容與使用節奏都留在第三方手上。mcp-searxng 走另一條路。它本身不是搜尋引擎,而是一個 MCP server,把 MCP 客戶端的工具呼叫轉成對 SearXNG 實例的 HTTP 請求。SearXNG 是開源的後設搜尋引擎,README 明確寫著「an operator-controlled or trusted SearXNG instance」,隱私邊界取決於你把這個實例架在哪裡。
目標讀者是已經在用 Claude Desktop、Claude Code、Codex CLI、Cursor、VS Code、Windsurf、Cline 或 OpenCode 的人,而且對「每次問問題都把查詢送給一家搜尋公司」這件事有意見。專案以 MIT 授權發布,主要語言是 TypeScript,npm 套件名為 mcp-searxng。README 自己也把話講清楚了:SearXNG 與這個 MCP 整合本身不提供匿名性,公開實例仍會收到查詢,也可能留下日誌。這句話值得在採用前先讀一遍。
一個獨立 Node.js 程序,靠 stdio 或 HTTP 被呼叫
架構上,mcp-searxng 是一個 standalone MCP server,也就是一個獨立的 Node.js 程序,由 AI 助理連上去使用。README 的 Quick Start 用 npx 啟動,代表它不需要你事先 clone 專案。
工具面分成兩大塊。搜尋端提供一般、新聞與文章查詢,支援分頁、時間範圍、語言與安全搜尋篩選,還有 min_score 這種相關度過濾;輸出格式可以每次呼叫用 response_format 指定,或用 SEARXNG_DEFAULT_RESPONSE_FORMAT 設成維運預設。SearXNG 回傳的 answers、corrections、suggestions 與 infoboxes 會被排在結果列表之前,這對問答型查詢有實際差別,因為模型先看到的是直接答案而不是十條連結。
讀取端是 web_url_read,會依 content-type 轉成 Markdown,包含有界的 PDF 文字擷取,並支援分頁、段落區間、章節過濾與標題擷取。這兩個工具共用一層記憶體快取,搜尋結果與 URL 內容都有可設定的 TTL,淘汰策略是 LFU。對同一個 session 反覆查同一批來源的情況,這層快取直接決定你要不要重複打 SearXNG。
多實例容錯與 fan-out 是維運導向的設計
SEARXNG_URL 可以填單一實例,也可以用分號分隔填多個可互換的 replica,例如 https://one.example.com;https://two.example.com。預設行為是按順序 failover:第一個失敗就換下一個。若把 SEARXNG_FANOUT 打開,則改為平行查詢所有健康實例再合併結果。
這兩種模式對應不同故障型態。failover 適合你有一台主力、一台備援,成本低但備援平常閒著。fan-out 適合你懷疑單一實例的引擎覆蓋不足,代價是每次搜尋都打多台,延遲取決於最慢的那台,而合併邏輯要處理重複結果。README 沒有說明合併時的去重規則,這是採用前值得自己驗證的地方。
相關的維運開關還有幾個。SEARXNG_URL 指向的實例若拒絕 format=json,可以啟用 HTML fallback,改從 HTML 頁面解析結果,這是給公開實例用的退路,穩定性天生不如 JSON API。另外 /config 端點被拿來做 capability discovery,可以查實例設定了哪些 categories、engines、預設值、locales 與 plugins。這在 fan-out 情境下有用:不同 replica 的引擎設定不一致時,合併出來的結果會偏。
瀏覽器求解器與 SSRF 防護的取捨
web_url_read 在讀取前會做靜態 URL 驗證與 HEAD 大小預檢。通過之後,可以選擇性向 FlareSolverr、Byparr 或兩者取得瀏覽器 session,再把回傳的 user-agent 與限定範圍的 cookie 帶進有界的 URL 讀取流程。雙供應商模式下 FlareSolverr 永遠是主,只有在主忙線或暫時不可用時才嘗試 Byparr。README 記載 FlareSolverr 3.5.0 與 Byparr 2.1.0 於 2026-07-30 完成驗證,並附上對應的 image digest。
這裡有一個必須知道的失敗模式:客戶端取消會很快停止本地工作,但遠端瀏覽器可能繼續跑到供應商設定的逾時為止。也就是說,使用者按了取消,瀏覽器端的資源仍在消耗。對共享的 FlareSolverr 實例來說,這會累積成排隊問題。
SSRF 防護是另一個明確的設計選擇:web_url_read 在所有傳輸模式下預設封鎖私有與內部 URL 及其重新導向。這是對的預設,但也意味著你沒辦法用它讀內網文件,除非改設定,而放寬這個預設等於把 MCP 客戶端變成內網探測的入口,風險自負。
裝起來要動的三個地方
安裝本身只有一段 JSON。放進 claude_desktop_config.json 這類 MCP 客戶端設定檔:
{"mcpServers":{"searxng":{"command":"npx","args":["-y","mcp-searxng"],"env":{"SEARXNG_URL":"YOUR_SEARXNG_INSTANCE_URL"}}}}
把 YOUR_SEARXNG_INSTANCE_URL 換成你的實例網址。README 指向 docs/client-configurations.md,裡面有 Claude Desktop、Claude Code、Codex CLI、Cursor、VS Code、Windsurf、Cline 與 OpenCode 的個別設定範例,因為各家客戶端的設定檔位置與欄位名稱不一致,照抄上面的片段不一定能直接跑。
第二個地方是 SearXNG 本身。實例必須允許 JSON 輸出,否則你得開 HTML fallback。這一步不在這個 repo 裡,卻是最常卡住的地方。
第三個地方是選用設定:SEARXNG_FANOUT 控制是否平行查詢多個 replica,SEARXNG_DEFAULT_RESPONSE_FORMAT 決定預設輸出格式。若部署在 serverless 或水平擴充環境,可以改用 MCP SDK v2 的 Streamable HTTP 傳輸,README 說它帶有 opt-in hardening、rate limiting 與有界的無狀態相容模式,且現代請求與保留的舊客戶端共用同一組工具與資源介面。另有 lite tools 模式,為 context window 小的本地模型精簡工具 schema。
什麼時候它是錯的工具
第一個限制來自 SearXNG 而非這個 repo。SearXNG 是後設搜尋,它把查詢轉發給上游引擎,結果品質與上游引擎當下的可用性綁在一起。上游改版或封鎖,你的搜尋就會間歇性變差,而這不是你升級 mcp-searxng 能修好的。
第二個限制是隱私的邊界很容易被誤解。README 的比較表把「Self-hosted」與「Free / No API key」列為 mcp-searxng 的優勢,這在技術上成立,但同一份文件也說公開實例會收到查詢並可能記錄。如果你只是把 SEARXNG_URL 指向某個公開實例,你並沒有取得比商業 API 更好的隱私位置,只是換了一個信任對象。
第三,這個專案不適合想「裝了就有搜尋」的人。你需要決定 SearXNG 架在哪、誰維護、要不要開 JSON 格式、要不要為難爬的站點加 FlareSolverr 或 Byparr。這些都是持續的維運工作。若你的需求只是偶爾查一下股價或新聞標題,這套配置的成本明顯高於收益。
與 Brave、Exa、Firecrawl 的實際差異
README 在 2026-07-29 做了一份能力對照,對象是官方的 Brave MCP、Exa MCP 與 Firecrawl MCP。四者都提供 Web Search;Read URL 只有 Brave MCP 沒有;Pagination 只有 Exa MCP 沒有;Self-hosted 只有 mcp-searxng 是完整的,Firecrawl 標為 Partial;Free / No API key 也只有 mcp-searxng 符合。
差異的核心是控制權而非功能清單。Brave MCP 與 Exa MCP 把搜尋索引與排序握在供應商手上,你付出 API key 與費用換取穩定度與現成的相關度調校。mcp-searxng 把這一層換成你自己跑的 SearXNG,代價是你繼承了它的可用性問題與引擎設定的維護。Firecrawl MCP 的定位又不同,它偏重抓取與解析,搜尋只是其中一塊。
如果你的痛點是「不想讓查詢離開可控範圍」,這個交換值得。如果痛點是「搜尋結果不夠準」,換成自架 SearXNG 不會自動變準,因為排序品質取決於你設定了哪些引擎。
維護成本與授權
授權是 MIT,寬鬆,允許商用與修改,只要保留版權聲明。這部分沒有額外義務。
維護成本要分兩層看。mcp-searxng 本身以 npm 套件發布,Quick Start 用 npx -y mcp-searxng 每次抓最新版,等於把升級交給 npm。這對追新版方便,但生產環境通常應該鎖版本,因為工具 schema 與環境變數在 2.0.0、2.1.0、2.2.0 之間有演進,客戶端設定可能需要跟著調整。
另一層是 SearXNG 實例。這是真正長期的工作:引擎會失效、上游會改版、公開實例會關閉。README 提供了 docs/deployment-profiles.md 記錄 MCP 程序的 CPU 與記憶體實測起點,以及 docs/browser-solver-verification.md 說明瀏覽器求解器的驗證狀態,這兩份文件在估算資源時比功能列表有用。至於授權,本文不構成法律意見,實際條款以 LICENSE 檔案為準。
編輯結論
如果你已經有一台自己控制的 SearXNG,或願意為此架一台,mcp-searxng 是目前把搜尋接進 MCP 客戶端最直接的一條路;若你只想貼一個 API key 就開始用,Brave MCP 或 Exa MCP 的摩擦更小。動手前先確認三件事:你的 SearXNG 是否允許 format=json,否則得靠 HTML fallback;你的查詢是否會落到公開實例上被記錄;以及你的 MCP 客戶端是否吃得下這個 server 暴露的完整工具集,必要時改用 lite tools 模式。
社群筆記