MCP-WebSearch-SearXNG

by hypersniper05

Not rated
GitHub

About

Lets your model (or autonomous agent) browse the web, run searches across many engines at once, and surface images directly in your front end.

Details

Author
hypersniper05
Categories
Search, Other

Setup

Install MCP-WebSearch-SearXNG in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/hypersniper05/MCP-WebSearch-SearXNG

Follow the installation instructions in the repository README, then restart your MCP client.

Lets your model (or autonomous agent) browse the web, run searches across many engines at once, and surface images directly in your front end.

A self-hosted SearXNG metasearch engine paired with themcp-searxngMCP server,built for LLMs, agents, and tool-using applications. Lets your model (or autonomous agent) browse the web, run searches across many engines at once, and surface images directly in your front end. Runs entirely on your own machine via Docker, accessed from your browser, and speaks MCP over HTTP Streamable transport so it plugs into any MCP-compatible client (Claude Desktop, Cline, Open WebUI, LM Studio, custom agent frameworks, etc.). Enhanced with image/video/category search, offset pagination, and smart base64 image resizing for vision-capable models. Both services stay on your local network, so nothing leaves your box unless you ask it to.No ads, no telemetry, no third-party trackers, no accounts— the SearXNG frontend is privacy-by-design and the MCP patches add zero phone-home of their own.

Quick note on privacy before you start.This stack runs entirely on your machine and is privacy-respecting by design (no telemetry, no accounts, no third-party trackers), but the defaults are tuned for "just works," not maximum privacy. Before exposing it beyond your own computer, to your LAN, the internet, or anyone else please readADVANCED.md

- Docker and Docker Compose must be installed
- Node.js >= 20 must be installed

git clone https://github.com/hypersniper05/MCP-WebSearch-SearXNG.git cd MCP-WebSearch-SearXNG

This gives you thedocker-compose.yml, the SearXNGsettings.yml, the MCP patches, and the customDockerfilealready laid out — so the next step is straight to configuration.

Prefer to set everything up by hand instead of cloning? SeeBuilding from scratch (without cloning)in ADVANCED.md.

The shippedsearxng/config/settings.ymlisalready preconfiguredfor this stack — JSON output enabled, rate limiter off, fast engine retries, a curated set of working engines (Bing, Mojeek, Yahoo, Startpage, etc.). The only thing you need to touch here is thesecret_key.

Want to change which engines are enabled, the request timeout, or any other SearXNG default? SeeModifying the default settingsin ADVANCED.md.

The shippedsettings.ymlhas a placeholdersecret_key: "CHANGE_ME_BEFORE_RUNNING". SearXNGwill startwith the placeholder, so for a localhost-only personal instance you can leave it and come back to this later.Butif you ever bind to0.0.0.0, expose this to your LAN, or share it with anyone, generate a real one — otherwise an attacker can forge image-proxy and CSRF tokens against your instance.

Create a.envfile next todocker-compose.yml:

SEARXNG_SECRET=<paste your generated 64-char hex string here>

The env var overrides whatever is insettings.yml, so the placeholder can stay in the tracked file forever.

Replace the placeholder with your generated key. If you do this, make sure not to leak yoursettings.yml.

Generate a key with whichever tool you have installed:

# PowerShell (Windows — built in) [System.BitConverter]::ToString([System.Security.Cryptography.RandomNumberGenerator]::GetBytes(32)).Replace('-','').ToLower()
# Node.js (already installed for the MCP server) node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" # Docker (works anywhere this stack does) docker run --rm alpine sh -c "apk add --no-cache openssl > /dev/null && openssl rand -hex 32" # Git Bash / Linux / macOS openssl rand -hex 32 # Python python -c "import secrets; print(secrets.token_hex(32))"

For the rest of the privacy/hardening trade-offs (LAN exposure, MCP auth, Tor routing), seeADVANCED.md.

docker compose build docker compose up -d

Expected:{"status":"healthy","server":"ihor-sokoliuk/mcp-searxng","version":"0.9.2-enhanced","transport":"http"}

curl -s "http://localhost:8888/search?q=test&format=json" | head -c 200

Step 5 (only if accessing from another machine): Open the bindings to your LAN / Tailscale

By default the shippeddocker-compose.ymlbinds the services to127.0.0.1— reachable only from the machine running Docker. If you want another device on your LAN, your Tailscale tailnet, or anywhere else off-host to reach the SearXNG UI or the MCP endpoint, you have to change the bindings to0.0.0.0.

