What it takes off you is the search-vendor account: queries go to your own SearXNG, where the engine mix, categories and safe-search level are already what you decided. The reader is the other half — it is content-type aware, so a JSON endpoint, a YAML file and a PDF each come back in a form the model can use rather than as a blob.
A client for a SearXNG instance you run or choose. Searches go to that instance over its JSON API, so which engines answer and what is enabled are your settings rather than a vendor's. It is a separate process, not a SearXNG plugin.
- Web results with title, URL and content snippet, paginated, and narrowed by category, engine, language, time range, safe-search level and a minimum score
- SearXNG's own answers, corrections, suggestions and infoboxes ahead of the result list
- Results as agent-readable text or as raw JSON, chosen per call or set as the server default
- Autocomplete suggestions for refining a vague or partial query before searching
- The capabilities of every reachable configured instance — common and available categories and engines, defaults, locales and plugins
- Any URL read back as Markdown, content-type aware: HTML becomes Markdown, JSON is pretty-printed, and plain text, YAML, TOML and XML come back as fenced text
- PDF text extraction with bounds on input, output, page count, time, concurrency and memory
- Section, heading, paragraph-range and character-offset controls, for reading part of a long page
- Several instances behind one SEARXNG_URL: searches fail over in order, or fan out to every healthy replica in parallel and merge
- Search results and fetched pages cached in memory, with a TTL and least-frequently-used eviction you configure
- Private and internal addresses refused by the URL reader, redirects included, in every transport mode
- A lite tool schema for local models whose context window cannot carry the full one
Npx on your PATH and a SearXNG instance to point SEARXNG_URL at — that is the only required setting, and it takes a semicolon-separated list if you have replicas. The instance has to answer JSON: a public one you do not control usually refuses, and SEARXNG_HTML_FALLBACK=true then retries the search against the ordinary HTML page, with relevance scores and engine names missing from what comes back. AUTH_USERNAME and AUTH_PASSWORD cover an instance behind basic auth. Scanned PDFs needing OCR are out of reach.
One command — npx -y mcp-searxng
