web-search-plus-mcp
The web-search-plus-mcp server enables AI assistants to perform intelligent web searches across multiple providers.
web_searchtool: Perform web searches with a requiredqueryparameter, optional provider override, and configurable result count (default: 5)Intelligent auto-routing: Analyzes query intent to automatically select the best provider — e.g., facts/news → Serper, research/explanations → Tavily, semantic discovery → Exa
7 supported providers: Serper (Google), Tavily, Querit, Exa, Perplexity, You.com, and SearXNG
Force a specific provider: Override auto-routing by specifying
auto,serper,tavily, orexaGraceful fallback: If a provider's API key is missing, the server falls back to available providers
Privacy option: SearXNG support for self-hosted, privacy-first searching at zero cost
MCP-native: Compatible with Claude Desktop, NanoBot, and any MCP-compatible host
Easy deployment: Zero-install via
uvxor standard pip installation; API keys configured via environment variables or.envfile
Integrated via Serper to provide search results for facts, news, shopping, and local businesses.
Integrated to provide AI-synthesized answers with citations as one of the search provider options.
Integrated as a privacy-first, self-hosted search provider for retrieving web search results.
🔍 web-search-plus-mcp
Source-only multi-provider web search and bounded URL extraction for MCP clients.
web-search-plus-mcp is the standalone MCP packaging of Web Search Plus. It gives Claude Desktop, Cursor, NanoBot, Hermes native MCP, and other MCP-compatible hosts the source-only provider and evidence contract of Web Search Plus 3.0 without depending on the Hermes plugin runtime.
Version note: web-search-plus-mcp uses its own MCP package version (1.0.0) while tracking the source-only Web Search Plus v3.0.2 engine. The Hermes plugin is versioned separately; its plugin-loader, setup, Console, and release commands are not exposed by the standalone MCP server.
✨ Features
12 search providers + auto-routing — source-result providers only; answer-only endpoints are rejected instead of being presented as search
8 extract providers with private-target protection — Tavily, Exa, Linkup, Parallel, Firecrawl, You.com, Keenable, Serper
Additive v3 evidence contract — source observations, provider attempts, routing receipts, cache provenance, typed errors, and deterministic legacy projections
Bounded extraction context — long pages return a bounded preview plus a page-on-demand reference to the stored full text
Classic Routing v2 authority — registry-backed routing for multilingual/current, docs/API, arXiv, CVE/security, local/shopping, and OSS discovery
Quality reports + doctor checks — optional routing/result diagnostics plus compact offline health checks for configured providers/cache
Research mode — opt-in multi-provider search + top-source extraction with a time budget
Onboarding CLI —
status,list,setup, and persistent routingconfighelpers for MCP env/config wiringZero-install run —
uvx web-search-plus-mcpMCP-native — stdio server exposing stable
web_searchandweb_extracttools
Related MCP server: OneSearch MCP Server
What changes in 1.0
Native Perplexity and Kilo Perplexity answer endpoints are removed from the public provider enums because they do not expose a verified source-only mode.
The two MCP tool names and their legacy result fields remain stable. v3 evidence, attempts, receipts, limits, stored-content references, warnings, and typed errors are additive.
Existing config entries for retired answer providers are ignored in provider lists; retired default/fallback values are replaced in memory with
serperand reported as a migration warning.The MCP server keeps its stdio/subprocess boundary. Hermes-specific in-process plugin loading and Operator Console surfaces are intentionally not ported.
See Migrating to 1.0 before upgrading an existing 0.x installation.
🚀 Quick Start
# Run the MCP server instantly with uvx
uvx web-search-plus-mcp
# Or install globally
pip install web-search-plus-mcp
web-search-plus-mcpAt least one provider credential is required for search. Extraction needs at least one extraction-capable provider key.
🧭 Easier onboarding
Check configured providers:
web-search-plus-mcp statusList providers or presets:
web-search-plus-mcp list providers
web-search-plus-mcp list presetsWrite a starter .env template and print a canonical MCP stdio snippet:
web-search-plus-mcp setup --preset starterThe recommended starter preset is You.com + Serper + Linkup. It gives a practical source-only baseline for fast current search, Google-style discovery, and extraction workflows without wiring every provider on day one.
status returns a non-zero exit code when no search provider is configured, which makes it usable as a config check in scripts.
Persistent routing preferences live in config.json rather than .env:
web-search-plus-mcp config show
web-search-plus-mcp config set-default you # strict fixed-provider mode
web-search-plus-mcp config set-routing on # restore auto-routing
web-search-plus-mcp config set-priority you,serper,exa,firecrawl,tavily,linkup,parallel,brave,keenable
web-search-plus-mcp config set-extract-priority serper,tavily,exa,linkup,parallel,firecrawl,you,keenable
web-search-plus-mcp config set-fallback serper
web-search-plus-mcp config disable parallel
web-search-plus-mcp config enable parallel
web-search-plus-mcp config set-auto-allow parallel on
web-search-plus-mcp config set-threshold 0.45
web-search-plus-mcp config reset --yesUse --config-path /path/to/config.json or WEB_SEARCH_PLUS_CONFIG=/path/to/config.json for isolated MCP host installs. Provider secrets stay in environment variables; routing behavior stays in config.json. Search and extraction priorities are independent. If an extraction priority lists only selected providers, the remaining extract-capable providers are appended in the public registry order.
Other presets:
minimal— You.com onlylean— You.com + Linkupstarter— You.com + Serper + Linkupall— every supported provider env var
⚙️ MCP host config
Canonical stdio snippet for Claude Desktop, Cursor, NanoBot, or Hermes native MCP:
{
"mcpServers": {
"web-search-plus": {
"command": "uvx",
"args": ["web-search-plus-mcp"],
"env": {
"YOU_API_KEY": "your_you_key",
"SERPER_API_KEY": "your_serper_key",
"LINKUP_API_KEY": "your_linkup_key"
}
}
}
}Common places to paste this snippet:
Claude Desktop macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonClaude Desktop Windows:
%APPDATA%\\Claude\\claude_desktop_config.jsonClaude Desktop Linux:
~/.config/Claude/claude_desktop_config.jsonCursor: project/user MCP config using the same
mcpServersshapeHermes native MCP:
~/.hermes/config.yamlundermcp_serverswith equivalent command/env fields
You can also place a .env file next to the package/project with the same variables.
🔎 Search Providers
You.com — fast source-result provider for current and multilingual search
Serper — Google-style facts, news, shopping, local queries
Exa — semantic discovery, GitHub/docs, arXiv/academic, and OSS discovery
Firecrawl — web search plus scrape-ready content
Parallel — explicit-only LLM-ready web search with long excerpts (
PARALLEL_API_KEY,auto_allow=false)Tavily — research and analysis
Linkup — source-backed grounding/citations
Brave — explicit-only independent web index by default (
BRAVE_API_KEY,auto_allow=false)SearXNG — privacy-first self-hosted meta-search
SerpBase — explicit-only Google SERP API (
SERPBASE_API_KEY,auto_allow=false)Querit — explicit-only multilingual, real-time AI search (
QUERIT_API_KEY,auto_allow=false)Keenable — independent web index with search and extraction (
KEENABLE_API_KEY, or opt-in keyless public tier; off by default)
📄 Extract Providers
Tavily — public default first choice; fastest reliable extraction in the v2.1 benchmark
Exa — fast contents API, strong for docs/academic pages
Linkup — clean markdown and source-grounded fetches
Parallel — docs-focused fallback with full-content defaults of 60k characters per result / 120k total
Firecrawl — robust scrape fallback, useful for JS-heavy/blocked pages
You.com — LLM-ready snippets/content where available
Keenable — keyed or explicitly opted-in public extraction
Serper — fast webpage scraper extraction
auto_routing.extract_provider_priority can override the auto-extraction order without changing search routing. Explicit provider calls still try the requested provider first.
Keenable keyless public access
Keenable exposes authenticated endpoints via KEENABLE_API_KEY. It also has keyless /public endpoints, but those are opt-in and disabled by default. Without a key, Keenable is treated as unconfigured unless you explicitly enable public egress:
{ "keenable": { "allow_public": true } }or set:
KEENABLE_ALLOW_PUBLIC=1Use an API key for private or production use. The public endpoint sends queries and fetched URLs to a shared unauthenticated service and remains near the tail of the public default fallback order unless the operator configures a different extraction priority.
Private/internal extraction target guard
web_extract blocks user-supplied target URLs that point at private or internal networks before any provider is called. This covers loopback, RFC1918, CGNAT/shared-address ranges, IPv6 local/mapped-private ranges, multicast, cloud metadata hosts, and hostnames resolving to private/internal IPs.
Operator-configured provider endpoints are separate: local Firecrawl-compatible backends can still run on 127.0.0.1 through provider config. If you intentionally need to extract trusted intranet URLs, opt in explicitly:
{ "extract": { "allow_private_urls": true } }Leave this off for public/agent-controlled URL extraction.
GroktoCrawl / local Firecrawl-compatible backends
The Firecrawl provider can target a local Firecrawl-v2-compatible backend by overriding its search and scrape URLs in config.json. For example, a local GroktoCrawl instance listening on 127.0.0.1:8080 can be used without adding a separate provider:
{
"firecrawl": {
"api_url": "http://127.0.0.1:8080/v2/search",
"scrape_url": "http://127.0.0.1:8080/v2/scrape"
}
}Keep FIRECRAWL_API_KEY configured if your backend enforces bearer authentication; local development instances may ignore the header. This does not make GroktoCrawl the default and does not claim coverage for every Firecrawl endpoint.
🛠 MCP Tool Reference
This MCP server exposes exactly two stable, source-only tools: web_search and web_extract. Use web_search for source discovery and let the MCP host synthesize from those sources when needed; the server itself does not generate answers or truth claims.
The Hermes plugin exposes the same stable capability as web_search_plus and web_extract_plus; the names differ because MCP and Hermes use different tool surfaces.
web_search
Use for source discovery, current events, prices, weather, sports lineups, schedules, and whenever you want the raw search landscape first.
Parameters:
query— required search queryprovider—auto,serper,serpbase,brave,tavily,querit,linkup,exa,firecrawl,parallel,you,searxng,keenablecount— results to return, default5, max20depth— Exa depth:normal,deep,deep-reasoningtime_range—hour,day,week,month,yearfreshness— unifiedday,week,month, oryearrecency requestsearch_type—searchor Serper-nativenewscountry/language— explicit locale overridesinclude_domains/exclude_domains— domain allow/deny listsmode—normalorresearchquality_report— include routing/result diagnosticsresearch_time_budget— best-effort wall-clock budget for research mode
Example MCP arguments:
{
"query": "latest AI hardware news",
"provider": "auto",
"count": 5,
"quality_report": true
}web_extract
Parameters:
urls— required list of URLsprovider—auto,tavily,exa,linkup,parallel,firecrawl,you,keenable,serperformat—markdownorhtmlinclude_images— include image metadata when supportedinclude_raw_html— include raw HTML when supportedrender_js— render JavaScript before extraction when supported
Example MCP arguments:
{
"urls": ["https://example.com"],
"provider": "auto",
"format": "markdown"
}🧠 Classic Routing v2 examples
東京 AI ニュース 今日→ You.com multilingual/current searcharXiv 2024 LLM scaling laws→ Exa academic discoveryCVE-2025 openssl advisory→ Serper security/current searchbest bookshelf speakers under 1000 EUR Austria→ Serper/Firecrawl shopping/local searchopen source alternatives to Linear→ Exa/Firecrawl OSS discoveryrecent RAG vs fine-tuning benchmark sources→ source-result discovery; the MCP host may synthesize from returned sources
Guarded providers can still be called explicitly. To let one participate in provider="auto", opt in:
web-search-plus-mcp config set-auto-allow parallel on
web-search-plus-mcp config set-auto-allow parallel offDevelopment
python -m pip install -e ".[test]"
python -m pytest tests/ -q -p no:cacheprovider
ruff check .
python -m buildThe GitHub Actions workflow runs the test suite on Python 3.10, 3.11, and 3.12, then verifies Ruff, byte-compilation, wheel creation, and source-distribution creation.
Credits
Built on the Web Search Plus routing engine and packaged as a standalone MCP server.
License
MIT © 2026 robbyczgw-cla
Maintenance
Tools
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/robbyczgw-cla/web-search-plus-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server