1. Conduid
  2. AI
  3. Ihor-Sokoliuk/MCP-SearXNG
MCP server · AI

Ihor-Sokoliuk/MCP-SearXNG

Private web search for AI assistants via SearXNG — supports Claude, Cursor, and any MCP client

Unclaimed MIT social
86Excellent

Scored 5 days ago · breakdown

About Ihor-Sokoliuk/MCP-SearXNG

Ihor-Sokoliuk/MCP-SearXNG is an MCP server published by ihor-sokoliuk in the AI category: private web search for AI assistants via SearXNG — supports Claude, Cursor, and any MCP client.

The repository has 1.3K stars and 177 forks, with the last commit 9 days ago. Recent commit activity is the strongest signal that reported issues will get attention.

Install

uvx
uvx searxng
pip
pip install searxng
Docker
docker run -i --rm isokoliuk/mcp-searxng

This server has no ConduID identity, so agent calls to it are not receipted. Pin the version you install and review the source before granting it credentials.

Tools (4)

searxng_instance_infoInspect categories, engines and defaults

Parameters not published.

searxng_search_suggestionsComplete or refine a query

Parameters not published.

searxng_web_searchFind sources and refine results

Parameters not published.

web_url_readRead a known URL as text/Markdown

Parameters not published.

Ask AI

✦

Ask AI about Ihor-Sokoliuk/MCP-SearXNG

Powered by Claude · Grounded in docs

I know everything about Ihor-Sokoliuk/MCP-SearXNG. Ask me about installation, configuration, usage, or troubleshooting.

Security checks

Static checks derived from the repository 4 days ago. Heuristics on the source, not an audit.

  • ✓README presentThe repository ships documentation.
  • ✓License declaredUsable under a stated license.
  • ✓Tests presentA test suite exists in the repository.
  • ✓Dependencies pinnedA lockfile pins dependency versions.
  • ✓No dynamic code executionSource scan found no eval, dynamic Function, or shell execution.
  • !Scoped permissionsDoesn't declare a permission scope. Assume it can do anything its process can.

Releases

v2.6.0v2.6.0 · 13 Oct 2026Added Add configurable concurrency limits for retained stateful HTTP requests: 16 POSTs and 4 standalone GET streams per session by default, with process-wide limits of 256 for each. Excess work returns HTTP 503 `Server busy` with…
v2.5.1v2.5.1 · 6 Oct 2026Security Patch the transitive `proxy-addr` dependency to 2.0.8, addressing IP spoofing through IPv4-mapped IPv6 trusted subnets. #316 Update development-only `brace-expansion` to 5.0.12, resolving its three denial-of-service advisories.…
v2.5.0v2.5.0 · 29 Sep 2026Added Add opt-in idle expiry for legacy stateful HTTP sessions with `MCP_HTTP_SESSION_IDLE_TTL_MS` (default `0`, disabled). Expiry uses monotonic activity, protects initialization and active POST work, counts successful notification sends,…
v2.4.0v2.4.0 · 22 Sep 2026Added Bound retained and concurrently initializing legacy HTTP sessions with `MCP_HTTP_MAX_SESSIONS` (default 1000). At capacity, initialization returns HTTP 503 with `Retry-After: 1`; existing sessions and DELETE remain available. (#297)…
v2.3.0v2.3.0 · 15 Sep 2026Added Conform retained stateful HTTP sessions to the Streamable HTTP lifecycle: missing identifiers return JSON HTTP 400, unknown or terminated identifiers return JSON HTTP 404, successful DELETE termination returns an empty 204,…

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 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 setup Start here
Client starts the server locally Install Node.js 22 or later, then use the NPX example below or your client recipe.
Client starts a Docker container Use the Docker/STDIO recipe in Installation.
You have an independently running HTTP service Use your client's HTTP recipe with the full /mcp URL.
You need to operate an HTTP service Follow the HTTP server guide.

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

{
  "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?

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 MCP Exa MCP Firecrawl MCP mcp-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

Tool Use it to
searxng_web_search Find sources and refine results
searxng_search_suggestions Complete or refine a query
searxng_instance_info Inspect categories, engines and defaults
web_url_read Read 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

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

npm install -g mcp-searxng
{
  "mcpServers": {
    "searxng": {
      "command": "mcp-searxng",
      "env": {
        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
      }
    }
  }
}

Pre-built image:

docker pull isokoliuk/mcp-searxng:latest

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

{
  "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:

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

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

docker-compose.yml:

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:

{
  "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:

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

Symptom Next check
Server absent or disconnected Client/process startup
HTTP auth, session or proxy error HTTP connection
Tools appear but search fails SearXNG connection
Empty, poor or stale results Filters, upstream metadata and cache
URL/PDF failure or timeout URL 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 fetched from the repository 4 days ago. The original is authoritative.

Questions

About Ihor-Sokoliuk/MCP-SearXNG

How do I install Ihor-Sokoliuk/MCP-SearXNG?

Run uvx searxng, then add the server to your MCP client's configuration.

Is Ihor-Sokoliuk/MCP-SearXNG safe to use with an AI agent?

Its trust score is 86 out of 100 (excellent). It passes 5 of the 6 static security checks run so far; the failures are listed above. It has no ConduID identity yet, so agent calls to it are not receipted.

Is Ihor-Sokoliuk/MCP-SearXNG still maintained?

Yes — the latest release is v2.6.0 (13 Oct 2026), and the last commit was 9 days ago. The repository has 1.3K stars and 1 open issues.