mcpField
A
Anyfetch

Anyfetch

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

关于 Anyfetch

Anyfetch 是面向 AI Agent 的开源网页搜索与抓取服务及命令行工具,适合需要读取可能拦截自动请求的网站的场景。它整合多种搜索来源,以类似浏览器的请求抓取网页,并支持定向提取内容和读取 PDF。

主要功能

  1. 01搜索网页及专业来源
  2. 02以浏览器式请求抓取网页
  3. 03返回与查询相关的页面片段
  4. 04将 PDF 转为带页码文本
  5. 05并行抓取多个 URL
  6. 06作为 MCP 服务或命令行工具使用

适用场景

  1. 01从网页和学术来源研究主题
  2. 02读取拒绝常规 Agent 请求的页面
  3. 03提取长文档中的相关段落
  4. 04一次抓取并解析多个页面

MCP 相关

提供 stdio MCP 服务,包含 web_search、web_fetch 和 web_fetch_many 工具。MCP 客户端可通过 anyfetch mcp 命令连接。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
mcpbanyfetch.mcpb
npm@aliasmode/anyfetch0.8.3

工具

3

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

参数类型必填说明
urlstring是
freshboolean否即使存在过去 15 分钟内获取的副本,也重新获取页面。
querystring|null否问题或关键词。仅返回匹配的页面部分,并用 [...] 标记省略部分,最多 max_chars 个字符(使用 query 时默认为 5000)。用于从长页面中查找一条信息。使用 query 时不使用 offset。
offsetinteger否要返回的首个内容字符。与 max_chars 搭配使用,以分段读取长页面。
max_charsinteger|null否要返回的最多内容字符数(默认为 50000)。结果中的 total_chars 表示完整长度。

详细介绍

Anyfetch

面向 AI Agent 的网页搜索与抓取工具。一个小巧的二进制文件,无需 API 密钥,还能读取那些拒绝为你的 Agent 提供内容的网站。

免费开源,由 AliasMode 的创作者打造。

Agent 工具框架会以机器人身份抓取网页,许多网站会返回 403。Anyfetch 会像真实浏览器一样发送请求,让你的 Agent 获取网页内容。

会拦截 AI Agent 的 97 个热门网站读取的页面数
Anyfetch82
使用 NobleProxy 住宅 IP 的 Anyfetch87
curl46
参考 MCP 抓取服务39
Claude Code 内置的 WebFetch36

Anyfetch 读取了表格中其他工具都无法读取的 28 个网站,包括:The New York Times、Reuters、Bloomberg、The Washington Post、The Economist、Medium、Reddit、Stack Overflow、IMDb 和 YouTube。

33 个研究问题,每个问题提问两次两次均正确回答
使用 Anyfetch 的 Agent32
使用 Claude Code 内置 WebSearch 和 WebFetch 的同一 Agent27

其中 13 个问题涉及会拦截 AI Agent 的网站上的页面。内置抓取工具无法读取这 13 个页面中的任何一个。它通过搜索从其他来源找到了其中 7 个问题的答案。Anyfetch 在两轮测试中都回答了其中 12 个问题。这些问题根据 Anyfetch 能读取的页面编写,因此这组测试展示了内置工具会遗漏哪些内容。

同一页面,从全新状态开始用时峰值内存
Anyfetch0.19 s17 MB
无头 Chromium1.15 s544 MB

网站测试:于 2026-10-12 使用版本 0.8.0 测量。问题测试:于 2026-10-12 使用版本 0.7.1 测量。用时和内存:于 2026-10-11 测量。所有测试均在云服务器上进行,代理行除外,其他测试均未使用代理。请参阅测量方法和如何重新运行测试。

