关于 Anyfetch
Anyfetch 是面向 AI Agent 的开源网页搜索与抓取服务及命令行工具,适合需要读取可能拦截自动请求的网站的场景。它整合多种搜索来源,以类似浏览器的请求抓取网页,并支持定向提取内容和读取 PDF。
主要功能
- 01搜索网页及专业来源
- 02以浏览器式请求抓取网页
- 03返回与查询相关的页面片段
- 04将 PDF 转为带页码文本
- 05并行抓取多个 URL
- 06作为 MCP 服务或命令行工具使用
适用场景
- 01从网页和学术来源研究主题
- 02读取拒绝常规 Agent 请求的页面
- 03提取长文档中的相关段落
- 04一次抓取并解析多个页面
MCP 相关
提供 stdio MCP 服务,包含 web_search、web_fetch 和 web_fetch_many 工具。MCP 客户端可通过 anyfetch mcp 命令连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
3收录的工具列表 · 更新于 1 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| url | string | 是 | |
| fresh | boolean | 否 | 即使存在过去 15 分钟内获取的副本,也重新获取页面。 |
| query | string|null | 否 | 问题或关键词。仅返回匹配的页面部分,并用 [...] 标记省略部分,最多 max_chars 个字符(使用 query 时默认为 5000)。用于从长页面中查找一条信息。使用 query 时不使用 offset。 |
| offset | integer | 否 | 要返回的首个内容字符。与 max_chars 搭配使用,以分段读取长页面。 |
| max_chars | integer|null | 否 | 要返回的最多内容字符数(默认为 50000)。结果中的 total_chars 表示完整长度。 |
详细介绍
Anyfetch
面向 AI Agent 的网页搜索与抓取工具。一个小巧的二进制文件,无需 API 密钥,还能读取那些拒绝为你的 Agent 提供内容的网站。
免费开源,由 AliasMode 的创作者打造。
Agent 工具框架会以机器人身份抓取网页,许多网站会返回 403。Anyfetch 会像真实浏览器一样发送请求,让你的 Agent 获取网页内容。
| 会拦截 AI Agent 的 97 个热门网站 | 读取的页面数 |
|---|---|
| Anyfetch | 82 |
| 使用 NobleProxy 住宅 IP 的 Anyfetch | 87 |
| curl | 46 |
| 参考 MCP 抓取服务 | 39 |
Claude Code 内置的 WebFetch | 36 |
Anyfetch 读取了表格中其他工具都无法读取的 28 个网站,包括:The New York Times、Reuters、Bloomberg、The Washington Post、The Economist、Medium、Reddit、Stack Overflow、IMDb 和 YouTube。
| 33 个研究问题,每个问题提问两次 | 两次均正确回答 |
|---|---|
| 使用 Anyfetch 的 Agent | 32 |
使用 Claude Code 内置 WebSearch 和 WebFetch 的同一 Agent | 27 |
其中 13 个问题涉及会拦截 AI Agent 的网站上的页面。内置抓取工具无法读取这 13 个页面中的任何一个。它通过搜索从其他来源找到了其中 7 个问题的答案。Anyfetch 在两轮测试中都回答了其中 12 个问题。这些问题根据 Anyfetch 能读取的页面编写,因此这组测试展示了内置工具会遗漏哪些内容。
| 同一页面,从全新状态开始 | 用时 | 峰值内存 |
|---|---|---|
| Anyfetch | 0.19 s | 17 MB |
| 无头 Chromium | 1.15 s | 544 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"] }
}
}
更多运行环境
| 运行环境 | 命令 |
|---|---|
| Cline | cline mcp add anyfetch --yes -- anyfetch mcp |
| Amp | amp mcp add anyfetch -- anyfetch mcp |
| OpenClaw | openclaw mcp add anyfetch --command anyfetch --arg mcp |
| Goose | goose 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
| Input | Meaning |
|---|---|
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。
| Provider | Source |
|---|---|
auto | 同时使用 Brave、Yahoo 和 DuckDuckGo。合并它们的结果列表,并将多个搜索引擎都排在前面的页面置于最前。engines 列出提供了结果的搜索引擎。 |
brave | Brave Search。每页约 20 条结果。 |
yahoo | Yahoo Search。每页 7 条结果。不支持 year 筛选。 |
duckduckgo | DuckDuckGo。仅限第一页。 |
searxng | 你自己的 SearXNG 实例。 |
github | GitHub 仓库,包含星标数和语言。 |
stackoverflow | Stack Overflow 问题,包含评分和回答数。 |
hackernews | Hacker News 故事,包含积分和讨论链接。 |
arxiv | arXiv 论文,包含摘要。 |
papers | 来自 OpenAlex 的研究论文,包含引用次数和开放获取链接。 |
site、time 和带引号的短语适用于网络搜索引擎。专业来源是免费的公共 API,各自有请求限制。
错误
调用失败时会返回一个 error 对象,其中包含 Agent 可据此采取操作的 code:
| Code | Meaning |
|---|---|
challenge_required | 网站返回了需要通过浏览器处理的机器人验证。 |
http_error | 网站拒绝了请求。status 中包含 HTTP 状态码。 |
rate_limited | 网站要求降低请求频率。如有提供,retry_after 会包含等待时间。 |
timeout | 网站在 30 秒内未响应。 |
unsupported_content | URL 指向的不是文本或 PDF(例如图片)。 |
extraction_failed | 页面没有可读取的内容。扫描版 PDF 不含文本。 |
Cloudflare 检查
某些网站会在每次首次请求时返回 JavaScript 检查。Anyfetch 分两步处理:
- 使用你自己的 Firefox 一次性通过检查。它会使用临时配置文件在后台运行几秒钟。
- Anyfetch 会保存该网站的通行凭证,并恢复普通请求。在 Medium 上,通过一次可用一年。
在我们的测试中,此类网站的第一页耗时约 5 秒,下一页则不到 2 秒。
机器上需要安装 Firefox 或基于 Firefox 的浏览器。若没有,则不会有任何变化:抓取会返回 challenge_required。
| Setting | Effect |
|---|---|
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 / 13 | 7 / 13 |
| 来自开放网站的页面 | 10 / 10 | 10 / 10 |
| 未提供 URL:先搜索,再读取 | 10 / 10 | 10 / 10 |
在单次运行中,Anyfetch 分别答对了 32 和 33 个问题,内置工具分别答对了 28 和 27 个。Anyfetch 唯一答错的是一个 Reddit 帖子:当天 Reddit 限制了测试机器的请求速率,其中一次运行中,Anyfetch 读取了评论里的链接,而不是帖子中的链接。
关于这项测试,有三点需要了解。出题者使用 Anyfetch 检查每个答案,因此第一组只包含 Anyfetch 能读取的页面。出题者的列表中有 Financial Times,但它的文章需要订阅,因此没有对应的问题。有 30 个问题的页面比测试日期早一天;其中 28 个问题的答案当天都在源页面上重新核实过。所有答案都在 bench/results/tasks.tsv 中。
我们还使用另外八个工具读取了相同的 97 个网站;每个工具均使用默认设置且未提供 API 密钥:
| 工具 | 读取的页面数 |
|---|---|
| Anyfetch | 82 |
| Exa MCP(托管服务,基于已存储的副本提供答案) | 78 |
| Scrapling,隐身浏览器 | 71 |
| Scrapling,普通 HTTP | 69 |
Hermes Agent web_extract(托管读取器) | 68 |
| Crawl4AI | 66 |
| Jina Reader | 61 |
| Playwright MCP | 52 |
| 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
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。