Skip to main content
Glama

Web Research MCP

一个高质量、多来源的 Web 研究 MCP 服务器,专为 AI 智能体设计。将其接入 Claude Desktop、Hermes、Cursor 或任何兼容 MCP 的客户端,即可获得生产级的搜索 + 页面抓取能力,覆盖 Wikipedia、arXiv、Hacker News、Stack Exchange、Crossref、Brave、Tavily 以及互联网上的任意 URL。

MCP Python License: MIT GitHub stars CI

# 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。这种方法是一场必输的军备竞赛——搜索引擎会在几天内检测并封禁爬虫,即使侥幸成功,你得到的也是需要 LLM 自行清理的 DOM 垃圾。

本服务器采用了不同的方法——它对接的是为智能体而生的 API:

功能

实现方式

真正的 Web 搜索

Brave Search API、Tavily API(白名单、排序、结构化 JSON)

读取任意 URL

Jina Reader(处理 JS 渲染 + 反爬虫,返回干净的 Markdown)

百科查询

Wikipedia MediaWiki API

学术预印本

arXiv API

同行评审论文

Crossref API

科技信号

Hacker News Algolia API

代码问答

Stack Exchange API(任意站点)

全部七个数据源无需任何 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 保持一致。同一个包,两个名称。

方案 B — 从源码克隆

git clone https://github.com/infinit3labs/web-research-mcp.git
hermes mcp add web-research \
  --command "$(pwd)/bin/web-research-mcp"

当提示时,接受全部 7 个工具。完成。

方案 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"
    }
  }
}

方案 D — 通过 Cursor / 任意 stdio MCP 客户端安装

{
  "mcpServers": {
    "web-research": {
      "command": "/absolute/path/to/web-research-mcp/bin/web-research-mcp"
    }
  }
}

启动器脚本会在首次运行时自动创建虚拟环境,从 pyproject.toml 安装依赖,并加载 web-research.env 以读取你配置的任何 API 密钥。

2.(可选)添加 API 密钥以启用真正的 Web 搜索

cp web-research.env.example web-research.env
$EDITOR web-research.env

密钥

解锁的功能

免费额度

BRAVE_API_KEY

search_web 真正的通用 Web 索引

每月 2,000 次查询

TAVILY_API_KEY

search_web + 面向研究的优化摘要

每月 1,000 次查询

JINA_API_KEY

fetch_url 更高的抓取速率

每月 1M tokens

启动器在每次调用时都会从 web-research.env 读取密钥——无需重启 MCP 客户端。

3. 使用它

向你的智能体提问,例如:

"在 Hacker News 和 Stack Overflow 上搜索 2026 年发布的最佳 MCP 服务器"

"使用 pro_mode 研究小型语言模型的当前状态"

"抓取 https://arxiv.org/abs/2506.06962 并总结其方法论"

"将这一论断与 Wikipedia 和 arXiv 进行交叉验证"


工具

tools/list 中注册了全部 10 个工具。工具分为两层:

  • 搜索与抓取(7 个工具)——单次查询。一个工具、一个 API、一个结果。

  • 深度研究(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
) -> str

由 Brave + Tavily 提供支持,具备 URL 规范化去重和跨来源分数提升。需要 BRAVE_API_KEY 和/或 TAVILY_API_KEY。没有密钥时,会返回一条清晰的消息,告诉你如何启用它。

pro_mode: true 是研究利器功能——它会执行一次普通搜索,通过 Jina 抓取前 3 条结果,并将内容附加为摘要。一次调用即可完成原本需要 search_web + 3 次 fetch_url 的工作。

fetch_url — 任意页面的干净 Markdown

fetch_url(url: str) -> str

通过 Jina Reader 处理,它能够:

  • 渲染 JS 密集型页面(SPA、React 应用)

  • 绕过大多数机器人检测(Jina 在白名单中)

  • 返回带元数据块(Title:、URL Source:、Published Time:)的干净 Markdown

  • 截断至约 20k 字符以保护你的上下文窗口

search_wikipedia — 百科知识锚定

search_wikipedia(query: str, max_results: int = 5) -> str

Wikipedia MediaWiki API。无需密钥。速度快。最适合定义和历史背景。

search_academic — arXiv 预印本

search_academic(query: str, max_results: int = 5) -> str

返回标题、作者、摘要片段、发表日期、PDF 链接。无需密钥。最适合计算机科学、物理学、数学、生物学。

search_news — Hacker News 信号

search_news(query: str, max_results: int = 10) -> str

返回标题、URL、分数、评论数、日期。无需密钥。最适合了解当下科技趋势。

search_stackexchange — 来自 180+ 站点的问答

search_stackexchange(query: str, max_results: int = 5, site: str = "stackoverflow") -> str

将 site 设置为任意 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)。无需密钥。

深度研究

这三个工具将上述搜索/抓取原语组合成多步骤研究流水线。它们本身从不调用 LLM——由调用方模型负责撰写最终叙述;服务器的职责是规划、收集和整理带有可验证引用的证据。

plan_research — 仅生成结构化计划(不执行抓取)

plan_research(question: str, depth: str = "standard") -> str  # JSON

返回一个 JSON 研究计划:子问题、每个子问题推荐的来源、理由、要执行的查询,以及预估的搜索和抓取次数。当你希望在提交完整流水线之前检查或修改计划时使用此工具。

  • depth:"quick"(2-3 个子问题)、"standard"(4-6 个)、"deep"(6-8 个)

extract_evidence — 从单个 URL 提取针对性引文

extract_evidence(
    url: str,
    question: str,
    max_passages: int = 5,
) -> str  # JSON

通过 Jina 抓取 URL,将其拆分为段落,根据与你的问题的相关性对每段打分,并返回最相关的段落。每个段落都包含 before / quote / after 上下文、relevance 分数(0-1)以及 offset(在源文档中的字符位置),因此引用可以独立验证。

当你已经有一个特定来源,并希望深入挖掘其中针对某个狭窄论断的证据时使用此工具。

research — 完整深度研究流水线

research(question: str, depth: str = "standard") -> str  # markdown + JSON

端到端研究工作流:

  1. 规划——构建子问题计划

  2. 扇出——并行地在每个子问题的推荐来源中执行搜索

  3. 排序——在整个计划中去重 URL,使用来源感知的复合评分进行排序(Wikipedia/arXiv/Crossref 2.0×、Stack Exchange 1.7×、Web 搜索 1.5×、Hacker News 1.0×)

  4. 抓取——通过 Jina Reader 拉取排名靠前的 URL

  5. 提取——对段落进行相关性评分并设置质量下限(过滤掉导航菜单、纯链接段落、页脚垃圾内容)

  6. 返回——输出结构化的 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 是一个 Markdown 骨架,每个子问题对应一个章节,外加一个 Sources 表格。你(模型)负责填充叙述,将每个 [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。你获得干净的结构化数据,没有 IP 封禁,网站改版时也无需维护负担。

按来源隔离错误。 每个提供方都将其 HTTP 调用包裹在 try/except 中。某个来源返回 429 绝不会拖垮整个搜索——你会获得部分结果,同时收到一条清晰的消息说明哪个来源失败了。

URL 规范化。 merge_results() 在去重前剥离跟踪参数(utm_*、fbclid、gclid、ref),对主机名进行大小写归一化,并丢弃片段。当 Brave 和 Tavily 返回同一篇文章时,你只会看到一次,并带有 also_found_in: [brave, tavily] 和提升后的分数。

每次调用共享 HTTP 客户端。 httpx.AsyncClient 支持连接池(max_connections=20)、合理的超时(默认 30s,fetch_url 为 45s)以及自动重定向跟随。每次调用新建客户端,因为 stdio MCP 服务器一次只处理一个请求,我们希望保持干净的状态。

不使用无头浏览器。 零 Playwright、Selenium、Puppeteer 或代理轮换。攻击面更小、依赖更少、无 JVM/Chrome 占用。少数需要 JS 渲染的站点由 Jina 承担繁重工作。


与替代方案对比

特性

本服务器

SerpAPI MCP

Google 爬虫 MCP

本地搜索 MCP

通用 Web 索引

✅ Brave/Tavily

✅ Google

⚠️ 脆弱

❌

仅 API(不爬虫)

✅

✅

❌

✅

处理 JS 渲染

✅ 通过 Jina

✅

⚠️ 因实现而异

❌

学术来源

✅ arXiv + Crossref

❌

❌

⚠️

科技/问答来源

✅ HN + StackExchange

❌

❌

❌

百科知识

✅ Wikipedia

❌

❌

⚠️

无需 API 密钥即可使用

✅(6/7 个工具)

❌

✅

✅

利于引用的输出

✅

⚠️

❌

⚠️

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-mcp

fetch_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 中的任意一个。其余 6 个工具(Wikipedia、arXiv、HN、Stack Exchange、Crossref、fetch_url)都可以在没有密钥的情况下使用。

Stack Exchange 返回 400 Bad Request

如果你配置了自定义的 filter 参数,API 会拒绝未知的 filter ID。请使用默认过滤器(省略该参数即可)——它返回的字段比你需要的更多,但一切都能正常工作。本服务器使用的正是默认值。

服务器首次启动时崩溃

请在 stderr 中查看实际的 traceback。常见原因是 Python 版本低于 3.10。请用 python3 --version 检查。

速率限制

每个无需密钥的 API 都有自己的限制。如果遇到限流:

  • Wikipedia:约 200 次请求/分钟,请用真实的 User-Agent 标识自己(本服务器会发送)

  • arXiv:未认证请求约 1 次/3 秒,请放慢请求

  • Hacker News Algolia:有 API key 时 10k 次/小时,无 key 时 5k 次/小时

  • Stack Exchange:无 key 时 300 次/天(对研究会话来说绰绰有余)

  • Crossref:请在 User-Agent 中加入 mailto(本服务器已添加),之后便可在 polite pool 中无限使用


开发

项目结构

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

添加新工具

  1. 在 providers.py 中添加一个 async 函数:

    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")]
  2. 在 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}"
  3. 在 tests/e2e_protocol.py 中添加一个真实环境运行的测试用例。

  4. 更新 README 的 Tools 部分。

