freshcrate
Skin:/
Home > MCP Servers > mcp-searxng

mcp-searxng

MCP Server for SearXNG

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

MCP Server for SearXNG

README

SearXNG MCP Server

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

https://nodei.co/npm/mcp-searxng.png?downloads=true&downloadRank=true&stars=true

https://badgen.net/docker/pulls/isokoliuk/mcp-searxng

SearXNG Server MCP server

Quick Start

Add to your MCP client configuration (e.g. claude_desktop_config.json):

{
  "mcpServers": {
    "searxng": {
      "command": "npx",
      "args": ["-y", "mcp-searxng"],
      "env": {
        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL"
      }
    }
  }
}

Replace YOUR_SEARXNG_INSTANCE_URL with the URL of your SearXNG instance (e.g. https://search.example.com).

Features

  • Web Search: General queries, news, articles, with pagination.
  • URL Content Reading: Advanced content extraction with pagination, section filtering, and heading extraction.
  • Intelligent Caching: URL content is cached with TTL (Time-To-Live) to improve performance and reduce redundant requests.
  • Pagination: Control which page of results to retrieve.
  • Time Filtering: Filter results by time range (day, month, year).
  • Language Selection: Filter results by preferred language.
  • Safe Search: Control content filtering level for search results.

How It Works

mcp-searxng is a standalone MCP server โ€” a separate Node.js process that your AI assistant connects to for web search. It queries any SearXNG instance via its HTTP JSON API.

Not a SearXNG plugin: This project cannot be installed as a native SearXNG plugin. Point it at any existing SearXNG instance by setting SEARXNG_URL.

AI Assistant (e.g. Claude)
        โ”‚  MCP protocol
        โ–ผ
  mcp-searxng  (this project โ€” Node.js process)
        โ”‚  HTTP JSON API  (SEARXNG_URL)
        โ–ผ
  SearXNG instance

Tools

  • searxng_web_search

    • Execute web searches with pagination
    • Inputs:
      • query (string): The search query. This string is passed to external search services.
      • pageno (number, optional): Search page number, starts at 1 (default 1)
      • time_range (string, optional): Filter results by time range - one of: "day", "month", "year" (default: none)
      • language (string, optional): Language code for results (e.g., "en", "fr", "de") or "all" (default: "all")
      • safesearch (number, optional): Safe search filter level (0: None, 1: Moderate, 2: Strict) (default: instance setting)
  • web_url_read

    • Read and convert the content from a URL to markdown with advanced content extraction options
    • Inputs:
      • url (string): The URL to fetch and process
      • startChar (number, optional): Starting character position for content extraction (default: 0)
      • maxLength (number, optional): Maximum number of characters to return
      • section (string, optional): Extract content under a specific heading (searches for heading text)
      • paragraphRange (string, optional): Return specific paragraph ranges (e.g., '1-5', '3', '10-')
      • readHeadings (boolean, optional): Return only a list of headings instead of full content

Installation

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

Pre-built image:

docker pull isokoliuk/mcp-searxng:latest
{
  "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.

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

docker-compose.yml:

services:
  mcp-searxng:
    image: isokoliuk/mcp-searxng:latest
    stdin_open: true
    environment:
      - SEARXNG_URL=YOUR_SEARXNG_INSTANCE_URL
      # Add optional variables as needed โ€” see CONFIGURATION.md

MCP client config:

{
  "mcpServers": {
    "searxng": {
      "command": "docker-compose",
      "args": ["run", "--rm", "mcp-searxng"]
    }
  }
}
HTTP Transport

By default the server uses STDIO. Set MCP_HTTP_PORT to enable HTTP mode:

{
  "mcpServers": {
    "searxng-http": {
      "command": "mcp-searxng",
      "env": {
        "SEARXNG_URL": "YOUR_SEARXNG_INSTANCE_URL",
        "MCP_HTTP_PORT": "3000"
      }
    }
  }
}

Endpoints: POST/GET/DELETE /mcp (MCP protocol), GET /health (health check)

Test it:

MCP_HTTP_PORT=3000 SEARXNG_URL=http://localhost:8080 mcp-searxng
curl http://localhost:3000/health

Configuration

Set SEARXNG_URL to your SearXNG instance URL. All other variables are optional.

Full environment variable reference: CONFIGURATION.md

Troubleshooting

403 Forbidden from SearXNG

Your SearXNG instance likely has JSON format disabled. Edit settings.yml (usually /etc/searxng/settings.yml):

search:
  formats:
    - html
    - json

Restart SearXNG (docker restart searxng) then verify:

curl 'http://localhost:8080/search?q=test&format=json'

You should receive a JSON response. If not, confirm the file is correctly mounted and YAML indentation is valid.

See also: SearXNG settings docs ยท discussion

Contributing

See CONTRIBUTING.md

License

MIT โ€” see LICENSE for details.

Release History

VersionChangesUrgencyDate
v2.7.0## Added - Add opt-in `MCP_HTTP_SESSION_REQUEST_TIMEOUT_MS` for retained stateful HTTP POSTs. It defaults to `0` (disabled); expiry returns HTTP 504 before headers or closes a started response, invalidates the session, terminates siblings and releases capacity. Initialization and standalone GET have separate lifecycles. [#333](https://github.com/ihor-sokoliuk/mcp-searxng/pull/333) - Drain retained stateful HTTP sessions on SIGINT/SIGTERM. New stateful requests receive HTTP 503 with `Retry-AfterHigh10/20/2026
v2.6.0## Added - 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 `Retry-After: 1`; DELETE remains available. Initialization shares the POST pool with reserved headroom for established sessions. Tune the four documented `MCP_HTTP_MAX_*` settings for your workload. [#327](https://github.com/ihor-sokoliuk/mcp-searxng/pull/327) #High10/13/2026
v2.5.1### Security - Patch the transitive `proxy-addr` dependency to 2.0.8, addressing IP spoofing through IPv4-mapped IPv6 trusted subnets. [#316](https://github.com/ihor-sokoliuk/mcp-searxng/pull/316) - Update development-only `brace-expansion` to 5.0.12, resolving its three denial-of-service advisories. [#317](https://github.com/ihor-sokoliuk/mcp-searxng/pull/317) ### Dependencies and compatibility - Update MCP core/server/client to 2.3.1 and the Node adapter to 2.1.1. Use SDK-owned protocol-heaHigh10/6/2026
v2.5.0## Added - 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, and closes an idle GET stream without a terminal event. Clients using an expired session receive 404 and must initialize again. Classification runs every 60 seconds and at most once per second when session capacity is reached. [#309](https://github.com/iHigh9/29/2026
v2.4.0### Added - 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](https://github.com/ihor-sokoliuk/mcp-searxng/pull/297)) - Add `MCP_HTTP_INITIALIZE_TIMEOUT_MS` (default 30000 ms) to bound legacy stateful initialization through response delivery. Expiry releases capacity, invalidates the session, and returns 504 beforHigh9/22/2026
v2.3.0## Added - 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, protocol-version validation remains enforced, and clients can reconnect with a fresh session after termination. Failed transport closure remains retryable. ([#289](https://github.com/ihor-sokoliuk/mcp-searxng/pull/289)) ## Fixed and security - Align MCP error clHigh9/15/2026
v2.2.0## Added - Optional MCP OAuth protected-resource mode with resource discovery, signed access-token validation and authenticated legacy-session ownership. Static-token deployments and STDIO remain available. See the OAuth configuration guide for provider and HTTPS routing requirements. ([#277](https://github.com/ihor-sokoliuk/mcp-searxng/pull/277)) ## Fixed and security - Block private IPv4 destinations embedded in IPv6 and native non-global IPv6 URL targets. ([#266](https://github.com/ihor-soHigh9/9/2026
v2.1.0## Fixed - **Reliable time-range validation for explicit engines:** Searches that explicitly select engines now verify each engine's live time-range capability before sending the request. Unsupported, unknown, or unavailable capability information fails closed with an actionable error instead of returning a misleading empty result, while requests without both `engines` and `time_range` keep their existing behavior. ([#244](https://github.com/ihor-sokoliuk/mcp-searxng/pull/244)) ## Build / CI - Medium8/25/2026
v2.0.0## Breaking Changes - **Node.js 22 or later is now required:** Node.js 20 is no longer supported, and the PDF extraction runtime now uses `unpdf` 1.8.1 with loading-task teardown. Consumers and deployments must upgrade to Node.js 22 or a newer supported release before installing mcp-searxng 2.0.0. ([#251](https://github.com/ihor-sokoliuk/mcp-searxng/pull/251), [#253](https://github.com/ihor-sokoliuk/mcp-searxng/pull/253)) - **STDIO post-connect logging notifications were removed:** The modern High8/21/2026
v1.14.1### Fixed - **Built HTTP transport regression coverage now exercises real loopback TCP:** The end-to-end suite launches the compiled CLI in both stateful and stateless modes and verifies session negotiation, tool listing, bounded readiness and diagnostics, process cleanup, and narrowly classified address-in-use retries. This is test-only hardening; supported transport behavior is unchanged. ([#237](https://github.com/ihor-sokoliuk/mcp-searxng/pull/237)) ### Changed - **Compatible runtime depeHigh8/7/2026
v1.12.0### Fixed - **Established HTTP sessions now receive the configured session rate limit:** Each `POST /mcp` request now passes through exactly one limiter. Requests with a currently live `mcp-session-id` use the session allowance, while initialization requests and missing, malformed, unknown, or stale session identifiers retain the stricter initialization limit. ([#179](https://github.com/ihor-sokoliuk/mcp-searxng/pull/179)) - **Logging now honors all eight MCP severity levels:** Filtering recogHigh7/26/2026
v1.11.1### Fixed - **Hardened HTTP mode no longer rejects every request on non-default ports:** With `MCP_HTTP_HARDEN` enabled and `MCP_HTTP_ALLOWED_HOSTS` left unset, the default DNS-rebinding Host allowlist contained only the bare hostnames `127.0.0.1` and `localhost`. Because the transport matches the raw `Host` header โ€” port included โ€” with an exact list-membership check, any bind to a port other than 80 caused every request (including the initial `initialize`) to fail with `403`. The bind port isHigh7/14/2026
v1.10.1### Fixed - **`USER_AGENT` now applied to the `/config` and suggestions requests:** The configured `USER_AGENT` header is now sent on the SearXNG `/config` instance-info fetch and on search-suggestion fetches. These two paths previously always used the default agent while the main search and `web_url_read` paths already honored `USER_AGENT`, so instances that filter or rate-limit by User-Agent behaved inconsistently. The header is now merged in one shared request-config helper covering every ouHigh7/4/2026
v1.8.0### Added - **Multi-instance failover and optional parallel fanout for `SEARXNG_URL`:** `SEARXNG_URL` now accepts several semicolon-separated SearXNG replica URLs that are treated as interchangeable. In the default failover mode a search tries each instance in order until one returns results; an instance with 3 consecutive hard failures is skipped for 60 seconds, while a `200 OK` with an empty result set is treated as healthy and does not trigger cooldown. Set the new `SEARXNG_FANOUT=true` to iHigh6/23/2026
v1.6.0This release rolls up **everything since v1.4.0**. Note: `1.5.0` was published to npm and Docker Hub on 2026-06-12 but never received a GitHub release โ€” those changes are included below alongside the new 1.6.0 work. ## โœจ Added - **`engines` parameter on `searxng_web_search`** โ€” a comma-separated list (e.g. `google,bing,duckduckgo`) routes a search to specific SearXNG engines instead of the category defaults. - **Validated & normalized `categories` / `engines`** โ€” values are trimmed and matchedHigh6/16/2026
v1.3.3### Fixed - `test:coverage` script now enforces the coverage threshold mechanically. - Gitignored AI process artifacts (plans, drafts) so they can never be committed. ### Security - Docker base image (`node:lts-alpine`) is now pinned by digest and bumped automatically via Dependabot. - Added a weekly rebuild workflow: when upstream patches the base image, the published Docker image is rebuilt from the latest release tag, re-scanned with Trivy, and republished under the same version tags. PublisHigh6/10/2026
v1.1.0**Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v1.0.4...v1.1.0 In two words: fixed the URL FETCH tool and added the MCP_HTTP_HOST parameter to customize the MCP Server address binding.High6/3/2026
v1.0.4## What's Changed * fix: escape user input in extractSection regex to prevent ReDoS (CWE-1333) by @sebastiondev in https://github.com/ihor-sokoliuk/mcp-searxng/pull/71 * docs: improve tool description to prevent LLM using `prompt` instead of `query` by @MikeWang0316tw in https://github.com/ihor-sokoliuk/mcp-searxng/pull/80 * fix: add mcp-protocol-version to CORS allowedHeaders by @michaeltg17 in https://github.com/ihor-sokoliuk/mcp-searxng/pull/77 ## New Contributors * @sebastiondev made High5/23/2026
v1.0.3## What's Changed * fix: create new McpServer per HTTP session to prevent 'Already connected' crash by @frap129 in https://github.com/ihor-sokoliuk/mcp-searxng/pull/66 ## New Contributors * @frap129 made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/66 **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v1.0.1...v1.0.3High4/5/2026
v1.0.1## What's Changed * Enhance SEARXNG_URL validation, error handling, and documentation by @ihor-sokoliuk in https://github.com/ihor-sokoliuk/mcp-searxng/pull/64 ## New Contributors * @ihor-sokoliuk made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/64 **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.10.5...v1.0.1Medium4/1/2026
v0.10.1Mainly, the dependencies are updated to the latest version to address vulnerabilities. **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.10.0...v0.10.1Medium3/30/2026
v0.10.0## What's Changed * feat: add separate proxy config and custom user_agent for web_url_read by @531014023 in https://github.com/ihor-sokoliuk/mcp-searxng/pull/55 * Add troubleshooting docs for SearXNG JSON format 403 error by @Copilot in https://github.com/ihor-sokoliuk/mcp-searxng/pull/58 ## New Contributors * @531014023 made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/55 **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.9.2...Low3/21/2026
v0.9.2Add handler for listing resource templates **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.9.1...v0.9.2Low3/11/2026
v0.9.1## What's Changed * Track package-lock.json in version control by @Copilot in https://github.com/ihor-sokoliuk/mcp-searxng/pull/50 * Update console.log to console.error for better MCP STDIO compliance by @SamAcctX in https://github.com/ihor-sokoliuk/mcp-searxng/pull/51 * Release 0.9.1 by @Copilot in https://github.com/ihor-sokoliuk/mcp-searxng/pull/52 ## New Contributors * @SamAcctX made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/51 **Full Changelog**Low2/22/2026
v0.8.0Added a User-Agent header to requests **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.7.11...v0.8.0Low11/9/2025
v0.7.11Added linux/arm64 Docker image **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.7.9...v0.7.11Low10/29/2025
v0.7.9Added `NO_PROXY` env variable **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.7.8...v0.7.9Low10/29/2025
v0.7.8Code cleanup and proxy fix ## What's Changed * refactor(logging): merge message and data in notification params by @sheldonxxxx in https://github.com/ihor-sokoliuk/mcp-searxng/pull/29 ## New Contributors * @sheldonxxxx made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/29 **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.7.0...v0.7.8Low10/19/2025
v0.7.0## What's Changed * Fix error when connecting via HTTP by @cdzombak in https://github.com/ihor-sokoliuk/mcp-searxng/pull/25 * Allow reading a page in parts by @cdzombak in https://github.com/ihor-sokoliuk/mcp-searxng/pull/24 ## New Contributors * @cdzombak made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/25 **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.6.2...v0.7.0Low9/25/2025
v0.6.2**Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.6.1...v0.6.2Low9/6/2025
v0.6.1**Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.6.0...v0.6.1Low8/24/2025
v0.6.0**Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.5.2...v0.6.0Low8/23/2025
v0.5.2## What's Changed * Add 'score' to the result, update dependencies * adds eval testing by @mclenhard in https://github.com/ihor-sokoliuk/mcp-searxng/pull/10 ## New Contributors * @mclenhard made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/10 **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.5.1...v0.5.2Low8/9/2025
v0.5.1regular monitor and addressing of CVEs **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.5.0...v0.5.1Low7/7/2025
v0.5.0## What's Changed * Make it work with Goose by @genkernel in https://github.com/ihor-sokoliuk/mcp-searxng/pull/9 * Add support for HTTP Basic Auth by @hutchisr in https://github.com/ihor-sokoliuk/mcp-searxng/pull/12 ## New Contributors * @genkernel made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/9 * @hutchisr made their first contribution in https://github.com/ihor-sokoliuk/mcp-searxng/pull/12 **Full Changelog**: https://github.com/ihor-sokoliuk/mcp-sLow6/2/2025
v0.4.5Fixed NPM installationLow4/22/2025
v0.4.1**Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.4.0...v0.4.1Low4/19/2025
v0.4.0**Full Changelog**: https://github.com/ihor-sokoliuk/mcp-searxng/compare/v0.3.4...v0.4.0Low4/19/2025
v0.3.3Automatically generated release for version 0.3.3 Changes since v0.3.2: Merge branch 'main' of github.com:ihor-sokoliuk/mcp-searxng Low4/17/2025
v0.3.2Automatically generated release for version 0.3.2 Changes since v0.3.1: fix: Update auto-release workflow to use Ubuntu runner and simplify Git configuration stepsLow4/17/2025

Dependencies & License Audit

Loading dependencies...

Similar Packages

mcp-ts-coreAgent-native TypeScript framework for building MCP servers. Build tools, not infrastructure.v0.13.16
studioOpen-source control plane for your AI agents. Connect tools, hire agents, track every token and dollarv4.519.0
ntfy-me-mcpAn ntfy MCP server for sending/fetching ntfy notifications to self-hosted or ANY ntfy.sh server from AI Agents ๐Ÿ“ค (supports secure token auth & more - use with npx or docker!)v1.5.0
mockloop-mcpIntelligent Model Context Protocol (MCP) server for AI-assisted API development. Generate mock servers from OpenAPI specs with advanced logging, performance analytics, and server discovery. Optimized v2.2.9
musterMCP tool management and workflow proxyv5.52.26

More in MCP Servers

litellmPython SDK, Proxy Server (AI Gateway) to call 100+ LLM APIs in OpenAI (or native) format, with cost tracking, guardrails, loadbalancing and logging. [Bedrock, Azure, OpenAI, VertexAI, Cohere, Anthropi
ruflo๐ŸŒŠ The leading agent orchestration platform for Claude. Deploy intelligent multi-agent swarms, coordinate autonomous workflows, and build conversational AI systems. Features enterprise-grade archit
@claude-flow/cliRuflo CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code
claude-plugins-officialOfficial, Anthropic-managed directory of high quality Claude Code Plugins.