web-search-plus-mcp
🔍 web-search-plus-mcp
MCP-Server für webbasierte Suche und Extraktion über mehrere Anbieter mit intelligentem Auto-Routing.
web-search-plus-mcp ist das eigenständige MCP-Paket von Web Search Plus. Es ermöglicht Claude Desktop, NanoBot, Cursor und anderen MCP-kompatiblen Hosts den Zugriff auf dieselbe Python-Routing-Engine-Familie, die auch in den Hermes/OpenClaw Web Search Plus-Tools verwendet wird.
✨ Funktionen
10 Suchanbieter — Serper, Brave, Tavily, Exa, Querit, Linkup, Firecrawl, Perplexity, You.com, SearXNG
5 Extraktionsanbieter — Firecrawl, Linkup, Tavily, Exa, You.com
Intelligentes Auto-Routing — bewertet die Suchabsicht und wählt automatisch einen Anbieter aus
Qualitätsberichte — optionale Routing-/Ergebnisdiagnose
Forschungsmodus — optionale Suche über mehrere Anbieter + Extraktion der besten Quellen mit Zeitbudget
Zero-Install-Ausführung —
uvx web-search-plus-mcpMCP-nativ — stdio-Server, der
web_searchundweb_extractbereitstellt
Related MCP server: OneSearch MCP Server
🚀 Schnellstart
# Run instantly with uvx
uvx web-search-plus-mcp
# Or install globally
pip install web-search-plus-mcp
web-search-plus-mcpFür die Suche ist mindestens ein Anbieter-Zugangsdaten erforderlich. Für die Extraktion wird mindestens ein Schlüssel für einen extraktionsfähigen Anbieter benötigt.
⚙️ Claude Desktop-Konfiguration
Fügen Sie dies unter macOS zu ~/Library/Application Support/Claude/claude_desktop_config.json oder unter Windows zu %APPDATA%\Claude\claude_desktop_config.json hinzu:
{
"mcpServers": {
"web-search-plus": {
"command": "uvx",
"args": ["web-search-plus-mcp"],
"env": {
"LINKUP_API_KEY": "your_linkup_key",
"TAVILY_API_KEY": "your_tavily_key",
"EXA_API_KEY": "your_exa_key",
"FIRECRAWL_API_KEY": "your_firecrawl_key",
"BRAVE_API_KEY": "your_brave_key",
"SERPER_API_KEY": "your_serper_key",
"QUERIT_API_KEY": "your_querit_key",
"PERPLEXITY_API_KEY": "your_perplexity_key",
"YOU_API_KEY": "your_you_key",
"SEARXNG_INSTANCE_URL": "https://your-searxng-instance.example.com"
}
}
}
}Sie können auch eine .env-Datei neben dem Paket/Projekt mit denselben Variablen ablegen.
🔎 Suchanbieter
Serper — Fakten im Google-Stil, Nachrichten, Shopping, lokale Suchanfragen
Brave — unabhängiger Web-Index für allgemeine Zwecke
Tavily — Forschung und Analyse
Exa — semantische Entdeckung, Ähnlichkeit, Deep/Deep-Reasoning-Synthese
Querit — mehrsprachige Echtzeit-KI-Suche
Linkup — quellenbasierte Fundierung/Zitate
Firecrawl — Websuche plus bereitstehende Inhalte zum Scrapen
Perplexity — direkt synthetisierte Antworten
You.com — LLM-fähige Echtzeit-Snippets
SearXNG — datenschutzorientierte, selbst gehostete Meta-Suche
📄 Extraktionsanbieter
Linkup — empfohlene erste Wahl für sauberes Markdown und niedrige Kosten
Firecrawl — robuster Fallback für Scrapes, nützlich für JS-lastige/blockierte Seiten
Tavily — Extraktions-/Inhalts-API
Exa — Inhalts-API
You.com — LLM-fähige Snippets/Inhalte, sofern verfügbar
🛠 MCP-Tool-Referenz
web_search
Parameter:
query— erforderliche Suchanfrageprovider—auto,serper,brave,tavily,exa,querit,linkup,firecrawl,perplexity,you,searxngcount— Anzahl der zurückzugebenden Ergebnisse, Standard5, Maximum20depth— Exa-Tiefe:normal,deep,deep-reasoningtime_range—hour,day,week,month,yearinclude_domains/exclude_domains— Positiv-/Negativlisten für Domainsmode—normaloderresearchquality_report— Routing-/Ergebnisdiagnose einbeziehenresearch_time_budget— bestmögliches Zeitbudget für den Forschungsmodus
Beispiel für MCP-Argumente:
{
"query": "latest Hermes Agent release",
"provider": "linkup",
"count": 5,
"quality_report": true
}web_extract
Parameter:
urls— erforderliche Liste von URLsprovider—auto,firecrawl,linkup,tavily,exa,youformat—markdownoderhtmlinclude_images— Bildmetadaten einbeziehen, sofern unterstütztinclude_raw_html— rohes HTML einbeziehen, sofern unterstütztrender_js— JavaScript vor der Extraktion rendern, sofern unterstützt
Beispiel für MCP-Argumente:
{
"urls": ["https://example.com"],
"provider": "linkup",
"format": "markdown"
}🧠 Beispiele für Auto-Routing
iPhone 16 Pro price→ Serper/Brave Suche im Shopping-Stilhow does TCP/IP work→ Tavily Suche im Forschungsstillatest multilingual EV market updates→ Querit/Linkup Echtzeit-/quellenbasierte Suchecompanies like Stripe→ Exa Entdeckungssuchewhat is quantum computing→ Perplexity/You.com Suche im Stil direkter Antwortenprivacy focused search results→ SearXNG bei entsprechender Konfiguration
Credits
Basiert auf der Web Search Plus-Routing-Logik, die ursprünglich für OpenClaw/Clawhub entwickelt und später als hermes-web-search-plus auf Hermes portiert wurde.
Lizenz
MIT © 2026 robbyczgw-cla
Available Tools
2 toolsweb_extractB
Source-only URL extraction through 9 Web Search Plus v3 providers. Responses preserve bounded-context limits, truncation warnings, evidence, and page-on-demand stored-content references.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | URLs to extract | |
| spans | No | Select deterministic semantic spans from extracted text. | |
| format | No | markdown | |
| provider | No | auto | |
| render_js | No | ||
| spans_query | No | Optional query used to rank semantic spans. | |
| include_images | No | ||
| include_raw_html | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does a solid job: it reveals that responses preserve bounded-context limits, include truncation warnings, retain evidence, and reference page-on-demand stored-content. These are genuinely useful behavioral traits an agent needs to anticipate before calling, going beyond a mere 'extracts pages' statement.
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 tight at two sentences, front-loading the core purpose before the behavioral notes. No filler or redundant phrasing, though the second sentence is dense with jargon (bounded-context limits, page-on-demand stored-content) that could be simplified.
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 tool with 8 parameters, no annotations, and no output schema, the description is too thin. It explains provider-source behavior but omits guidance on key options like rendering JavaScript, image/raw-HTML inclusion, or the semantic-span selection feature. An agent cannot infer how renders_js or include_raw_html affect output from this text.
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 only 38% across 8 parameters, and eight parameters (spans, format, render_js, include_images, include_raw_html, spans_query, provider) receive no explanation in the description. The only link is the mention of '9 providers', which loosely maps to the provider enum, but the description does not compensate for the heavy schema gap.
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 states a specific verb+resource pair ('source-only URL extraction' from URLs) and names the 9 providers behind it. 'Source-only' clearly implies the tool works from given URLs rather than search terms, which helps distinguish it from its only sibling web_search, though it never names that sibling explicitly.
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?
'Source-only URL extraction' implies the tool is for extracting content from URLs you already have, and by contrast web_search would be for discovering URLs via queries. However, the description never explicitly states 'use this when you have URLs' or 'use web_search when you need to find pages', leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchC
Source-only web search through the Web Search Plus v3 runtime. Routes across configured source-result providers and returns additive v3 evidence, routing receipts, provider attempts, cache provenance, and typed errors.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | normal fast path or opt-in research mode. | normal |
| count | No | Number of results | |
| depth | No | Exa depth: normal, deep multi-source search, or deep-reasoning. | normal |
| query | Yes | Search query | |
| country | No | ISO 3166-1 alpha-2 country override (e.g. at, fr). | |
| language | No | ISO 639-1 language override (e.g. de), or auto via config defaults. | |
| no_cache | No | Bypass the search cache and fetch live results. Use for recency queries when a cached hit would be stale. | |
| provider | No | Force a specific provider, or use auto-routing. | auto |
| cache_ttl | No | Search-cache TTL in seconds. Default is 3600 if omitted. | |
| freshness | No | Unified recency filter alias for providers that support freshness. | |
| time_range | No | Recency filter. | |
| search_type | No | Search vertical. Serper and TinyFish serve news natively; other providers report unsupported metadata. | search |
| quality_report | No | Attach routing/result diagnostics. | |
| exclude_domains | No | Exclude these domains. | |
| include_domains | No | Restrict to these domains. | |
| research_time_budget | No | Best-effort budget for research mode. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal non-obvious behavior such as routing across providers, returning cache provenance, and emitting typed errors. However, it does not explain how results are structured, how caching affects behavior, or what side effects or limitations exist.
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 sentence and front-loaded with 'web search', but it is dense with undefined jargon such as 'additive v3 evidence' and 'routing receipts'. It is concise in length but not in clarity, and the value of several phrases is questionable.
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 16-parameter tool with no annotations and no output schema, the description is far too thin. It does not explain the shape of returned evidence, the meaning of 'source-only', how provider routing works in practice, or when to set key options like mode, depth, or provider. An agent would need to rely entirely on the schema.
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 baseline is 3 even though the description itself adds no parameter-level meaning. The description's mentions of routing and cache provenance thematically relate to parameters like provider and no_cache, but it does not enrich the 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?
The description names a specific verb and resource ('web search') and differentiates it from the sibling web_extract by emphasizing search rather than extraction. However, 'source-only' and 'Web Search Plus v3 runtime' are jargon that obscure rather than clarify the core function.
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?
There is no guidance on when to use this tool versus web_extract or any alternative. The description implies a search use case but does not state when it is appropriate, when it is not, or what conditions would route an agent to a sibling tool.
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.
1 tool update
v4.3.1- Changed
web_search2 fields changed- added
Input schema / properties / cache_ttlAdded value: +{ + "description": "Search-cache TTL in seconds. Default is 3600 if omitted.", + "maximum": 86400, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / no_cacheAdded value: +{ + "default": false, + "description": "Bypass the search cache and fetch live results. Use for recency queries when a cached hit would be stale.", + "type": "boolean" +}
2 tool updates
v4.0.2- Changed
web_extract1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "tavily", - "exa", - "linkup", - "parallel", - "firecrawl", - "you", - "keenable", - "serper", - "hound" -]New value: +[ + "auto", + "tavily", + "exa", + "linkup", + "parallel", + "firecrawl", + "you", + "keenable", + "serper", + "donsetch" +]
- Changed
web_search1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "serpbase", - "brave", - "tavily", - "querit", - "linkup", - "exa", - "firecrawl", - "parallel", - "you", - "searxng", - "keenable", - "hound", - "octen", - "tinyfish" -]New value: +[ + "auto", + "serper", + "serpbase", + "brave", + "tavily", + "querit", + "linkup", + "exa", + "firecrawl", + "parallel", + "you", + "searxng", + "keenable", + "donsetch", + "octen", + "tinyfish" +]
1 tool update
v3.6.0- Changed
web_search2 fields changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "serpbase", - "brave", - "tavily", - "querit", - "linkup", - "exa", - "firecrawl", - "parallel", - "you", - "searxng", - "keenable", - "hound", - "octen" -]New value: +[ + "auto", + "serper", + "serpbase", + "brave", + "tavily", + "querit", + "linkup", + "exa", + "firecrawl", + "parallel", + "you", + "searxng", + "keenable", + "hound", + "octen", + "tinyfish" +] - changed
Input schema / properties / search_type / descriptionPrevious value: -"Search vertical. Serper serves news natively; other providers report unsupported metadata."New value: +"Search vertical. Serper and TinyFish serve news natively; other providers report unsupported metadata."
2 tool updates
v3.3.1- Changed
web_extract3 fields changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "tavily", - "exa", - "linkup", - "parallel", - "firecrawl", - "you", - "keenable", - "serper" -]New value: +[ + "auto", + "tavily", + "exa", + "linkup", + "parallel", + "firecrawl", + "you", + "keenable", + "serper", + "hound" +] - added
Input schema / properties / spansAdded value: +{ + "default": false, + "description": "Select deterministic semantic spans from extracted text.", + "type": "boolean" +} - added
Input schema / properties / spans_queryAdded value: +{ + "description": "Optional query used to rank semantic spans.", + "type": "string" +}
- Changed
web_search1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "serpbase", - "brave", - "tavily", - "querit", - "linkup", - "exa", - "firecrawl", - "parallel", - "you", - "searxng", - "keenable" -]New value: +[ + "auto", + "serper", + "serpbase", + "brave", + "tavily", + "querit", + "linkup", + "exa", + "firecrawl", + "parallel", + "you", + "searxng", + "keenable", + "hound", + "octen" +]
1 tool update
- Changed
web_search2 fields changed- changed
Input schema / properties / depth / descriptionPrevious value: -"Exa depth: normal, deep synthesis, or deep-reasoning."New value: +"Exa depth: normal, deep multi-source search, or deep-reasoning." - changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "serpbase", - "brave", - "tavily", - "querit", - "linkup", - "exa", - "firecrawl", - "parallel", - "perplexity", - "kilo-perplexity", - "you", - "searxng", - "keenable" -]New value: +[ + "auto", + "serper", + "serpbase", + "brave", + "tavily", + "querit", + "linkup", + "exa", + "firecrawl", + "parallel", + "you", + "searxng", + "keenable" +]
2 tool updates
v0.16.0- Changed
web_extract1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "tavily", - "exa", - "linkup", - "parallel", - "firecrawl", - "you", - "keenable" -]New value: +[ + "auto", + "tavily", + "exa", + "linkup", + "parallel", + "firecrawl", + "you", + "keenable", + "serper" +]
- Changed
web_search4 fields changed- added
Input schema / properties / countryAdded value: +{ + "description": "ISO 3166-1 alpha-2 country override (e.g. at, fr).", + "type": "string" +} - added
Input schema / properties / freshnessAdded value: +{ + "description": "Unified recency filter alias for providers that support freshness.", + "enum": [ + "day", + "week", + "month", + "year" + ], + "type": "string" +} - added
Input schema / properties / languageAdded value: +{ + "description": "ISO 639-1 language override (e.g. de), or auto via config defaults.", + "type": "string" +} - added
Input schema / properties / search_typeAdded value: +{ + "default": "search", + "description": "Search vertical. Serper serves news natively; other providers report unsupported metadata.", + "enum": [ + "search", + "news" + ], + "type": "string" +}
2 tool updates
v0.13.0- Changed
web_extract1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "tavily", - "exa", - "linkup", - "parallel", - "firecrawl", - "you" -]New value: +[ + "auto", + "tavily", + "exa", + "linkup", + "parallel", + "firecrawl", + "you", + "keenable" +]
- Changed
web_search1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "serpbase", - "brave", - "tavily", - "querit", - "linkup", - "exa", - "firecrawl", - "parallel", - "perplexity", - "kilo-perplexity", - "you", - "searxng" -]New value: +[ + "auto", + "serper", + "serpbase", + "brave", + "tavily", + "querit", + "linkup", + "exa", + "firecrawl", + "parallel", + "perplexity", + "kilo-perplexity", + "you", + "searxng", + "keenable" +]
1 tool update
v0.12.0- Changed
web_search1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "brave", - "tavily", - "exa", - "linkup", - "firecrawl", - "parallel", - "perplexity", - "kilo-perplexity", - "you", - "searxng", - "serpbase", - "querit" -]New value: +[ + "auto", + "serper", + "serpbase", + "brave", + "tavily", + "querit", + "linkup", + "exa", + "firecrawl", + "parallel", + "perplexity", + "kilo-perplexity", + "you", + "searxng" +]
2 tool updates
v0.9.0- Changed
web_extract1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "tavily", - "exa", - "linkup", - "firecrawl", - "you" -]New value: +[ + "auto", + "tavily", + "exa", + "linkup", + "parallel", + "firecrawl", + "you" +]
- Changed
web_search1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "brave", - "tavily", - "exa", - "linkup", - "firecrawl", - "perplexity", - "kilo-perplexity", - "you", - "searxng", - "serpbase", - "querit" -]New value: +[ + "auto", + "serper", + "brave", + "tavily", + "exa", + "linkup", + "firecrawl", + "parallel", + "perplexity", + "kilo-perplexity", + "you", + "searxng", + "serpbase", + "querit" +]
2 tool updates
v0.8.0- Added
web_extract - Added
web_search
2 tool updates
v0.7.0- Removed
web_extract - Removed
web_search
1 tool update
v0.5.1- Changed
web_search1 field changed- changed
Input schema / properties / provider / enumPrevious value: -[ - "auto", - "serper", - "brave", - "tavily", - "exa", - "querit", - "linkup", - "firecrawl", - "perplexity", - "you", - "searxng" -]New value: +[ + "auto", + "serper", + "brave", + "tavily", + "exa", + "querit", + "linkup", + "firecrawl", + "perplexity", + "kilo-perplexity", + "you", + "searxng" +]
TDQS
Scored across 2 tools
The two tools, web_search and web_extract, have clearly distinct purposes: one performs searches, the other extracts content from a given URL. No overlap or ambiguity exists.
Both tools follow a consistent 'web_' prefix followed by a verb: search and extract. This is a clear and predictable pattern.
With only 2 tools, the server is on the thin side. While the two tools cover the core search+extract workflow, most servers for this domain offer a few more (e.g., search options, deep links, or cached pages). It's borderline but acceptable for a minimal implementation.
For a web search and extraction service, these two operations—searching and extracting—form a complete core lifecycle. There are no missing essential operations for the stated purpose.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Free web search for AI agents. No API key required. Hosted MCP in active development.
Multi-engine search for AI agents. Trust scoring, local corpus, MCP-native. Self-hostable, BYOK.
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
- AlicenseAqualityAmaintenance🔍 A Model Context Protocol (MCP) server providing unified access to multiple search engines (Tavily, Brave, Kagi), AI tools (Perplexity, FastGPT), and content processing services (Jina AI, Kagi). Combines search, AI responses, content processing, and enhancement features through a single interface.3885 npm355MIT
- AlicenseAqualityCmaintenanceA Model Context Protocol server that enables web search, scraping, crawling, and content extraction through multiple engines including SearXNG, Firecrawl, and Tavily.4325 npm144MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI assistants to perform web searches using SearXNG, a privacy-respecting metasearch engine.143MIT
- AlicenseNot gradedqualityDmaintenanceA production-ready Model Context Protocol server that brings AI-powered web search directly into development environments, providing intelligent search results with proper citations in Claude Desktop, Cursor, or any MCP-compatible client.73 npm23MIT