你的 Agent 能做什么

  • 无需密钥即可搜索。 搜索 Brave、Yahoo 和 DuckDuckGo 的结果,并支持按域名和日期筛选、精确短语搜索和分页。也可搜索 GitHub、Stack Overflow、Hacker News、arXiv 和研究论文等专业来源,或使用你自己的 SearXNG。
  • 一次调用即可搜索并阅读。 除结果列表外,还可一并获取排名靠前的结果,以及每个页面中与你的查询匹配的内容。
  • 获取答案,而非整页内容。 提供问题和 URL,即可只获取页面中与问题相关的内容。Python 3.15 的发行说明有 218,000 个字符;针对其中一个问题,返回的答案只有 2,200 个字符。
  • 整洁的 Markdown。 链接、表格和代码块都能保持完整。长页面会分段返回。
  • PDF。 论文和报告会按页以文本形式返回。
  • 需要 JavaScript 的网站。 Anyfetch 会读取页面中的数据,并使用 Stack Overflow、Reddit、IMDb、X 帖子、PyPI 和 crates.io 的公开 API 或信息源。Reddit 讨论串会包含所有评论及其评分。不会启动浏览器。对于没有脚本就不显示内容的页面,它可以使用可选的轻量引擎 Lightpanda。
  • 新闻和问答。 获取 Reuters 和 Bloomberg 的完整文章、The Economist 的最新文章,以及 Quora 上的答案,内容来自这些网站发送的数据。
  • 主页和列表页。 对于没有单篇文章的页面,会按页面中的顺序返回标题和链接。
  • 媲美浏览器的请求。 使用 Safari 的 TLS、HTTP/2 和请求头指纹。请求被拒绝时会自动重试,可使用同一浏览器或换用另一个浏览器。对于 Reddit 和 Behance 等只需完成一个固定步骤的机器人检查,也能顺利通过。
  • Cloudflare 检查。 网站要求通过 JavaScript 检查时,你自己的 Firefox 只需通过一次。之后,Anyfetch 就能通过普通请求读取网站。
  • 重复访问时速度更快。 一次调用可同时获取多个页面。最近 15 分钟内获取过的页面会从本地副本中读取。
  • 轻量。 16 MB 的 Rust 二进制文件。不捆绑浏览器,不含 JavaScript 引擎、Python 或 Node。
  • 随处可用。 为 Agent 框架提供 stdio MCP 服务,同时也提供通用 CLI。

安装

macOS 和 Linux:

curl -fsSL https://aliasmode.github.io/anyfetch/install.sh | sh

Windows,在 PowerShell 中:

irm https://aliasmode.github.io/anyfetch/install.ps1 | iex

安装程序会将 anyfetch 放入 ~/.local/bin。随后,它会将 Anyfetch 连接到在这台机器上检测到的每个 Agent 框架:Claude Code、Codex、Gemini CLI、Hermes Agent、Pi、Cline、Amp、OpenClaw 和 Cursor。启动新的 Agent 会话后,Agent 就能使用 web_search、web_fetch 和 web_fetch_many。

后来才安装了框架?运行 anyfetch setup。它会使用各个框架自己的命令,告知你已连接的框架,并且可以安全地重复运行。

你有 Node.js 吗? 那就无需安装。将此服务提供给你的 MCP 客户端,npx 会获取适用于你平台的程序:

{
  "mcpServers": {
    "anyfetch": { "command": "npx", "args": ["-y", "@aliasmode/anyfetch", "mcp"] }
  }
}

只使用 macOS 或 Linux 上的 Claude Code? 你也可以改为将 Anyfetch 安装为插件。插件会在首次启动时获取程序:

claude plugin marketplace add aliasmode/anyfetch && claude plugin install anyfetch@anyfetch

在 Claude Code 2.1.275 或更高版本中,只需一步:/plugin install anyfetch --marketplace aliasmode/anyfetch。请使用插件或安装程序,不要同时使用,否则 Agent 会看到两份相同的工具。

手动连接 Agent

anyfetch setup 会为你完成此操作。若要手动操作,每个运行环境都需要一条命令。

