MCPInstall

web-search-plus

Unified search skill with Intelligent Auto-Routing. Uses multi-signal analysis to automatically select between Serper (Google), Tavily (Research), and Exa (Neural) with confidence scoring.

Installs
84
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/sundial-org/awesome-openclaw-skills --skill web-search-plus
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads web-search-plus automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

Web Search Plus

Multi-provider web search with Intelligent Auto-Routing: Serper (Google), Tavily (Research), Exa (Neural).

NEW in v2.3.0: Interactive setup wizard! Run python3 scripts/setup.py for guided configuration.

NEW in v2.2.5: Automatic error fallback — if one provider fails (rate limit, timeout, etc.), automatically tries the next provider in priority order!


🚀 First Run (Setup Wizard)

New to web-search-plus? The interactive setup wizard guides you through configuration:

python3 scripts/setup.py

The wizard will:

  1. Explain each provider — What they're best for, free tier limits, signup links
  2. Ask which providers to enable — You can use 1, 2, or all 3
  3. Collect API keys — Keys are stored locally in config.json (gitignored)
  4. Configure defaults — Default provider, auto-routing, result count

What Each Provider Is Best For

ProviderBest ForFree Tier
SerperGoogle results, shopping, prices, local businesses, news2,500/month
TavilyResearch questions, explanations, academic, full-page content1,000/month
ExaSemantic search, "similar to X", startup discovery, papers1,000/month

Reconfigure Anytime

python3 scripts/setup.py --reset

🔑 API Keys Setup (Manual)

NEW in v2.2.0: The script auto-loads API keys from .env in the skill directory!

Quick Setup

Option A: .env file (recommended)

# /path/to/skills/web-search-plus/.env
export SERPER_API_KEY="your-key"   # https://serper.dev
export TAVILY_API_KEY="your-key"   # https://tavily.com  
export EXA_API_KEY="your-key"      # https://exa.ai

Option B: config.json (NEW in v2.2.1)

# Copy the example config
cp config.example.json config.json

Then add your keys:

{
  "serper": { "api_key": "your-serper-key" },
  "tavily": { "api_key": "your-tavily-key" },
  "exa": { "api_key": "your-exa-key" }
}

⚠️ config.json is gitignored — your keys stay safe!

Just run — keys load automatically:

python3 scripts/search.py -q "your query"
# No need for 'source .env' anymore! ✨

Priority: config.json > .env > environment variable

Get Free API Keys

ProviderFree TierSign Up
Serper2,500 queries/mohttps://serper.dev
Tavily1,000 queries/mohttps://tavily.com
Exa1,000 queries/mohttps://exa.ai

⚠️ Don't Modify Core OpenClaw Config

Tavily, Serper, and Exa are NOT core OpenClaw providers.

❌ DON'T add to ~/.openclaw/openclaw.json:

"tools": { "web": { "search": { "provider": "tavily" }}}  // WRONG!

✅ DO use this skill's scripts — keys auto-load from .env

Core OpenClaw only supports brave as the built-in web search provider. This skill adds Serper, Tavily, and Exa as additional options via its own scripts.


🧠 Intelligent Auto-Routing

No need to choose a provider — just search! The skill uses multi-signal analysis to understand your query intent:

# These queries are intelligently routed with confidence scoring:
python3 scripts/search.py -q "how much does iPhone 16 cost"     # → Serper (68% MEDIUM)
python3 scripts/search.py -q "how does quantum entanglement work"  # → Tavily (86% HIGH)
python3 scripts/search.py -q "startups similar to Notion"       # → Exa (76% HIGH)
python3 scripts/search.py -q "MacBook Pro M3 specs review"      # → Serper (70% HIGH)
python3 scripts/search.py -q "explain pros and cons of React"   # → Tavily (85% HIGH)
python3 scripts/search.py -q "companies like stripe.com"        # → Exa (100% HIGH)

How It Works

The routing engine analyzes multiple signals:

🛒 Shopping Intent → Serper

Signal TypeExamplesWeight
Price patterns"how much", "price of", "cost of"HIGH
Purchase intent"buy", "purchase", "order", "where to buy"HIGH
Deal signals"deal", "discount", "cheap", "best price"MEDIUM
Product + Brand"iPhone 16", "Sony headphones" + specs/reviewHIGH
Local business"near me", "restaurants", "hotels"HIGH

📚 Research Intent → Tavily

Signal TypeExamplesWeight
Explanation"how does", "why does", "explain", "what is"HIGH
Analysis"compare", "pros and cons", "difference between"HIGH
Learning"tutorial", "guide", "understand", "learn"MEDIUM
Depth"in-depth", "comprehensive", "detailed"MEDIUM
Complex queriesLong, multi-clause questionsBONUS

🔍 Discovery Intent → Exa

