agent-web-search
Agent Web Search
Multi-Anbieter-Websuche für KI-Agenten.
Agent Web Search bietet Hermes, Codex CLI, Claude Code, OpenCode und gewöhnlichen Skripten ein einheitliches Websuch-Tool. Es führt unabhängige Anbieter parallel aus und liefert normalisierte Ergebnisse. Der standardmäßige Anbieter-Set ist:
ARK grounding — Volcengine ARK Responses API +
web_search(Doubao)DDGS — DuckDuckGo-Suche
Exa — Exa-MCP-Suche (Best Effort; Verfügbarkeit hängt vom Endpunkt ab)
Optionale Anbieter sind ebenfalls implementiert:
Gemini — Google-Search-Grounding über Gemini Interactions API
Grok — xAI Responses API mit nativer Websuche und X-Suche
Tavily — Tavily Search API mit nativen Ergebnisanzahl- und Zeitraum-Filtern
Die Architektur ist anbieterbasiert, sodass DeepSeek, Brave und andere suchfähige Anbieter hinzugefügt werden können, ohne die MCP- oder Hermes-Schnittstellen zu ändern.
Schnellstart
# Omit this line when the ARK provider is not enabled.
export ARK_API_KEY="your_ark_api_key"
pipx install 'git+https://github.com/JerryLiu369/agent-web-search.git'
agent-web-search-mcpGeben Sie API-Schlüssel nicht in die Shell-Historie, in Quellcode, Git-Commits oder Screenshots ein. Verwenden Sie einen lokalen .env-/Secret-Manager und exportieren Sie die Variable in der Prozessumgebung.
Related MCP server: GroundRoute
Verwendung mit Codex CLI
export ARK_API_KEY="your_ark_api_key"
codex mcp add agent-web-search -- \
agent-web-search-mcp
codex mcp listVerwendung mit Claude Code
export ARK_API_KEY="your_ark_api_key"
claude mcp add agent-web-search -- \
agent-web-search-mcpOder fügen Sie eine Projekt-.mcp.json hinzu:
{
"mcpServers": {
"agent-web-search": {
"command": "agent-web-search-mcp",
"args": [],
"env": {"ARK_API_KEY": "${ARK_API_KEY}"}
}
}
}Verwendung mit OpenCode
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"agent-web-search": {
"type": "local",
"command": ["agent-web-search-mcp"],
"environment": {"ARK_API_KEY": "${ARK_API_KEY}"},
"enabled": true
}
}
}Verwendung mit Hermes
Installieren Sie das native Plugin direkt von GitHub:
pip install 'ddgs>=9.0'
hermes plugins install JerryLiu369/agent-web-search --no-enable
hermes plugins enable agent-web-search --allow-tool-overrideDas Plugin registriert das standardmäßige web_search-Tool und ruft denselben Agent-Web-Search-Kern auf, der von MCP und CLI verwendet wird. Wenn Sie den generischen MCP-Pfad bevorzugen, kann Hermes auch mit hermes mcp add verbunden werden.
Der GitHub-Installer installiert das Paket und seine optionalen Abhängigkeiten:
pipx install 'git+https://github.com/JerryLiu369/agent-web-search.git'Hermes erfordert die explizite --allow-tool-override-Berechtigung, da dieses Plugin absichtlich sein integriertes web_search-Tool ersetzt. Starten Sie nach der Aktivierung eine neue Hermes-Sitzung; starten Sie das Gateway neu, wenn Sie einen Messaging-Kanal verwenden.
CLI
agent-web-search "What changed in the latest OpenAI Codex CLI?"
agent-web-search "GPU kernel generation papers from the past month" --time-range m --max-results 5
agent-web-search "latest news" --provider ark --provider ddgsVolcengine-Kooperationsprämien
Agent Web Search erfordert keine Teilnahme an einem Prämienprogramm. Benutzer, die ARK verwenden möchten, können ihren eigenen API-Schlüssel erstellen und optional das offizielle Volcengine Collaboration Rewards Program prüfen. Das Programm kann gemäß seinen aktuellen Regeln Prämienressourcen bereitstellen, aber Kontingent, unterstützte Modelle, Gültigkeitsdauer und Datenautorisierungsbedingungen können sich ändern. Prüfen Sie die offizielle Seite, bevor Sie sich anmelden. Die Teilnahme bedeutet die Akzeptanz der Datenautorisierungsbedingungen des Anbieters; sie ist nicht erforderlich, um Agent Web Search zu verwenden.
Konfiguration
ARK_API_KEY: optional; nur erforderlich, wenn der ARK-Anbieter aktiviert ist. Durch Komma/Zeilenumbruch getrennte Schlüssel werden akzeptiert.AGENT_WEB_SEARCH_PROVIDERS: beim Start aktiviertes Anbieter-Set; Standard istark,ddgs,exa.AGENT_WEB_SEARCH_TIMEOUT: Timeout pro Anbieter in Sekunden (Standard60).AGENT_WEB_SEARCH_ARK_MODELS: durch Komma getrennte ARK-Modell-IDs.EXA_MCP_URL: optionale Exa-MCP-Endpunktüberschreibung.GEMINI_API_KEY: optionaler Gemini-Anbieterschlüssel.AGENT_WEB_SEARCH_GEMINI_MODEL: optionale Gemini-Modell-ID.XAI_API_KEY: optionaler Grok-Anbieterschlüssel.AGENT_WEB_SEARCH_GROK_MODEL: optionale Grok-Modell-ID.TAVILY_API_KEY: optionaler Tavily-Anbieterschlüssel.
Der Anbieter-Set wird beim Start des Hermes-Plugins oder MCP-Servers aufgelöst. Das öffentliche web_search-Schema wird aus diesem Set generiert. Eine Anfrage kann das Set mit providers eingrenzen, kann aber keinen Anbieter aktivieren, der beim Start deaktiviert wurde. Wenn grok beim Start aktiviert ist, stellt das Schema zusätzlich grok_search_mode mit den Werten web_search, x_search und both bereit. both übergibt beide xAI-Server-seitigen Tools in einer Anfrage und überlässt Grok die Entscheidung, welches aufgerufen wird; es sendet keine zwei unabhängigen Anfragen.
Allgemeine Suchsteuerungen
Die öffentliche Schnittstelle hält einen anbieterneutralen Satz von Steuerungen. Jedes Backend bildet sie nach Möglichkeit auf seine native API ab und ignoriert nicht unterstützte Steuerungen stillschweigend:
Steuerung | ARK | DDGS | Exa | Gemini / Grok | Tavily |
| nativ | nativ | nativ | Englische Prompt-Einschränkung | nativ |
| nativ | ignoriert | ignoriert | Englische Prompt-Einschränkung | ignoriert |
| Englische Prompt-Einschränkung | nativ | natives Veröffentlichungsdatum-Filter | Gemini: Prompt; Grok Web: Prompt; Grok X: native Daten + Prompt | nativ |
Prompt-Einschränkungen sind für modellgestützte Anbieter Best Effort; sie werden nicht als strikte Garantien dargestellt.
Designprinzipien
Ein Kern, mehrere Adapter.
Ein fehlgeschlagener Anbieter verwirft nicht erfolgreiche Anbieter.
Anbieterantworten werden mit
searched,errorundmodelmarkiert, anstatt so zu tun, als wäre jede HTTP-200-Antwort eine erfolgreiche Suche.Keine Telemetrie und kein gemeinsamer API-Schlüsseldienst.
Entwicklung
python -m venv .venv
. .venv/bin/activate
pip install -e '.[dev,ddgs,mcp]'
pytest -q
ruff check .Lizenz
MIT.
Available Tools
1 toolweb_searchA
Search the web using agent-native semantic search and LLM-grounding backends. Optimized for complete natural-language questions rather than traditional keyword queries. Enabled providers: DuckDuckGo web search; Exa web search; Parallel LLM-optimized web search. Use a complete natural-language question. Failed providers are omitted from successful responses. If every enabled provider fails, the call returns a tool error with code all_providers_failed and per-provider diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A complete, detailed natural-language question or intent. Do NOT use fragmented keyword queries (e.g. avoid 'NVDA earnings'); instead pass the full question (e.g. 'What were the key highlights and market reactions to NVIDIA latest earnings?'). Model-native and semantic providers reason over full sentences to retrieve, read, and synthesize grounded evidence. | |
| providers | No | Optional subset of the providers enabled at startup. | |
| time_range | No | Optional time filter: past day, week, month, or year. | |
| max_results | No | Desired maximum number of results. Providers enforce this natively or as a best-effort prompt constraint. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden, and it delivers real behavioral detail: failed providers are silently dropped from successful responses, and total failure surfaces as a tool error with code all_providers_failed plus per-provider diagnostics. It does not disclose result ordering, latency, rate limits, or the shape of successful results.
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 purpose and provider list, then failure semantics, with every sentence carrying content. Slightly dense in the middle where the natural-language guidance is repeated from the schema, which is mild redundancy rather than padding.
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?
With no output schema, the description would ideally explain the return structure; it hints at aggregation ('omitted from successful responses') and error diagnostics but never describes what a successful result contains. For a multi-provider aggregation tool this is a modest gap, offset by unusually thorough failure-mode disclosure.
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 all four parameters are already documented, including the natural-language versus keyword guidance and the providers enum. The description largely restates what the schema's query description already says, adding the provider names but no new parameter-level semantics. Baseline 3 is appropriate.
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 ('Search the web') and immediately qualifies it with the mechanism (agent-native semantic search and LLM-grounding backends) plus the three concrete providers enabled (DuckDuckGo, Exa, Parallel). An agent knows exactly what this does 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?
Gives an explicit usage instruction repeated twice ('Use a complete natural-language question', 'Optimized for complete natural-language questions rather than traditional keyword queries'), which steers invocation strongly. There are no sibling tools, so no when-not-to-use or alternative routing exists to state; the only gap is that exclusions are impossible to provide.
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.8.0- Changed
web_search2 fields changed- changed
Input schema / properties / max_results / defaultPrevious value: -10New value: +5 - changed
Input schema / properties / query / descriptionPrevious value: -"A complete natural-language search question."New value: +"A complete, detailed natural-language question or intent. Do NOT use fragmented keyword queries (e.g. avoid 'NVDA earnings'); instead pass the full question (e.g. 'What were the key highlights and market reactions to NVIDIA latest earnings?'). Model-native and semantic providers reason over full sentences to retrieve, read, and synthesize grounded evidence."
1 tool update
v0.7.2- Changed
web_search3 fields changed- removed
Input schema / properties / max_keywordRemoved value: -{ - "default": 3, - "description": "Desired maximum number of distinct search queries or keywords. Providers without an equivalent control ignore it.", - "maximum": 10, - "minimum": 1, - "type": "integer" -} - changed
Input schema / properties / max_results / descriptionPrevious value: -"Desired maximum number of results or cited sources. Providers enforce this natively or as a best-effort prompt constraint."New value: +"Desired maximum number of results. Providers enforce this natively or as a best-effort prompt constraint." - added
Input schema / properties / query / maxLengthAdded value: +4000
1 tool update
v0.3.0- Changed
web_search1 field changed- changed
Input schema / properties / providers / items / enumPrevious value: -[ - "ark", - "ddgs", - "exa" -]New value: +[ + "ddgs", + "exa", + "parallel" +]
1 tool update
v0.1.0- First observed
web_search
TDQS
Scored across 1 tool
With only one tool in the set, there is no possibility of confusing it with another tool. Its purpose—semantic web search for natural-language questions—is unambiguous and clearly stated.
The single tool uses a clean snake_case verb_noun name (web_search) that is readable and conventional. No competing conventions exist to create inconsistency.
A search server can legitimately be a one-tool server, so the scope is defensible. However, a single tool is thin for a search surface that could reasonably offer companion operations (e.g., page fetch/retrieval), placing it at the borderline end of the rubric.
Search itself is well covered, including multi-provider fallback and diagnostics, but the lifecycle dead-ends there: an agent getting only snippets has no tool to retrieve or read a specific result page. This is a notable gap an agent must work around.
Maintenance
Related MCP Connectors
Web search for AI agents — one tool across 6 engines, routed to the cheapest + cached.
The best web search for your AI Agent
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Agent-native search engine with live web research optimized for AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceProvides unified web search across multiple providers (Google, Tavily, DuckDuckGo, Brave) with automatic fallback, maximizing free API quota usage for AI workflows.124 npm7MIT
- 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.413 npm18MIT
- FlicenseNot gradedqualityDmaintenanceA universal web search and content retrieval tool for AI agents, supporting multiple search providers and content extraction.-