Claude Code

claude mcp add --scope user anyfetch -- anyfetch mcp

Codex

codex mcp add anyfetch -- anyfetch mcp

或在 ~/.codex/config.toml 中:

[mcp_servers.anyfetch]
command = "anyfetch"
args = ["mcp"]

Hermes Agent

hermes mcp add anyfetch --command anyfetch --args mcp

Hermes 会连接并列出工具,然后询问是否启用。回答 Y。

Pi

pi mcp add anyfetch -- anyfetch mcp

Pi 默认会通过代码模式隐藏 MCP 工具。若要直接向模型显示这些工具,请在 ~/.pi/agent/mcp.json 中设置公开方式:

{
  "mcpServers": {
    "anyfetch": { "command": "anyfetch", "args": ["mcp"], "exposure": "direct" }
  }
}

Gemini CLI

gemini mcp add -s user anyfetch anyfetch mcp

OpenCode — 在 ~/.config/opencode/opencode.json 中:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "anyfetch": { "type": "local", "command": ["anyfetch", "mcp"], "enabled": true }
  }
}

Cursor — 在 ~/.cursor/mcp.json 中:

{
  "mcpServers": {
    "anyfetch": { "command": "anyfetch", "args": ["mcp"] }
  }
}

更多运行环境

运行环境命令
Clinecline mcp add anyfetch --yes -- anyfetch mcp
Ampamp mcp add anyfetch -- anyfetch mcp
OpenClawopenclaw mcp add anyfetch --command anyfetch --arg mcp
Goosegoose session --with-extension "anyfetch mcp"
VS Code(Copilot)code --add-mcp "{\"name\":\"anyfetch\",\"command\":\"anyfetch\",\"args\":[\"mcp\"]}"

其他任何 MCP 客户端:添加一个 stdio 服务,命令为 anyfetch,参数为 mcp。

Anyfetch 已收录在官方 MCP Registry,名称为 io.github.aliasmode/anyfetch;也已发布到 npm,名称为 @aliasmode/anyfetch。

没有 MCP? 将 CLI 提供给 Agent。把以下内容添加到 AGENTS.md 或运行环境的指令文件中:

## Web access
- Search the web: `anyfetch search "<query>"`
- Read pages: `anyfetch fetch <url> [<url>...] --format markdown`

设为默认选项。 Anyfetch 会告诉 Agent 使用它的工具,而非内置网页工具。在我们使用 Claude Code 进行的测试中,Agent 随后在 8 项网页任务中有 8 项选择了 Anyfetch。此前,它在 8 项任务中只有 2 项选择 Anyfetch。若要移除这个选择,请关闭内置工具:

  • Claude Code,在 ~/.claude/settings.json 中:"permissions": { "deny": ["WebFetch", "WebSearch"] }
  • Codex,在 ~/.codex/config.toml 中:web_search = "disabled"

从命令行使用

anyfetch search "rust async runtime comparison"
anyfetch search "tokio select" --site docs.rs --time year
anyfetch search "postgres vacuum freeze" --read 3
anyfetch search "retrieval augmented generation" --provider papers
anyfetch fetch https://stackoverflow.com/questions/231767 --format markdown
anyfetch fetch https://arxiv.org/pdf/1706.03762 --max-chars 8000 --offset 8000
anyfetch fetch https://docs.python.org/3.15/whatsnew/3.15.html --query "sampling profiler rate"
anyfetch fetch https://www.rust-lang.org/ https://go.dev/ https://ziglang.org/

默认输出为 JSON,因此脚本和 Agent 可以解析。--format markdown 只输出页面内容。

工具

web_fetch
输入含义
url要读取的页面。
query可选。问题或关键词。结果只包含页面中匹配的部分。
max_chars可选。返回的内容字符数上限。默认值为 50,000;指定 query 时为 5,000。
offset可选。要返回的第一个内容字符的位置。指定 query 时不使用。
fresh可选。即使过去 15 分钟内已有副本,也重新抓取。

