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.

Anyfetch 0.8.0 · Tested 2026-10-12

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.

36 of 97Sites read by WebFetch
82 of 97Sites read by Anyfetch
1 commandTo add the fix

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.

  1. 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.

  2. 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/
  3. 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.

The three causes and their fixes.
What you seeCauseFix
HTTP 403, 401, 402, or 429, or a page with almost no textThe site refuses the requestUse a fetch tool that sends a browser request. See below.
Claude Code asks for permission, or says the fetch was deniedA permission rule in your settingsAllow the domain with a WebFetch(domain:example.com) rule.
Claude Code cannot verify the domainThe domain check of Claude Code could not run, often behind a company networkAsk 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

Pages read, of 97 popular sites that block AI agents. Same server, same day, no proxy.
  1. Anyfetch82 of 97
  2. curl46 of 97
  3. Claude Code WebFetch36 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.

32 of the best-known sites in the test. A check mark means the tool returned the page.
SiteAnyfetchClaude Code WebFetchcurl
nytimes.comreadnot readnot read
reuters.comreadnot readnot read
bloomberg.comreadnot readnot read
wsj.comnot readnot readnot read
washingtonpost.comreadnot readnot read
ft.comreadnot readnot read
economist.comreadnot readnot read
forbes.comreadreadread
reddit.comreadnot readnot read
x.comreadnot readread
linkedin.comreadreadnot read
instagram.comreadreadread
tiktok.comnot readnot readnot read
quora.comreadnot readnot read
medium.comreadnot readnot read
youtube.comreadnot readnot read
amazon.comreadnot readread
ebay.comreadnot readnot read
walmart.comreadreadread
etsy.comnot readnot readnot read
booking.comnot readnot readnot read
tripadvisor.comnot readnot readnot read
yelp.comnot readnot readnot read
zillow.comreadnot readnot read
indeed.comreadnot readnot read
glassdoor.comreadnot readnot read
stackoverflow.comreadnot readnot read
github.comreadreadread
en.wikipedia.orgreadreadread
imdb.comreadnot readnot read
sciencedirect.comreadnot readnot read
scholar.google.comreadreadnot read
Read, of all 97 sites823646

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 | sh
irm https://aliasmode.github.io/anyfetch/install.ps1 | iex
  1. Run 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.

  2. 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@anyfetch
  3. Or 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 mcp
  4. Start 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

Pages read are from the same test of 97 sites.
FixPages readWhat you give up
Allow the domain in the settingsNo changeA permission rule stops the prompt. It does not change what the site answers.
curl in the Bash tool46Many sites refuse curl too. The answer is raw HTML, which fills the context.
Reference MCP fetch server39It names itself as a bot and obeys robots.txt.
Playwright MCP, a real browser52A browser starts for the task. It is slower and uses hundreds of MB of memory.
Jina Reader, a hosted reader, with no API key61Your URLs go through the servers of another company. Free use has limits.
Anyfetch82It 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.