SearXNG Search

io.github.ihor-sokoliuk由 GitHub 帳號 ihor-sokoliuk 發布v2.10.0更新於 Nov 7, 2026

MCP server for SearXNG — privacy-respecting web search with pagination, URL reading

概覽

AI 產生的概覽

將 AI 助理連接到 SearXNG 執行個體,提供重視隱私的網頁搜尋、查詢建議、執行個體能力查詢,以及網址轉 Markdown 閱讀。

可以做什麼
  • 透過 SearXNG 執行個體搜尋網頁,支援分頁、篩選與直接答案
  • 取得自動完成建議,用來修正模糊或不完整的查詢
  • 檢視 SearXNG 執行個體的類別、引擎、預設值與語言地區
  • 擷取網址並以 Markdown 讀取,涵蓋 HTML、JSON、YAML、TOML、XML 以及有長度上限的 PDF 文字
適用情境
適合希望助理具備網頁搜尋與網頁閱讀能力、又不想購買搜尋廠商 API 金鑰的情境,尤其是你已自行架設或信任某個 SearXNG 執行個體、希望查詢留在自己掌控之下時。
執行需求
透過 npm/npx(需 Node.js 22 或更新版本)或 Docker 以 stdio 在本機執行。需要一個已啟用 JSON 搜尋的 SearXNG 執行個體,並以 SEARXNG_URL 指定。選用的舊版 Basic Auth 使用 AUTH_USERNAME 與 AUTH_PASSWORD。需能連線該執行個體及所擷取的網址。
安裝前請注意
它不會安裝 SearXNG,須自行提供你營運或信任的執行個體。隱私取決於該部署:公開執行個體會收到並可能記錄查詢,SearXNG 本身並不提供匿名性。讀取網址會直接擷取目標網站,內容會離開本機。Basic Auth 憑證以環境變數傳入。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 SearXNG Search,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

🔍 SearXNG MCP Server

Privacy-respecting web search for AI assistants — use an operator-controlled or trusted SearXNG instance with Claude, Cursor, and more.

[GitHub Stars] [npm version] [npm downloads] [Docker Pulls] [License: MIT] [OpenSSF Scorecard] [OpenSSF Best Practices] [mcp-searxng MCP server] [GitHub MCP Registry]

An MCP server that integrates the SearXNG API, giving AI assistants web search capabilities.

✨ Featured in the GitHub MCP Registry.

Quick Start

You need an existing SearXNG instance with JSON search enabled. This project connects an MCP client to SearXNG; it does not install SearXNG. Use an instance you operate or trust. Start with the self-hosted or public-instance guide if needed.

Choose how to connect:

Your setupStart here
Client starts the server locallyInstall Node.js 22 or later, then use the NPX example below or your client recipe.
Client starts a Docker containerUse the Docker/STDIO recipe in Installation.
You have an independently running HTTP serviceUse your client's HTTP recipe with the full /mcp URL.
You need to operate an HTTP serviceFollow the HTTP server guide.

For clients using mcpServers JSON (such as Claude Desktop), add:

json
{  "mcpServers": {    "searxng": {      "command": "npx",      "args": ["-y", "mcp-searxng"],      "env": { "SEARXNG_URL": "https://search.example.com" }    }  }}

Replace the example URL with your SearXNG base URL. Other clients use different configuration shapes: choose your client recipe. Leave MCP_HTTP_PORT unset for local STDIO. Docker also needs environment forwarding into the container.

Reload the client, inspect its MCP tool inventory, then ask it to search for SearXNG documentation. A simple tool call is searxng_web_search with {"query":"SearXNG"}. Discovery alone does not test SearXNG connectivity. If the call fails, start with troubleshooting.

Features

  • Search with pagination, filters, direct answers and full or compact text/JSON output.
  • Read HTML, structured text and bounded PDF text; inspect headings or selected sections.
  • Discover instance capabilities and get query suggestions.
  • Optional replica failover/fan-out, HTML fallback, caching, proxies and browser solvers.
  • Local STDIO or Streamable HTTP, with static bearer and optional OAuth protection.

See the tool guide for capabilities and limits, configuration reference for settings, and historical deployment measurements for bounded resource-planning evidence.

Why mcp-searxng?

Capability comparison recorded on 2026-07-29

