mcp-searxng-local
This server provides local, zero-cost, and private web search and content extraction capabilities via a locally hosted SearXNG instance — no API keys required.
web_search / web_search_advanced — Search the web aggregating multiple engines (Google, DuckDuckGo, Brave, Wikipedia, arXiv), returning titles, URLs, snippets, direct answers, and infoboxes. web_search_advanced is semantically hinted for the LLM to apply filters more carefully (e.g., "articles from the last month only from arxiv.org").
Filter by category:
general,news,images,files,video,musicFilter by time range:
day,month, oryearInclude or exclude specific domains (e.g., only
github.com, excludepinterest.com)Filter by publication date range (ISO date, client-side)
Select specific search engines, set language (e.g.,
en-US), and control safe search levelPaginate results (up to 50 per page)
web_fetch — Extract clean text content from any webpage.
textmode: returns full page contenthighlightsmode: returns only the most relevant excerpts for a given query (~10x fewer tokens, ~98% smaller)Configurable character limit (100–50,000 characters)
Optimized handling for GitHub URLs
Ideal for reading articles, documentation, and blogs
The server runs locally, is configurable via environment variables, and supports fallback to public SearXNG instances.
Provides access to arXiv search results via a self-hosted SearXNG instance.
Provides access to Brave search results via a self-hosted SearXNG instance.
Provides access to DuckDuckGo search results via a self-hosted SearXNG instance.
Provides access to Google search results via a self-hosted SearXNG instance.
Integrates with SearXNG to perform web searches across multiple engines with automatic fallback and rate limit handling.
Provides access to Wikipedia search results via a self-hosted SearXNG instance.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-searxng-localsearch for latest AI news"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-searxng-local
MCP server for web search via SearXNG — zero API keys, zero cost, 100% local.
Prerequisites
Related MCP server: mcp_server_searXNG
Quick Start
git clone https://github.com/dduartee/mcp-searxng-local
cd mcp-searxng-local
npm install && npm run build
docker compose up -d
# Verify
curl -s "http://localhost:4000/search?q=test&format=json" | python3 -c "import sys,json; print(len(json.load(sys.stdin).get('results',[])), 'results')"For Termux (no Docker), see the Termux Install Guide.
Tools
Tool | Description |
| Search via Google, DuckDuckGo, Brave, Wikipedia, arXiv. Supports domain/date filters, engine selection. |
| Same as |
| Extract page content. |
web_search / web_search_advanced parameters
Parameter | Type | Default | Description |
| string | (required) | Search query |
| number |
| Results (1-50) |
| number |
| Page number |
| enum | — |
|
| enum | — |
|
| string | — |
|
| string[] | — | Only results from these domains |
| string[] | — | Exclude these domains |
| string | — |
|
| number | — |
|
| string | — | ISO date (client-side filter) |
| string | — | ISO date (client-side filter) |
web_fetch parameters
Parameter | Type | Default | Description |
| string | (required) | Full URL |
| number |
| Character limit (100-50000) |
| enum |
|
|
| string | — | Required for |
Setup
After adding the config, restart your MCP client for the tools to appear.
Replace /home/user/mcp-searxng-local with your actual clone path.
OpenCode
opencode mcp add mcp-searxng-local -- node /home/user/mcp-searxng-local/dist/index.js// ./opencode.json (project) or ~/.config/opencode/opencode.json (global)
{ "mcp": { "mcp-searxng-local": { "type": "local", "command": ["node", "/home/user/mcp-searxng-local/dist/index.js"] } } }Claude Code / Cursor / VS Code / Windsurf
{
"mcpServers": {
"mcp-searxng-local": {
"command": "node",
"args": ["/home/user/mcp-searxng-local/dist/index.js"]
}
}
}For VS Code use "servers" instead of "mcpServers". For Windsurf, config goes in ~/.windsurf/mcp.json. See the Install Guide for all client configs.
Configuration
All env vars are optional — defaults work for local SearXNG on port 4000.
Env var | Default | Description |
|
| SearXNG host |
|
| SearXNG port |
|
| HTTP timeout (ms) |
| — | Comma-separated public SearXNG URLs (auto-retry when local engines are blocked) |
| — | GitHub PAT — raises API rate limit from 60 to 5000 req/h |
|
| Enable verbose logging |
Also accepts MCP_SEARCH_LOCAL_ prefix (e.g. MCP_SEARCH_LOCAL_SEARXNG_HOST).
The server loads .env files automatically via dotenv.
Troubleshooting
Symptom | Fix |
Tools don't appear | Run |
| SearXNG not running: |
| Auto-fallback handles this. Add |
Highlights returns full page | Use |
See Install Guide for full troubleshooting.
Documentation
Doc | Description |
Local, clone, global+plugin, and all MCP client configs | |
SearXNG native install on Android — no Docker | |
Request flow, design decisions, directory structure | |
JSON-RPC payloads, agent workflows, CLI testing | |
vs Exa, Brave, SearXNG raw, Chrome DevTools | |
Optimized GitHub URL handling in | |
What AI agents actually need from search |
License
MIT
Available Tools
3 toolsweb_fetchARead-onlyIdempotent
Extracts page content as clean text. Supports two modes: "text" (full page, default) and "highlights" (most relevant excerpts for a query, ~10x fewer tokens). Prefer "highlights" with a query for factual searches. Use "text" for deep analysis. Ideal for reading articles, documentation and blogs.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full page URL to extract content from (ex: https://example.com) | |
| mode | No | Mode: "text" returns full page; "highlights" extracts relevant excerpts (requires query) | text |
| query | No | Query to extract highlights — use the same query from web_search that led to this URL | |
| maxChars | No | Maximum content characters (100-50000, default 5000) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint. The description adds behavioral context by explaining output format (clean text), token efficiency of highlights mode, and ideal use cases. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with purpose, then modes and usage. Every sentence adds value; no wasted words. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description sufficiently explains the output (clean text, excerpts, token savings). It lacks explicit error handling or constraints, but the tool is straightforward and annotations cover safety. Adequate for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds value by explaining the distinction between modes and recommending when to use each, as well as the use of query with highlights. This goes beyond the schema's terse descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool extracts page content as clean text and distinguishes two modes. It differentiates from siblings (web_search, web_search_advanced) by focusing on content extraction rather than search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: prefer 'highlights' with a query for factual searches and 'text' for deep analysis. Implicitly advises against using this for searching, which is the role of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchARead-onlyIdempotent
Web search via SearXNG (metasearch). Aggregates Google, DuckDuckGo, Brave, Wikipedia and more. Returns titles, URLs and snippets, plus direct answers and infoboxes when available. Supports category (news, images), time range (day, month, year), domain (include/exclude) filters, specific engines and safe search. Use for questions requiring up-to-date information from the internet.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-50, default 10) | |
| query | Yes | Search term. Ex: "latest artificial intelligence news 2026" | |
| pageno | No | Results page (default 1) | |
| engines | No | Select engines: google, duckduckgo, brave, wikipedia, arxiv (comma-separated) | |
| language | No | Language code: pt-BR, en-US, etc. | |
| categories | No | Categoria: general, news, images, files, video, music | |
| safesearch | No | Safe search: 0=off, 1=moderate, 2=strict | |
| time_range | No | Time filter: day, month, or year | |
| excludeDomains | No | Exclude results from these domains (ex: ["pinterest.com"]) | |
| includeDomains | No | Only results from these domains (ex: ["github.com", "wikipedia.org"]) | |
| endPublishedDate | No | ISO date: "2024-12-31" — filter results published before this date (client-side) | |
| startPublishedDate | No | ISO date: "2024-01-01" — filter results published after this date (client-side) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. Description adds value by explaining metasearch aggregation, result content (snippets, infoboxes), and filter capabilities. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with key info front-loaded. Reasonably concise, though could be slightly tighter. No fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 12 parameters, no output schema, and no nested objects, the description covers purpose, result content, and major filters. Lacks pagination details but sufficient for selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 12 parameters have descriptions in the input schema (100% coverage). The description summarizes filter types but adds no new parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it's a web search via SearXNG metasearch, aggregating multiple engines. Lists specific result types (titles, URLs, snippets, direct answers, infoboxes). Distinguishes from siblings by detailing available filters, though could explicitly contrast with web_search_advanced.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States 'Use for questions requiring up-to-date information from the internet.' No explicit when-not-to-use or alternative tool suggestions (e.g., web_fetch for single page retrieval). Usage is implied but not fully guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_search_advancedARead-onlyIdempotent
Advanced web search with full filter control: domains, exact dates, specific engines, categories, safe search. Use when you need precise filtering — e.g. "articles from the last month only from arxiv.org and github.com". Includes direct answers, infoboxes, suggestions and spelling corrections.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of results (1-50, default 10) | |
| query | Yes | Search term. Ex: "latest artificial intelligence news 2026" | |
| pageno | No | Results page (default 1) | |
| engines | No | Select engines: google, duckduckgo, brave, wikipedia, arxiv (comma-separated) | |
| language | No | Language code: pt-BR, en-US, etc. | |
| categories | No | Categoria: general, news, images, files, video, music | |
| safesearch | No | Safe search: 0=off, 1=moderate, 2=strict | |
| time_range | No | Time filter: day, month, or year | |
| excludeDomains | No | Exclude results from these domains (ex: ["pinterest.com"]) | |
| includeDomains | No | Only results from these domains (ex: ["github.com", "wikipedia.org"]) | |
| endPublishedDate | No | ISO date: "2024-12-31" — filter results published before this date (client-side) | |
| startPublishedDate | No | ISO date: "2024-01-01" — filter results published after this date (client-side) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds value by disclosing additional behavioral traits: includes direct answers, infoboxes, suggestions, and spelling corrections. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence states the core function and key features. The second provides usage guidance and additional features. Every word adds value, and the important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 12 parameters and no output schema, the description covers the tool's purpose, key parameters, and what the response includes (direct answers, suggestions). It could be more complete about the exact output structure, but it provides sufficient context for an agent to understand the tool's capabilities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter documented. The description adds value beyond the schema by providing an example usage that illustrates how to combine parameters (e.g., 'from the last month only from arxiv.org and github.com'). This helps agents understand parameter interaction.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an advanced web search with full filter control, listing specific capabilities like domain, date, and engine filters. It distinguishes itself from siblings by emphasizing precision filtering, but does not explicitly contrast with web_search or web_fetch.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage example and indicates when to use precise filtering ('Use when you need precise filtering'). However, it lacks explicit guidance on when not to use this tool or alternatives like a simpler web_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
web_fetch - First observed
web_search - First observed
web_search_advanced
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: web_fetch retrieves page content, web_search performs standard web search, and web_search_advanced offers granular filters. No overlap in functionality.
All tools follow the 'web_verb' pattern using snake_case, with 'web_search_advanced' being a clear extension. Consistent and predictable.
Three tools is perfectly scoped for a web search server: basic search, advanced search, and content fetching. Each tool earns its place without redundancy.
Covers the full search-fetch lifecycle: both basic and advanced search with filters, categories, and time ranges, plus page content extraction. No obvious gaps.
Maintenance
Related MCP Connectors
Serper MCP — wraps the Serper Google Search API (serper.dev)
MCP server for Google search results via SERP API
Docs: https://docs.keenable.ai/mcp-server Keenable is a free, remote MCP server that gives agents access to the web index. Search the web with ranked results and date/site filters, then fetch any indexed page as clean markdown. Works out of the box with no account or API key.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that wraps a local SearXNG instance to provide private, customizable web search capabilities. It enables AI assistants to perform queries with support for specific parameters like results limits, language, and time ranges.109 npmMIT
- AlicenseNot gradedqualityCmaintenanceA privacy-friendly web search MCP server using SearXNG, enabling searches across multiple engines and categories.1MIT
- AlicenseNot gradedqualityFmaintenanceAn MCP server that integrates the SearXNG API to provide web search with pagination, filtering, and URL content extraction.14 npmMIT
- AlicenseNot gradedqualityDmaintenanceFree web search MCP server using SearXNG, supporting web search, news search, and search summaries.MIT