结果包含 title、description、content(Markdown)、total_chars、url(重定向后的地址)、status 和 retrieved_at。若要分段读取长页面,请使用更大的 offset 再次调用,直到达到 total_chars。各部分取自本地副本,因此网站只会收到一次请求。

指定 query 后,页面会按段落、表格和代码块拆分。最匹配查询词的部分会按页面顺序返回,并归入对应标题之下;省略的部分以 [...] 表示。此时结果还会包含 focused: true。若页面没有匹配部分,则从页面开头返回。针对同一页面提出第二个问题时,会使用本地副本。

HTML 会转换为 Markdown。PDF 会转换为带有 [Page N] 标记的文本。JSON、纯文本和 XML 订阅源则会原样返回。

web_fetch_many
输入含义
urls要读取的页面。会同时抓取这些页面。
query可选。与 web_fetch 相同。每个页面最多返回 5,000 个字符。
max_chars可选。每个页面返回的内容字符数上限。默认情况下,所有页面共用 50,000 个字符的额度。
fresh可选。与 web_fetch 相同。

结果包含 pages:每个 URL 对应一个条目,并按顺序排列。每个条目是页面内容,或其 error。

web_search
InputMeaning
query搜索查询。支持带引号的短语。
provider可选。请参阅下方列表。默认值为 auto。
site可选。只保留来自某个域名的结果,例如 docs.rs。
time可选。day、week、month 或 year。
page可选。结果页码,从 1 开始。
read可选。另行返回排名最高的这些结果中,各页面与查询匹配的部分。
searxng_url用于 searxng 提供方的 SearXNG 实例基础 URL。必须启用 JSON 输出。

每条结果都包含 title、url 和 snippet;设置 read 后,还会包含 content。

ProviderSource
auto同时使用 Brave、Yahoo 和 DuckDuckGo。合并它们的结果列表,并将多个搜索引擎都排在前面的页面置于最前。engines 列出提供了结果的搜索引擎。
braveBrave Search。每页约 20 条结果。
yahooYahoo Search。每页 7 条结果。不支持 year 筛选。
duckduckgoDuckDuckGo。仅限第一页。
searxng你自己的 SearXNG 实例。
githubGitHub 仓库,包含星标数和语言。
stackoverflowStack Overflow 问题,包含评分和回答数。
hackernewsHacker News 故事,包含积分和讨论链接。
arxivarXiv 论文,包含摘要。
papers来自 OpenAlex 的研究论文,包含引用次数和开放获取链接。

site、time 和带引号的短语适用于网络搜索引擎。专业来源是免费的公共 API,各自有请求限制。

错误

调用失败时会返回一个 error 对象,其中包含 Agent 可据此采取操作的 code:

CodeMeaning
challenge_required网站返回了需要通过浏览器处理的机器人验证。
http_error网站拒绝了请求。status 中包含 HTTP 状态码。
rate_limited网站要求降低请求频率。如有提供,retry_after 会包含等待时间。
timeout网站在 30 秒内未响应。
unsupported_contentURL 指向的不是文本或 PDF(例如图片)。
extraction_failed页面没有可读取的内容。扫描版 PDF 不含文本。

Cloudflare 检查

某些网站会在每次首次请求时返回 JavaScript 检查。Anyfetch 分两步处理:

  1. 使用你自己的 Firefox 一次性通过检查。它会使用临时配置文件在后台运行几秒钟。
  2. Anyfetch 会保存该网站的通行凭证,并恢复普通请求。在 Medium 上,通过一次可用一年。

在我们的测试中,此类网站的第一页耗时约 5 秒,下一页则不到 2 秒。

机器上需要安装 Firefox 或基于 Firefox 的浏览器。若没有,则不会有任何变化:抓取会返回 challenge_required。

