Web search through your own SearXNG instance: no vendor, no API key.
- Started in our test
- ★ 1.3K GitHub stars
- Last commit 26 Oct 2026
At a glance
SearXNG is an open-source metasearch engine you host yourself. This server points your assistant at it, so searches go through your instance rather than a commercial search API, and it can fetch a result page as Markdown.
If you do not already run SearXNG, a commercial option like Exa is less work.
- Made by
- Ihor Sokoliuk and contributors
- Licence
- MIT
- Latest version
- 2.8.1 (25 Oct 2026)
- npm package
- mcp-searxng
- GitHub stars
- 1.3K
- Last commit
- 26 Oct 2026
- Tools
- 4
- Runs on
- Your computer
Our check: We ran this exact config on 26 Oct 2026: it started and answered with 4 tools.
What's in the pod: its tools
We found 4 tools when we started it on 26 Oct 2026. Every one of them only reads, so nothing changes unless you act on what it finds.
Only reads4 tools · Looks things up and changes nothing.
| Tool | What it is for |
|---|---|
searxng_instance_info | Asks your SearXNG instance which engines, categories and defaults it offers. |
searxng_search_suggestions | Fetches autocomplete ideas to sharpen a vague query before searching. |
searxng_web_search | Runs a search through your SearXNG instance and returns titles, links and snippets, with paging and filters. |
web_url_read | Opens a web page or PDF and returns readable text, or just the headings or section you ask for. |
Grouped and described by us. The README on GitHub lists the inputs each tool takes.
Set it up
Pick your app for the exact snippet and where it goes.
Where it goes: claude_desktop_config.json (Settings → Developer → Edit Config)
{
"mcpServers": {
"searxng": {
"command": "npx",
"args": [
"-y",
"mcp-searxng"
],
"env": {
"SEARXNG_URL": "http://localhost:8080"
}
}
}
}Where it goes: Your terminal, in the project folder
claude mcp add-json searxng '{"command":"npx","args":["-y","mcp-searxng"],"env":{"SEARXNG_URL":"http://localhost:8080"}}'Where it goes: ~/.cursor/mcp.json, or .cursor/mcp.json in a project
{
"mcpServers": {
"searxng": {
"command": "npx",
"args": [
"-y",
"mcp-searxng"
],
"env": {
"SEARXNG_URL": "http://localhost:8080"
}
}
}
}Where it goes: .vscode/mcp.json in your project
{
"servers": {
"searxng": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-searxng"
],
"env": {
"SEARXNG_URL": "http://localhost:8080"
}
}
}
}Where it goes: ~/.codeium/windsurf/mcp_config.json
{
"mcpServers": {
"searxng": {
"command": "npx",
"args": [
"-y",
"mcp-searxng"
],
"env": {
"SEARXNG_URL": "http://localhost:8080"
}
}
}
}Where it goes: Not supported
ChatGPT only connects to remote servers by URL. This one runs on your computer, so use Claude, Cursor or VS Code.
New to this? See the setup guides for Claude Code, Cursor, Claude Desktop and ChatGPT.
Settings
Names are exactly as the project spells them. Required ones are marked.
| Setting | What it does |
|---|---|
SEARXNG_URLEnvironment variable · required | Base address of the SearXNG instance to search through. Separate several with semicolons for failover.https://search.example.com |
SEARXNG_HTML_FALLBACKEnvironment variable | Set to true to scrape the HTML results page when the instance refuses JSON. Best effort only.true |
MCP_HTTP_PORTEnvironment variable | Set it to serve over HTTP on that port. Leave it unset for the normal local setup.8080 |
MCP_HTTP_HOSTEnvironment variable | Address the HTTP server binds to. |
MCP_HTTP_STATELESSEnvironment variable | Set to true to run HTTP without sessions, for load-balanced setups. |
What it can touch
It can read
- Search results from the engines your SearXNG instance queries
- Any web page or PDF the agent asks to read, fetched directly from that site
It can change
- Nothing. It only searches and reads.
Safer setup: Run your own SearXNG instance. A public one sees and may log every query you send.
Before you start
- A running SearXNG instance with JSON output enabled
- Node.js 18 or newer
If it does not work
- 403 Forbidden from SearXNG
- The instance has JSON output turned off or blocks API calls. Enable json under search formats in its settings.yml, or switch on SEARXNG_HTML_FALLBACK.
- The tools show up but every search fails
- Check SEARXNG_URL points at the SearXNG site itself, not at an MCP address, and that you can reach it from the same machine.
- npx fails to start
- It needs Node.js 22 or newer. Docker is an alternative that bundles its own Node.
- Results are thin or stale
- Ask searxng_instance_info which engines are enabled and turn more on in your instance.
Peas in a pod: similar servers
How SearXNG lines up against other browser and web data servers on the shelf.
| Server | Tools | Runs on | Licence | Stars |
|---|---|---|---|---|
| SearXNG | 4 | Your computer | MIT | 1.3K |
| Playwright MCP | 25 | Your computer | Apache-2.0 | 38.7K |
| Firecrawl | 28 | Your computer | MIT | 7.7K |
| Exa | 2 | Your computer or hosted | – | 5.2K |
| Bright Data | 32 | Your computer | MIT | 2.7K |
Questions
Does it include a search engine?
No. It connects to a SearXNG instance you run or trust. SearXNG then queries Google, Bing, DuckDuckGo and others for you.
Is it free?
Yes. It is MIT licensed and needs no paid API key, which is its main draw over Brave, Exa or Firecrawl.
Is my searching private?
Only as private as the instance. Your own instance keeps queries in your hands; a public one sees them.
Can it read PDFs?
Yes. web_url_read pulls a bounded amount of text out of PDFs as well as web pages.
Something wrong on this page? Tell us.