Skip to main content
Glama

intercept-mcp

赋予你的 AI 阅读网页的能力。一条命令,无需 API 密钥。

如果没有它,你的 AI 访问 URL 时可能会遇到 403 错误、访问墙或一堆原始 HTML。有了 intercept,它几乎总能获取到内容——整洁的 Markdown,随时可用。

支持推文、YouTube 视频(可用时提供字幕)、arXiv 论文、PDF、维基百科文章和 GitHub 仓库。如果第一种策略失败,它会尝试多达 14 种后续策略,直到成功或放弃。

适用于任何 MCP 客户端:Claude Code、Claude Desktop、Codex、Cursor、Windsurf、Cline 等。

安装

Claude Code

claude mcp add intercept -s user -- npx -y intercept-mcp

Codex

codex mcp add intercept -- npx -y intercept-mcp

Cursor

设置 → MCP → 添加服务器:

{
  "mcpServers": {
    "intercept": {
      "command": "npx",
      "args": ["-y", "intercept-mcp"]
    }
  }
}

Windsurf

设置 → MCP → 添加服务器 → 使用与上述相同的 JSON 配置。

Claude Desktop

添加到你的 claude_desktop_config.json:

{
  "mcpServers": {
    "intercept": {
      "command": "npx",
      "args": ["-y", "intercept-mcp"]
    }
  }
}

其他 MCP 客户端

任何支持 stdio MCP 服务器的客户端都可以运行 npx -y intercept-mcp。

fetch 工具不需要 API 密钥。

Related MCP server: urltomarkdown-mcp

工作原理

URL 处理分为四个阶段:

1. 站点特定处理器

已知的 URL 模式在进入回退流水线之前会路由到专用处理器:

模式

处理器

你将获得