SettingEffect
ANYFETCH_BROWSER=off从不启动浏览器。
ANYFETCH_BROWSER=/path/to/browser使用此基于 Firefox 的浏览器。

对于 MCP 服务,请在服务条目中设置此变量。在 Claude Code 中:

claude mcp add --scope user anyfetch -e ANYFETCH_BROWSER=off -- anyfetch mcp

注意:

  • 已在 Linux 上测试。在 Windows 上,以及使用 snap 打包的 Firefox(Ubuntu 默认版本)时,只有在 ANYFETCH_BROWSER 指定该浏览器的情况下才会使用浏览器。
  • 通行凭证属于获取它的地址,因此浏览器不会与代理一同使用。
  • 保存的通行凭证位于 ~/.config/anyfetch/clearance/。删除文件即可清除某个网站的凭证。

需要运行脚本的页面

大多数页面无需 JavaScript 就会向 Anyfetch 提供文本:文本位于 HTML、页面数据中,或可通过公开 API 获取。少数页面在脚本运行前没有任何内容。MSN、Spotify 和 Airbnb 就是一些例子。对于这些页面,Anyfetch 可以使用 Lightpanda,这是一款轻量级的无头引擎,无需完整浏览器。

Lightpanda 是可选且独立的。按照其 README 安装,将 lightpanda 放入 PATH,Anyfetch 就会用它处理需要渲染的页面。在我们的测试中,MSN 从没有内容变为 12 秒内获取 154,000 个字符,Spotify 则从没有内容变为 3 秒内获取 23,000 个字符。已经可以正常处理的页面不会进行渲染,因此速度不受影响。

设置效果
ANYFETCH_RENDERER=off从不启动渲染器。
ANYFETCH_RENDERER=/path/to/lightpanda使用此程序。

注意:

  • Lightpanda 会自行发送请求。它不会与代理搭配使用,而启用了机器人检测的网站也可能拒绝它。
  • 渲染后的应用页面(例如动态消息流或列表)会以整页 Markdown 的形式返回。

使用代理

无论请求看起来如何,有些网站都会拒绝云服务器地址。如果你的 Agent 在服务器上运行,请让 Anyfetch 通过住宅代理连接。在 ~/.config/anyfetch/proxy 中添加一行:

host:port:username:password

之后,Anyfetch 会通过该 HTTP 代理发送所有搜索和抓取请求。此文件以纯文本形式保存密码,请妥善保管:chmod 600 ~/.config/anyfetch/proxy。删除此文件即可恢复直连。

有些网站接受你的地址,却拒绝代理的地址。要访问这两类网站,请添加第二行,内容为 direct。之后,Anyfetch 会先尝试代理;如果代理线路被拒绝,再直接向网站发起请求。

需要代理?请使用我们的服务 NobleProxy。在我们的测试中,同一个 NobleProxy 地址让 Anyfetch 可访问的网站数量从 97 个中的 82 个提升至 87 个,而且每次运行的结果都相同。它成功访问了拒绝服务器地址的 The Wall Street Journal、Tripadvisor、Yelp、Etsy 和 Bandcamp。你将获得一个仅供你使用、带宽不限且支持 HTTP 的静态住宅 IP。

它无法做到什么

Anyfetch 本身不会运行 JavaScript、破解 CAPTCHA 或登录。如果页面只有在脚本运行后才显示内容,且 HTML 中没有数据,也没有公开 API,那么除非安装了 Lightpanda,否则 Anyfetch 只会返回页面标题和描述。它读取的是网站发送给首次访问者的内容。需要 CAPTCHA、账户或订阅才能加载的页面仍然无法访问,Anyfetch 会通过错误代码说明原因。

你的 Agent 是否需要支持登录和保存会话的真实浏览器?请使用 AliasMode。它是我们的免费开源反检测浏览器,还为 Agent 提供专属 MCP 服务。

基准测试

