Multi-provider web search, extraction, optional cited answers, and onboarding for MCP clients
Project description
🔍 web-search-plus-mcp
Multi-provider web search, URL extraction, and optional cited answers 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 same provider family used by the Hermes/OpenClaw Web Search Plus tools.
Version note: web-search-plus-mcp uses its own MCP package version (0.7.0) while tracking the Web Search Plus Routing v2 engine family (v2.0.x). The plugin package is versioned separately as hermes-web-search-plus v2.0.x.
✨ Features
- 12 search providers — Serper, Brave, Tavily, Exa, Linkup, Firecrawl, native Perplexity, Kilo Perplexity, You.com, SearXNG, SerpBase, Querit
- 5 extract providers — Linkup, Firecrawl, Tavily, Exa, You.com
- Optional beta
web_answer— cited source-backed briefs when you explicitly want synthesis instead of raw results - Routing v2 auto-routing — class-aware routing for multilingual/current, docs/API, arXiv, CVE/security, local/shopping, OSS discovery, and answer/synthesis queries
- Quality reports — optional routing/result diagnostics
- 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 wiring - Zero-install run —
uvx web-search-plus-mcp - MCP-native — stdio server exposing
web_search,web_extract, and opt-inweb_answer
🚀 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-mcp
At 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 status
List providers or presets:
web-search-plus-mcp list providers
web-search-plus-mcp list presets
Write a starter .env template and print a canonical MCP stdio snippet:
web-search-plus-mcp setup --preset starter
The recommended starter preset is You.com + Serper + Linkup. It gives a practical Routing v2 baseline for fast current search, Google-style discovery, and clean extraction/citation workflows without wiring every provider on day one.
Add --enable-answer if you want the generated .env and snippet to opt into the beta web_answer tool:
web-search-plus-mcp setup --preset starter --enable-answer
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 Routing v2 auto-routing
web-search-plus-mcp config set-priority you,serper,exa,firecrawl,tavily,linkup
web-search-plus-mcp config set-fallback serper
web-search-plus-mcp config disable perplexity
web-search-plus-mcp config enable perplexity
web-search-plus-mcp config disable kilo-perplexity
web-search-plus-mcp config set-threshold 0.45
web-search-plus-mcp config reset --yes
Use --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.
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"
}
}
}
}
WSP_ENABLE_WEB_ANSWER=1 is optional. Without it, the MCP server exposes only the stable web_search and web_extract tools.
Common places to paste this snippet:
- Claude Desktop macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Claude Desktop Windows:
%APPDATA%\\Claude\\claude_desktop_config.json - Claude Desktop Linux:
~/.config/Claude/claude_desktop_config.json - Cursor: project/user MCP config using the same
mcpServersshape - Hermes 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 Routing v2 core provider for current, multilingual, and answer-shaped snippets
- 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
- Tavily — research and analysis
- Linkup — source-backed grounding/citations
- Brave — explicit-only independent web index by default (
BRAVE_API_KEY,auto_allow=false) - Perplexity — explicit-only native Perplexity API synthesized answers (
PERPLEXITY_API_KEY,sonar-pro,auto_allow=false) - Kilo Perplexity — explicit-only Perplexity via Kilo gateway (
KILOCODE_API_KEY,perplexity/sonar-pro,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)
📄 Extract Providers
- Linkup — recommended first choice for clean markdown and low cost
- Firecrawl — robust scrape fallback, useful for JS-heavy/blocked pages
- Tavily — extraction/content API
- Exa — contents API
- You.com — LLM-ready snippets/content where available
🛠 MCP Tool Reference
This MCP server exposes web_search and web_extract by default. It exposes web_answer only when WSP_ENABLE_WEB_ANSWER=1 is set.
The Hermes plugin exposes the same capability as web_search_plus, web_extract_plus, and web_answer_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,brave,tavily,exa,linkup,firecrawl,perplexity,kilo-perplexity,you,searxng,serpbase,queritcount— results to return, default5, max20depth— Exa depth:normal,deep,deep-reasoningtime_range—hour,day,week,month,yearinclude_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,firecrawl,linkup,tavily,exa,youformat—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": "linkup",
"format": "markdown"
}
web_answer optional beta
Use when you specifically want a short cited synthesis. Do not use it as a default replacement for web_search.
web_answer is slower than web_search because it searches, selects sources, and may extract top URLs. Its freshness default is none to avoid over-triggering recency filters on evergreen questions.
Parameters:
query— required question/topicmode—quickordeep, defaultquicksources— citation-ready source target, default3, max10freshness—none,auto,day,week,month,year, defaultnonemax_extracts— top URLs to extract, default2, max5output—answer,brief,sources, orjson
Enable it:
{
"env": {
"WSP_ENABLE_WEB_ANSWER": "1",
"YOU_API_KEY": "your_you_key",
"LINKUP_API_KEY": "your_linkup_key"
}
}
Example MCP arguments:
{
"query": "What changed in Hermes Agent's latest release?",
"mode": "quick",
"sources": 3,
"freshness": "none"
}
🧠 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 discoverysummarize the tradeoffs of RAG vs fine-tuning→ You.com withanswer_mode_recommended=true
Guarded providers can still be called explicitly. To let one participate in provider="auto", opt in:
web-search-plus-mcp config set-auto-allow serpbase on
web-search-plus-mcp config set-auto-allow serpbase off
Credits
Built on the Web Search Plus routing engine and packaged as a standalone MCP server.
License
MIT © 2026 robbyczgw-cla
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file web_search_plus_mcp-0.7.0.tar.gz.
File metadata
- Download URL: web_search_plus_mcp-0.7.0.tar.gz
- Upload date:
- Size: 955.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca086db484b508194f4127622237cd72b9392730087fbe0bf2181c4bd881ad5d
|
|
| MD5 |
f64f601c88719ece9492f48320c65331
|
|
| BLAKE2b-256 |
643177557f12516f73e7aa2d53b37575fbc80de1b9b3d4004f2ed26e705ce11a
|
File details
Details for the file web_search_plus_mcp-0.7.0-py3-none-any.whl.
File metadata
- Download URL: web_search_plus_mcp-0.7.0-py3-none-any.whl
- Upload date:
- Size: 57.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a7528ec56d09c170e756f6ce0cf07bb0847f5067e042b078be431862093f126
|
|
| MD5 |
a99f6a65ed5cc2c8f14a49cf3abf2318
|
|
| BLAKE2b-256 |
0ced4937bb014a21a8df8be69eb6b1d4b349fed71962971bfaa6bf804b88a55e
|