SearXNG MCP Server
Summary: SearXNG MCP Server provides privacy-respecting SearXNG web search, knowledge-graph ingestion, embedded SearXNG settings management, and an interactive search UI through MCP tools.
Perform web searches with query, pagination, engine selection, language, and category filters.
Run SearXNG searches and ingest results into epistemic-graph as documents, query/engine nodes, and links.
Read the embedded SearXNG instance’s active
settings.ymland path.Modify embedded SearXNG settings with deep-merged JSON overrides, optionally restarting on next search.
Reset embedded SearXNG settings to the packaged default.
Launch an interactive search UI app with query box, category filters, and clickable results backed by
web_search.
Enables privacy-respecting metasearch capabilities with customizable search parameters including language, time range, categories, engines, safe search levels, and pagination control.
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., "@SearXNG MCP Serversearch for latest AI developments in the past week"
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.
Searxng Mcp
CLI or API | MCP
Documentation — Installation, deployment, usage across the MCP tool, Python API, and console scripts, and guidance for provisioning the SearXNG instance are maintained in the official documentation.
Related MCP server: SearXNG MCP Server
Overview
Searxng Mcp is a production-grade Agent and Model Context Protocol (MCP) server designed to interface directly with SearXNG Search Engine MCP Server for Agentic AI!.
Key Features
Consolidated Action-Routed MCP Tools: Minimizes token overhead and eliminates tool bloat in LLM contexts by grouping methods into optimized, togglable tool modules.
Enterprise-Grade Security: Complete support for Eunomia policies, OIDC token delegation, and granular execution context tracking.
Native Telemetry & Tracing: Out-of-the-box OpenTelemetry exports and native Langfuse tracing.
CLI or API
This agent wraps the SearXNG Search Engine MCP Server for Agentic AI! API. The operator can interact with it programmatically or via its integrated execution entrypoints.
Detailed instructions on how to use the underlying API wrappers, extended schema bindings, and developer SDK references are maintained in docs/index.md.
MCP
This server use dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.
Available MCP Tools
The table below is auto-generated from the MCP server — do not edit by hand.
Condensed action-routed tools (MCP_TOOL_MODE=condensed)
MCP Tool | Toggle Env Var | Description |
|
| Run a SearXNG search and natively ingest its results into epistemic-graph. |
|
| Launch an interactive SearXNG search-UI app: a query box, category filters, and a clickable results list, backed by the existing web_search tool through the host-mediated MCP Apps bridge. Use this when a human should see and interact with search results visually rather than read raw JSON. Does NOT drive a browser or render arbitrary web pages -- only this search workflow. |
|
| Read/edit the EMBEDDED SearXNG instance's settings.yml |
| — | Perform a web search using a privacy-respecting SearXNG metasearch instance. |
4 action-routed tool(s) · 0 verbose 1:1 tool(s). Each is enabled unless its <DOMAIN>TOOL toggle is set false; MCP_TOOL_MODE selects the surface (intent default — the six verb-tools, granular set loaded on demand · condensed action-routed · verbose 1:1 · both). Auto-generated — do not edit.
Detailed tool schemas, parameter shapes, and validation constraints are preserved in docs/usage.md.
Dynamic Tool Selection & Visibility
This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows the operator to restrict the set of exposed tools to prevent blowing up the LLM's context window.
The operator can configure tool filtering via multiple input channels:
CLI Arguments: Pass
--toolsor--toolsets(or their disabled counterparts--disabled-toolsand--disabled-toolsets) during startup.Environment Variables: Define standard environment variables:
MCP_ENABLED_TOOLS/MCP_DISABLED_TOOLSMCP_ENABLED_TAGS/MCP_DISABLED_TAGS
HTTP SSE Request Headers: Pass custom headers during transport initialization:
x-mcp-enabled-tools/x-mcp-disabled-toolsx-mcp-enabled-tags/x-mcp-disabled-tags
HTTP SSE Request Query Parameters: Append query parameters directly to the operator's transport connection URL:
?tools=tool1,tool2?tags=tag1
When query strings or parameters are supplied, an LLM-free Knowledge Graph resolution layer (using DynamicToolOrchestrator) matches query intents against known tool tags, names, or descriptions, with safe fallback and automated 24-hour background cache refreshing.
MCP Configuration Examples
Install the connector-focused
[mcp]extra. Examples usesearxng-mcp[mcp]to add FastMCP / FastAPI throughscion-sdk; the required Scion SDK core still carriesepistemic-graph[full]. The[agent-runtime]extra additionally enables model orchestration.
stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
{
"mcpServers": {
"searxng-mcp": {
"command": "uvx",
"args": [
"--from",
"searxng-mcp[mcp]",
"searxng-mcp"
],
"env": {
"MCP_TOOL_MODE": "intent",
"SEARCH_APPTOOL": "true",
"SEARXNG_EMBEDDED": "true",
"USE_RANDOM_INSTANCE": "false"
}
}
}
}Runtime references require an alias-aware launcher such as Arbora. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.
Streamable-HTTP Transport (networked / production)
{
"mcpServers": {
"searxng-mcp": {
"command": "uvx",
"args": [
"--from",
"searxng-mcp[mcp]",
"searxng-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"MCP_TOOL_MODE": "intent",
"SEARCH_APPTOOL": "true",
"SEARXNG_EMBEDDED": "true",
"USE_RANDOM_INSTANCE": "false"
}
}
}
}Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:
{
"mcpServers": {
"searxng-mcp": {
"url": "http://localhost:8000/searxng-mcp/mcp"
}
}
}Run a reviewed container image as a least-privilege stdio child (no listener or published port):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e MCP_TOOL_MODE=intent \
-e SEARCH_APPTOOL=true \
-e SEARXNG_EMBEDDED=true \
-e USE_RANDOM_INSTANCE=false \
registry.example.invalid/searxng-mcp@sha256:<digest> searxng-mcpFor containerized network HTTP, supply an authenticated TLS ingress (or
direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy
CIDR policy through the operator-owned deployment profile. The generator
does not emit an unauthenticated non-loopback listener.
Auto-generated from the code-read env surface (MCP_TOOL_MODE + package vars) — do not edit.
Additional Deployment Options
searxng-mcp can run as a local stdio process or container, or behind a remote
network boundary. The
Deployment guide carries
the detailed transport contract.
Local container — launch a reviewed immutable image as a least-privilege stdio child with no listener or published port.
Remote URL — connect through an operator-supplied authenticated HTTPS ingress. Keep its URL, outbound identity references, trust profile, and exact
MCP_ALLOWED_HOSTSinAgentConfig.
Agent
Set credentials
export SEARXNG_URL="your_value"
Connector-focused MCP server (includes the shared graph engine)
uv pip install "searxng-mcp[mcp]"
Everything (development)
uv pip install "searxng-mcp[all]" # or: python -m pip install "searxng-mcp[all]"
### Container images (`:mcp`)
One multi-stage `docker/Dockerfile` builds the MCP-only image (`--target mcp`):
| Image tag | Build target | Contents | Entrypoint |
|-----------|--------------|----------|------------|
| `example/searxng-mcp:mcp` | `--target mcp` | `searxng-mcp[mcp]` — **connector-focused**, includes `epistemic-graph[full]`; no model-orchestration stack | `searxng-mcp` |
```bash
docker build --target mcp -t example/searxng-mcp:mcp docker/ # connector-focused MCP serverAvailable Tools
6 toolssearxng_get_settingsSearxng Get SettingsARead-onlyIdempotent
Read the EMBEDDED SearXNG instance's active settings.yml
(CONCEPT:SR-KG.compute.embedded-instance): the user override at
$XDG_CONFIG_HOME/searxng-mcp/settings.yml if one exists, else the
packaged default, plus its path. Informational only when an external
SEARXNG_URL is configured.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds genuine context beyond them: the precedence rule for which file is read, that the path is returned alongside the content, and the external-SEARXNG_URL caveat. The return shape is left to the existing output schema.
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?
One front-loaded sentence that leads with the action and resource, with no wasted framing. Minor clutter from the inline 'CONCEPT:SR-KG.compute.embedded-instance' tag, which adds nothing for an agent deciding how to call the tool.
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?
No parameters, an output schema covering the return value, and the description supplies the resolution logic and the external-URL caveat. Complete enough to call correctly; the only residual gap is that it does not explicitly point to searxng_set_settings as the modification counterpart.
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?
Zero parameters, so the baseline of 4 applies; there are no parameters whose semantics need explaining.
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?
States a specific verb (read) and resource (the embedded SearXNG instance's active settings.yml), and spells out the resolution order (user override at $XDG_CONFIG_HOME/searxng-mcp/settings.yml, else packaged default) plus the returned path. This clearly distinguishes it from siblings searxng_set_settings and searxng_reset_settings.
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 clause 'Informational only when an external SEARXNG_URL is configured' tells the agent when the result is not meaningful, which is real routing guidance. It does not explicitly name the alternative (searxng_set_settings) for modification, so it stops short of full when/when-not/alternative framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_ingest_searchSearxng Ingest SearchA
Run a SearXNG search and natively ingest its results into epistemic-graph.
Wire-First: performs the search, then pushes each result into the knowledge graph
as a search :Document (+ :SearchQuery / :SearchEngine typed nodes and their
:resultOf / :fromEngine links). Best-effort: ingested is None when no engine
is reachable. CONCEPT:AU-KG.ingest.enterprise-source-extractor.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to submit to SearXNG | |
| pageno | No | Page number of results to fetch | |
| engines | No | Optional list of specific search engines to use | |
| language | No | Language code for search results (e.g. en-US) | en-US |
| categories | No | Optional list of categories to search in (e.g. general, news, science) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description bears the full burden. It does disclose valuable behaviour: best-effort semantics with 'ingested' being None when no engine is reachable, and the write shape (:Document, :SearchQuery, :SearchEngine nodes with :resultOf/:fromEngine links). It omits whether repeated ingests dedupe/idempotent, whether it mutates an existing graph destructively, permission requirements, and rate limits.
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?
Front-loaded and short, but the body is broken by hard line breaks mid-sentence, and the trailing 'CONCEPT:AU-KG.ingest.enterprise-source-extractor' is internal taxonomy jargon that costs tokens without helping an agent decide or invoke. Roughly one of three sentences does no work.
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 five-parameter tool with a full output schema, the description covers purpose, the write target, and the failure mode (`ingested` is None), which is enough to call it correctly; return-value detail is rightly left to the output schema. The remaining gap is graph-side side effects and idempotency on repeat calls.
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 description coverage is 100% and all five parameters carry their own descriptions, so the schema does the heavy lifting. The description adds no parameter-level meaning (e.g. engine naming conventions, category values, paging interaction with ingestion), so baseline 3 applies.
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?
States a specific compound verb plus resource: run a SearXNG search AND ingest results into epistemic-graph, naming the target graph and the node/link types created. That ingestion clause is exactly what separates it from searxng_search_app and web_search, without needing to name them.
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 'Wire-First: performs the search, then pushes each result into the knowledge graph' line implies the selection condition (you want results persisted, not just returned), but never states when to prefer this over searxng_search_app or web_search, nor any prerequisites such as an existing graph connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_reset_settingsSearxng Reset SettingsADestructiveIdempotent
Delete the EMBEDDED SearXNG user override settings.yml, reverting to the packaged default on the next spawn.
| Name | Required | Description | Default |
|---|---|---|---|
| apply_now | No | Stop the running embedded instance (if any) so the NEXT search respawns it with the packaged default settings. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is destructive, idempotent, and not read-only. The description adds useful behavioral context beyond that: it identifies exactly what is destroyed (the embedded user override settings.yml) and when the packaged default takes effect (on the next spawn).
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 a single, front-loaded sentence with no wasted words. It states the action, target file, and consequence immediately.
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?
The tool is simple, the input schema fully documents the only parameter, annotations cover safety traits, and an output schema exists. The description supplies the key behavioral effect, though it could explicitly mention the immediate-stop behavior governed by apply_now for a fully self-contained description.
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 description coverage is 100%, and the single apply_now parameter is fully documented in the schema itself. The description does not add further parameter semantics, so the baseline of 3 is appropriate when the schema carries this responsibility.
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 uses a specific verb ("Delete") and resource ("EMBEDDED SearXNG user override settings.yml") and states the resulting effect (reverting to the packaged default on the next spawn). This clearly distinguishes it from read/write siblings like get_settings and set_settings, though it does not explicitly route to them.
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 phrase "reverting to the packaged default" implies this is used when the user wants to discard custom SearXNG overrides, but the description does not explicitly say when to use this versus searxng_set_settings or searxng_get_settings. No alternatives or exclusions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_search_appSearxng Search AppA
Launch an interactive SearXNG search-UI app: a query box, category filters, and a clickable results list, backed by the existing web_search tool through the host-mediated MCP Apps bridge. Use this when a human should see and interact with search results visually rather than read raw JSON. Does NOT drive a browser or render arbitrary web pages -- only this search workflow.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Optional initial query to run on load. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the backing mechanism (web_search via the host-mediated MCP Apps bridge) and the capability boundaries of the launched app. It stops short of stating what launching twice does or how app/session lifetime behaves, which are the remaining behavioral unknowns for a UI-launching tool.
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?
Three sentences, front-loaded with what is launched, followed by the selection rule and then the scope exclusions. Every clause contributes and nothing is repeated from the schema.
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 one-optional-parameter tool with an output schema, the description covers purpose, mechanism, and boundaries adequately. It is slightly incomplete on app lifecycle semantics (what a second launch yields, whether state persists), which an agent may need to call it confidently in a multi-turn session.
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% and the single optional 'query' parameter is already documented in the schema as an initial query run on load. The description adds no further parameter semantics (e.g., how an empty query behaves in the UI), so the baseline 3 applies.
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?
States a specific verb ('Launch') and a precisely scoped resource ('interactive SearXNG search-UI app'), then enumerates its components (query box, category filters, clickable results list). It explicitly distinguishes itself from web_search and from browser automation, so an agent can separate it from every sibling without opening a schema.
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?
Gives an explicit selection rule: use when a human should see and interact with results visually rather than read raw JSON, which maps directly onto choosing this over web_search. It also pre-empts the two most likely misuses by stating it does not drive a browser or render arbitrary web pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searxng_set_settingsSearxng Set SettingsA
Deep-merge overrides_json into the EMBEDDED SearXNG user override
settings.yml (created on first use; the packaged default is never
modified), then stop the running embedded instance so the next search
respawns with the new settings (unless apply_now=false).
| Name | Required | Description | Default |
|---|---|---|---|
| merge | No | Deep-merge onto current settings (default) or replace the override file wholesale. | |
| apply_now | No | Stop the running embedded instance (if any) so the NEXT search respawns it with the new settings. | |
| overrides_json | No | JSON object of settings.yml overrides (e.g. '{"search": {"formats": ["html", "json", "csv"]}}'). Deep-merged onto the currently-active settings unless merge=false. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations only declaring readOnlyHint=false and destructiveHint=false, the description carries real added weight: it discloses that the packaged default is never modified, that the override file is created on first use, and that the running instance is stopped so the next search respawns. It does not say what happens to in-flight requests when the instance is stopped, or what happens on invalid JSON, which keeps it from a 5.
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?
A single dense sentence that front-loads the merge action and then the restart consequence. No wasted sentences. Mild clutter from reST double-backtick markup, but nothing that impedes parsing.
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?
Output schema exists, so return values need no explanation, and all three parameters are documented. The description covers the mutation's blast radius and the embedded-vs-packaged distinction. It is only missing error behavior and whether prior override content is recoverable after a wholesale replace.
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 description coverage is 100%, so the schema already documents all three parameters in detail. The description adds only the default `apply_now=true` behavior and the deep-merge semantics for `overrides_json`. Baseline 3 is appropriate since the schema does the heavy lifting.
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?
States a specific verb and resource chain: deep-merge `overrides_json` into the embedded user override settings.yml and restart the embedded instance. That is far more than a restatement of the name. It does not explicitly contrast itself with siblings like `searxng_get_settings` or `searxng_reset_settings`, so sibling differentiation is inferred rather than stated.
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?
Usage is implied well enough that an agent knows to call this to change settings, and it flags the `apply_now=false` path. However it never says when to prefer `searxng_reset_settings` over merging, or whether to read current settings with `searxng_get_settings` first. No explicit when-not guidance exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchWeb SearchBRead-onlyIdempotent
Perform a web search using a privacy-respecting SearXNG metasearch instance.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query to submit to SearXNG | |
| pageno | No | Page number of results to fetch | |
| engines | No | Optional list of specific search engines to use | |
| language | No | Language code for search results (e.g. en-US) | en-US |
| categories | No | Optional list of categories to search in (e.g. general, news, science, files, images, videos, music, it, social_media) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds only that the backing service is a privacy-respecting SearXNG instance – no mention of rate limits, auth, result volume, or how 'privacy-respecting' affects behavior, so the added value is modest.
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?
A single efficient sentence with the purpose front-loaded and no filler. It is perhaps overly terse for a tool with five parameters and multiple sibling alternatives, but nothing is wasted.
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?
With five parameters and an output schema present, the description covers the core action but omits anything about result shape, pagination limits, or how to choose engines/categories. Adequate but with clear gaps given the sibling set.
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 all five parameters (query, pageno, engines, language, categories) are documented in the schema itself. The description adds no syntax or format detail beyond that, so the baseline 3 applies.
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?
States a specific verb ('Perform a web search') and resource, plus the backend ('SearXNG metasearch instance'). It does not distinguish this from siblings like searxng_search_app or searxng_ingest_search, leaving the agent to infer which search variant to pick.
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?
No when-to-use guidance, no prerequisites, and no mention of when the sibling search tools (searxng_search_app, searxng_ingest_search) would be preferable. The agent must guess based on name alone.
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.
5 tool updates
v2.3.2- Added
searxng_get_settings - Added
searxng_ingest_search - Added
searxng_reset_settings - Added
searxng_search_app - Added
searxng_set_settings
1 tool update
v0.11.1- Changed
web_search13 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / categories / descriptionPrevious value: -"Categories to search in (e.g., 'general', 'images', 'news'). Default: null (all categories)."New value: +"Optional list of categories to search in (e.g. general, news, science, files, images, videos, music, it, social_media)" - changed
Input schema / properties / engines / descriptionPrevious value: -"Specific search engines to use. Default: null (all available engines)."New value: +"Optional list of specific search engines to use" - changed
Input schema / properties / language / defaultPrevious value: -"en"New value: +"en-US" - changed
Input schema / properties / language / descriptionPrevious value: -"Language code for search results (e.g., 'en', 'de', 'fr'). Default: 'en'"New value: +"Language code for search results (e.g. en-US)" - removed
Input schema / properties / max_resultsRemoved value: -{ - "default": 10, - "description": "Maximum number of search results to return. Range: 1-50. Default: 10.", - "maximum": 50, - "minimum": 1, - "type": "integer" -} - changed
Input schema / properties / pageno / descriptionPrevious value: -"Page number for results. Must be minimum 1. Default: 1."New value: +"Page number of results to fetch" - removed
Input schema / properties / pageno / minimumRemoved value: -1 - removed
Input schema / properties / query / defaultRemoved value: -null - changed
Input schema / properties / query / descriptionPrevious value: -"Search query"New value: +"Search query to submit to SearXNG" - removed
Input schema / properties / safesearchRemoved value: -{ - "default": 1, - "description": "Safe search level: 0 (off), 1 (moderate), 2 (strict). Default: 1 (moderate).", - "type": "integer" -} - removed
Input schema / properties / time_rangeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Time range for search results. Options: 'day', 'week', 'month', 'year'. Default: null (no time restriction)." -} - added
Input schema / requiredAdded value: +[ + "query" +]
1 tool update
v1.0.0- First observed
web_search
TDQS
Scored across 6 tools
The tools are mostly distinct: settings get/set/reset are clearly separated, and the UI app is visibly different from raw search. However, web_search and searxng_ingest_search both perform SearXNG searches, so an agent must read descriptions carefully to choose between plain search and graph-ingesting search.
Five tools consistently use the searxng_ prefix with clear verb/object naming (ingest_search, get_settings, set_settings, reset_settings, search_app). The lone web_search tool is an understandable but noticeable deviation from that pattern.
Six tools is well-scoped for a SearXNG server: core search, graph ingestion, settings lifecycle, and an interactive UI. Each tool has a clear purpose, and none feels redundant or excessive.
The surface covers search, ingestion, full embedded-settings lifecycle, and an interactive UI, so there are no major dead ends. Minor gaps remain around richer search-result inspection or external-instance configuration, but core workflows are covered.
Maintenance
Related MCP Connectors
Web search, agentic search, news, page retrieval, sitemaps, and trending topics through Search1API.
Search the web, images, videos, news, and local businesses with robust filters, freshness controls…
Google, Bing, DuckDuckGo and Google Maps search results, free without an API key.
Provides AI assistants with access to Seltz's powerful Web Search capabilities.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to perform privacy-respecting web searches through SearXNG, with support for multiple search engines, categories, and advanced filtering options.221 npm27MIT
- AlicenseAqualityDmaintenanceEnables web search, image search, and news search through a self-hosted SearXNG instance. Provides privacy-focused meta-search capabilities aggregating results from multiple search engines.3221 npm1MIT
- AlicenseAqualityDmaintenanceEnables web search capabilities via a SearXNG instance, allowing for filtered searches across categories like news, images, and science. It supports multi-language queries, time-range filtering, and safe search options to provide formatted results with metadata.1221 npmMIT
- FlicenseAqualityDmaintenanceEnables privacy-respecting web, image, video, and news searches through SearxNG metasearch engine, with options for URL fetching and time filtering.567 PyPI-