As of 2026-07-29, the capability comparison below reflects the official Brave MCP, Exa MCP, and Firecrawl MCP projects. “Pagination” means an exposed page or offset control. “Self-hosted” means the search service can run under your control. “Free / No API key” means this MCP server does not require a paid search-vendor API key; you still operate or select the underlying SearXNG instance.

Brave MCPExa MCPFirecrawl MCPmcp-searxng
Web Search✓✓✓✓
Read URL✗✓✓✓
Pagination✓✗✓✓
Self-hosted✗✗Partial✓
Free / No API key✗✗✗✓

Privacy depends on the SearXNG deployment. An operator-controlled instance can avoid trusting a third-party search operator, while a public instance receives the query and may log it. SearXNG and this MCP integration do not by themselves provide anonymity.

How It Works

MCP client → mcp-searxng → SearXNG → search engines

The client either starts its own STDIO process or connects to an HTTP service. SEARXNG_URL identifies the SearXNG service, not the MCP endpoint. URL reading fetches the selected website directly. A semicolon-separated replica list is supported for interchangeable SearXNG deployments; see replica configuration.

STDIO is the default. Legacy Streamable HTTP sessions are stateful by default: clients should send DELETE /mcp when finished, then reinitialize if a later request receives HTTP 404 for the terminated session. Modern HTTP requests and the MCP_HTTP_STATELESS=true legacy mode are sessionless; see HTTP transport configuration.

Tools

ToolUse it to
searxng_web_searchFind sources and refine results
searxng_search_suggestionsComplete or refine a query
searxng_instance_infoInspect categories, engines and defaults
web_url_readRead a known URL as text/Markdown

The tool guide contains examples and the full parameter reference. The optional research workflow explains how to inspect sources and cite evidence.

Installation

The project-maintained distribution methods are npm (including npx) and Docker. Additional package formats, including Nix, can be maintained separately by the community.

For NPX and npm installs, Node.js 22 or later is required. The Docker image includes its Node.js runtime.

