searxng_web_searchLABSCO SUMMARY
It records what the agent read, not just what it searched.
The source list distinguishes a page read in full from one where only metadata was fetched — the distinction models lose first when they compose a citation far from the tool call that produced it. Long documents are windowed at 100k characters with the exact next start_index returned, and the extracted text stays cached, so paging through a large PDF costs one upstream fetch rather than one per page. Reaching an internal wiki is opt-in through FETCH_ALLOWED_HOSTS or FETCH_ALLOWED_CIDRS, and both require an explicit port.
What it is
A search relay for environments where queries are not allowed to leave infrastructure you control. It fronts a self-hosted SearXNG instance, fetches and extracts pages itself, and keeps a per-caller record of what it retrieved — so a claim about sources can be checked against a list rather than trusted to a model's recall.
What you get
- Web search through your SearXNG instance with control over language, category, time range, safe-search level and result count, and the backend engines that surfaced each result named on it —
searxng_web_search - A URL fetched and converted to structured Markdown with headings, lists, tables and code blocks preserved; PDFs and Office documents (DOCX, XLSX, PPTX plus legacy DOC, XLS, PPT) are extracted too, and images come back as image content for vision models —
searxng_read_url - Title, author, publish date, language, site name, description, image, categories and tags for a URL as JSON, for choosing between candidate links before paying for a full read —
searxng_url_metadata - The URLs this relay genuinely fetched for the caller, newest first, each marked with how much was read: full text, one window of a longer document, metadata only, or a failed fetch —
searxng_session_sources
Requirements
A running SearXNG instance with the JSON output format enabled in its settings.yml, and its base URL in SEARXNG_URL — the server refuses to start without it. Docker, to run the published image ghcr.io/littleoffice/mcp-searxng-relay:latest. The README also names Go 1.26+ for building from source, but gives no build command. With MCP_PORT set it speaks Streamable HTTP and requires a bearer token via MCP_AUTH_TOKEN, MCP_AUTH_TOKENS or MCP_AUTH_TOKEN_FILE; with MCP_PORT unset it runs over stdio.
Setup effort
Run a container — pull the image and point your client at it
USE CASES
Giving agents search without letting queries leave your network
Point the relay at an approved SearXNG deployment; no third-party search API sees the query, and each search and fetch is attributed to an identity and session in the logs.
Making a research answer's citations checkable
Have the model read back the fetched-source list before it writes the citation block, so URLs are copied from a record instead of recalled.
Triaging a shortlist of links cheaply
Pull title, date and description for each candidate first, then read in full only the one worth the tokens — the cache is shared between the two calls, so it stays one upstream request.
Reading a long PDF or spreadsheet into context
Fetch the document, take the first window, then continue from the returned start index; spreadsheets render as Markdown tables rather than flattened cells.
Diagnosing thin search results
Check the relay's own logs — it reads SearXNG's unresponsive-engine field and warns which backend failed and why, instead of the shortfall looking like a model regression.
4 tools
Listed in project docs. Your client may show a different list.
searxng_read_urlsearxng_url_metadatasearxng_session_sourcesBEFORE YOU INSTALL
What to know first
Tools you get
4 tools named in the project's documentation.
Requires
- A running SearXNG instance with the JSON output format enabled
- Docker, to run the published image ghcr.io/littleoffice/mcp-searxng-relay
INSTALLATION
Connect your client
Server setup
# Generate a token and keep it: it replaces <YOUR_MCP_AUTH_TOKEN> below
# and in your client's "Authorization: Bearer" header
openssl rand -hex 32
docker run -d \
-e SEARXNG_URL=<YOUR_SEARXNG_URL> \
-e MCP_PORT=8080 \
-e MCP_AUTH_TOKEN=<YOUR_MCP_AUTH_TOKEN> \
-p 8080:8080 \
ghcr.io/littleoffice/mcp-searxng-relay:latestMCP Clients
Cursor — HTTP, Claude Code — HTTP
{
"mcpServers": {
"searxng": {
"type": "http",
"url": "http://localhost:8080",
"headers": {
"Authorization": "Bearer <YOUR_MCP_AUTH_TOKEN>"
}
}
}
}<YOUR_MCP_AUTH_TOKEN> is the MCP_AUTH_TOKEN value the container was started with. localhost:8080 is the relay on this computer; if it runs elsewhere, use its address.
Self-host — Docker Compose
services:
mcp-searxng:
image: ghcr.io/littleoffice/mcp-searxng-relay:latest
restart: unless-stopped
environment:
SEARXNG_URL: <YOUR_SEARXNG_URL>
MCP_PORT: "8080"
MCP_AUTH_TOKEN: <YOUR_MCP_AUTH_TOKEN>
ports:
- "8080:8080"