/ Directory / Playground / mcp-searxng
● Community ihor-sokoliuk ⚡ Instant

mcp-searxng

by ihor-sokoliuk · ihor-sokoliuk/mcp-searxng

Private, self-hosted web search for your AI — no API key, no rate-limit drama, no search provider tracking your queries.

mcp-searxng connects to any SearXNG instance (your own or a public one) and exposes two tools: web search with pagination/time/lang/safesearch, and URL-to-markdown extraction. Best when you already run SearXNG or want zero-tracking search without paying per query.

Why use it

Key features

Live Demo

What it looks like in practice

searxng.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "searxng": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-searxng"
      ],
      "_inferred": true
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "searxng": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-searxng"
      ],
      "_inferred": true
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "searxng": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-searxng"
      ],
      "_inferred": true
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "searxng": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-searxng"
      ],
      "_inferred": true
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "searxng",
      "command": "npx",
      "args": [
        "-y",
        "mcp-searxng"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "searxng": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "mcp-searxng"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add searxng -- npx -y mcp-searxng

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use mcp-searxng

Fact-check a claim against multiple sources

👤 Writers, analysts ⏱ ~10 min beginner

When to use: You need to confirm something across a few independent sources.

Flow
  1. Search
    Search the exact claim phrase. Return top 10 from different domains.✓ Copied
    → Diverse result list
  2. Cross-read
    web_url_read on the 3 most authoritative — quote the sections that speak to the claim.✓ Copied
    → Quoted excerpts
  3. Verdict
    Claim: supported, contested, or false? Cite specifically.✓ Copied
    → Verdict with citations

Outcome: A cited fact-check.

Build a zero-API-key research assistant for your team

👤 Teams that won't/can't buy search API keys ⏱ ~40 min intermediate

When to use: Everyone wants AI search but no one wants to manage Tavily keys per person.

Flow
  1. Run SearXNG behind your intranet
    Set up SearXNG container on the team server, point mcp-searxng at it.✓ Copied
    → All team AI clients search via shared instance
  2. Test from multiple clients
    Run the same query from Claude Desktop and Cursor — both should hit the same SearXNG.✓ Copied
    → Consistent results

Outcome: Team-wide AI search with one instance, no per-user billing.

Combinations

Pair with other MCPs for X10 leverage

searxng + filesystem

Research and save notes

Search 'SBOM best practices', web_url_read the top 3, save a distilled memo to ./notes/sbom.md.✓ Copied

Stack both — kindly for platform-aware full fetches, searxng for private general search

Use searxng for the initial search; if any result is SO/GitHub, fall back to kindly for richer content.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
searxng_web_search query: str, pageno?: int, time_range?: day|week|month|year, language?: str, safesearch?: 0|1|2 Any web search free (your SearXNG)
web_url_read url: str, start_heading?: int, end_heading?: int, start_paragraph?: int, end_paragraph?: int Clean extraction of an article free

Cost & Limits

What this costs to run

API quota
Unlimited (your SearXNG instance)
Tokens per call
Search: 500-1500 tokens. Read: 1-10k depending on page.
Monetary
Free
Tip
Narrow queries with time_range and language — cuts both tokens and SearXNG load.

Security

Permissions, secrets, blast radius

Credential storage: No keys needed; just SEARXNG_URL
Data egress: Your SearXNG instance (which in turn queries upstream engines)

Troubleshooting

Common errors and fixes

Connection refused

SearXNG not running or SEARXNG_URL wrong. curl the URL directly first.

Verify: curl $SEARXNG_URL
Empty results for any query

SearXNG blocked by upstream engines or misconfigured. Check /search directly in browser.

Verify: Open $SEARXNG_URL/search?q=test
web_url_read returns mostly nav junk

Some sites are JS-heavy; narrow with heading/paragraph ranges, or use a different extractor.

Alternatives

mcp-searxng vs others

AlternativeWhen to use it insteadTradeoff
omnisearchYou want multi-provider + AI searchRequires provider API keys
kindly-web-searchYou want platform-aware full contentStill needs Serper/Tavily key unless paired with SearXNG
brave-searchYou're OK with one commercial providerPaid above the free tier

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills