@aliasmode/anyfetch 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -17
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -8,26 +8,27 @@ Agent harnesses fetch pages with a bot identity, and a large part of the web ans
|
|
|
8
8
|
|
|
9
9
|
| 97 popular sites that block AI agents | Pages read |
|
|
10
10
|
| --- | --- |
|
|
11
|
-
| **Anyfetch** | **
|
|
12
|
-
|
|
|
13
|
-
|
|
|
11
|
+
| **Anyfetch** | **82** |
|
|
12
|
+
| **Anyfetch with a [NobleProxy](https://nobleproxy.com/?utm_source=anyfetch&utm_medium=readme&utm_campaign=anyfetch) residential IP** | **87** |
|
|
13
|
+
| curl | 46 |
|
|
14
|
+
| Reference MCP fetch server | 39 |
|
|
14
15
|
| Claude Code built-in `WebFetch` | 36 |
|
|
15
16
|
|
|
16
|
-
Anyfetch read
|
|
17
|
+
Anyfetch read 28 sites that no other tool in the table could read. Among them: The New York Times, Reuters, Bloomberg, The Washington Post, The Economist, Medium, Reddit, Stack Overflow, IMDb and YouTube.
|
|
17
18
|
|
|
18
|
-
|
|
|
19
|
+
| 33 research questions, each asked twice | Answered correctly both times |
|
|
19
20
|
| --- | --- |
|
|
20
|
-
| **Agent with Anyfetch** | **
|
|
21
|
-
| Same agent with Claude Code built-in `WebSearch` and `WebFetch` |
|
|
21
|
+
| **Agent with Anyfetch** | **32** |
|
|
22
|
+
| Same agent with Claude Code built-in `WebSearch` and `WebFetch` | 27 |
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
Thirteen of the questions are about a page on a site that blocks AI agents. The built-in fetch could not read any of those 13 pages. Its search found the answer in another source for 7 of them. Anyfetch answered 12 in both runs. The questions were written from pages that Anyfetch can read, so this group shows what the built-in tools miss.
|
|
24
25
|
|
|
25
26
|
| One page, started fresh | Time | Peak memory |
|
|
26
27
|
| --- | --- | --- |
|
|
27
28
|
| **Anyfetch** | **0.19 s** | **17 MB** |
|
|
28
29
|
| Headless Chromium | 1.15 s | 544 MB |
|
|
29
30
|
|
|
30
|
-
|
|
31
|
+
Sites: measured on 2026-10-12 with version 0.8.0. Questions: measured on 2026-10-12 with version 0.7.1. Time and memory: measured on 2026-10-11. All from a cloud server, with no proxy except in the proxy row. See [how we measured](#benchmark) and how to run it again.
|
|
31
32
|
|
|
32
33
|
## What your agent gets
|
|
33
34
|
|
|
@@ -36,9 +37,10 @@ Measured on 2026-10-11 from a cloud server, with no proxy. See [how we measured]
|
|
|
36
37
|
- **Answers, not whole pages.** Give a question with the URL, and get only the parts of the page that match it. The Python 3.15 release notes are 218,000 characters; the answer to one question about them came back in 2,200.
|
|
37
38
|
- **Clean Markdown.** Links, tables and code blocks stay intact. Long pages come in parts.
|
|
38
39
|
- **PDFs.** Papers and reports come back as text, page by page.
|
|
39
|
-
- **Sites that need JavaScript.** Anyfetch reads the data inside the page, and uses the site's public API or feed for Stack Overflow, Reddit, X posts, PyPI and crates.io. No browser runs. For pages that hold nothing without their scripts, it can use Lightpanda, an optional small engine.
|
|
40
|
-
- **News and answers.** Full articles on Reuters and Bloomberg, and the answers on Quora, from the data that these sites send
|
|
41
|
-
- **
|
|
40
|
+
- **Sites that need JavaScript.** Anyfetch reads the data inside the page, and uses the site's public API or feed for Stack Overflow, Reddit, IMDb, X posts, PyPI and crates.io. A Reddit thread comes with every comment and its score. No browser runs. For pages that hold nothing without their scripts, it can use Lightpanda, an optional small engine.
|
|
41
|
+
- **News and answers.** Full articles on Reuters and Bloomberg, the latest articles of The Economist, and the answers on Quora, from the data that these sites send.
|
|
42
|
+
- **Home pages and listings.** A page with no single article comes back as its headlines and links, in page order.
|
|
43
|
+
- **Browser-grade requests.** Safari's TLS, HTTP/2 and header fingerprint. A refused fetch is retried automatically, as the same browser or as a second one. Bot checks that are one fixed step, as on Reddit and Behance, are passed.
|
|
42
44
|
- **Cloudflare checks.** When a site insists on a JavaScript check, your own Firefox passes it once. After that, Anyfetch reads the site with plain requests.
|
|
43
45
|
- **Fast on repeat.** Several pages in one call, fetched at the same time. A page fetched in the last 15 minutes comes from a local copy.
|
|
44
46
|
- **Lightweight.** A 16 MB Rust binary. No bundled browser, no JavaScript engine, no Python, no Node.
|
|
@@ -322,7 +324,9 @@ host:port:username:password
|
|
|
322
324
|
|
|
323
325
|
Anyfetch then sends every search and fetch through that HTTP proxy. The file holds the password in plain text, so keep it private: `chmod 600 ~/.config/anyfetch/proxy`. Delete the file to go direct again.
|
|
324
326
|
|
|
325
|
-
|
|
327
|
+
Some sites accept your own address and refuse the proxy's address. To reach both kinds, add a second line with the word `direct`. Anyfetch then tries the proxy first, and asks the site directly when the proxy route is refused.
|
|
328
|
+
|
|
329
|
+
Need a proxy? Use [NobleProxy](https://nobleproxy.com/?utm_source=anyfetch&utm_medium=readme&utm_campaign=anyfetch), our own service. In our test, one NobleProxy address took Anyfetch from 82 to 87 of the 97 sites, with the same result in every run. It opened The Wall Street Journal, Tripadvisor, Yelp, Etsy and Bandcamp, which refuse a server address. You get a static residential IP that only you use, with unlimited bandwidth and HTTP support.
|
|
326
330
|
|
|
327
331
|
## What it does not do
|
|
328
332
|
|
|
@@ -334,18 +338,36 @@ Does your agent need a real browser, with logins and saved sessions? Use [AliasM
|
|
|
334
338
|
|
|
335
339
|
The numbers at the top come from two scripts and one question set in [`bench/`](bench).
|
|
336
340
|
|
|
337
|
-
- **Pages read.** `bench/bench.py` reads each of the 97 sites in [`bench/sites.txt`](bench/sites.txt) once with each tool. A page counts as read when the tool returns at least 500 characters of text and the text is not a bot check. The same rule is applied to every tool. Anyfetch ran three times and read
|
|
341
|
+
- **Pages read.** `bench/bench.py` reads each of the 97 sites in [`bench/sites.txt`](bench/sites.txt) once with each tool. A page counts as read when the tool returns at least 500 characters of text and the text is not a bot check. The same rule is applied to every tool. Anyfetch ran three times and read 82, 81 and 82 pages; the table shows the middle run. Through a [NobleProxy](https://nobleproxy.com/?utm_source=anyfetch&utm_medium=readme&utm_campaign=anyfetch) static residential IP, a fixed address of a US cable provider, with the `direct` line in the proxy file, it read 87 pages in each of three runs. The proxy added The Wall Street Journal, Tripadvisor, Yelp, Etsy and Bandcamp. The other tools were not tested through the proxy. Claude Code's `WebFetch` cannot be scripted, so an agent called it once per site and recorded if real content came back.
|
|
338
342
|
- **Time and memory.** `bench/speed.py` reads 10 pages with each program, started fresh for every page, and reports the median.
|
|
339
343
|
|
|
340
|
-
- **Research questions.** [`bench/tasks.json`](bench/tasks.json) has
|
|
344
|
+
- **Research questions.** [`bench/tasks.json`](bench/tasks.json) has 33 questions. Each has one exact answer and the sentence on the source page that proves it. The pages are from July to October 2026, so a model cannot answer from memory. A Claude Sonnet agent answered the questions with Anyfetch only, and again with the built-in `WebSearch` and `WebFetch` of Claude Code only. The instructions were the same: at most 8 web calls for each question, and the answer `UNKNOWN` when the tools do not give it. Anyfetch ran with no proxy, no Firefox and no Lightpanda. Each tool ran twice, and a question counts when both runs are correct.
|
|
341
345
|
|
|
342
346
|
| Question group | Anyfetch | Built-in tools |
|
|
343
347
|
| --- | --- | --- |
|
|
344
|
-
| A page on a site that blocks AI agents |
|
|
348
|
+
| A page on a site that blocks AI agents | 12 of 13 | 7 of 13 |
|
|
345
349
|
| A page on an open site | 10 of 10 | 10 of 10 |
|
|
346
350
|
| No URL: search first, then read | 10 of 10 | 10 of 10 |
|
|
347
351
|
|
|
348
|
-
In
|
|
352
|
+
In single runs, Anyfetch answered 32 and 33 questions, and the built-in tools 28 and 27. The one Anyfetch miss was a Reddit thread: Reddit limited the rate of the test machine that day, and in one run Anyfetch read a link from a comment in place of the link of the post.
|
|
353
|
+
|
|
354
|
+
Three things to know about this test. The question writer used Anyfetch to check each answer, so the first group has only pages that Anyfetch can read. The Financial Times was on the writer's list and has no question: its articles need a subscription. Thirty of the questions are one day older than the test; 28 of their answers were checked on the source page again that day. Every answer is in [`bench/results/tasks.tsv`](bench/results/tasks.tsv).
|
|
355
|
+
|
|
356
|
+
We also read the same 97 sites with eight other tools, each with its default settings and no API key:
|
|
357
|
+
|
|
358
|
+
| Tool | Pages read |
|
|
359
|
+
| --- | --- |
|
|
360
|
+
| **Anyfetch** | **82** |
|
|
361
|
+
| Exa MCP (hosted, answers from stored copies) | 78 |
|
|
362
|
+
| Scrapling, stealth browser | 71 |
|
|
363
|
+
| Scrapling, plain HTTP | 69 |
|
|
364
|
+
| Hermes Agent `web_extract` (hosted readers) | 68 |
|
|
365
|
+
| Crawl4AI | 66 |
|
|
366
|
+
| Jina Reader | 61 |
|
|
367
|
+
| Playwright MCP | 52 |
|
|
368
|
+
| DuckDuckGo MCP server | 49 |
|
|
369
|
+
|
|
370
|
+
How each one ran, and what to know before you compare, is in [`bench/other-tools/NOTES.md`](bench/other-tools/NOTES.md). The full ranking with every site is on [aliasmode.com](https://aliasmode.com/anyfetch/best-web-fetch-tools-for-ai-agents/).
|
|
349
371
|
|
|
350
372
|
The per-site results are in [`bench/results/`](bench/results). Sites change their rules often, and results differ between networks, so run it yourself:
|
|
351
373
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aliasmode/anyfetch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.1",
|
|
4
4
|
"description": "Web search and web fetch for AI agents, with no API keys. Reads the sites that refuse AI agents.",
|
|
5
5
|
"keywords": ["mcp", "mcp-server", "web-search", "web-fetch", "ai-agents", "claude-code", "codex", "cursor"],
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
"files": ["run.js"],
|
|
12
12
|
"engines": { "node": ">=16" },
|
|
13
13
|
"optionalDependencies": {
|
|
14
|
-
"@aliasmode/anyfetch-darwin-arm64": "0.
|
|
15
|
-
"@aliasmode/anyfetch-darwin-x64": "0.
|
|
16
|
-
"@aliasmode/anyfetch-linux-arm64": "0.
|
|
17
|
-
"@aliasmode/anyfetch-linux-x64": "0.
|
|
18
|
-
"@aliasmode/anyfetch-win32-x64": "0.
|
|
14
|
+
"@aliasmode/anyfetch-darwin-arm64": "0.8.1",
|
|
15
|
+
"@aliasmode/anyfetch-darwin-x64": "0.8.1",
|
|
16
|
+
"@aliasmode/anyfetch-linux-arm64": "0.8.1",
|
|
17
|
+
"@aliasmode/anyfetch-linux-x64": "0.8.1",
|
|
18
|
+
"@aliasmode/anyfetch-win32-x64": "0.8.1"
|
|
19
19
|
}
|
|
20
20
|
}
|