smart-web-search-mcp
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., "@smart-web-search-mcpsearch for the latest Node.js LTS release notes and tell me which layer answered"
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.
smart-web-search-mcp
English | 中文说明见下
A Model Context Protocol (MCP) stdio server that exposes one LLM tool — smart_web_search — backed by a 5-provider fusion router with automatic cascade fallback:
L1 wigolo (stdio, 18 engines, free) + keenable (HTTP, free tier) in parallel
L2 tinyfish (wallet) → tavily (1000/mo free) serial pair
L3 serper (Google; 2500 one-time free, then paid) unconditional fallbackThe router picks the first layer with enough results and stops — cheap providers answer first, paid ones only fire when needed. Every call returns the full routing chain so the LLM can learn which layer served it.
Output format (v0.2.0)
By default the tool returns readable result blocks (aligned with what the major search MCP servers converged on), not raw provider JSON:
[1] Title: Example Page
URL: https://…
Published: 2026-09-28
Snippet: …
──
from L1 wigolo | kept 3 of 20 | layers: wigolo(degraded 10) → keenable(ok 10) | 4261msPass output_format: "json" to get a structured envelope instead: { query, results[], meta, chain } with whitelist fields only (title/url/snippet/published/source per result).
The package ships two console commands:
smart-web-search-mcp— the MCP stdio server (spawn-per-call core, zero cross-call state; Node ≥ 22.7 required for strip-only TypeScript execution — no build step)smart-web-search-install— a zero-dependency Python installer that detects installed AI agent CLIs (pi, Cursor, Cline, opencode, zcode, Qoder, mcode, commandcode, dsh, reasonix) and idempotently wires the MCP entry into each one's config
Install
uv tool install smart-web-search-mcp # or: pipx install smart-web-search-mcp
smart-web-search-install --list # detect installed agents (read-only)
smart-web-search-install --dry-run # preview config writes
smart-web-search-install # wire all detected agents (idempotent)Manual MCP config (any client that speaks stdio MCP):
command: smart-web-search-mcp
args: []Related MCP server: GroundRoute
Provider keys (all optional)
Provider | Tier | Without key | With key |
wigolo | L1, free | needs | — |
keenable | L1, free | shared public tier (1K req/hour, auto-backoff on 429) | 100K/mo ( |
tinyfish | L2, pay-as-you-go | skipped |
|
tavily | L2, 1000/mo free | skipped (opt-in) |
|
serper | L3, paid after free quota | skipped (opt-in) |
|
Keys are read from environment variables or ~/.pi/agent/extensions/smart-web-search-mcp.config.json (see smart-web-search-mcp.config.example.json shipped in the package). Without any keys, L1 wigolo still works — the search is functional out of the box.
Requirements: Python ≥ 3.10 (installer only), Node ≥ 22.7 (MCP server; uses built-in TypeScript type-stripping).
中文说明
smart-web-search-mcp 是一个 MCP stdio server:对 LLM 只暴露 1 个 工具 smart_web_search,内部按「梯次降级」策略路由 5 个搜索 provider——L1 wigolo + keenable(免费,并行)→ L2 tinyfish → tavily(串行)→ L3 serper(Google,无条件兜底)。低成本的层先答,付费层只在不够用时才烧;每次调用返回完整 routing chain,LLM 可感知是哪一层接住的。
安装
uv tool install smart-web-search-mcp # 或 pipx install smart-web-search-mcp
smart-web-search-install # 自动探测本机 agent 并写入 MCP 配置(幂等)支持自动探测并写入 10 家 agent 的 MCP 配置:pi(≥0.99.0 内置 MCP,旧扩展自动迁移)/ Cursor / Cline / opencode / zcode / Qoder CLI / mcode(MiniMax Code)/ commandcode / dsh / reasonix。未安装的自动跳过;覆盖已有条目前备份 .bak。
凭据
全部可选:不配任何 key 时 wigolo(L1)开箱即用。
key 来源:环境变量(
TINYFISH_API_KEY/TAVILY_API_KEY/SERPER_API_KEY/KEENABLE_API_KEY)或~/.pi/agent/extensions/smart-web-search-mcp.config.json(opt-in 开关 + 显式 key,模板见包内smart-web-search-mcp.config.example.json)。keenable 无 key 走共享公共层(1K 次/小时,429 自动节流 60s)。
工具参数(smart_web_search)
query(必填);max_results(默认 5);intent(general/news/paper/code/research,影响路由);recency(day/week/month/year);include_domains/exclude_domains(逗号分隔域名黑白名单,跨层生效);depth(basic/advanced);output_format(text默认 |json)。
输出格式(v0.2.0 起)
默认
text:标签块文本([1] Title: … / URL: … / Published: …(有则给)/ Source: …(有则给)/ Snippet: …,条目间空行),底部一行页脚:from L<层> <provider> | kept <截后> of <截前> | dedup: <去重前>→<去重后>(L1 有重复时) | layers: <各层(状态 条数)> | <总耗时>ms。空结果回单句No results found (layers tried: …)。output_format:"json":结构化 envelope{ query, results[], meta, chain },results 每条只含白名单字段title/url/snippet/published/source,chain 只含layer/provider/status/result_count/latency_ms/error。行为变更(相对 0.1.x):结果文本不再是 provider 原始 JSON;L1 双源合并按 URL 去重后截到
max_results(此前两源各截一份、最多 2×max)。需要旧式结构化数据请用output_format:"json"。
环境要求
Python ≥ 3.10(安装器,零依赖)
Node ≥ 22.7(MCP server 核心:TS strip-only 直跑,免 esbuild/免打包)
可选:
npm i -g wigolo(L1 免费源;缺失自动降级到其它层)
License
MIT
Available Tools
1 toolsmart_web_searchA
5-provider web search with cascade routing. L1 wigolo (free, 18 engines) + keenable (100K/mo free, independent index) in parallel → L2 tinyfish → tavily (serial; AI-optimized, 1000/mo free) → L3 serper (Google, 2500 free then paid). Returns search results as readable blocks (Title/URL/Snippet) with a one-line routing footer; output_format=json gives a structured envelope. Use this as the DEFAULT web search tool.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Search depth — basic=cheap, advanced=more thorough | |
| query | Yes | Search query | |
| intent | No | Query intent — influences routing (general = auto-detect) | |
| recency | No | Time filter (forwarded to all layers) | |
| location | No | Geo bias (e.g. US, CN) | |
| max_results | No | Max results (default 5) | |
| output_format | No | Output format: text (default) = readable result blocks; json = structured envelope (query/results/meta/chain) | |
| exclude_domains | No | Comma-separated domain blacklist | |
| include_domains | No | Comma-separated domain whitelist |
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 provider cascade, free-tier quotas (100K/mo, 1000/mo, 2500 then paid), parallel vs serial routing, and the exact return shape. It omits auth requirements, latency expectations, and failure/fallback behavior when all providers are exhausted.
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 with the core purpose, then provider detail, then return format, then the usage directive. It is dense but every clause carries routing, cost, or output information; the provider quota parentheticals are the only marginally extraneous part.
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 output schema exists, but the description compensates by describing the returned blocks (Title/URL/Snippet) and the JSON envelope. Combined with full schema coverage and the disclosed quota/routing behavior, an agent has enough to call it correctly; only auth and error handling are unaddressed.
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 nine parameters, including output_format and intent routing. The description restates output_format=json behavior but adds no new parameter-level syntax or semantics beyond the schema, so the baseline of 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+resource (web search) and goes further to name the five providers and their routing order, plus the return format. An agent knows exactly what this tool does and what it will get back without opening the 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?
Explicitly instructs 'Use this as the DEFAULT web search tool,' which is a clear when-to-use directive. There are no siblings, so no alternatives to exclude, but it also gives no when-not guidance (e.g. when a specialized search would be better).
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
v0.2.0- First observed
smart_web_search
TDQS
Scored across 1 tool
There is only one tool, so there is no possibility of misselection or overlapping purpose. Its stated role as the default web search entry point is unambiguous.
A single snake_case name (smart_web_search) is clean and readable, and with only one tool there is nothing to be inconsistent with. No mixed conventions or vague verbs appear.
Web search is fundamentally a single operation, so one tool is a defensible scope rather than a mismatch. It is slightly thin in that provider targeting, filtering, or page fetching are not exposed as separate capabilities.
The search capability itself is unusually thorough, with multi-provider cascade routing, parallel/serial fallbacks, and both block and JSON output formats. The only notable gap is the absence of any companion operation such as fetching/extracting the content behind a result URL.
Maintenance
Related MCP Connectors
Web search for AI agents — one tool across 6 engines, routed to the cheapest + cached.
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
The best web search for your AI Agent
Agent-native search engine with live web research optimized for AI agents.
Related MCP Servers
- AlicenseBqualityAmaintenanceOne endpoint, five search providers. Search broker for AI agents with automatic fallback, RRF ranking, and budget enforcement. The LiteLLM of web search.1376 PyPI5MIT
- AlicenseAqualityDmaintenanceWeb search for AI agents across 6 engines (Serper, Brave, Exa, Tavily, Firecrawl, Perplexity) through one search tool. Routes each query to the cheapest engine that clears a quality bar and caches repeats. Hosted, streamable-HTTP, BYOK supported.11MIT
- AlicenseAqualityCmaintenanceEnables AI agents to perform unified web searches, GitHub, and GitLab searches with caching, reranking, and fallback across multiple providers.417 npm18MIT
- AlicenseNot gradedqualityCmaintenanceProvides multi-provider web search capabilities with fallback chains, semantic reranking, and content extraction for grounded agent retrieval.1MIT