If both rows show127.0.0.1:(or one does and one doesn't, like SearXNG locked down while MCP is open), editdocker-compose.ymland change the binding(s):

services: searxng: ports: - "0.0.0.0:8888:8080" # was 127.0.0.1:8888:8080 mcp-searxng: ports: - "0.0.0.0:3001:3001" # was 127.0.0.1:3001:3001

Then afull down + upis required (port changes don't apply on a plainrestart):

docker compose down docker compose up -d docker compose ps

Ifdocker compose psalready shows0.0.0.0and external accessstillfails, it's the OS firewall. On Windows, allow the ports from an admin PowerShell:

New-NetFirewallRule -DisplayName "MCP SearXNG (8888)" -Direction Inbound -Protocol TCP -LocalPort 8888 -Action Allow New-NetFirewallRule -DisplayName "MCP Server (3001)" -Direction Inbound -Protocol TCP -LocalPort 3001 -Action Allow

Security note: switching to0.0.0.0exposes the services to anyone who can reach your machine on those ports. The MCP server has no authentication. If you're going beyond a trusted home/Tailscale network, readADVANCED.md → Tier 2for adding a reverse proxy with auth.

Need TLS for an HTTPS-only client? The cleanest path isTailscale Serveif both ends are on a tailnet (real Let's Encrypt-trusted cert, zero per-client setup), or a reverse proxy like Caddy / nginx with your own cert otherwise. Either is added in front of the existing HTTP MCP endpoint without any changes to this stack.

Web search with category, pagination, and filtering support.

Fetches and reads URLs. Auto-detects image URLs and returns resized base64 image blocks.
- searxng_web_search({query: "sunset", categories: "images"})→ returns image URLs + metadata
- Pick an image →web_url_read({url: "https://example.com/sunset.jpg", detail: "medium"})→ returns resized base64 image
- To see more results →searxng_web_search({query: "sunset", categories: "images", offset: 10})→ results 11-20

All patches are inmcp-searxng-patches/and mounted read-only into the container:

SearXNG is pinned to:latestindocker-compose.yml, so updates are pull-and-restart. Config insearxng/config/settings.ymlis volume-mounted and survives the update.

cd MCP-WebSearch-SearXNG docker compose pull searxng # grab newest :latest image docker compose up -d searxng # recreate container with new image docker compose logs searxng --tail 100 # check for config-schema warnings docker image prune -f # remove the old image

Major releases occasionally rename keys insettings.ymlor add required fields. Check theSearXNG releases pagefor breaking changes before updating.

Pin to a specific version (safer / reproducible)

Replace:latestindocker-compose.ymlwith a date-tagged release, e.g.:

image: docker.io/searxng/searxng:2026.4.15-abc1234

Updates then become an explicit edit — review release notes, bump tag,docker compose up -d.

A reasonable middle ground: schedule a weekly job that runsdocker compose pulland reports whether a new image is available, but does not auto-apply it.

mcp-searxngis built locally frommcp-searxng-patches/Dockerfile(base:isokoliuk/mcp-searxng:latest) with custom JS patches mounted on top. To pull upstream MCP changes:
- docker compose build --pull mcp-searxng— rebuilds from a freshly pulled base image
- docker compose up -d mcp-searxng— recreates the container
- Verify the patches inmcp-searxng-patches/*.jsstill apply cleanly against any upstream API changes (checkdocker compose logs mcp-searxngfor errors)

If upstream renames internal modules or changes function signatures, the volume-mounted JS patches may need to be rebased manually.

- Qwen3.6 35B A3B— runs bothsearxng_web_search(including multi-query and category filters) andweb_url_read(text + image modes) reliably. Tool selection, parameter inference, and result interpretation all work well with this model.

- MCP server uses HTTP Streamable transport (not stdio or SSE-only)
- SearXNG connects internally via Docker hostnamesearxng:8080
- All data stays local — no external API keys needed
- Custom patches are MIT-licensed, audited, no filesystem/shell access, no telemetry
- Search engines: Bing, Startpage, Mojeek, Yahoo active; Google with mobile UI (may intermittently block)

Search global news using natural language. Webz.io News Search API returns the most relevant articles and content, with filters for source, country, language, date, sentiment, and category.

Hound MCP Servers Gives your agent actually good fetch + Search for 0$, no catch, no api keys or free tiers, fully free

A server for web research that brings real-time information into AI models like Claude.

Fetch, convert, and search AWS documentation pages, with recommendations for related content.

Search campgrounds around the world on campertunity, check availability, and provide booking links.

The Ferryhopper MCP Server exposes ferry routes, schedules and booking redirects so an AI assistant can discover connections across Europe and the Mediterranean and send users to Ferryhopper to complete bookings.

All-in-One SEO & Web Intelligence Toolkit API from FetchSERP.

MCP server that provides read-only access to HyperKitty, the web-based email archive component of Mailman 3.

At Sunrise Apps, we believe AI agents should be limitless, especially when it comes to visual data. We created ImageSorcery to bridge the critical gap in AI's ability to interact with and manipulate images directly, all while upholding the highest standards of privacy and security.

Just Domain is the domain registrar for businesses built with AI. Its remote MCP server checks availability and returns first-year and renewal pricing, plus a link to register on justdomain.ai, with DNS and WHOIS privacy in the same place. No account, no API key, read only. Endpoint: https://mcp.justdomain.ai/

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.