mcpField
I
Intercept

Intercept

本地服务
github.com/bighippoman浏览器自动化913 周前更新

关于 Intercept

Intercept 是一个 MCP 服务,可将网页抓取为整洁的 Markdown,并结合专用处理器与回退抓取策略。它适合需要搜索、读取或提取网页内容的 AI 客户端,也支持特定媒体和文档链接。

主要功能

  1. 01将网址抓取为 Markdown
  2. 02搜索与研究工具
  3. 03批量抓取最多 10 个网址
  4. 04提取字段和表格
  5. 05网站专用处理器
  6. 06内存与共享缓存

适用场景

  1. 01在 AI 客户端中阅读网页
  2. 02根据搜索结果研究主题
  3. 03并行抓取多个页面
  4. 04提取指定页面字段或表格

MCP 相关

Intercept 向 MCP 客户端提供抓取、搜索、研究、批量抓取和提取工具,以及近期会话资源和研究提示词。它适用于支持 stdio MCP 服务的客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"intercept": {
"command": "npx",
"args": [
"-y",
"intercept-mcp"
],
"env": {
"BRAVE_API_KEY": "<BRAVE_API_KEY>"
}
}
}
}
启动命令npx -y intercept-mcp
需要配置的环境变量
BRAVE_API_KEY密钥Brave Search API key for the search tool (free tier: 2,000 queries/month). Not needed for the fetch tool.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmintercept-mcp3.0.8

工具

5

收录的工具列表 · 更新于 3 周前

参数类型必填说明
urlstring是要获取的 URL
maxTierinteger否在此层级停止(1-5,默认值为 5)。値越低,速度越快,但回退选项越少。
maxLengthinteger否返回的最大字符数(默认值为 50000)
startIndexinteger否起始字符偏移量,用于对长内容分页(默认值为 0)
noCacheboolean否跳过会话缓存和共享缓存,获取实时内容

详细介绍

intercept-mcp

让你的 AI 能够阅读网页。一条命令即可,无需 API 密钥。

没有它,你的 AI 访问 URL 时会遇到 403、访问墙或一大堆原始 HTML。使用 intercept 后,它几乎总能获取内容——干净的 Markdown,可直接使用。

支持推文、YouTube 视频(有字幕时提供转录文本)、arXiv 论文、PDF、维基百科文章和 GitHub 仓库。如果第一种策略失败,还会再尝试最多 14 种策略才放弃。

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

intercept-mcp MCP server

安装

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 密钥。