代码风格

  • Python 3.10+,async 优先

  • 处处有类型注解;让 Pydantic 推导出 MCP JSON schema

  • 每个 provider 都用 try/except 包裹网络调用,并降级为 []

  • 每次调用都新建 HTTP 客户端(_new_client())——在 stdio 模式下不要跨调用共享


参与贡献

欢迎提交 PR。在提交之前:

  1. 在真实安装环境中运行 e2e 测试:.venv/bin/python tests/e2e_protocol.py

  2. 为任何新增工具添加测试用例

  3. 保持 providers.py 与 MCP 特定的类型无关——它应当能作为普通 Python 模块复用

  4. 不要引入无头浏览器或代理轮换等依赖——那会违背项目的基本主张

如果改动较大,请先开一个 issue。


许可证

MIT —— 参见 LICENSE。

致谢

Available Tools

10 tools
extract_evidenceA
Read-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.

NameRequiredDescriptionDefault
urlYesHTTP(S) URL to read
questionYesWhat you're looking for on this page
max_passagesNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_urlA
Read-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.

NameRequiredDescriptionDefault
urlYesHTTP(S) URL to fetch

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_researchA
Read-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.

NameRequiredDescriptionDefault
depthNoPlan breadth: 'quick' (2-3 sub-questions), 'standard' (4-6), or 'deep' (6-8).standard
questionYesThe research question

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

researchA
Read-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.

NameRequiredDescriptionDefault
depthNoResearch depth: 'quick' (2-3 sub-questions, ~10 fetches), 'standard' (4-6, ~20 fetches), or 'deep' (6-8, ~32 fetches).standard
questionYesThe research question to investigate

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_academicA
Read-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.

NameRequiredDescriptionDefault
queryYesSearch query
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_newsA
Read-only

Search Hacker News for tech news, discussions, and trending links. Returns title, URL, points, comments, and dates. No API key required.

NameRequiredDescriptionDefault
queryYesSearch query
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_metaA
Read-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.

NameRequiredDescriptionDefault
queryYesSearch query
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_stackexchangeA
Read-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.

NameRequiredDescriptionDefault
siteNoStack Exchange site slug (default: stackoverflow)stackoverflow
queryYesSearch query
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_webA
Read-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.

NameRequiredDescriptionDefault
queryYesSearch query
pro_modeNoIf true, also fetch top 3 results via Jina Reader and append their content snippets.
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_wikipediaA
Read-only

Search Wikipedia. Returns titles, URLs, and snippets. No API key required.

NameRequiredDescriptionDefault
queryYesSearch query
max_resultsNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 10 tool updatesv0.2.0
    • First observedextract_evidence
    • First observedfetch_url
    • First observedplan_research
    • First observedresearch
    • First observedsearch_academic
    • First observedsearch_news
    • First observedsearch_scholar_meta
    • First observedsearch_stackexchange
    • First observedsearch_web
    • First observedsearch_wikipedia

TDQS

A4/5.0

Scored across 10 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables 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.
    14
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Web 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.
    4
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to run local multi-engine web searches, fetch pages through anti-bot fallback chains, and query site-specific sources such as GitHub, npm, PyPI, Docker Hub, and Twitter/X for structured results.
    2
    MIT