NPM (global install)
bash
npm install -g mcp-searxng
json
{  "mcpServers": {    "searxng": {      "command": "mcp-searxng",      "env": {        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"      }    }  }}
Docker

Pre-built image:

bash
docker pull isokoliuk/mcp-searxng:latest

Image signatures can be verified with Cosign — see SECURITY.md for instructions.

json
{  "mcpServers": {    "searxng": {      "command": "docker",      "args": [        "run", "-i", "--rm",        "-e", "SEARXNG_URL",        "isokoliuk/mcp-searxng:latest"      ],      "env": {        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"      }    }  }}

To pass additional env vars, add -e VAR_NAME to args and the variable to env. For browser-solver integration, pass FLARESOLVERR_URL, BYPARR_URL, or both and make the configured services reachable from this container. Dual mode has a fixed FlareSolverr-first order and no automatic reverse failover. Safe rendered HTML and explicit Byparr PDF content are read directly; ambiguous content uses guarded replay, with bounded failover for eligible read failures. See URL Reader Controls for the complete behavior and Docker Compose example.

Build locally:

bash
docker build -t mcp-searxng:latest -f Dockerfile .

Use the same config above, replacing isokoliuk/mcp-searxng:latest with mcp-searxng:latest.

Docker Compose

docker-compose.yml:

yaml
services:  mcp-searxng:    image: isokoliuk/mcp-searxng:latest    stdin_open: true    environment:      - SEARXNG_URL=${SEARXNG_URL:?Set SEARXNG_URL in the environment}      # Add optional variables as needed — see CONFIGURATION.md

The tracked Compose file is intentionally STDIO-only and publishes no network ports; MCP clients launch it with an absolute Compose-file path and docker compose run --rm -T, not docker compose up. The -T flag prevents pseudo-TTY allocation so MCP JSON-RPC stays on raw standard input and output. Compose fails before launch unless the MCP client supplies SEARXNG_URL.

MCP client config:

json
{  "mcpServers": {    "searxng": {      "command": "docker",      "args": [        "compose",        "-f", "/absolute/path/to/docker-compose.yml",        "run", "--rm", "-T", "mcp-searxng"      ],      "env": {        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"      }    }  }}

If you previously used the tracked file as an HTTP service on port 8080, put the HTTP settings in an untracked docker-compose.override.yml:

yaml
services:  mcp-searxng:    ports:      - "127.0.0.1:8080:8080"    environment:      - MCP_HTTP_PORT=8080      - MCP_HTTP_HOST=0.0.0.0

Here 0.0.0.0 is the container-side bind address; the host-side port remains loopback-only. This override has no authentication and is only a temporary single-host migration path. Before adding co-located containers or exposing the service beyond the local machine, follow the hardened deployment guidance.

HTTP Transport

Run HTTP independently, then connect the client. See the HTTP server guide for local checks, static bearer authentication, OAuth requirements and deployment verification.

Configuration

For the default local setup, SEARXNG_URL is the required setting. Optional modes such as hardened HTTP and OAuth have companion requirements. Use the configuration reference for environment variables, defaults, caching, timeouts, proxies, TLS, and limits.

Optional MCP OAuth

An HTTP deployment can use OAuth with an external authorization provider. See authentication choices. Static bearer authentication and SearXNG Basic Auth protect different connections.

Troubleshooting

SymptomNext check
Server absent or disconnectedClient/process startup
HTTP auth, session or proxy errorHTTP connection
Tools appear but search failsSearXNG connection
Empty, poor or stale resultsFilters, upstream metadata and cache
URL/PDF failure or timeoutURL reading

403 Forbidden from SearXNG

JSON output may be disabled, or an access-control layer may have denied the request. Follow the direct checks before changing settings. A working browser page does not prove the JSON API works.

Can't enable JSON? (HTML fallback)

SEARXNG_HTML_FALLBACK=true can retry 403/404/non-JSON search responses as HTML. Parsing is best-effort and metadata is limited; compact output omits fallback markers. Read the public-instance guidance before enabling it on a service you do not control.

For a bug report, collect a minimal reproduction and relevant errors.

Documentation

Configure search for useful coverage with tested upstream settings, specialist engine routes and MCP output controls. The deployment recipe includes a private Compose stack and optional browser providers, with dated results and known failures.

Find a guide by task. These links open current main-branch documentation. Unreleased behavior is labeled; consult the matching Git tag when investigating an older version.

Contributing

See CONTRIBUTING.md.

License

MIT — see LICENSE for details.

來源:README.md,提交 59635c3

工具

4

searxng_search_suggestions

Returns autocomplete suggestions from the configured SearXNG instance. Use this to refine vague or partial queries before searching.

輸入參數query必填language

searxng_instance_info

Discovers capabilities from all reachable configured SearXNG instances via /config, including categories.common/available, engines.common/available, defaults, locales, and plugins.

輸入參數refreshcategoryincludeEnginesincludeDisabled

web_url_read

Fetches a URL and returns readable content as markdown. Content-type aware: HTML is converted to markdown; JSON is pretty-printed; plain text, YAML, TOML, and XML are returned as fenced readable text. PDF text extraction is supported with bounded input, output, page count, time, concurrency, and memory; OCR is not supported. Binary, media, archive, and octet-stream downloads other than PDFs are intentionally rejected instead of being returned as raw bytes. When the operator configures browser solvers, mcp-searxng attempts FlareSolverr first and then Byparr only after a busy or transient-unavailable acquisition; cache hits bypass acquisition and a final busy or unavailable provider uses one uncached direct-fetch fallback. Three modes: (1) Full content — omit filtering params; use `startChar`/`maxLength` to paginate large pages. (2) Section extraction — set `section` to return content under a specific heading. (3) Headings only — set `readHeadings: true` to list all headings (mutually exclusive with other filtering params). Returns an error string if the URL is unreachable or content cannot be extracted. Use after `searxng_web_search` to read the full content of individual result URLs.

輸入參數url必填sectionmaxLengthstartCharreadHeadingsparagraphRange

版本歷史

9
  1. v2.10.0最新Nov 3, 2026
  2. v2.9.0Oct 29, 2026
  3. v2.8.1Oct 26, 2026
  4. v2.7.0Oct 20, 2026
  5. v2.6.0Oct 13, 2026
  6. v2.5.1Oct 6, 2026
  7. v2.5.0Sep 29, 2026
  8. v2.4.0Sep 22, 2026
  9. v2.3.0Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分
  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分