Signal TypeExamplesWeight
Similarity"similar to", "alternatives to", "competitors"VERY HIGH
Company discovery"companies like", "startups doing", "who else"HIGH
URL detectionAny URL or domain (stripe.com)VERY HIGH
Academic"arxiv", "research papers", "github projects"HIGH
Funding"Series A", "YC", "funded startup"HIGH

Confidence Scoring

Every routing decision includes a confidence level:

ConfidenceLevelMeaning
70-100%HIGHStrong signal match, very reliable
40-69%MEDIUMGood match, should work well
0-39%LOWAmbiguous query, using fallback

Debug Routing Decisions

See the full analysis:

python3 scripts/search.py --explain-routing -q "how much does iPhone 16 Pro cost"

Output:

{
  "query": "how much does iPhone 16 Pro cost",
  "routing_decision": {
    "provider": "serper",
    "confidence": 0.68,
    "confidence_level": "medium",
    "reason": "moderate_confidence_match"
  },
  "scores": {"serper": 7.0, "tavily": 0.0, "exa": 0.0},
  "top_signals": [
    {"matched": "how much", "weight": 4.0},
    {"matched": "brand + product detected", "weight": 3.0}
  ],
  "query_analysis": {
    "word_count": 7,
    "is_complex": false,
    "has_url": null,
    "recency_focused": false
  }
}

🔍 When to Use This Skill vs Built-in Brave Search

Use Built-in Brave Search when:

  • ✅ General web searches (news, info, questions)
  • ✅ Privacy is important
  • ✅ Quick lookups without specific requirements

Use web-search-plus when:

→ Serper (Google results):

  • 🛍️ Product specs, prices, shopping - "Compare iPhone 16 vs Samsung S24"
  • 📍 Local businesses, places - "Best pizza in Berlin"
  • 🎯 "Google it" - Explicitly wants Google results
  • 📰 Shopping/images/news - --type shopping/images/news
  • 🏆 Knowledge Graph - Structured info (prices, ratings, etc.)

→ Tavily (AI-optimized research):

  • 📚 Research questions - "How does quantum computing work?"
  • 🔬 Deep dives - Complex multi-part questions
  • 📄 Full page content - Not just snippets (--raw-content)
  • 🎓 Academic research - Synthesized answers
  • 🔒 Domain filtering - --include-domains for trusted sources

→ Exa (Neural semantic search):

  • 🔗 Similar pages - "Sites like OpenAI.com" (--similar-url)
  • 🏢 Company discovery - "AI companies like Anthropic"
  • 📝 Research papers - --category "research paper"
  • 💻 GitHub projects - --category github
  • 📅 Date-specific - --start-date / --end-date

Provider Comparison

FeatureSerperTavilyExa
Speed⚡⚡⚡⚡⚡⚡⚡
Factual Accuracy⭐⭐⭐⭐⭐⭐⭐⭐
Semantic Understanding⭐⭐⭐⭐⭐⭐
Research Quality⭐⭐⭐⭐⭐⭐⭐
Full Page Content✗✓✓
Shopping/Local✓✗✗
Similar Pages✗✗✓
Knowledge Graph✓✗✗

Usage Examples

Auto-Routed (Recommended)

python3 scripts/search.py -q "iPhone 16 Pro Max price"          # → Serper
python3 scripts/search.py -q "how does HTTPS encryption work"   # → Tavily
python3 scripts/search.py -q "startups similar to Notion"       # → Exa

Explicit Provider

python3 scripts/search.py -p serper -q "weather Berlin" --type weather
python3 scripts/search.py -p tavily -q "quantum computing" --depth advanced
python3 scripts/search.py -p exa --similar-url "https://stripe.com" --category company

Configuration

config.json

{
  "auto_routing": {
    "enabled": true,
    "fallback_provider": "serper",
    "confidence_threshold": 0.3,
    "disabled_providers": []
  },
  "serper": {"country": "us", "language": "en"},
  "tavily": {"depth": "advanced"},
  "exa": {"type": "neural"}
}

Output Format

{
  "provider": "serper",
  "query": "iPhone 16 price",
  "results": [{"title": "...", "url": "...", "snippet": "...", "score": 0.95}],
  "answer": "Synthesized answer...",
  "routing": {
    "auto_routed": true,
    "provider": "serper",
    "confidence": 0.78,
    "confidence_level": "high",
    "reason": "high_confidence_match",
    "top_signals": [{"matched": "price", "weight": 3.0}]
  }
}

FAQ

General

Q: How does auto-routing decide which provider to use?

Multi-signal analysis scores each provider based on: price patterns, explanation phrases, similarity keywords, URLs, product+brand combos, and query complexity. Highest score wins. Use --explain-routing to see the decision breakdown.

Q: What if it picks the wrong provider?

Override with -p serper/tavily/exa. Check --explain-routing to understand why it chose differently.

Q: What does "low confidence" mean?

Query is ambiguous (e.g., "Tesla" could be cars, stock, or company). Falls back to Serper. Results may vary.

Q: Can I disable a provider?

Yes! In config.json: "disabled_providers": ["exa"]