顶部的数据来自 bench/ 中的两个脚本和一组问题。

  • 读取的页面数。 bench/bench.py 使用每个工具分别读取 bench/sites.txt 中的 97 个网站,每个网站读取一次。当工具返回至少 500 个字符的文本,且文本不是机器人验证页面时,就算读取成功。所有工具都使用相同的规则。Anyfetch 运行了三次,分别读取了 82、81 和 82 个页面;表格显示的是中间一次的结果。通过 NobleProxy 静态住宅 IP(美国有线网络提供商的固定地址),并在代理文件中使用 direct 行,它在三次运行中均读取了 87 个页面。代理额外读取了 The Wall Street Journal、Tripadvisor、Yelp、Etsy 和 Bandcamp。其他工具未通过代理测试。Claude Code 的 WebFetch 无法通过脚本调用,因此由一个 Agent 为每个网站调用一次,并记录是否返回了真实内容。

  • 耗时和内存。 bench/speed.py 使用每个程序读取 10 个页面,每读一个页面都重新启动程序,并报告中位数。

  • 研究问题。 bench/tasks.json 中有 33 个问题。每个问题都有一个准确答案,以及源页面上能证明答案的句子。页面内容来自 2026 年 7 月至 10 月,因此模型无法凭记忆作答。Claude Sonnet Agent 只使用 Anyfetch 回答这些问题,然后又只使用 Claude Code 内置的 WebSearch 和 WebFetch 作答。两种情况下的指令相同:每个问题最多进行 8 次网页调用;如果工具无法提供答案,则回答 UNKNOWN。Anyfetch 未使用代理、Firefox 或 Lightpanda。每个工具都运行了两次,只有两次都答对的问题才计为正确。

问题组Anyfetch内置工具
来自屏蔽 AI Agent 的网站的页面12 / 137 / 13
来自开放网站的页面10 / 1010 / 10
未提供 URL:先搜索,再读取10 / 1010 / 10

在单次运行中,Anyfetch 分别答对了 32 和 33 个问题,内置工具分别答对了 28 和 27 个。Anyfetch 唯一答错的是一个 Reddit 帖子:当天 Reddit 限制了测试机器的请求速率,其中一次运行中,Anyfetch 读取了评论里的链接,而不是帖子中的链接。

关于这项测试,有三点需要了解。出题者使用 Anyfetch 检查每个答案,因此第一组只包含 Anyfetch 能读取的页面。出题者的列表中有 Financial Times,但它的文章需要订阅,因此没有对应的问题。有 30 个问题的页面比测试日期早一天;其中 28 个问题的答案当天都在源页面上重新核实过。所有答案都在 bench/results/tasks.tsv 中。

我们还使用另外八个工具读取了相同的 97 个网站;每个工具均使用默认设置且未提供 API 密钥:

工具读取的页面数
Anyfetch82
Exa MCP(托管服务,基于已存储的副本提供答案)78
Scrapling,隐身浏览器71
Scrapling,普通 HTTP69
Hermes Agent web_extract(托管读取器)68
Crawl4AI66
Jina Reader61
Playwright MCP52
DuckDuckGo MCP 服务49

每个工具的运行方式以及对比前需要了解的信息,详见 bench/other-tools/NOTES.md。包含所有网站的完整排名见 aliasmode.com。

各网站的结果见 bench/results/。网站经常更改规则,而且不同网络下的结果也会不同,因此请自行运行:

python3 bench/bench.py anyfetch curl
pip install mcp-server-fetch && python3 bench/bench.py reference
python3 bench/speed.py /path/to/chromium

从源代码构建

你需要 Rust 1.98、cmake 和 clang(TLS 库为 BoringSSL)。在 Windows 上,你还需要 NASM。

cargo install --git https://github.com/aliasmode/anyfetch

许可证

Apache-2.0

评论

支持 Markdown

第一次接触 MCP?

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

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