Web Research MCP
Web Research MCP
AIエージェント向けの高品質・マルチソースなWebリサーチMCPサーバーです。Claude Desktop、Hermes、Cursor、またはあらゆるMCP互換クライアントに接続すれば、Wikipedia、arXiv、Google、Hacker News、Stack Overflow、Crossref、Brave、Tavily、そしてWeb上の任意のURLに対して、本番グレードの検索とページ取得を利用できます。
# One-line install (anywhere on disk)
git clone https://github.com/infinit3labs/web-research-mcp.git
hermes mcp add web-research --command "$(pwd)/web-research-mcp/bin/web-research-mcp"
# 6 of 7 tools work with zero API keys. Add Brave or Tavily to unlock general web search.なぜこのサーバーが存在するのか
「Web検索」MCPサーバーの多くは、ランダム化されたフィンガープリントを持つヘッドレスブラウザでGoogleをスクレイピングしようとします。そのアプローチは負け確のイたごっこです。検索エンジンは数日のうちにスクレイパーを検出してBANしますし、たとえ機能しても、LLMが後片付けをしなければならないDOMの不毛な話が手に入るだけです。
このサーバーは別のアプローチを取ります。エージェント向けに作られたAPIと通信します。
機能 | 方式 |
実際のWeb検索 | Brave Search API、Tavily API(ホワイトリスト登録、ランク付け、構造化JSON) |
任意のURLを読む | Jina Reader(JSレンダリングおよびbot対策を処理し、クリーンなMarkdownを返す) |
百科事典的検索 | Wikipedia MediaWiki API |
学術プレプリント | arXiv API |
査読済み論文 | Crossref API |
テックシグナル | Hacker News Algolia API |
コード Q&A | Stack Exchange API(任意のサイト) |
7つのソースはすべてAPIキーなしで動作します。BraveやTavilyのキーを追加すれば、リアルタイムの一般的なWeb検索が利用できます。これが最高品質のアプローチです。実際のWebインデックスAPIは、(クリックモデル、鮮度、リンク分析など)スクレイパーには再現できないシグナルを使うため、スクレイピングよりも良い結果を得られます。
Related MCP server: sofya-mcp
クイックスタート
オプションA — pip install(公開時)
pip install deep-web-research-mcp
hermes mcp add web-research --command "$(which web-research-mcp)"名前についての注意。 PyPIの配布名は
deep-web-research-mcpです(つまりpip install deep-web-research-mcpすれば良い)。ですが、インストール後PATHに置かれるバイナリはweb-research-mcpです(pyproject.toml内の[project.scripts]で定義されています)。これは意図的です。バイナリはローカルランチャーbin/web-research-mcp、MCP登録名web-researchに一致します。同じパッケージに、2つの名前があります。
Option B — ソースからクローン作成
git clone https://github.com/infinit3labs/web-research-mcp.git
hermes mcp add web-research \
--command "$(pwd)/bin/web-research-mcp"プロンプトが表示されたら、7つのツールをすべて許可してください。では完了です。
Option C — Claude Desktopでインストール
~/Library/Application Support/Claude/claude_desktop_config.json を編集します:
{
"mcpServers": {
"web-research": {
"command": "/Users/code/mcp-servers/web-research/bin/web-research-mcp"
}
}
}Option D — Cursor / 任意のstdio MCPクライアントでインストール
{
"mcpServers": {
"web-research": {
"command": "/absolute/path/to/web-research-mcp/bin/web-research-mcp"
}
}
}ランチャースクリプトは最初の起動時にvenvを自動生成し、pyproject.tomlから依存関係をインストールし、設定済みのAPIキーをweb-research.envから読み込みます。
2.(任意)実際のWeb検索用APIキーを追加
cp web-research.env.example web-research.env
$EDITOR web-research.envキー | 内容をアンロックする | 無料枠 |
|
| 2,000クエリ/月 |
|
| 1,000クエリ/月 |
|
| 1Mトークン/月 |
ランチャーは起動のたびに、web-research.envからキーを読み取ります。そのため、MCPクライアントを再起動する必要はありません。
3. 使ってみる
エージェントに次のように尋ねます:
「2026年にリリースされた最高のMCPサーバーをHacker NewsとStack Overflowで検索して」
「pro_mode を使って、小型言語モデルの現状を調査して」
「https://arxiv.org/abs/2506.06962 を取得して、手法を要約して」
「この主張をWikipediaとarXivで照合して」
ツール
tools/listに登録されているすべてのツールは10個。ツールは次の2つの層に分かれます。
検索と取得(7ツール) — 単発の検索です。1ツール、1API、1結果。
深層研究(3ツール) — 計画、収集、構造化のマルチステップパイプラインです。単発の検索では十分でない場合にこれらを使います。
検索と取得
search_web — マルチソースの一般的なWeb検索
search_web(
query: str, # search query
max_results: int = 10, # per source, before dedup (1–30)
pro_mode: bool = False, # also fetch top 3 URLs and append excerpts
) -> strBrave + Tavilyにより、URL正規化による重複排除とクロスソースのスコアブーストを実現します。BRAVE_API_KEY および/または TAVILY_API_KEY が必要です。キーがない場合は、有効にする方法を告げる明確なメッセージを返します。
pro_mode: true はリサーチ向けにキラー的な機能です。通常の検索を実行し、上位3結果をJina経由で取得し、スニペットとして内容を追加します。通常は search_web と3回の fetch_url が必要な処理をわずか1回の呼び出しで行います。
fetch_url — 任意のページをクリーンなMarkdownで取得
fetch_url(url: str) -> strJina Readerを経由します。Jina Readerは:
JSを多用したページ(SPA、Reactアプリ)をレンダリング
ほとんどのbot検知を回避(Jinaはホワイトリスト登録されている)
Title:、URL Source:、Published Time:のメタデータブロック付き、クリーンなMarkdownを返すコンテキストウィンドウ保護のため、約20k文字に切り詰める
search_wikipedia — 百科事典の地盤
search_wikipedia(query: str, max_results: int = 5) -> strWikipedia MediaWiki API。キー不要。高速。定義や歴史的文脈に最適です。
search_academic — arXivプレプリント
search_academic(query: str, max_results: int = 5) -> strタイトル、著者、アブストラクト抽出、公開日、PDFのURLを返します。キー不要。CS、物理、数学、生物に最適です。
search_news — Hacker Newsシグナル
search_news(query: str, max_results: int = 10) -> strタイトル、URL、ポイント、コメント、日付を返します。キー不要。今テックで流れていることを知るのに最適です。
search_stackexchange — 180以上のサイトのQ&A
search_stackexchange(query: str, max_results: int = 5, site: str = "stackoverflow") -> strsite を任意のSEコミュニティに設定します: serverfault、superuser、askubuntu、math、tex、datascience、ai など。キー不要。
search_scholar_meta — Crossref経由の査読済み論文
search_scholar_meta(query: str, max_results: int = 5) -> strタイトル、DOI、被引用数、出版社、発行日、アブストラクトを返します。arXivがカバーしていない論文(Elsevier、Springer、Wiley、IEEE、ACM)にも対応。キー不要。
ディープリサーチ
これら3ツールは、上記の検索/取得プリミティブを組み合わせたマルチステップのリサーチワークフローです。ツール自体がLLMを呼び出すことはありません。最終的な文章を書くのは呼び出し元モデルであり、サーバーの役割は、検証可能な引用を伴う証拠を計画し、収集し、構造化することです。
plan_research — 構造化計画のみ(フェッチなし)
plan_research(question: str, depth: str = "standard") -> str # JSONJSONの研究計画を返します。サブ質問、サブ質問ごとの推奨ソース、根拠、実行するクエリ、見積もりの検索+フェッチ数などをまとめて。実行前に計画を確認・修正したい場合にこれを使います。
depth:"quick"(2〜3のサブ質問)、"standard"(4〜6)、"deep"(6〜8)
extract_evidence — 1つのURLから対象の引用を抽出
extract_evidence(
url: str,
question: str,
max_passages: int = 5,
) -> str # JSONJinaでURLを取得し、段落に分け、質問への関連性でスコアリングし、上位のパッセージを返します。各パッセージには、before / quote / after のコンテキスト、発見(0 〜 1)の relevance スコア、offset(原文中の文字位置)が含まれ、引用を個別に検証できます。
特定のソースURLをすでに持っていて、狭い十分証を掘り下げたい場合に使います。
research — 完全な深層リサーチパイプライン
research(question: str, depth: str = "standard") -> str # markdown + JSONエンドツーエンドの研究ワークフロー:
Plan — サブ質問計画を立てる
Fan out — 推奨ソースをスプラッション、各サブ質問に対して並列検索
Rank — 計画全体のURL重複をなくし、ソースを考慮した複合スコアでランク付け(Wikipedia/arXiv/Crossref 2.0×、Stack Exchange 1.7×、Web検索 1.5×、Hacker News 1.0×)
Fetch — 上位URLをJina Reader経由で取得
Extract — 品質フロア付で段落の関連性をスコアリング(ナビメニュー、文章のみの段落、フッターの不要部分を除外)
Return — 構造化された
ResearchReportを出力
{
"question": "What is retrieval augmented generation?",
"depth": "quick",
"plan": { "sub_questions": [...], "estimated_searches": 4, ... },
"citations": [
{ "id": 1, "url": "...", "title": "...", "source": "wikipedia", "quotes": 2 }
],
"evidence": {
"sq_def": [
{ "citation_id": 1, "relevance": 0.78, "offset": 1234,
"before": "...", "quote": "...", "after": "..." }
]
},
"synthesis_template": "# Research Report: ..."
}synthesis_template は、各サブ質問に1セクションとSources表を持つMarkdownの骨組みです。物語を書くのは「あなた(モデル)」です。各 [n] マーカーを citations の対応するエントリに引用します。引用された各パッセージは文字の箇所を持ち、 offset で元のページに対する引用の検証ができます。
depth は広がりを決定します:
"quick"— 2〜3サブ質問、約6回のフェッチ、約2分"standard"— 4〜6サブ質問、約20回のフェッチ、約3分"deep"— 6〜8サブ質問、約32回のフェッチ、約5分
アーキテクチャ
┌─────────────────────────────────────────────────────────┐
│ MCP Client │
│ (Claude Desktop, Hermes, Cursor, custom agent) │
└────────────────────┬────────────────────────────────────┘
│ JSON-RPC over stdio
▼
┌─────────────────────────────────────────────────────────┐
│ bin/web-research-mcp │
│ • Boots venv (or reuses cached one) │
│ • Sources web-research.env for API keys │
│ • Execs python -m web_research.server │
└────────────────────┬────────────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────┐
│ web_research.server (MCPServer) │
│ 7 tool functions registered via @app.tool() decorator │
│ • Pydantic-driven JSON schemas from type hints │
│ • Single shared httpx.AsyncClient per call │
│ • Graceful degradation: one bad source ≠ failed call │
└────────────────────┬────────────────────────────────────┘
│ asyncio.gather for parallel fan-out
▼
┌─────────────────────────────────────────────────────────┐
│ web_research.providers (7 backends) │
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ brave │ │ tavily │ │ jina_fetch │ ← general web│
│ └──────────┘ └──────────┘ └─────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ wikipedia│ │ arxiv │ │ crossref │ ← academic │
│ └──────────┘ └──────────┘ └─────────────┘ │
│ ┌──────────┐ ┌──────────┐ │
│ │ hn_algolia│ │stackex │ ← tech signal │
│ └──────────┘ └──────────┘ │
│ + merge_results() with URL-canonical dedup │
└─────────────────────────────────────────────────────────┘主な設計上の意思決定
APIファーストであり、スクレイプファーストではない。 これが中心となる考え方です。すべての情報源はプログラムによるアクセス向けに設計された公式APIです。クリーンな構造化データが得られ、IPBAN(IP規制)もなく、サイト戻りが替わったときの維持負担もありません。
ソースごとのエラー分離。 各プロバイダーはHTTP呼び出しをtry/exceptでラップしています。あるソースが429を返しても検索全体が壊れることはなく、部分的な結果と「どのソースが失敗したか」の明確なメッセージを得られます。
URLの正規化。 merge_results() は重複を除く前に、トラッキングパラメータ(utm_*、fbclid、gclid、ref)を削除し、ホストの小文字大文字を正規化し、フラグメントを除去します。BraveとTavilyが同じ記事を返した場合は、also_found_in: [brave, tavily] 付きで1回だけ表示され、スコアが加算されます。
呼び出しごとの共有HTTPクライアント。 httpx.AsyncClient により、接続プール(max_connections=20)、合理的なタイムアウト(デフォルト 30秒、fetch_url では 45秒)、自動リダイレクトフォローを実現します。stdio MCPサーバーは一度に1リクエストを処理するため、クリーンな状態を引き継ぐ意図で呼び出しごとに新しいクライアントを作成します。
ヘッドレスブラウザ不使用。 Playwright、Selenium、Puppeteer、proxyを一切使いません。攻撃面が小さく、依存関係も小さく、JVM/Chromeのフットパッドがありません。JSレンダリングが必要な少数のサイトではJinaが重い作業を引き受けます。
代替案との比較
特徴 | 本サーバー | SerpAPI MCP | Google スクレイピング MCP | ローカル検索 MCP |
一般的なWebインデックス | ✅ Brave/Tavily | ⚠️ 脆い | ❌ | |
APIのみ(スクレイピングなし) | ✅ | ✅ | ❌ | ✅ |
JSレンダリング対応 | ✅ via Jina | ✅ | ⚠️ 実装による | ❌ |
学術ソース | ✅ arXiv + Crossref | ❌ | ❌ | ⚠️ |
テック / Q&A ソース | ✅ HN + StackExchange | ❌ | ❌ | ❌ |
百科事典 | ✅ Wikipedia | ❌ | ❌ | ⚠️ |
APIキーなしで動作 | ✅ (6/7 tools) | ❌ | ✅ | ✅ |
引用しやすい出力 | ✅ | ⚠️ | ❌ | ⚠️ |
MITライセンス | ✅ | ⚠️ | ⚠️ | ⚠️ |
テスト
.venv/bin/python tests/e2e_protocol.py実際のサーバーを起動し、実際のMCP initialize + tools/list ハンドシェイクを実行、その後、各ツールに対してライブのJSON-RPC を作成し、以下を確認します:
実APIが実際のデータを返す(スタブでない)
各ツールのレスポンスが期待される形である
エラー状態が適切に処理される
search_webでキーがない場合は、明確な「APIキーを設定してください」メッセージを返す
最終実行: 7/7ツールがライブAPIで合格。
トラブルシューティング
サーバーは起動するが、ツールがMCPクライアントに表示されない
hermes mcp list(または同等のもの)を確認してください。サーバーは --command で登録されています。つまりHermesはランチャーを直接実行しています。ランチャーが実行可能であることを確認してください:
chmod +x bin/web-research-mcpfetch_url がコンテンツを途中まで返す
設計上、20k文字の上限がコンテキストウィンドウを保護します。長文を読む場合は、ページを自分で取得して search_web に抜粋を渡してフォローアップの質問をするか、複数回の呼び出しでセクションに分割してください。
search_web が「No web results. This is likely because no API key is configured」を返す
web-research.env に BRAVE_API_KEY または TAVILY_API_KEY の少なくとも1つを設定する必要があります。他の6つのツール(Wikipedia、arXiv、HN、Stack Exchange、Crossref、fetch_url)はすべてキーなしで動作します。
Stack Exchange が 400 Bad Request を返す
カスタムの filter パラメータを設定している場合、APIは未知のフィルターIDを拒否します。デフォルトのフィルターを使用してください(パラメータを省略)— 必要以上に多くのフィールドを返しますが、すべて動作します。このサーバーはデフォルトを使用しています。
初回起動時にサーバーがクラッシュする
実際のトレースバックを stderr で確認してください。よくある原因: Python <3.10。python3 --version で確認してください。
レート制限
キー不要の各APIには独自の制限があります。制限に達した場合:
Wikipedia: ~200 req/min。実際の
User-Agentで身元を明らかにしてください(このサーバーは送信します)arXiv: ~1 req/3s(未認証)。アクセス間隔を空けてください
Hacker News Algolia: APIキーありで10k req/hour、キーなしで5k
Stack Exchange: キーなしで300 req/day(リサーチセッションには十分です)
Crossref: User-Agent に mailto を追加してください(このサーバーは追加しています)。そうすればポライトプールで無制限です
開発
プロジェクト構成
web-research-mcp/
├── bin/
│ └── web-research-mcp # Launcher: venv bootstrap + exec
├── src/web_research/
│ ├── __init__.py
│ ├── server.py # MCPServer + 7 @app.tool functions
│ └── providers.py # 7 search backends + Result dataclass
├── tests/
│ └── e2e_protocol.py # Real subprocess JSON-RPC test
├── web-research.env.example # API key template
├── pyproject.toml # PEP 621, uv-installable
├── README.md
├── CHANGELOG.md
├── LICENSE
└── .gitignore新しいツールの追加
providers.pyに非同期関数を追加します:async def search_my_source(query: str, max_results: int, client: httpx.AsyncClient) -> list[Result]: try: # ... your HTTP call ... except Exception as e: print(f"[my_source] error: {e}", flush=True) return [] return [Result(title=..., url=..., snippet=..., source="my_source")]server.pyに登録します:@app.tool(name="search_my_source", description="...", annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=True)) async def search_my_source(query: Annotated[str, Field(description="Search query")], max_results: Annotated[int, Field(ge=1, le=10, default=5)] = 5) -> str: async with await _new_client() as client: res = await providers.search_my_source(query, max_results, client) return _format_results(query, res, "my_source") if res else f"No my_source results for: {query}"tests/e2e_protocol.pyにライブテストケースを追加します。README の Tools セクションを更新します。
コーディングスタイル
Python 3.10+、async ファースト
あらゆる箇所で型ヒントを使用。Pydantic に MCP JSON スキーマを導出させます
すべてのプロバイダーはネットワーク呼び出しを try/except でラップし、
[]にフォールバックします呼び出しごとの HTTP クライアント(
_new_client())— stdio モードでは呼び出し間で共有しないでください
コントリビューション
PR を歓迎します。開く前に:
ライブインストール環境に対して e2e テストを実行します:
.venv/bin/python tests/e2e_protocol.py新しいツールにはテストケースを追加します
providers.pyを MCP 固有の型に依存させないでください — プレーンな Python モジュールとして再利用可能であるべきですヘッドレスブラウザやプロキシローテーションへの依存を追加しないでください — それはプロジェクトの趣旨に反します
大きな変更の場合は、最初に issue を開いてください。
ライセンス
MIT — LICENSE を参照してください。
クレジット
Anthropic の Model Context Protocol 上に構築
クリーンなページ取得に Jina Reader を使用
検索API: Brave, Tavily, Wikipedia, arXiv, Crossref, Hacker News Algolia, Stack Exchange
Available Tools
10 toolsextract_evidenceARead-only
Fetch a URL and extract the passages most relevant to a specific question. Returns each passage with a short context window before/after, a relevance score, and a character offset into the original page so citations are verifiable. Use this when you want to drill into a specific source for evidence on a narrow claim.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTP(S) URL to read | |
| question | Yes | What you're looking for on this page | |
| max_passages | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds useful behavioral detail: each passage includes a context window, relevance score, and character offset for verifiable citations. It does not discuss failure modes or rate limits, but the annotations lower that burden.
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?
Three sentences with no filler: the first states the action, the second describes the output, and the third gives usage guidance. Information is front-loaded and every sentence earns its place.
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?
An output schema exists, so return values need not be fully described, and annotations cover safety. The description covers purpose, output behavior, and usage. It could be more complete by naming sibling alternatives or elaborating on max_passages, but those are minor gaps.
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 67%, with url and question already described and max_passages constrained by min/max/default. The description adds the notion of relevance and passage context but does not clarify max_passages behavior beyond what the schema provides. This is a baseline 3 situation.
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 action ('Fetch a URL and extract the passages most relevant to a specific question') and a clear resource. It differentiates itself from sibling tools like fetch_url and search_web by emphasizing evidence extraction with context windows and verifiable citation offsets.
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 final sentence gives an explicit trigger condition: 'Use this when you want to drill into a specific source for evidence on a narrow claim.' This clearly indicates when the tool is appropriate, though it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_urlARead-only
Fetch any URL and return clean markdown content. Uses Jina Reader which handles JS rendering and bot detection on your behalf, returning readable text. Ideal for reading articles, papers, docs, or blog posts.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | HTTP(S) URL to fetch |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds meaningful behavioral detail: it uses Jina Reader, handles JS rendering and bot detection, and returns readable markdown text. This goes beyond the schema and annotations without contradicting them.
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 concise sentences, each serving a purpose: declaring the core function, explaining the underlying mechanism, and listing suitable use cases. There is no filler or redundancy.
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 single-parameter tool with annotations and an output schema, the description is sufficiently complete. It covers the intended use, the behavior of the underlying reader, and the return format, leaving no critical gap for an agent deciding to invoke it.
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%, with the 'url' parameter described as 'HTTP(S) URL to fetch.' The description adds little beyond this, only generalizing to 'any URL,' so it provides no significant additional parameter semantics beyond the schema baseline.
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: 'Fetch any URL and return clean markdown content.' This clearly differentiates fetch_url from the search-oriented siblings by describing a direct retrieval action on an explicit input.
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 provides clear context, noting it is 'Ideal for reading articles, papers, docs, or blog posts,' and explains that Jina Reader handles JS rendering and bot detection on the user's behalf. It does not explicitly name alternative tools or state when not to use it, but the contrast with search siblings is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_researchARead-only
Build a structured research plan for a complex question without executing it. Returns the planned sub-questions, the sources recommended for each, and estimated cost (searches + fetches). Use this when you want to review or edit the plan before committing to the full deep-research pipeline. Returns JSON; pass it back to the research tool to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Plan breadth: 'quick' (2-3 sub-questions), 'standard' (4-6), or 'deep' (6-8). | standard |
| question | Yes | The research question |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'without executing it' aligns with that. Beyond annotations, it adds that the tool returns JSON with sub-questions, recommended sources, and cost estimates, and explains the workflow of passing the result to 'research'. This adds meaningful behavioral context without contradicting the annotations.
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 four sentences with no filler. The primary purpose is stated first, followed by the return value, the usage scenario, and the follow-up action. Each sentence earns its place and the structure is front-loaded for quick comprehension.
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 tool is read-only, has a simple two-parameter schema, and an output schema exists, so the description doesn't need to detail the return structure. It explains the full workflow (plan → review → execute with 'research') and is consistent with the sibling tool set. Nothing essential 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 description coverage is 100% – both 'question' and 'depth' have descriptions, and 'depth' includes enumerations. The tool description does not introduce any additional parameter semantics beyond that, so it meets the baseline for a fully described schema. It does add a hint that the question should be 'complex', but that's not a parameter-level detail.
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 names a specific verb ('Build'), a clear resource ('structured research plan'), and explicitly states it does NOT execute the research. It contrasts with siblings like 'research' by noting it returns a plan for review, differentiating it unambiguously.
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 states when to use it ('when you want to review or edit the plan before committing') and implicitly when not to use it (when you want execution) by directing the agent to pass the returned JSON to the 'research' tool. This provides clear routing to the correct sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
researchARead-only
Run a full deep-research pipeline on a complex question. Decomposes the question into sub-questions, fans out across multiple sources (Wikipedia, arXiv, Hacker News, Stack Exchange, Crossref, plus Brave/Tavily if keys are configured), fetches the top URLs, extracts the most relevant passages, and returns a structured ResearchReport containing: the plan, a numbered citation manifest, per-sub-question evidence with quotes + character offsets, and a Markdown synthesis template for you to fill in. You (the model) should write the narrative synthesis citing the [n] markers; the server does the gathering, not the writing. Use depth='quick' for fast overviews, 'standard' for normal research, 'deep' for thorough multi-source investigations.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Research depth: 'quick' (2-3 sub-questions, ~10 fetches), 'standard' (4-6, ~20 fetches), or 'deep' (6-8, ~32 fetches). | standard |
| question | Yes | The research question to investigate |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations are minimal (readOnlyHint, openWorldHint), so the description must carry the behavioral burden — and it does. It names the specific upstream sources (Wikipedia, arXiv, Hacker News, Stack Exchange, Crossref, Brave/Tavily), explains the config-dependent availability of some, describes the decomposition and evidence-extraction pipeline steps, details the exact ResearchReport structure, and explicitly assigns the synthesis-writing responsibility to the model ('the server does the gathering, not the writing'). This goes well beyond the annotations without contradicting them.
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 long, but every component earns its place: operation → pipeline mechanism → sources → return structure → model's responsibility → depth guidance. The front-loading of the core 'run a pipeline' phrase followed by progressive detail creates a logical, scannable flow. Minor stylistic blemishes (the semicolon-heavy middle and parenthetical digression about keys) are the only reason it doesn't get a 5; it could be slightly tightened without losing information.
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?
Given the tool's complexity — multi-step orchestration across 6+ external sources, configurable depth with nonlinear cost implications, and a rich structured output — the description covers all critical dimensions explicitly. It addresses dependencies ('if keys are configured'), delineates agent vs. server responsibility, enumerates the output contract, and offers per-level trade-offs. The output schema presumably details the ResearchReport shape, so the description's lack of that detail is acceptable. No meaningful gap left for an agent deciding whether and how to invoke this.
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% and the schema already documents both parameters well, establishing a baseline of 3. The description adds semantic value on top by re-framing the depth values by intent ('fast overviews,' 'normal research,' 'thorough multi-source investigations') and by showing how the parameter's granularity maps to pipeline trade-offs. It reinforces rather than merely restates the schema's mechanical counts (sub-questions, fetches).
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 a precise verb+object pair ('Run a full deep-research pipeline on a complex question') and immediately unpacks what 'pipeline' means: decompose, fan out, fetch, extract, return structured output. It distinguishes itself from the search_* siblings by being the full orchestrated pipeline versus point lookups, and from plan_research/extract_evidence by stating that gathering and planning happen server-side while the model handles synthesis. An agent could confidently discriminate this from its siblings 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?
The description gives explicit, actionable when-to-use guidance via the depth parameter: "Use `depth='quick'` for fast overviews, 'standard' for normal research, 'deep' for thorough multi-source investigations." It also clarifies the model's post-call responsibilities (write the synthesis). However, it never explicitly says when NOT to use this tool versus calling one of the many search siblings directly (e.g., 'for a single fact check, prefer search_web'), which given 9 siblings would be the crowning touch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_academicARead-only
Search arXiv for academic preprints across all fields (CS, physics, math, bio, etc.). Returns title, authors, abstract snippet, and PDF URL. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world behavior MAP. The description adds the useful fact that no API key is required # and clarifies the output fields. However, it does not mention potential rate limits, pagination, or that results are limited to arXiv only, which would be additional transparency value.
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 two concise sentences. The first immediately states the tool's purpose and scope; the second lists the output fields and notes no API key is needed. Information is front-loaded and there is no extraneous text.
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?
Given the presence of an output schema and a simple search use case, the description covers the essential aspects: what is searched, what is returned, and that no key is required. It does not detail search operators or pagination, but for a straightforward query on arxiv, the provided context is sufficient for an agent to make a reasonable call.
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?
With schema description coverage at 50% (only 'query' has a description, max_results does not), the description fails to compensate. It does not explain query syntax or the behavior of max_results beyond what the schema implicitly provides (a bounded default integer). This leaves the agent under-informed about parameter usage.
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 clearly states the resource (arXiv), the action (search), and the scope (academic preprints across all fields). This immediately distinguishes it from sibling search tools like search_web or search_news, and the inclusion of return fields (title, authors, abstract, PDF URL) further clarifies its role.
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 implies usage for academic literature but does not explicitly compare against alternatives like search_scholar_meta or mention when not to use this tool. No guidance on query formatting or result limits is provided, so an agent would need to rely on external knowledge.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_newsARead-only
Search Hacker News for tech news, discussions, and trending links. Returns title, URL, points, comments, and dates. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint and openWorldHint; the description adds the useful behavioral fact that no API key is required and discloses the return fields. It does not discuss rate limits or result ordering, but the annotation coverage lowers the burden.
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?
Two tight sentences with no filler; the core action and resource are front-loaded, and the return fields and auth note each add value.
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 an output schema present, return value details are already structured. The description covers the key selection signal (Hacker News source), simplicity, and auth. It could mention that it only searches Hacker News rather than the general web, but the tool name already conveys that.
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 50%: 'query' is minimally described and 'max_results' lacks a description. The tool description adds no parameter-specific meaning beyond the schema, and does not compensate for the undocumented max_results parameter.
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?
Description states a specific verb ('Search') and resource ('Hacker News') with a scope ('tech news, discussions, and trending links'), and lists the returned fields. This clearly distinguishes it from sibling search tools like search_web or search_wikipedia.
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?
Usage context is implied by the Hacker News resource and the 'No API key required' note, but there is no explicit guidance on when to choose this over search_web or other search siblings, nor any when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_scholar_metaARead-only
Search Crossref for scholarly metadata across publishers (Elsevier, Springer, Wiley, IEEE, ACM, etc.). Returns DOI, citation count, publication date, and abstract. Covers peer-reviewed papers that arXiv may not. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, so the tool's safety profile is already known. The description adds valuable behavioral characteristics, such as 'No API key required' (lowering barriers) and specifying the coverage of publishers. It also implies the tool returns DOI, citation count, publication date, and abstract, which is useful but somewhat redundant with the output schema. No contradiction with annotations.
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 a single concise sentence with no waste. It front-loads the primary purpose and includes key differentiators (coverage of publishers, returns fields, no API key). It is structured well for an agent to quickly grasp the tool's function.
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 tool is relatively simple with two parameters, both documented, and it has an output schema that presumably describes return fields. The description covers the key aspects: what it searches, what it returns, and the fact that no API key is required. It could mention pagination or result formats, but given the output schema likely handles that, the description is reasonably complete. The comparison to arXiv adds helpful context.
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 50%: both query and max_results have descriptions, but they are minimal ('Search query' and default/max/min values). The description does not add much detail on what constitutes a good query or how max_results affects results. However, it does mention typical query types (e.g., searching for scholarly metadata) and implies that max_results controls result count. Given the schema already handles the basics, a 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?
The description clearly states the tool performs a search on Crossref for scholarly metadata across multiple named publishers. It specifies the resource (Crossref) and the purpose (searching scholarly metadata), which differentiates it from siblings like search_web and search_wikipedia. The mention of 'peer-reviewed papers that arXiv may not' further distinguishes it from potential academic search tools.
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 provides clear context for when to use this tool, such as when searching for scholarly metadata with DOIs, citation counts, and abstracts. It notes that it covers peer-reviewed papers that arXiv may not, implying a comparison with other academic sources. However, it does not explicitly state when not to use it or name specific alternatives like search_academic, which could be more explicit. Still, the context is useful enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_stackexchangeARead-only
Search Stack Exchange sites (default: Stack Overflow) for high-quality technical Q&A. Set the 'site' parameter to search other SE communities (e.g. 'serverfault', 'superuser', 'askubuntu', 'math', 'tex'). No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | Stack Exchange site slug (default: stackoverflow) | stackoverflow |
| query | Yes | Search query | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the agent knows this is a safe read operation. The description adds that no API key is required, which is useful context. It does not mention rate limits or result format, but given the readOnlyHint, the baseline for transparency is met. The description doesn't contradict annotations.
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 concise, two sentences, with the most important information (what it searches, default site) front-loaded. The examples of alternative sites are useful and efficiently stated. No filler or redundant content.
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 tool is a simple search with a clear output schema (not provided but implied from signal). The description covers the core purpose, site parameter usage, and the no-API-key requirement. It lacks mention of result format or rate limits, but for a read-only search tool with a straightforward purpose, this is acceptable. The output schema likely covers return values, so the description doesn't need to.
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 67%: 'query' and 'site' have descriptions, but 'max_results' has no description in the schema. The description mentions the 'site' parameter and its examples, adding value beyond the schema. However, it doesn't explain the 'max_results' parameter semantics, leaving a gap. Since coverage is moderate, the description partially compensates but not fully.
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 clearly states the tool's purpose: searching Stack Exchange sites for technical Q&A, with a default of Stack Overflow. It distinguishes itself from siblings like search_web by specifying the platform. However, it doesn't explicitly differentiate from search_academic or other specialized search tools, but the platform specificity is clear.
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 on when to use this tool: when you need technical Q&A from Stack Exchange. It also provides examples of alternative sites via the 'site' parameter. It doesn't explicitly state when not to use it (e.g., for general web searches), but the focus on Stack Exchange is inferable from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_webARead-only
Multi-source web search. Aggregates results from Brave Search and/or Tavily (whichever has a key configured) with dedup and cross-source scoring. Returns title, URL, snippet, and source for each result. Use as the default 'search the web' tool.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| pro_mode | No | If true, also fetch top 3 results via Jina Reader and append their content snippets. | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses meaningful behavior beyond the annotations: results are aggregated from Brave Search and/or Tavily based on configured keys, deduplicated, cross-source scored, and returned with title, URL, snippet, and source. The readOnlyHint and openWorldHint are consistent with a read-only multi-source search tool, and the extra aggregation detail adds useful context.
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 tightly packed sentences with no filler. The core purpose is front-loaded, followed by useful behavioral details and a clear default-use instruction, making each sentence valuable.
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 covers purpose, output shape, behavior with multiple sources, and default usage context. Combined with the output schema and annotations, it provides enough for an agent to use the tool correctly, though it could slightly improve by noting what happens if no API key is configured.
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 67%, with query and pro_mode described in the schema, but the description itself adds no parameter-specific meaning. The max_results parameter is self-evident by its name and schema constraints, so this is adequate but the description could have clarified that max_results applies after deduplication.
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 a specific verb and resource: 'Multi-source web search.' It clearly states the aggregation behavior and return fields, making it easy to distinguish from specialized siblings like search_wikipedia and search_academic, even though those siblings are not explicitly named.
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 explicitly says 'Use as the default "search the web" tool,' which gives clear direction on when to choose it. It does not explicitly list what it should not be used for, but the 'default web search' framing strongly implies it is the broad general-purpose option among the more domain-specific siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_wikipediaARead-only
Search Wikipedia. Returns titles, URLs, and snippets. No API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description shows the return data format (titles, URLs, snippets) and the 'No API key required' note is a useful practical detail about usage friction. Annotations carry weight here and are not contradicted.
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?
Three short sentences, each carrying unique information: what it does, what comes back, and a friction detail. Nothing is wasted.
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 simple search tool with a small parameter surface and a defined response shape, the description covers the essentials. The main shortfall is lack of explicit routing guidance, which is common and minor here. An explicit 'if you need scholarly sources, use search_scholar_meta' would push this to 5.
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?
With 50% schema description coverage, the description partially compensates by naming the return type and surfaces an important detail ('No API key required') that isn't in the schema. However, it doesn't add details about query format or semantics beyond what 'Search query' already states, so it doesn't fully cover the gap.
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 clearly states the verb+resource action ('Search Wikipedia') and lists the return payload contents. It doesn't explicitly distinguish itself from siblings like search_web or search_news, but its focus on the Wikipedia domain is enough to generally separate it.
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 states a clear benefit ('No API key required') that helps determine when to use it, but there's no explicit when-not-to-use guidance or alternative tool naming. The sibling list and scoping might be clear enough for some agents, but explicit exclusions (like 'for general web, use search_web') would strengthen it.
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.
10 tool updates
v0.2.0- First observed
extract_evidence - First observed
fetch_url - First observed
plan_research - First observed
research - First observed
search_academic - First observed
search_news - First observed
search_scholar_meta - First observed
search_stackexchange - First observed
search_web - First observed
search_wikipedia
TDQS
Scored across 10 tools
Most tools have clear, distinct purposes: general web, Wikipedia, arXiv, Hacker News, StackExchange, Crossref metadata, and evidence extraction are clearly separate. Minor overlap exists between search_academic (arXiv preprints) and search_scholar_meta (Crossref metadata), since both find scholarly papers, but their descriptions make the distinction clear enough. The plan_research and research tools are also clearly separated as planning vs. execution.
Tools mostly follow verb_noun naming (search_web, fetch_url, search_wikipedia, plan_research, extract_evidence), but some are slightly off: search_scholar_meta uses a noun descriptor for a source rather than a clean object; research is a standalone verb, and fetch_url/extract_evidence are both verb_noun but diverge in verb choice. No mixed casing or chaotic naming, so overall predictable and readable.
10 tools is within the ideal 3-15 range and appropriate for a research server: search methods for multiple sources, plus a planner, an executor, and a fetcher/extractor. Each tool serves a distinct role without redundancy, and the scale is not too heavy to handle.
The server covers the core research pipeline fairly well: plan, search, extract, synthesize. Minor gaps: no full-text search on Crossref tokens or thousands; abstracts only for arXiv; no search by author/full-text Google Scholar type search; PDF retrieval across fetch_url may not work; no citation graph or retrieval. Useful but not complete.
Maintenance
Related MCP Connectors
Web search, fetch, extract, and research for AI agents. Markdown output + AI-synthesized answers.
Agent-native search engine with live web research optimized for AI agents.
The best web search for your AI Agent
LLM-ready web search + instant answers + URL-to-clean-text fetch for agents and RAG.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to perform comprehensive search across 27 search engines including web, academic, code, community, package managers, video, images, podcasts, and maps, with multi-modal support, caching, and security features.14MIT
- AlicenseAqualityCmaintenanceWeb tools for AI agents. Search the web for full page content, fetch URLs as clean markdown including PDFs, extract structured data from a page with a prompt, and run multi-source deep research that returns a cited report.42MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to perform web searches, extract webpage content, and conduct end-to-end search-and-extract operations using multiple search providers and content extraction methods.-
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to perform live web searches with ranked results and extracted page passages, plus clean markdown extraction of any URL.MIT