API Keys

Q: Which API keys do I need?

At minimum ONE key. You can use just Serper, just Tavily, or all three. Missing keys = that provider is skipped.

Q: Where do I get API keys?

Q: How do I set API keys?

Two options (both auto-load):

Option A: .env file

export SERPER_API_KEY="your-key"

Option B: config.json (v2.2.1+)

{ "serper": { "api_key": "your-key" } }

Routing Details

Q: How do I know which provider handled my search?

Check routing.provider in JSON output, or [🔍 Searched with: Provider] in chat responses.

Q: Why does it sometimes choose Serper for research questions?

If the query has brand/product signals (e.g., "how does Tesla FSD work"), shopping intent may outweigh research intent. Override with -p tavily.

Q: What's the confidence threshold?

Default: 0.3 (30%). Below this = low confidence, uses fallback. Adjustable in config.json.

Troubleshooting

Q: "No API key found" error?

  1. Check .env exists in skill folder with export VAR=value format
  2. Keys auto-load from skill's .env since v2.2.0
  3. Or set in system environment: export SERPER_API_KEY="..."

Q: Getting empty results?

  1. Check API key is valid
  2. Try a different provider with -p
  3. Some queries have no results (very niche topics)

Q: Rate limited?

NEW in v2.2.5: Automatic fallback! If one provider hits rate limits, the script automatically tries the next provider in priority order (serper → tavily → exa). You'll see fallback info in stderr and the response will include routing.fallback_used: true.

Provider limits: Serper 2,500 free total, Tavily 1,000/month free, Exa 1,000/month free.

For OpenClaw Users

Q: How do I use this in chat?

Just ask! OpenClaw auto-detects search intent. Or explicitly: "search with web-search-plus for..."

Q: Does it replace built-in Brave Search?

No, it's complementary. Use Brave for quick lookups, web-search-plus for research/shopping/discovery.

Q: Can I see which provider was used?

Yes! SOUL.md can include attribution: [🔍 Searched with: Serper/Tavily/Exa]

FAQ

What does the web-search-plus skill do?

Unified search skill with Intelligent Auto-Routing. Uses multi-signal analysis to automatically select between Serper (Google), Tavily (Research), and Exa (Neural) with confidence scoring.

How do I install web-search-plus?

Run npx skills add https://github.com/sundial-org/awesome-openclaw-skills --skill web-search-plus in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/web-search-plus/ (personal) or .claude/skills/web-search-plus/ (project).

Which AI agents can use web-search-plus?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is web-search-plus safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains web-search-plus?

It is published by sundial-org in sundial-org/awesome-openclaw-skills. It has 84 recorded installs.

More from sundial-org/awesome-openclaw-skills

View all →

stock-market-pro

sundial-org/awesome-openclaw-skills

Professional stock price tracking, fundamental analysis, and financial reporting tool. Supports global markets (US, KR, etc.), Crypto, and Forex with real-time data. (1) Real-time quotes, (2) Valuation metrics (PE, EPS, ROE), (3) Earnings calendar and consensus, (4) High-quality Candlestick & Line charts with technical indicators (MA5/20/60).

Business & Finance4.1K installs

ontology

sundial-org/awesome-openclaw-skills

Typed knowledge graph for structured agent memory and composable skills. Use when creating/querying entities (Person, Project, Task, Event, Document), linking related objects, enforcing constraints, planning multi-step actions as graph transformations, or when skills need to share state. Trigger on "remember", "what do I know about", "link X to Y", "show dependencies", entity CRUD, or cross-skill data access.

finance-news

sundial-org/awesome-openclaw-skills

Market news briefings with AI summaries. Use when asked about stock news, market updates, portfolio performance, morning/evening briefings, financial headlines, or price alerts. Supports US/Europe/Japan markets, WhatsApp delivery, and English/German output.

Business & Finance2.8K installs

exa-web-search-free

sundial-org/awesome-openclaw-skills

Free AI search via Exa MCP. Web search for news/info, code search for docs/examples from GitHub/StackOverflow, company research for business intel. No API key needed.

memory-setup

sundial-org/awesome-openclaw-skills

Enable and configure Moltbot/Clawdbot memory search for persistent context. Use when setting up memory, fixing "goldfish brain," or helping users configure memorySearch in their config. Covers MEMORY.md, daily logs, and vector search setup.

1.7K installs

ffmpeg-video-editor

sundial-org/awesome-openclaw-skills

Generate FFmpeg commands from natural language video editing requests - cut, trim, convert, compress, change aspect ratio, extract audio, and more.

Media & Creative1.6K installs

Popular productivity & automation skills

View category →

agent-browser

vercel-labs/agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.

OfficialProductivity & Automation1.3M installs

lark-doc

open.feishu.cn

飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。

lark-base

open.feishu.cn

飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。

lark-drive

open.feishu.cn

飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。

lark-shared

open.feishu.cn

Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.

lark-im

open.feishu.cn

飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。