ai-search-mcp
AI Search MCP
エージェント向けに作られた Web 検索 MCP サーバー:設定不要ですぐ使える無料検索エンジン、プラグイン可能な高品質エンジン、内蔵キャッシュ、時間フィルタリング、そして1回の呼び出しで調査を完了する
research統合ツール。An agent-friendly web search MCP server — zero-config free engines, region-aware failover, freshness filtering, and a one-call
researchtool.
なぜ作るのか(Why)
検索はエージェントにとって最も頻度の高いツールですが、既存のソリューションには決定的な欠点があります:
既存の方法 | 問題 |
公式 | 既知の URL しか取得できず、検索ができない |
Tavily / Brave / Exa 公式 MCP | 品質は高いが、すべて有料 API Key が必要 |
コミュニティ DuckDuckGo MCP | 無料だが脆弱、出力が非構造化、キャッシュ/リトライなし |
ai-search-mcp がこの穴を埋めます:ゼロ設定ですぐ使え(DuckDuckGo / Bing / 百度 / 搜狗)、リージョンに応じて最適なエンジンを自動選択してフェイルオーバー、時間フィルタにも対応。さらに「検索 → 選択 → 取得 → 要約」という一連の調査を1回の research 呼び出しに圧縮できます。
Related MCP server: jiro
特徴(Features)
🆓 ゼロ設定ですぐ使える:
npx ai-search-mcpを実行するだけ。API Key は一切不要🔌 マルチエンジン・プラグ可能:無料エンジン
duckduckgo·bing·baidu·so360+ 有料エンジンbrave·tavily🌏 リージョン連携の自動エンジン選択:
SEARCH_ENGINE=auto(デフォルト)→ 中国リージョンはbing→baidu→sogou、その他はduckduckgo→bingを利用。429/タイムアウト時は自動フェイルオーバー。カンマ区切りのエンジンチェーンに対応🕒 時間フィルタ:
freshness=day|week|month|yearまたはtimeRange="YYYY-MM-DD..YYYY-MM-DD"を各エンジンへ自動マッピング🧠 エージェント向け出力:構造化 JSON(
{ id, title, url, snippet, domain })で、生 HTML ではない。各結果には安定したidがあり、そのまま引用可能🧭
research統合ツール:1回の呼び出し = 検索 + 上位ページ取得 → エビデンスブリーフ(5〜10往復のツール呼び出を削減)⚡ 内蔵キャッシュ(TTL、デフォルト10分):重複するネットワークリクエストを減らし、高速化と省リソース化を実現
🛡️ エンジニアリング冗長:タイムアウト、指数バックオフ再試行、統一エラーコード。
RATE_LIMITEDエラーではsuggestedEngine/retryAfterの提案も返却🐢 礼儀正しいクローラー内蔵:エンジンごとのレート制限(デフォルト8回/分)、ランダムなリクエスト間隔を設定し、プラットフォームのリスク検知を能動的に回避。アンチスクレイピングの対処は一切しない(コンプライアンス優先)
📄
fetch_pageツール:任意の URL(または検索結果のid)を読みやすい Markdown に変換🌏 プロキシ対応:
SEARCH_HTTP_PROXY/HTTP(S)_PROXY🧪 ビルド不要の純 JS(CommonJS)。130 のユニットテスト + エンドツーエンドスモークテスト
クイックスタート(Quick Start)
Node.js >= 18 が必要です。
# 直接用 npx 运行(无需安装)
npx -y ai-search-mcp
# 或全局/本地安装
npm i -g ai-search-mcp
ai-search-mcpClaude Desktop
claude_desktop_config.json に次を追加します:
{
"mcpServers": {
"ai-search-mcp": {
"command": "npx",
"args": ["-y", "ai-search-mcp"]
}
}
}Cursor / Cline / その他の MCP 対応クライアント
{
"mcpServers": {
"ai-search-mcp": {
"command": "npx",
"args": ["-y", "ai-search-mcp"],
"env": {
"SEARCH_REGION": "cn-zh"
}
}
}
}中国ユーザーは
SEARCH_REGION=cn-zhを追加することを推奨します。国内で直接接続可能なエンジンチェーン(bing → baidu → sogou)を自動選択し、プロキシ不要で利用できます。
ソースから実行
git clone https://github.com/zhulingyu666/ai-search-mcp.git
cd ai-search-mcp
npm install
npm startツール説明(Tools)
search — 検索
{
"query": "2026年 大模型 最新进展",
"maxResults": 10,
"site": "github.com",
"region": "us-en",
"freshness": "week"
}戻り値(構造化 JSON):
{
"query": "2026年 大模型 最新进展",
"queryRewritten": "大模型 最新进展",
"queryYear": 2026,
"engine": "bing",
"engineSwitched": false,
"cached": false,
"total": 10,
"deduped": 2,
"freshnessApplied": true,
"freshnessAutoInferred": true,
"timeRange": "2025-08-25..2026-08-25",
"results": [
{
"id": "a1b2c3d4",
"title": "...",
"url": "https://...",
"snippet": "...",
"domain": "example.com"
}
]
}中文查询自动改写:クエリに中国語が含まれている「20xx年」という年代表記(例:「2026年 大模型 最新进展」)がある場合、ツールは年号語を削除し、
freshness=yearを自動付与して時間の意図を補償します。これは Bing などが中国語の分かち書きに弱く、年号が先頭にあると「2026年百科/日历」のような意味論的な結果が返るためです。この書き換えはqueryRewritten/queryYear/freshnessAutoInferredで透過的に返るため、エージェント側で受け入れるか判断できます。
パラメータ | 型 | デフォルト | 説明 |
| string | — | 検索キーワード(必須) |
| number | 10 | 返却件数(1〜20) |
| string | — | 特定のドメインのみに限定、例: |
| string[] | — | これらのドメインの結果のみ返す、例: |
| string[] | — | これらのドメインを除外、例: |
| string | — | リージョンヒント:DDG 的 |
| string | — |
|
| string | — | 正确な時間範囲 |
各結果には安定した
id(sha1 プレフィックス)が付与されます。このidをfetch_pageに渡すと、ページの詳細を読むことができます。URL を手動で組み立てる必要はありません。
research — 1回の呼び出しで調査を完了
エージェントの「検索 → ページ選択 → 取得 → 要約」というループの代わりに、1回の呼び出しで完了します:
{
"query": "2026 LLM open source models comparison",
"maxResults": 5,
"fetchTopN": 2,
"freshness": "month"
}戻り値はエビデンスブリーフ:
内訳
{
"query": "...",
"engine": "bing",
"overview": { "total": 5, "results": [ { "id": "...", "title": "...", "url": "...", "snippet": "...", "domain": "..." } ] },
"pages": [ { "id": "...", "url": "...", "title": "...", "headings": [ { "level": 1, "text": "..." } ], "content": "...", "length": 4000, "truncated": false } ],
"note": "证据简报已就绪,请基于页面内容总结并标注来源 URL。"
}複数ページを並列取得。単一のページが失敗した場合は
{ url, error }として記録され、全体の結果に影響はありませんスマートなページ選択:pages はドメインの多様性に基づいて選びます(最初に各ドメインの最高ランクの1件、その後ランクの順に補完)。単一サイトの独占を回避し、あるサイトの 403/反スクレイピング時も他ドメインのページは影響を受けません。
rankフィールドは検索結果内での元の順位extractMode(デフォルトsummary):summaryはノイズを除去した本文の要点を返し(トークン節約)、fullはページ全体の Markdown を返します要約はホストモデルが実施します——MCP 内部ではどの LLM にも依存せず、外部依存ゼロ、ベンダー非依存を維持
fetch_page — ウェブページを取得して構造化コンテンツに変換
{
"url": "https://example.com/article",
"extractMode": "summary",
"maxLength": 8000
}extractMode:summary(デフォルト。トークンを節約し、ノイズ除去後の本文mainTextを返す)/full(ページ全体のmarkdownを返す)戻り値:
{ url, title, description, headings, mainText, markdown, length, truncated, cached }。headingsはページの見出し構成なので、エージェントはまず構造を確認してから詳細を読むかを選べます
検索結果の id も利用できます:{ "id": "a1b2c3d4", "maxLength": 8000 }。
設定(環境変数)
変数 | デフォルト | 説明 |
|
| 単一エンジン、またはカンマ区切りのエンジンチェーン(例: |
| — | エンジン自動選択で使用するデフォルトリージョン。例: |
|
| デフォルトの結果件数(1〜20) |
|
| キャッシュ TTL(秒)。 |
| — | キャッシュ永続化ファイルのパス。例: |
|
| 単一リクエストのタイムアウト(ミリ秒) |
|
| 各エンジンの1分あたりの最大リクエスト数( |
|
| リクエスト間のランダム遅延範囲(ミリ秒)。 |
|
|
|
|
|
|
|
|
|
|
|
|
| — |
|
| — |
|
| — | プロキシのアドレス。例: |
| 内蔵 | カスタム User-Agent |
エンジン比較
エンジン | 無料 | API Key | 時間フィルタ | 説明 |
| ✅ | ❌ | ❌ | 海外専用(中国国内不可用)。インデックス品質は世界最高、アンチスクレイピングが厳しく、海外 IP + Cookie セッションなどが必要 |
| ✅ | ❌ | ✅( | 全世界利用可能。中国リージョンでのデフォルトで、中英文カバレッジが良い、国内からプロキシ不要で直結可能 |
| ✅ | ❌ | ✅( | 全世界対応のフォールバック。中国本土からの直結はタイムアウトすることがある |
| ✅ | ❌ | ❌(none) | 海外専用。ロシア語/CIS コンテンツに強く、一部ネットワークからは到達性が良い、スクレイピング耐性は中 |
| ✅ | ❌ | ❌(none) | 360 検索。データセンター・国内 IP からでも直接接続可能、アンチスクレイピングは比較的寛容、中国語ネイティブなエンジン |
| ✅ | ❌ | ❌(none) | 国内専用。中国語のインデックスは強いが、アンチスクレイピングが厳しい(データセンター IP では Cookie を付与しても画像認証を要求される) |
| ✅ | ❌ | ❌(none) | 国内専用。WeChat コンテンツに強い。ただし JS 生成の SNUID セッションが無いと 302 でリダイレクトされる |
| ❌ | ✅ | ✅( | 公式 API。品質高く、無料クォータあり |
| ❌ | ✅ | ✅( | LLM/RAG 検索専用に設計 |
ネットワーク注意事項
中国本土はプロキシ不要: デフォルトの
SEARCH_ENGINE=auto+SEARCH_REGION=cn-zh→bing → so360 → baidu → sogouはすべて直結で使用でき、追加設定は一切不要。特に 360 検索(so360)はデータセンター・ホスティング IP に対してもっとも寛容で、国内で最も信頼性のある中国語ネイティブエンジンです。海外展开設:デフォルトで
SEARCH_REGIONを設定しない(またはcn以外)→ デフォルトチェーンはgoogle → bing → duckduckgo → yandex。Google は品質が最高、Bing は最も安定しており、いずれかが失敗すると自動で切り替えます。Google/Yandex が中国国内から到達不可または認証コードにブロックされました。無料エンジンはレート制限あり。429 は構造化エラー(
RATE_LIMITED、suggestedEngineとretryAfterを維持)として返します。エンジンチェーンは 429 やタイムアウト時に自動フェイルオーバーします。一部サイト(百度百科、中国国内ポータルなど)はスクリプト取得を拒否(HTTP 403):
fetch_pageは構造化エラーを返し、researchは該当ページを失敗として記録して続行します。DuckDuckGo / Brave / Tavily にアクセスするにはプロキシが必要ですか:
SEARCH_ENGINE=duckduckgo SEARCH_HTTP_PROXY=http://127.0.0.1:7890 ai-search-mcp丁寧なクローラー方針:ツールはエンジンごとにレート制限(デフォルト 8回/分)とランダム間隔を組み込みます。百度/搜狗 では、トップページからセッションCookie(
BAIDUID/SUID)を担保することで成功率を上げますが、キャプチャー回避、UA 偽装のローテーション、プロキシプールのローテーションなどのアンチスクリプティングには対応していません(コンプライアンス上の境界)。ローテーションは、403/認証に遭遇した場合はアクセス頻度の低減やエンジン切替で検知してください。百度/搜狗の可用性(実測):これらのエンジンはネットワーク環境に非常に敏感です。データセンター / 海外 IP では、百度は Cookie を設定してもグラフィカル認証(
wappass)が強制されますし、搜狗は JSで生成される SNUID がないと 302 でぶり戻されます(antispider)。そのためデフォルト環境では自動的に Bing/360 へ移します。中国大陸の**住宅用 IP(宽带)**から百度/搜狗が使える場合は、SEARCH_LANG_ROUTING=1を設定することで、中文の検索クエリで百度/搜狗/360(中国語ネイティブ、分かちに優れる)を優先利用できます。私たちは対象サイトの
robots.txtと利用規約を尊重します。本ツールは検索のスニペットとリンクのみを返し、全文を再配布しません。
開発(Development)
npm test # 126 个单元测试(Node 内置 test runner)
node scripts/smoke-test.js # 端到端冒烟:search + freshness + research(需要网络)ログ例(stderr、SEARCH_LOG_LEVEL=debug)
[ai-search-mcp] [info] ready (version 0.3.2, engine=auto, region=cn-zh, logLevel=debug)
[ai-search-mcp] [info] rewrite q="2026年 大模型 最新进展" -> q="大模型 最新进展" +freshness=year
[ai-search-mcp] [info] search q="大模型 最新进展" engine=bing cached=false took=972ms total=3 deduped=1
[ai-search-mcp] [info] fetch url=https://example.com/ len=130 mode=summary took=1189ms
[ai-search-mcp] [debug] engine-fail engine=baidu err=RATE_LIMITED took=1203ms
[ai-search-mcp] [warn] fetch-fail url=https://baike.baidu.com/... err=ENGINE_ERROR took=512msライセンス(License)
Disclaimer:このプロジェクトは独立したオープンソースプロジェクトであり、DuckDuckGo 、Bing/Microsoft、Brave、Tavily、百度、搜狗 との間に関連・推薦・運営・スポンサー関係は一切ありません。百度/搜狗は公開HTMLを解析するものであり、これらのサイトのページ構造が変更された場合、解析が機能しなくなる可能性があります。
Available Tools
3 toolsfetch_pageA
Fetch a page and return its content as structured Markdown. Pass either "url" or the "id" returned by search/research (id looks up the already-seen URL). extractMode "summary" returns de-noised mainText (saves tokens); "full" returns the full page Markdown. Output: {"url":str,"title":str,"description":str,"headings":[{level:int,text:str}], "mainText":str,"markdown":str,"length":int,"truncated":bool,"cached":bool}
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Stable result id from search/research | |
| url | No | The http(s) URL to fetch (mutually exclusive with id) | |
| maxLength | No | Maximum characters of primary content to return (default 8000) | |
| extractMode | No | summary = de-noised main text (token-efficient); full = whole page Markdown (default full) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that id uses an already-seen URL, summary mode de-noises mainText, and the output includes truncated and cached fields, which inform the agent about caching and truncation behavior. It does not cover failure modes or rate limits, but that is beyond typical selection criteria.
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?
The description is three tight sentences followed by an explicit output shape, with no filler. The core action is front-loaded, and every subsequent sentence adds information an agent needs for correct invocation. The output spec is lengthy but necessary since there is no output schema.
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?
Despite no annotations and no output schema, the description fully compensates: it explains purpose, parameter usage, behavioral nuances, and return value structure. The explicit output JSON gives agents a precise contract of what to expect, making the tool effectively self-contained. No critical selection or invocation information is missing.
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 coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by clarifying that id looks up the already-seen URL and that summary extractMode 'saves tokens', directly addressing cost implications. The output block also connects maxLength to truncation and cached to caching behavior, which the schema alone does not.
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?
The description opens with 'Fetch a page and return its content as structured Markdown', a precise verb-resource-output statement that leaves no doubt about the tool's function. It also differentiates from siblings by explaining the id comes from search/research, positioning fetch_page as the retrieval step after search.
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?
It explicitly explains when to pass 'url' versus the 'id' returned by search/research, including that id looks up an already-seen URL. It also gives a clear choice criterion for extractMode: summary saves tokens, full returns the complete page. It stops short of naming explicit alternatives or exclusions, but the workflow context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchA
One-call research: search + fetch the top pages and return an evidence brief. Use this instead of chaining search/fetch_page yourself. Pages are selected for domain diversity (top hit per domain, then by rank) so one anti-bot 403 site can't sink the brief. Output: {"query":str,"engine":str,"cached":bool, "overview":{"total":int,"results":[{"id":str,"title":str,"url":str,"snippet":str,"domain":str}]}, "pages":[{"id":str,"url":str,"rank":int,"title":str,"headings":[{level:int,text:str}],"content":str,"length":int,"truncated":bool}|{"url":str,"rank":int,"error":str}]} Base your answer on the pages' content and cite their URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Restrict to one domain, e.g. github.com (alias for a single includeDomains entry) | |
| query | Yes | The web search query (required) | |
| region | No | Region hint. DuckDuckGo: kl code (cn-zh, us-en). Bing: setlang. Brave: country | |
| fetchTopN | No | How many of the top results to fetch as full pages (default 2, 0 = overview only) | |
| freshness | No | Only results from the last day|week|month|year (auto-applied as year when a Chinese query drops a 20xx年 year token) | |
| timeRange | No | Exact window "YYYY-MM-DD..YYYY-MM-DD" (takes precedence over freshness) | |
| maxResults | No | Max results (1-20, default from SEARCH_MAX_RESULTS) | |
| extractMode | No | summary = de-noised main text per page (default, token-efficient); full = whole page Markdown | |
| maxPageLength | No | Characters of Markdown kept per page (default 8000) | |
| excludeDomains | No | Never return results from these domains, e.g. [baidu.com] | |
| includeDomains | No | Only return results from these domains, e.g. [github.com, arxiv.org] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does so thoroughly. It discloses the domain-diversity selection strategy, the anti-bot 403 resilience reasoning, and the exact output shape including per-page error objects.
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?
The description is front-loaded with the core purpose and use guidance, then adds a compact but necessary output schema. Every sentence earns its place, and the JSON block is justified because there is no separate output schema.
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?
For a complex 11-parameter tool with no annotations and no output schema, the description is remarkably complete. It explains the composite workflow, selection behavior, error handling, and return structure, so an agent has enough context to invoke it correctly.
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?
The input schema description coverage is 100%, so the schema already documents every parameter, including defaults, aliases, and precedence. The description itself adds no parameter-specific meaning beyond what the schema provides, matching the baseline for full schema coverage.
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?
The description opens with 'One-call research: search + fetch the top pages and return an evidence brief,' which clearly identifies the operation, the resource, and the composite behavior. It also explicitly distinguishes itself from the sibling tools by saying to use it 'instead of chaining search/fetch_page yourself.'
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?
The description gives clear usage context: use this tool instead of manually chaining search and fetch_page. It names the relevant alternatives, though it does not spell out exclusions such as 'when you only need a single page, use fetch_page.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search the web and return structured results. Output: {"query":str,"queryRewritten":str?,"queryYear":int?,"engine":str,"engineSwitched":bool,"cached":bool, "total":int,"deduped":int,"freshnessApplied":bool,"freshnessAutoInferred":bool?, "results":[{"id":str,"title":str,"url":str,"snippet":str,"domain":str}]} Use the "id" of a result with fetch_page to deep-read a page.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Restrict to one domain, e.g. github.com (alias for a single includeDomains entry) | |
| query | Yes | The web search query (required) | |
| region | No | Region hint. DuckDuckGo: kl code (cn-zh, us-en). Bing: setlang. Brave: country | |
| freshness | No | Only results from the last day|week|month|year (auto-applied as year when a Chinese query drops a 20xx年 year token) | |
| timeRange | No | Exact window "YYYY-MM-DD..YYYY-MM-DD" (takes precedence over freshness) | |
| maxResults | No | Max results (1-20, default from SEARCH_MAX_RESULTS) | |
| excludeDomains | No | Never return results from these domains, e.g. [baidu.com] | |
| includeDomains | No | Only return results from these domains, e.g. [github.com, arxiv.org] |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, and it does so well by disclosing the full structured output shape, including query rewriting, engine switching, caching, deduplication, and freshness handling. It does not mention rate limits or authentication, but for a read-only search tool the output detail provides substantial transparency.
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?
The purpose is front-loaded and the output block is dense and useful rather than repetitive. The only length comes from the necessary output schema, which compensates for the missing output-schema field. It is reasonably concise and every part contributes to the tool's usage.
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?
The description is complete enough for invoking a search tool: it specifies behavior, output structure, and a follow-up action using fetch_page. It lacks explicit error/edge-case behavior and does not mention how research relates to this tool, but those are not critical given the rich schema and detailed output specification.
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 parameters are already fully documented in the schema. The tool description adds no additional meaning about the parameters themselves; it focuses on output structure. Baseline 3 is appropriate here because the schema does the needed work.
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?
The description states a specific verb and resource: 'Search the web and return structured results.' It is clearly distinct from fetch_page, and the output schema plus the instruction to use result IDs with fetch_page reinforces that this tool is for discovery rather than reading full pages. However, it does not explicitly differentiate from the research sibling tool, so it falls short of a 5.
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?
The description gives clear context that this tool is for web search and explicitly instructs the agent to use fetch_page with a result ID to deep-read a page, which clarifies one key alternative. It does not provide explicit when-to-use versus research or list exclusions, but the workflow is evident enough for correct selection in most cases.
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.
3 tool updates
v0.3.4- First observed
fetch_page - First observed
research - First observed
search
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: search for web results, fetch_page for retrieving a specific page's content, and research for combining search and deep-reading. There is no overlap or chance of misselection.
All tool names follow the same snake_case, verb_noun pattern (fetch_page, search, research). Although 'search' and 'research' are single-word verbs, the pattern is consistent and predictable.
With only 3 tools, the server is well-scoped for a web search and research workflow. Each tool earns its place with minimal redundancy.
The tool surface covers the full research lifecycle: search to discover results, fetch_page to retrieve content, and research to combine both efficiently. No critical gaps exist for the stated purpose.
Maintenance
Related MCP Connectors
Web search API and MCP server for developers building AI agents.
Agent-driven search: build, import, tune, search, and score result quality — all over MCP.
Search the agentic web. 4,100+ sites, 11 tools incl. check_url + verify_mcp for probe-before-use.
Scrape, crawl and search the web for AI agents via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to perform multi-engine web search, fetch web pages, and extract clean Markdown content via MCP, with no API keys required.358 PyPI8MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform live web searches across 9 engines, scrape web pages into clean formats, and run agentic research with citations via MCP.60 PyPI6MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to perform web search, extraction, and research across multiple provider backends with persistent multi-key rotation and auditable routing. Supports MCP, CLI, and Agent Skill entry points.MIT
- AlicenseAqualityBmaintenanceEnables MCP-capable agents to perform reliable web search and content fetching through a single server that automatically fails over across multiple providers. It handles keyed or keyless authentication automatically and returns clean Markdown or text results.31MIT