agent-web-search
Agent Web Search
AIエージェント向けマルチプロバイダーWeb検索。
Agent Web Searchは、Hermes、Codex CLI、Claude Code、OpenCode、および通常のスクリプトに、一貫したWeb検索ツールを提供します。独立したプロバイダーを並行して実行し、正規化された結果を返します。デフォルトのプロバイダーセットは以下のとおりです。
ARK grounding — Volcengine ARK Responses API +
web_search(Doubao)DDGS — DuckDuckGo検索
Exa — Exa MCP検索(ベストエフォート。可用性はエンドポイントに依存します)
オプションのプロバイダーも実装されています。
Gemini — Gemini Interactions APIによるGoogle検索グラウンディング
Grok — ネイティブWeb検索とX Searchを備えたxAI Responses API
Tavily — ネイティブの結果数・期間フィルターを備えたTavily Search API
アーキテクチャはプロバイダーベースのため、DeepSeek、Brave、その他の検索対応プロバイダーを、MCPやHermesのインターフェースを変更せずに追加できます。
クイックスタート
# 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-mcpAPIキーをシェル履歴、ソースコード、Gitコミット、スクリーンショットに置かないでください。ローカルの.env/シークレットマネージャーを使用し、プロセス環境で変数をエクスポートしてください。
Related MCP server: GroundRoute
Codex CLIから使用する
export ARK_API_KEY="your_ark_api_key"
codex mcp add agent-web-search -- \
agent-web-search-mcp
codex mcp listClaude Codeから使用する
export ARK_API_KEY="your_ark_api_key"
claude mcp add agent-web-search -- \
agent-web-search-mcpまたは、プロジェクトの.mcp.jsonを追加します。
{
"mcpServers": {
"agent-web-search": {
"command": "agent-web-search-mcp",
"args": [],
"env": {"ARK_API_KEY": "${ARK_API_KEY}"}
}
}
}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
}
}
}Hermesから使用する
GitHubからネイティブプラグインを直接インストールします。
pip install 'ddgs>=9.0'
hermes plugins install JerryLiu369/agent-web-search --no-enable
hermes plugins enable agent-web-search --allow-tool-overrideこのプラグインは標準のweb_searchツールを登録し、MCPやCLIで使用されるものと同じAgent Web Searchコアを呼び出します。汎用のMCPパスを希望する場合、Hermesはhermes mcp addで接続することもできます。
GitHubインストーラーは、パッケージとそのオプション依存関係をインストールします。
pipx install 'git+https://github.com/JerryLiu369/agent-web-search.git'Hermesは、このプラグインが組み込みのweb_searchツールを意図的に置き換えるため、明示的な--allow-tool-override許可を必要とします。有効化後は新しいHermesセッションを開始してください。メッセージングチャネルを使用する場合は、ゲートウェイを再起動してください。
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コラボレーション報酬について
Agent Web Searchは、いかなる報酬プログラムへの参加も必須としません。ARKを使用することを選択したユーザーは、独自のAPIキーを作成し、任意で公式の**Volcengineコラボレーション報酬プログラム**を確認できます。このプログラムは現在のルールに応じて報酬リソースを提供する場合がありますが、割り当て量、サポート対象モデル、有効期間、データ承認条件は変更される可能性があります。オプトインする前に公式ページを確認してください。参加することは、プロバイダーのデータ承認条件を受け入れることを意味します。Agent Web Searchの使用には必須ではありません。
設定
ARK_API_KEY: 任意。ARKプロバイダーが有効な場合のみ必要です。カンマ/改行区切りのキーを受け付けます。AGENT_WEB_SEARCH_PROVIDERS: 起動時に有効なプロバイダーセット。デフォルトはark,ddgs,exaです。AGENT_WEB_SEARCH_TIMEOUT: プロバイダーごとのタイムアウト(秒)。デフォルトは60です。AGENT_WEB_SEARCH_ARK_MODELS: カンマ区切りのARKモデルID。EXA_MCP_URL: 任意のExa MCPエンドポイント上書き。GEMINI_API_KEY: 任意のGeminiプロバイダーキー。AGENT_WEB_SEARCH_GEMINI_MODEL: 任意のGeminiモデルID。XAI_API_KEY: 任意のGrokプロバイダーキー。AGENT_WEB_SEARCH_GROK_MODEL: 任意のGrokモデルID。TAVILY_API_KEY: 任意のTavilyプロバイダーキー。
プロバイダーセットは、HermesプラグインまたはMCPサーバーの起動時に解決されます。公開web_searchスキーマはそのセットから生成されます。リクエストはprovidersでセットを絞り込むことはできますが、起動時に無効化されたプロバイダーを有効化することはできません。grokが起動時に有効な場合、スキーマはさらにgrok_search_modeを公開し、web_search、x_search、bothの値を受け付けます。bothは両方のxAIサーバーサイドツールを1つのリクエストで渡し、Grokにどちらを呼び出すかを判断させます。独立した2つのリクエストを送信するわけではありません。
共通の検索コントロール
公開インターフェースは、プロバイダーに依存しない1つのコントロールセットを維持します。各バックエンドは、可能な場合はそれらをネイティブAPIにマッピングし、サポートされていないコントロールは静かに無視します。
コントロール | ARK | DDGS | Exa | Gemini / Grok | Tavily |
| ネイティブ | ネイティブ | ネイティブ | 英語プロンプト制約 | ネイティブ |
| ネイティブ | 無視 | 無視 | 英語プロンプト制約 | 無視 |
| 英語プロンプト制約 | ネイティブ | ネイティブ公開日フィルター | Gemini: プロンプト; Grok Web: プロンプト; Grok X: ネイティブ日付 + プロンプト | ネイティブ |
プロンプト制約はモデルベースのプロバイダーに対するベストエフォートであり、厳格な保証として提示されるものではありません。
設計原則
1つのコア、複数のアダプター。
失敗したプロバイダーが、成功したプロバイダーを破棄することはありません。
プロバイダーの応答は、すべてのHTTP 200が成功した検索であるかのように装うのではなく、
searched、error、modelでマークされます。テレメトリなし、共有APIキーサービスなし。
開発
python -m venv .venv
. .venv/bin/activate
pip install -e '.[dev,ddgs,mcp]'
pytest -q
ruff check .ライセンス
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.-