twitter.com/*/status/*, x.com/*/status/*

Twitter/X

推文文本、作者、媒体、互动数据(通过第三方 API)

youtube.com/watch?v=*, youtu.be/*

YouTube

标题、频道、时长、观看次数、描述、字幕(当有字幕可用时)

arxiv.org/abs/*, arxiv.org/pdf/*

arXiv

论文元数据、作者、摘要、分类

*.pdf

PDF

提取的文本(仅限文本层 PDF)

*.wikipedia.org/wiki/*

维基百科

通过 Wikimedia REST API 获取的整洁文章内容

github.com/{owner}/{repo}

GitHub

原始 README.md 内容

2. 共享缓存 (agentsweb.org)

在访问任何抓取器之前,每个请求都会检查 agentsweb.org —— 一个面向 AI 代理的全球共享 Markdown 缓存。如果其他代理已经获取过此 URL,你将在 50 毫秒内获得结果。

每次成功的获取都会自动回馈到缓存中。条目通过自我修复的共识模型获得信任:当独立实例获取相同的 URL 并确认相同的内容时,置信度会增加。

你可以通过 INTERCEPT_SHARED_CACHE=false 完全禁用,或使用 INTERCEPT_CACHE_READ_ONLY=true 开启只读模式(仅消费,不贡献)。

agentsweb.org API

agentsweb.org 还提供独立的端点供直接使用:

  • /web?q= — 搜索网页

  • /research?q= — 一次调用完成搜索 + 获取 + 缓存

  • /fetch?url= — 按需获取,自动缓存

查看 agentsweb.org/docs 获取完整的 API 文档。

3. 回退流水线

如果没有匹配的处理器(或处理器未返回内容),URL 将进入多层流水线:

层级

抓取器

策略

0

agentsweb.org

全球共享 Markdown 缓存 — 如果其他代理已获取过,则瞬间返回

1

Cloudflare Browser Run

JS 渲染 + Markdown 提取(可选,需要 API 令牌)

1

Jina Reader

整洁的 Markdown 提取服务

2

Wayback Machine

来自 archive.org 的存档版本

2

archive.ph

通过 timemap API + 隐身 TLS 获取的存档快照

2

Google Cache

Google 的网页缓存版本

2

Arquivo.pt

葡萄牙网络存档(广泛的国际覆盖)

2

Codetabs

CORS 代理

3

原始获取

使用浏览器标头的直接 GET + Turndown Markdown 转换

3

隐身获取

通过 got-scraping 进行浏览器 TLS 指纹模拟(可选,见下文)

4

RSS, CrossRef, Semantic Scholar, HN, Reddit

元数据 / 讨论回退

5

OG Meta

Open Graph 标签(保证回退)

第 2 层抓取器并行运行。当多个成功时,质量最高的结果胜出。所有其他层级按顺序运行。

所有抓取器都通过 Turndown 返回正确的 Markdown(标题、链接、粗体、表格、代码块),而不是纯文本。

4. 缓存

结果在内存中缓存,并带有 TTL(成功为 30 分钟,失败为 5 分钟)。最多 100 个条目,采用 LRU 淘汰策略。失败的 URL 也会被缓存,以防止重复尝试已知的死链。

工具

fetch

获取 URL 并将其内容作为整洁的 Markdown 返回。

  • url (字符串,必填) — 要获取的 URL

  • maxTier (数字,可选,1-5) — 在此层级停止,适用于对速度敏感的情况

搜索网页并返回结果。

  • query (字符串,必填) — 搜索查询

  • count (数字,可选,1-20,默认 5) — 结果数量

如果设置了 BRAVE_API_KEY,则使用 Brave Search API;如果设置了 SEARXNG_URL,则使用 SearXNG;最后作为不可靠的后备方案使用 DuckDuckGo。

提示词

research-topic

搜索主题并获取前几条结果,以进行多源总结。

  • topic (字符串) — 要研究的主题

  • depth (字符串,默认 "3") — 要获取的前几条结果的数量

extract-article

获取 URL 并从内容中提取关键点。

  • url (字符串) — 要获取并总结的 URL

环境变量

变量

必填

描述

BRAVE_API_KEY

否

Brave Search API 搜索密钥

SEARXNG_URL

否

自托管 SearXNG 实例 URL(推荐)

CF_API_TOKEN

否

具有 "Browser Rendering - Edit" 权限的 Cloudflare API 令牌

CF_ACCOUNT_ID

否

Cloudflare 账户 ID(如果设置了 CF_API_TOKEN 则必填)

USE_STEALTH_FETCH

否

设置为 true 以启用隐身抓取器(见下文警告)

INTERCEPT_SHARED_CACHE

否

设置为 false 以禁用 agentsweb.org 共享缓存

INTERCEPT_CACHE_READ_ONLY

否

设置为 true 以仅消费而不向共享缓存贡献

INTERCEPT_CACHE_TTL_MS

否

成功获取的内存缓存 TTL(毫秒,默认 3600000 = 60 分钟)

INTERCEPT_CACHE_FAILURE_TTL_MS

否

失败获取的内存缓存 TTL(毫秒,默认 300000 = 5 分钟)

INTERCEPT_CACHE_SIZE

否

最大内存缓存条目数(默认 250)

HTTPS_PROXY / HTTP_PROXY

否

标准代理透传 — 将所有出站获取(包括隐身)路由通过代理。遵循 NO_PROXY。

搜索: 有一个 DuckDuckGo 后备方案,但它受到速率限制且不可靠。对于生产环境,请自托管 SearXNG 并设置 SEARXNG_URL(见下文),或获取 Brave Search API 密钥。

获取: 无需任何密钥即可工作。设置 CF_API_TOKEN + CF_ACCOUNT_ID 以启用 Cloudflare Browser Run(原 Browser Rendering),用于 JavaScript 密集型页面(SPA、React 站点)。

隐身获取 (USE_STEALTH_FETCH)

风险自担。 启用后,它会添加一个抓取器,使用 got-scraping 模拟真实的浏览器 TLS 指纹(Chrome/Firefox 密码套件、HTTP/2 设置、标头顺序)。这可以绕过在其他情况下会阻止自动化请求的站点的机器人检测和 CAPTCHA 触发器。

此抓取器在常规原始获取之后的第 3 层运行。如果原始获取被阻止(CAPTCHA、Cloudflare 挑战、403),隐身抓取器会通过浏览器模拟重试。

这可能违反某些网站的服务条款。 intercept-mcp 的作者不对该功能的使用方式承担任何责任。它默认禁用,必须显式启用。

使用自己的代理 (HTTPS_PROXY)

如果原始获取开始被标记,最有效的修复方法通常是一个干净的出站 IP — 而不是更花哨的指纹。intercept-mcp 遵循标准的 HTTPS_PROXY / HTTP_PROXY / NO_PROXY 环境变量,因此你可以通过你已有的任何代理路由所有出站流量:

HTTPS_PROXY=http://user:pass@proxy.example.com:8080 npx intercept-mcp

这适用于任何 HTTP(S) 代理 — 自托管的 Squid、Tailscale 出口节点、运行 3proxy 的 5 美元 VPS,或商业住宅代理(Bright Data、Oxylabs 等)。隐身抓取器和 got-scraping 调用也会自动获取此设置。

自托管 SearXNG

为了实现可靠的搜索,请使用 Docker 自托管 SearXNG。配置包含在 仓库 中:

git clone https://github.com/bighippoman/intercept-mcp.git
cd intercept-mcp/searxng && docker compose up -d

然后设置 SEARXNG_URL=http://localhost:8888。无速率限制,无 CAPTCHA,聚合 Google + Bing + DuckDuckGo + Wikipedia + Brave。

或者使用任何现有的 SearXNG 实例 — 只需将 SEARXNG_URL 设置为其 URL 即可。

URL 规范化

传入的 URL 会自动清理:

  • 去除 60 多个跟踪参数(UTM、点击 ID、分析、A/B 测试等)

  • 移除哈希片段

  • 升级到 HTTPS

  • 清理 AMP 工件

  • 保留功能性参数(ref, format, page, offset, limit)

内容质量检测

每个抓取器的结果都会进行质量评分。以下情况自动失败:

  • CAPTCHA / Cloudflare 挑战

  • 登录墙

  • 正文中的 HTTP 错误页面

  • 内容少于 200 个字符

要求

  • Node.js >= 18

  • 基本使用无需 API 密钥

Available Tools

5 tools
extractExtract structured dataA
Read-onlyIdempotent

Extract specific values from a web page as JSON instead of markdown prose. Provide CSS selectors to pull named fields (text or an attribute, first match or all), and/or set tables:true to convert every HTML table to arrays of row objects. Use this when you need particular data (prices, lists, specs, tabular data) rather than the whole page. Honors per-domain auth and proxies.

NameRequiredDescriptionDefault
urlYesThe URL to extract from
tablesNoExtract all HTML tables as arrays of row objects (default true when no selectors are given)
selectorsNoMap of field name to CSS selector, e.g. {"title":"h1","price":".price","links":{"selector":"a.item","attr":"href","all":true}}
timeoutMsNoOverall retrieval deadline in milliseconds, including downloads (default 25000)

Output Schema

NameRequiredDescription
urlYes
fieldsNo
tablesNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the description's job is to add context — and it does: "Honors per-domain auth and proxies" discloses credentialed fetching behavior that no annotation conveys. It also notes the implicit tables:true default when no selectors are supplied, though it says nothing about failure behavior on non-200 pages or timeouts beyond the parameter itself.

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?

Front-loaded with what it produces, then how, then when — a logical order with no filler sentences. It is dense in the selector sentence but every clause carries information; only mild tightening would be possible.

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 values need no explanation, and the description covers mode selection, selector shape, table extraction, and credentialed/proxied fetching. For a 4-parameter tool with a nested selector object, that is close to complete; only error/empty-result behavior is unaddressed.

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%, so the baseline is 3; the description earns above that by explaining the semantics of the selector map in prose (named fields, text vs attribute, first match vs all) and clarifying the conditional default "tables:true when no selectors are given" — a cross-parameter interaction the schema only states one-sidedly.

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?

"Extract specific values from a web page as JSON instead of markdown prose" names a concrete verb and resource and immediately contrasts the output shape with the whole-page/markdown siblings (fetch, research). An agent can distinguish extract from fetch without opening either 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?

"Use this when you need particular data (prices, lists, specs, tabular data) rather than the whole page" gives a clear selection rule with concrete examples. It stops short of naming the alternative tool (fetch) explicitly or stating when not to use it, so it is strong but not fully routing-grade.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetchFetch URLA
Read-onlyIdempotent

Fetch a public or authenticated URL as readable Markdown, with source, retrieval time, content hash and completeness. Specialized handlers support GitHub, Wikipedia, YouTube transcripts, PDFs, arXiv and tweets. Otherwise checks fresh shared content, then native Markdown/direct HTML, hosted rendering, and labeled archive fallbacks. Authenticated requests use direct sources only. Paginate long pages with startIndex and maxLength. noCache forces retrieval and disables archives unless explicitly allowed.

NameRequiredDescriptionDefault
urlYesThe URL to fetch
maxTierNoStop at this tier (1-5, default 5). Lower = faster but fewer fallbacks.
noCacheNoSkip session and shared caches and fetch live content
maxLengthNoMaximum characters to return (default 50000)
timeoutMsNoOverall retrieval deadline in milliseconds, including downloads (default 25000)
startIndexNoCharacter offset to start from, for paginating long content (default 0)
allowArchiveNoAllow labeled historical snapshots after live retrieval fails; disabled by noCache unless explicitly enabled
maxAgeSecondsNoOldest acceptable cached retrieval in seconds; 0 forces retrieval (default 3600)

Output Schema

NameRequiredDescription
urlYes
bytesNoImage size in bytes, when an image was returned
titleNo
sourceYes
timingYes
qualityYes
mimeTypeNoSet when the URL is an image returned as an image block
truncatedYes
archivedAtNo
sourceKindNo
verifiedAtNo
contentHashNo
retrievedAtNo
canonicalUrlNo
completenessNo
contentLengthYesFull length of the fetched content in characters
nextStartIndexNoPass as startIndex to fetch the next chunk
returnedLengthYes
cacheAgeSecondsNoAge of the content when served from the shared cache

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly, idempotent, non-destructive, open-world), the description discloses the real behavioral story: a tiered retrieval ladder (shared cache, native Markdown/direct HTML, hosted rendering, labeled archive fallbacks) and the fact that authenticated requests bypass fallback sources and caches. That is valuable, non-obvious context an agent cannot get from annotations or schema; it only lacks detail on failure signaling.

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?

Dense but front-loaded: capability and return shape first, then handler coverage, then the fallback ladder, then operational knobs. Nearly every sentence carries information, though the tier/fallback sentence is compressed enough to require a second read.

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?

With 8 parameters, full schema coverage, and an output schema that already documents return values, the description covers everything else an agent needs: what it retrieves, in what form, what fallbacks occur, how authentication changes behavior, and how to page through large results. Nothing material is missing for correct invocation.

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%, so the baseline is 3, but the description genuinely adds meaning: it explains the tier ladder that maxTier caps and describes the intended use of startIndex/maxLength for paginating long content, plus the interaction between noCache and archive fallbacks. This makes the truncation and caching controls understandable as a system rather than as isolated fields.

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 first sentence gives a specific verb (fetch), resource (public or authenticated URL) and concrete output shape (readable Markdown plus source, retrieval time, hash, completeness), and names the special-cased hosts (GitHub, Wikipedia, YouTube, PDFs, arXiv, tweets). It never names or distinguishes itself from the siblings extract, fetch_batch, research or search, so an agent gets no explicit routing signal between them.

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?

Operational guidance is present: paginate long pages with startIndex and maxLength, noCache forces retrieval and disables archives unless allowed, and authenticated requests are restricted to direct sources. However there is no when-to-use-this-vs-alternative guidance, so the agent must infer that batch fetching belongs to fetch_batch and structured extraction to extract.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_batchFetch multiple URLsA
Read-onlyIdempotent

Fetch up to 10 URLs in parallel and return each as clean markdown. Same handler/fallback chain as the fetch tool, with a smaller per-URL length budget. Use after a search to pull several sources in one call.

NameRequiredDescriptionDefault
urlsYesThe URLs to fetch (1-10)
maxTierNoStop at this tier (1-5, default 5). Lower = faster but fewer fallbacks.
noCacheNoSkip session and shared caches and fetch live content
maxLengthNoMaximum characters to return per URL (default 20000)
timeoutMsNoOverall retrieval deadline in milliseconds, including downloads (default 25000)
allowArchiveNoAllow labeled historical snapshots after live retrieval fails; disabled by noCache unless explicitly enabled
maxAgeSecondsNoOldest acceptable cached retrieval in seconds; 0 forces retrieval (default 3600)

Output Schema

NameRequiredDescription
resultsYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds genuinely non-obvious behavior: parallel execution, markdown normalization, reuse of the same handler/fallback chain, and a reduced per-URL output budget. It does not say how per-URL failures or partial results are surfaced.

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 sentences, front-loaded with the core behavior and batching cap, followed by the differentiator and the usage cue. No padding or redundant restatement of the name or title.

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 annotations, a complete input schema and an output schema, the description covers purpose, scale and routing well. The one meaningful gap for a batch tool is partial-failure semantics, which an agent may need before committing to ten URLs.

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 100%, so every parameter including maxTier, noCache, maxLength and timeoutMs is already documented, which sets the baseline at 3. The description only adds that the length budget is smaller than the single fetch tool's, without giving the concrete value or explaining the tier/archive interplay.

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?

States a specific verb and resource ('Fetch up to 10 URLs in parallel') plus the return format ('clean markdown'), and implicitly differentiates from the single-URL fetch sibling by calling out the smaller per-URL length budget.

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?

'Use after a search to pull several sources in one call' gives a clear triggering context, and the reference to 'the fetch tool' with a smaller per-URL length budget hints at when to prefer the single-URL sibling. It stops short of an explicit when-not-to-use rule or a blanket statement of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

researchResearch a queryA
Read-only

Search the web and fetch the content of the top results in one call. Returns the full content of each result as markdown, ready to summarize or compare. Use this instead of separate search + fetch calls when researching a topic.

NameRequiredDescriptionDefault
siteNoRestrict results to a domain, e.g. "docs.python.org"
countNoNumber of top results to fetch (1-5, default 3)
queryYesSearch query
freshnessNoOnly return results from the last day/week/month/year (ignored by the DuckDuckGo fallback)
maxLengthNoMaximum characters to return per result (default 20000)
timeoutMsNoOverall retrieval deadline in milliseconds, including downloads (default 25000)
passagesOnlyNoReturn query-relevant verbatim passages instead of full documents

Output Schema

NameRequiredDescription
queryYes
resultsYes
searchSourceYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint and non-destructiveness, so the safety bar is lower, and the description usefully adds that results come back as full markdown content per result. It does not mention pagination, truncation at maxLength, or that the DuckDuckGo fallback silently ignores freshness, but those are largely covered by schema descriptions and the output schema.

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 with zero redundancy: the action, the return shape, and the routing rule are each delivered once and front-loaded in that order.

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 and full schema coverage, the description need not explain returns or parameters, and it correctly stays high level for a seven-parameter composite tool. A small gap remains in not flagging the composite's heavier cost relative to a bare search, which would help an agent choose between this and its siblings.

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%, so every one of the seven parameters is already documented in the schema, including count, site, freshness and passagesOnly. The description adds only loose framing ('top results', 'full content'), which touches on count and passagesOnly but supplies no new syntax or defaults, making the baseline 3 correct.

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 concrete verb pair and resource ('Search the web and fetch the content of the top results') and explicitly frames itself as a single-call composite, which separates it from the sibling 'search' and 'fetch' that it replaces.

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?

It gives an explicit when-to-use rule: 'Use this instead of separate search + fetch calls when researching a topic.' That is clear routing guidance, but it does not address when to prefer the sibling 'fetch_batch' (multi-URL retrieval) or 'extract', leaving those distinctions to inference.

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. 5 tool updatesv6.0.0
    • Addedextract
    • Changedfetch7 fields changed
      • addedInput schema / properties / allowArchive
        Added value: +{
        +  "description": "Allow labeled historical snapshots after live retrieval fails; disabled by noCache unless explicitly enabled",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / maxAgeSeconds
        Added value: +{
        +  "description": "Oldest acceptable cached retrieval in seconds; 0 forces retrieval (default 3600)",
        +  "maximum": 2592000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / maxLength
        Added value: +{
        +  "description": "Maximum characters to return (default 50000)",
        +  "maximum": 1000000,
        +  "minimum": 100,
        +  "type": "integer"
        +}
      • addedInput schema / properties / noCache
        Added value: +{
        +  "description": "Skip session and shared caches and fetch live content",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / startIndex
        Added value: +{
        +  "description": "Character offset to start from, for paginating long content (default 0)",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / timeoutMs
        Added value: +{
        +  "description": "Overall retrieval deadline in milliseconds, including downloads (default 25000)",
        +  "maximum": 120000,
        +  "minimum": 500,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "archivedAt": {
        +      "type": "string"
        +    },
        +    "bytes": {
        +      "description": "Image size in bytes, when an image was returned",
        +      "type": "number"
        +    },
        +    "cacheAgeSeconds": {
        +      "description": "Age of the content when served from the shared cache",
        +      "type": "number"
        +    },
        +    "canonicalUrl": {
        +      "type": "string"
        +    },
        +    "completeness": {
        +      "enum": [
        +        "complete",
        +        "partial",
        +        "unavailable"
        +      ],
        +      "type": "string"
        +    },
        +    "contentHash": {
        +      "type": "string"
        +    },
        +    "contentLength": {
        +      "description": "Full length of the fetched content in characters",
        +      "type": "number"
        +    },
        +    "mimeType": {
        +      "description": "Set when the URL is an image returned as an image block",
        +      "type": "string"
        +    },
        +    "nextStartIndex": {
        +      "description": "Pass as startIndex to fetch the next chunk",
        +      "type": "number"
        +    },
        +    "quality": {
        +      "type": "number"
        +    },
        +    "retrievedAt": {
        +      "type": "string"
        +    },
        +    "returnedLength": {
        +      "type": "number"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "sourceKind": {
        +      "enum": [
        +        "live",
        +        "archive",
        +        "metadata",
        +        "image"
        +      ],
        +      "type": "string"
        +    },
        +    "timing": {
        +      "type": "number"
        +    },
        +    "title": {
        +      "type": "string"
        +    },
        +    "truncated": {
        +      "type": "boolean"
        +    },
        +    "url": {
        +      "type": "string"
        +    },
        +    "verifiedAt": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "url",
        +    "source",
        +    "quality",
        +    "timing",
        +    "contentLength",
        +    "returnedLength",
        +    "truncated"
        +  ],
        +  "type": "object"
        +}
    • Addedfetch_batch
    • Addedresearch
    • Changedsearch5 fields changed
      • addedInput schema / properties / freshness
        Added value: +{
        +  "description": "Only return results from the last day/week/month/year (ignored by the DuckDuckGo fallback)",
        +  "enum": [
        +    "day",
        +    "week",
        +    "month",
        +    "year"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based results page for pagination (default 1; ignored by the DuckDuckGo fallback)",
        +  "maximum": 10,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / site
        Added value: +{
        +  "description": "Restrict results to a domain, e.g. \"github.com\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / timeoutMs
        Added value: +{
        +  "description": "Overall retrieval deadline in milliseconds, including downloads (default 25000)",
        +  "maximum": 120000,
        +  "minimum": 500,
        +  "type": "integer"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "results": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "snippet": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "url": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title",
        +          "url",
        +          "snippet"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "source": {
        +      "type": "string"
        +    },
        +    "timing": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "results",
        +    "source",
        +    "timing"
        +  ],
        +  "type": "object"
        +}
  2. 2 tool updatesv1.0.2
    • Addedfetch
    • Addedsearch

TDQS

A4.1/5.0

Scored across 5 tools

Disambiguation4/5

Each tool has a distinct retrieval role: search (results only), fetch (single page as markdown), fetch_batch (parallel multi-URL), extract (CSS-targeted JSON), research (search+fetch combo). The only soft overlap is research versus chaining search+fetch, and fetch versus fetch_batch, but the descriptions explicitly steer usage and the boundaries are clear enough for an agent to select correctly.

Naming Consistency5/5

All names are lowercase single-verb or verb_noun forms (extract, fetch, fetch_batch, research, search), with consistent snake_case for the compound. No mixed conventions or casing drift.

Tool Count5/5

Five tools is well-scoped for a web retrieval server: one search, one fetch, a batch variant, a structured extractor, and a research convenience wrapper. No tool feels redundant or padded, and the surface stays small enough to reason about.

Completeness4/5

The core lifecycle of search → fetch → extract → batch → research is fully covered, including pagination, auth, caching, and fallbacks. Minor gaps exist around link/crawl discovery (e.g., enumerating links or sitemaps) and cache/status inspection, but agents can work around these with existing tools.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers