Anyfetch · fix guide
Claude Code WebFetch 403: why it fails and how to fix it
Claude Code WebFetch returns 403 when the site refuses a request that does not come from a browser. The block is on the side of the site, so a permission rule does not help. This guide shows how to check the cause and how to read the page with one extra tool.
Direct answer
Claude Code WebFetch gets 403 because the site refuses it, not because Claude Code refuses the site. WebFetch names itself as an AI tool, and its request does not have the shape of a browser request, so sites such as Reuters, The New York Times, Reddit, and Stack Overflow answer 401, 403, or an empty page. The fix is a fetch tool that sends the request a browser sends. Anyfetch is free, needs no API key, and installs with one command. In our test of 97 popular sites that block AI agents, WebFetch read 36 and Anyfetch read 82.
Check which 403 you have
Three different things can stop WebFetch. Only one of them is the site. Check this first, because each cause has a different fix.
Read the error text
A block by the site shows an HTTP status: 403, 401, 402, or 429. A block by Claude Code does not. It shows a permission prompt that was denied, or a message that Claude Code could not verify the domain.
Ask curl for the same page
Run curl on the same machine. If curl also gets 401 or 403, the site refuses requests that do not come from a browser.
curl -sL -o /dev/null -w "%{http_code}\n" https://www.reuters.com/technology/Open the page in your browser
If the browser shows the page and you are not logged in, the page is public. Only the request of the tool is refused. This is the case that this guide fixes.
| What you see | Cause | Fix |
|---|---|---|
| HTTP 403, 401, 402, or 429, or a page with almost no text | The site refuses the request | Use a fetch tool that sends a browser request. See below. |
| Claude Code asks for permission, or says the fetch was denied | A permission rule in your settings | Allow the domain with a WebFetch(domain:example.com) rule. |
| Claude Code cannot verify the domain | The domain check of Claude Code could not run, often behind a company network | Ask your administrator, or see the skipWebFetchPreflight setting in the Claude Code documentation. |
Why sites refuse WebFetch
WebFetch sends its request from your computer. A site with bot protection looks at that request before it answers. It checks the name the client gives, the TLS handshake, the HTTP/2 settings, and the order of the headers. A browser has one known pattern for each. WebFetch gives the name Claude-User, and the rest of its request is the pattern of a program, not of Chrome or Safari.
Your IP address is not the main cause. In our test, WebFetch, curl, and Anyfetch ran on the same server with the same address. WebFetch read 36 sites, and Anyfetch read 82.
The status code tells you what the site wants. WebFetch got 403 from 33 of the sites, 402 from 6, and 401 from 2. A 402 means “payment required”: the site asks AI crawlers to pay for access. Some sites send 200 with nothing useful. From Reddit, WebFetch got a page with only the word Reddit. From Amazon, it got the menu and no products.
Sites WebFetch could not read in our test
- 82 of 97
- 46 of 97
- 36 of 97
We read each of 97 popular sites once with each tool, on 2026-10-12, from one cloud server with no proxy. A page counts as read when the tool returns at least 500 characters of text and the text is not a bot check. Most of the sites refuse AI agents in some way. A few open sites, such as GitHub and Wikipedia, are in the list as a control. We make Anyfetch and we ran this test, so the list of sites, the script, and the result for every site are public. Run it yourself.
| Site | Anyfetch | Claude Code WebFetch | curl |
|---|---|---|---|
| nytimes.com | ✓read | ✕not read | ✕not read |
| reuters.com | ✓read | ✕not read | ✕not read |
| bloomberg.com | ✓read | ✕not read | ✕not read |
| wsj.com | ✕not read | ✕not read | ✕not read |
| washingtonpost.com | ✓read | ✕not read | ✕not read |
| ft.com | ✓read | ✕not read | ✕not read |
| economist.com | ✓read | ✕not read | ✕not read |
| forbes.com | ✓read | ✓read | ✓read |
| reddit.com | ✓read | ✕not read | ✕not read |
| x.com | ✓read | ✕not read | ✓read |
| linkedin.com | ✓read | ✓read | ✕not read |
| instagram.com | ✓read | ✓read | ✓read |
| tiktok.com | ✕not read | ✕not read | ✕not read |
| quora.com | ✓read | ✕not read | ✕not read |
| medium.com | ✓read | ✕not read | ✕not read |
| youtube.com | ✓read | ✕not read | ✕not read |
| amazon.com | ✓read | ✕not read | ✓read |
| ebay.com | ✓read | ✕not read | ✕not read |
| walmart.com | ✓read | ✓read | ✓read |
| etsy.com | ✕not read | ✕not read | ✕not read |
| booking.com | ✕not read | ✕not read | ✕not read |
| tripadvisor.com | ✕not read | ✕not read | ✕not read |
| yelp.com | ✕not read | ✕not read | ✕not read |
| zillow.com | ✓read | ✕not read | ✕not read |
| indeed.com | ✓read | ✕not read | ✕not read |
| glassdoor.com | ✓read | ✕not read | ✕not read |
| stackoverflow.com | ✓read | ✕not read | ✕not read |
| github.com | ✓read | ✓read | ✓read |
| en.wikipedia.org | ✓read | ✓read | ✓read |
| imdb.com | ✓read | ✕not read | ✕not read |
| sciencedirect.com | ✓read | ✕not read | ✕not read |
| scholar.google.com | ✓read | ✓read | ✕not read |
| Read, of all 97 sites | 82 | 36 | 46 |
Fix: add Anyfetch to Claude Code
Anyfetch is a free, open-source MCP server from the AliasMode team. It gives Claude Code three tools: web_search, web_fetch, and web_fetch_many. Its requests are the requests that a browser sends, so most sites answer with the page. No browser starts, and you need no API key.
curl -fsSL https://aliasmode.github.io/anyfetch/install.sh | shirm https://aliasmode.github.io/anyfetch/install.ps1 | iexRun the installer
It puts one program in ~/.local/bin and adds it to Claude Code as an MCP server. It does the same for Codex, Gemini CLI, Cursor, and the other agents it finds.
Or install it as a plugin
On macOS and Linux you can use the Claude Code plugin in place of the installer. Use one of the two, not both.
claude plugin marketplace add aliasmode/anyfetch && claude plugin install anyfetch@anyfetchOr add it by hand
With Node.js on the machine, this line needs no install at all.
claude mcp add --scope user anyfetch -- npx -y @aliasmode/anyfetch mcpStart a new session and test
Run claude mcp list and look for anyfetch. Then ask for a page that failed before, for example: “Read https://www.reuters.com/technology/ and list the first three headlines.” Claude calls web_fetch and gets the page.
Claude still has WebFetch and can choose it. To make Anyfetch the only web tool, deny the two built-in tools in ~/.claude/settings.json:
{
"permissions": { "deny": ["WebFetch", "WebSearch"] }
}Other fixes, and what each one costs
| Fix | Pages read | What you give up |
|---|---|---|
| Allow the domain in the settings | No change | A permission rule stops the prompt. It does not change what the site answers. |
| curl in the Bash tool | 46 | Many sites refuse curl too. The answer is raw HTML, which fills the context. |
| Reference MCP fetch server | 39 | It names itself as a bot and obeys robots.txt. |
| Playwright MCP, a real browser | 52 | A browser starts for the task. It is slower and uses hundreds of MB of memory. |
| Jina Reader, a hosted reader, with no API key | 61 | Your URLs go through the servers of another company. Free use has limits. |
| Anyfetch | 82 | It does not run page scripts and does not log in. |
What Anyfetch does not fix
Anyfetch reads what a site sends to a first-time visitor. It does not solve a CAPTCHA, log in, or open a page behind a subscription. 15 of the 97 sites stayed closed in our test. Booking.com, TikTok, Crunchbase, and G2 are among them. For those, Anyfetch returns an error code such as challenge_required, so Claude knows that it must not guess.
Does Claude Code run on a server? Some sites refuse every cloud address, whatever the request looks like. A residential IP fixes those. With one NobleProxy address, Anyfetch read 87 of the 97 sites. The Wall Street Journal, Tripadvisor, Yelp, Etsy, and Bandcamp opened.
Does the task need a login, a click, or a form? Then the agent needs a real browser. AliasMode gives Claude Code browser profiles with saved sessions through its own MCP server.
Frequently asked questions
Why does Claude Code WebFetch return 403?
The site refuses the request. WebFetch names itself as an AI tool, and its request does not have the TLS, HTTP/2, and header pattern of a browser. Sites with bot protection answer such requests with 403, 401, 402, or an empty page.
Is the 403 from Anthropic or from the website?
An HTTP status such as 403 comes from the website. Blocks by Claude Code look different: a denied permission, or a message that the domain could not be verified.
Does allowing the domain fix WebFetch 403?
No. A WebFetch(domain:...) permission rule only stops the permission prompt. The site still gets the same request and gives the same answer.
Does a VPN or a proxy fix WebFetch 403?
Usually not. Most of these sites refuse the request because of its shape, not because of its address. In our test, WebFetch and Anyfetch used the same server and address, and Anyfetch read more than twice as many sites.
Does WebFetch run JavaScript?
No. WebFetch downloads the HTML and turns it into Markdown. A page that builds its content with scripts comes back with little or no text.
How do I make Claude Code read a page that WebFetch cannot read?
Add an MCP fetch server that sends a browser request. With Anyfetch the command is: claude mcp add --scope user anyfetch -- npx -y @aliasmode/anyfetch mcp. Start a new session, and Claude can use web_fetch.
Is Anyfetch free?
Yes. Anyfetch is open source under Apache-2.0. Search and fetch need no API key and no account.