工作原理

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论文元数据、作者、摘要、分类
*.pdfPDF提取的文本(仅限带文本层的 PDF)
*.wikipedia.org/wiki/*Wikipedia通过 Wikimedia REST API 获取的纯净文章内容
github.com/{owner}/{repo}GitHub原始 README.md 内容
github.com/{o}/{r}/blob/{ref}/{path}GitHub原始文件内容,按语言添加代码围栏
github.com/{o}/{r}/issues/{n}、/pull/{n}GitHubIssue/PR 标题、状态、正文、差异统计、评论(通过 GitHub API)
github.com/{o}/{r}/releases/tag/{t}、/releases/latestGitHub发布说明(通过 GitHub API)

GitHub API 端点无需身份验证即可使用(每小时 60 次请求)。设置 GITHUB_TOKEN 可提高上限。

2. 共享缓存(agentsweb.org)

在调用任何抓取器之前,每个请求都会先检查 agentsweb.org——这是一个面向 AI Agent 的全局共享 Markdown 缓存,由 9 个来源组成的并行抓取流程提供支持,并具备 JS/SPA 渲染能力(通过 Cloudflare Browser Run 支持 React、Vue、Angular)。如果其他 Agent 已经抓取过此 URL,你可以在 50 ms 内获取结果。

每次成功抓取都会自动回馈缓存。条目通过自我修复的共识模型建立信任:当互相独立的实例抓取同一 URL 并确认内容一致时,可信度就会提高。

设置 INTERCEPT_SHARED_CACHE=false 可完全退出;设置 INTERCEPT_CACHE_READ_ONLY=true 可使用只读模式(可以读取,但不会贡献内容)。

agentsweb.org API

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

  • /web?q= — 搜索网页
  • /research?q= — 一次调用完成搜索、抓取和缓存
  • /fetch?url= — 按需抓取并自动缓存

完整 API 文档请参阅 agentsweb.org/docs。

3. 回退流水线

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

层级获取器策略
0agentsweb.org全局共享 Markdown 缓存——如果其他 Agent 已获取此 URL,则可立即返回
1Cloudflare Browser RunJS/SPA 渲染 + Markdown 提取——也为 agentsweb.org 提供支持(可选,需要 API 令牌)
1Jina Reader简洁的 Markdown 提取服务
2Wayback Machine来自 archive.org 的存档版本
2Arquivo.pt葡萄牙网络档案(覆盖广泛的国际内容)
2Common Crawl从 Common Crawl 的索引和 S3 读取 PB 级网络档案——不受源站速率限制、机器人检测或付费墙影响
2CodetabsCORS 代理
3Markdown endpoint请求网站提供原生 Markdown 版本(<path>.md + Accept: text/markdown)
3archive.ph通过 timemap API + 隐身 TLS 获取存档快照
3Raw fetch使用浏览器请求头直接 GET + Turndown Markdown 转换
3Stealth fetch通过 got-scraping 模拟浏览器 TLS 指纹(可选启用,见下文)
3FlareSolverr针对 Cloudflare/DDoS-Guard 的真实浏览器挑战求解器(可选启用,需要 FlareSolverr 实例)
3Web unlocker商业解锁 API——住宅代理轮换 + 渲染 + CAPTCHA(可选启用,需自备密钥,按请求付费)
4RSS、CrossRef、Semantic Scholar、HN、Reddit元数据/讨论回退
5OG MetaOpen Graph 标签(保证可用的回退方案)

第 2 层的获取器会并行运行。多个获取器成功时,采用质量最高的结果。其他层级则按顺序运行。

所有获取器都会通过 Turndown 返回规范的 Markdown(标题、链接、粗体、表格、代码块),而非纯文本。

4. 缓存

结果会以 TTL 缓存在内存中(成功结果为 60 分钟,失败结果为 5 分钟)。最多缓存 250 条,采用 LRU 淘汰。失败的 URL 也会被缓存,以避免重试已知无效的 URL。三个配置项均可通过 INTERCEPT_CACHE_TTL_MS、INTERCEPT_CACHE_FAILURE_TTL_MS 和 INTERCEPT_CACHE_SIZE 设置。

工具

fetch

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

  • url(字符串,必填)——要获取的 URL
  • maxTier(数字,可选,1-5)——为对速度敏感的场景指定停止层级
  • maxLength(数字,可选,默认值为 50000)——返回的最大字符数
  • startIndex(数字,可选,默认值为 0)——长内容分页时的字符偏移量
  • noCache(布尔值,可选)——跳过会话缓存和共享缓存,实时获取

长页面会在达到 maxLength 时截断,并提示 Agent 使用哪个 startIndex 继续读取内容。结构化输出会提供 source、quality、contentLength、truncated、nextStartIndex 和 cacheAgeSeconds,以便 Agent 据此进行程序化处理。

直接图片 URL(.png、.jpg、.gif、.webp,最大 5 MB)会作为 MCP 图像块而非文本返回,因此 Agent 自身的视觉模型可以读取图表、示意图、屏幕截图和扫描文档。结构化输出会提供 source: "image"、mimeType 和 bytes。

fetch_batch

并行获取最多 10 个 URL,每个 URL 都经过相同的处理器/回退链。

  • urls(字符串数组,必填,1-10)——要获取的 URL
  • maxTier、noCache——与 fetch 相同
  • maxLength(数字,可选,默认值为 20000)——每个 URL 的字符数限制
research

一次调用即可搜索网络并获取排名靠前的结果——无需先搜索再多次获取。

  • query(字符串,必填)——搜索查询
  • count(数字,可选,1-5,默认值为 3)——要获取的结果数
  • maxLength(数字,可选,默认值为 20000)——每个结果的字符数限制
  • site(字符串,可选)——限定到某个域名
  • freshness(字符串,可选)——day、week、month 或 year
search

搜索网页并返回结果。

  • query(字符串,必填)——搜索查询
  • count(数字,可选,1-20,默认 5)——结果数量
  • site(字符串,可选)——将结果限制在某个域名内
  • freshness(字符串,可选)——day、week、month 或 year
  • page(数字,可选,1-10)——分页的结果页码

如果设置了 BRAVE_API_KEY,则使用 Brave Search API;否则,如果设置了 SEARXNG_URL,则使用 SearXNG;最后才使用不可靠的 DuckDuckGo。DuckDuckGo 回退方案会忽略 freshness 和 page。

extract

将页面中的特定值提取为 JSON,而非 Markdown 正文——适用于只需要特定数据,而非整个页面的情况。支持按域名配置身份验证和代理。

  • url(字符串,必填)——要从中提取内容的 URL
  • selectors(对象,可选)——字段名称 → CSS 选择器的映射。每个值可以是选择器字符串(返回第一个匹配项的文本),也可以是 { selector, attr?, all? }——attr 用于提取属性(例如 href),all: true 则以数组形式返回所有匹配项。
  • tables(布尔值,可选)——将每个 HTML 表格转换为行对象数组(未提供 selectors 时默认为 true)。
{
  "url": "https://shop.example.com/item",
  "selectors": {
    "title": "h1",
    "price": ".price",
    "images": { "selector": "img.gallery", "attr": "src", "all": true }
  }
}

以结构化输出的形式返回提取出的 fields 和/或 tables。

资源

intercept://session/recent

本次会话中已获取并缓存的 URL 的 Markdown 列表,按最近获取的顺序排列。重新获取其中任何 URL 都会即时完成。

提示词

research-topic

搜索某个主题并获取排名靠前的结果,以生成多来源摘要。

  • topic(字符串)——要研究的主题
  • depth(字符串,默认值 "3")——要获取的排名靠前的结果数量
extract-article

获取 URL 并从内容中提取要点。

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

环境变量

变量必填描述
BRAVE_API_KEY否用于搜索的 Brave Search API 密钥
SEARXNG_URL否可自托管的 SearXNG 实例 URL(推荐)
GITHUB_TOKEN否GitHub 令牌,可提高 issue/PR/release 处理程序的 API 速率限制
INTERCEPT_AUTH否域名 → 标头/ Cookie 的 JSON 映射,用于获取已登录后才能查看的内容(参见按域名进行身份验证)
CF_API_TOKEN否具有“Browser Rendering - Edit”权限的 Cloudflare API 令牌
CF_ACCOUNT_ID否Cloudflare 账户 ID(设置 CF_API_TOKEN 后必填)
USE_STEALTH_FETCH否设置为 true 以启用隐身抓取器(参见下方警告)
FLARESOLVERR_URL否FlareSolverr 实例的 URL(例如 http://localhost:8191),用于解决 Cloudflare/DDoS-Guard 挑战
WEB_UNLOCKER_URL否商业网页解锁服务(如 ScrapingBee/ScraperAPI/ZenRows)的 GET 模板(包含 {url} 占位符和你的 API 密钥)——用于最难抓取的网站,作为付费的最后手段
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。
INTERCEPT_PROXIES否以逗号或空格分隔的 HTTP(S) 代理列表,可在这些代理间轮换;遇到受阻响应时会自动重试下一个代理。优先级高于 HTTPS_PROXY。

**搜索:**提供 DuckDuckGo 回退选项,但它有速率限制且不可靠。生产环境中,请自行托管 SearXNG 并设置 SEARXNG_URL(见下文),或获取 Brave Search API 密钥。

**抓取:**无需任何密钥即可使用。设置 CF_API_TOKEN 和 CF_ACCOUNT_ID,即可为 JavaScript 密集型页面(SPA、React 网站)启用 Cloudflare Browser Run(原 Browser Rendering)。

隐身抓取(USE_STEALTH_FETCH)

**使用风险自负。**启用后,此功能会使用 got-scraping 添加一个抓取器,仿冒真实浏览器的 TLS 指纹(Chrome/Firefox 加密套件、HTTP/2 设置、标头顺序)。它可以绕过网站上的机器人检测和 CAPTCHA 触发机制,否则这些网站会阻止自动化请求。

此抓取器在常规原始抓取之后,作为第 3 层运行。如果原始抓取被阻止(CAPTCHA、Cloudflare 挑战、403),隐身抓取器会使用浏览器仿冒方式重试。

**这可能违反某些网站的服务条款。**intercept-mcp 的作者对本功能的使用方式概不负责。本功能默认禁用,必须明确选择启用。

挑战解决(FLARESOLVERR_URL)

隐身抓取器会仿冒浏览器的 TLS 指纹,但无法 执行 JavaScript 挑战——因此,受 Cloudflare“正在检查您的浏览器”/DDoS-Guard 拦截页保护的网站仍会阻止它。FlareSolverr 会运行真实的无头浏览器来解决挑战,并返回页面 HTML。

运行方式(Docker):

docker run -d -p 8191:8191 ghcr.io/flaresolverr/flaresolverr:latest

然后设置 FLARESOLVERR_URL=http://localhost:8191。设置此变量后,它会作为最后手段在第 3 层运行,在原始抓取器和隐身抓取器之后启用。解决挑战可能需要 30–60 秒,因此这是最慢的抓取器,但它可以恢复其他方式都无法获取的页面。

商业网页解锁器(WEB_UNLOCKER_URL)

对于最难处理的目标网站——需要同时使用住宅 IP 轮换、真实浏览器渲染和 CAPTCHA 处理的网站——商业解锁器是务实之选。intercept-mcp 支持任何提供“获取此 URL 并返回 HTML”接口的解锁器,只需使用包含 {url} 占位符的模板,该占位符中存放你的 API 密钥:

# ScrapingBee
WEB_UNLOCKER_URL='https://app.scrapingbee.com/api/v1/?api_key=KEY&render_js=true&url={url}'
# ScraperAPI
WEB_UNLOCKER_URL='https://api.scraperapi.com/?api_key=KEY&render=true&url={url}'
# ZenRows
WEB_UNLOCKER_URL='https://api.zenrows.com/v1/?apikey=KEY&js_render=true&url={url}'

intercept 会将目标 URL(经过 URL 编码)替换到 {url} 中,并将返回的 HTML(或封装 HTML 的 JSON)转换为 Markdown。它在第 3 层运行,是免费抓取器之后的付费兜底方案,且仅在设置了此变量时运行——模板中的凭据只会发送给解锁器,绝不会发送给目标网站。Bright Data 基于代理的 Web Unlocker 只是一个经过身份验证的代理,因此请改用 HTTPS_PROXY / INTERCEPT_PROXIES。每次请求都会产生费用。

使用自己的代理(HTTPS_PROXY)

如果原始抓取开始遭到拦截,通常最有效的解决办法是使用干净的出站 IP,而不是更复杂的指纹。intercept-mcp 支持标准的 HTTPS_PROXY / HTTP_PROXY / NO_PROXY 环境变量,因此你可以通过现有的任意代理路由所有出站流量:

HTTPS_PROXY=http://user:[email protected]:8080 npx intercept-mcp

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

代理轮换(INTERCEPT_PROXIES)

单个代理仍会呈现单个 IP,在高负载下本身也可能遭到拦截。将 INTERCEPT_PROXIES 设置为以逗号或空格分隔的列表后,intercept-mcp 会按轮询方式使用这些代理;当请求被拦截(HTTP 403、429、451、503)或出错时,会自动通过下一个代理重试:

INTERCEPT_PROXIES="http://user:[email protected]:8080,http://user:[email protected]:8080,http://p3.example.com:8080" npx intercept-mcp

请求会分散到列表中的代理;遇到被拦截的响应时,会改用不同的出口重试(最多 3 次),之后才会放弃。因此,少量廉价代理或在列表中重复列出的轮换住宅代理端点,都能形成一个代理池。INTERCEPT_PROXIES 优先于 HTTPS_PROXY,按请求生效(因此隐身抓取和 archive.ph 的 got-scraping 调用也会轮换代理),并接受 HTTP(S) 代理。无效条目会被忽略。

按域名进行身份验证(INTERCEPT_AUTH)

大多数网站都需要登录。INTERCEPT_AUTH 允许你为特定源站的请求附加自定义标头或 Cookie,以便抓取工具读取你已合法登录的内容——例如付费订阅、私人控制面板、内网或经过身份验证的 API。

这是一个 JSON 对象,将域名映射到标头映射。域名也会匹配其子域名:

INTERCEPT_AUTH='{
  "nytimes.com": { "Cookie": "nyt-s=...; nyt-a=..." },
  "api.acme.com": { "Authorization": "Bearer eyJ..." }
}' npx intercept-mcp

获取 Cookie 的方法:登录网站,打开 DevTools → Network,然后从该域名的任意请求中复制 Cookie 请求标头。

安全模型 — 使用前请先阅读
  • 凭据只会发送到配置的源站。 请求头以实际连接的主机为键。当 intercept 通过 Jina、网页存档、CORS 代理、FlareSolverr 或共享缓存获取页面时,这些中间服务会连接到其他主机,因此绝不会向它们发送你的 Cookie/令牌——只有直接获取源站内容时才会携带凭据。
  • 经过身份验证的响应绝不会触及共享缓存。 当请求匹配某个 INTERCEPT_AUTH 条目时,intercept 不会从 agentsweb.org 公共缓存中读取该 URL 的内容,也不会向其中写入内容——因此你的私人/付费内容绝不会被公开,你也始终会看到你自己的已验证视图,而不是陌生人看到的匿名副本。(进程内会话缓存仍然适用。)
  • 请将该值视为机密。 其中包含有效的会话令牌。环境变量对进程及其子进程可见,也可能被记录在 Shell 历史记录或进程列表中——建议使用密钥管理器或不提交到版本库的环境文件,切勿提交该值。Cookie 会过期,因此你需要定期刷新。
  • 你有责任确保使用获得授权。 仅提供你拥有或获准使用的账户凭据,并遵守各网站的服务条款。intercept 只会转发你提供的请求头。

自托管 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)

SSRF 防护

Agent 会传入取自不可信网页内容的 URL,因此抓取工具会拒绝任何指向本地或内部基础设施的 URL:回环地址和私有 IPv4/IPv6 地址段、链路本地地址(包括云元数据端点 169.254.169.254)、CGNAT、多播/保留地址段以及本地主机名(localhost、*.local、*.internal、*.home.arpa)。系统会检查字面 IP 地址,包括经 URL 解析器规范化的其他表示形式(十进制、十六进制);但不会解析 DNS,因此无法拦截指向私有 IP 的公共主机名。

内容质量检测

系统会对每个抓取器的结果进行质量评分。出现以下情况时会自动判定失败:

  • CAPTCHA/Cloudflare 验证
  • 登录墙
  • 正文包含 HTTP 错误页面
  • 内容少于 200 个字符

要求

  • Node.js >= 20
  • 基本使用无需 API 密钥

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。