Anyfetch · comparison

MCP fetch server 403: the causes, and which server reads the page

The MCP fetch server returns 403 on many sites because it names itself as a bot and sends the request of a Python library. This page explains the three causes, shows what the flags of the server change, and compares seven MCP fetch servers on the same 97 sites.

Anyfetch 0.8.0 · Tested 2026-10-12

Direct answer

The reference MCP fetch server (mcp-server-fetch) gets 403 for three reasons. It sends a user agent that says it is an autonomous bot. Its TLS handshake and its headers are those of a Python library, not of a browser. And it refuses a page itself when robots.txt does not allow bots. In our test of 97 popular sites that block AI agents, it read 39. Anyfetch, a free MCP fetch server that sends the request a browser sends, read 82 from the same machine with no API key.

39 of 97Sites read by the reference fetch server
82 of 97Sites read by Anyfetch
7 serversCompared on the same sites

The three causes of 403 in the MCP fetch server

The reference server missed 58 of the 97 sites in our test. This is why.
CauseSitesWhat happens
The site refuses the request21The site answers 403, 401, 402, or 429. The server reports “Failed to fetch … status code 403”.
The server refuses the page itself16robots.txt of the site does not allow bots, so the server does not ask for the page at all.
The page arrives with no usable text21The site sends a bot check, a consent wall, or a page that is empty without its scripts.

The first cause is the request. The server sends the user agent “ModelContextProtocol/1.0 (Autonomous; +https://github.com/modelcontextprotocol/servers)”. A site that blocks bots needs no more than that line. A site that looks deeper sees the TLS handshake and the headers of a Python HTTP library, sent over HTTP/1.1. No browser sends those.

The second cause is a rule of the server. For a request that comes from the model, it reads robots.txt first. When robots.txt says no, the model gets an error and never sees the page.

What the flags of the server change

FlagEffectResult in our test
--ignore-robots-txtThe server skips the robots.txt check.42 of 97, measured one day before. Most sites that say no in robots.txt also refuse the request.
--user-agent with --ignore-robots-txtThe server sends the name you give, for example the name of Chrome, and skips the robots.txt check.41 of 97, with the user agent of Chrome. The TLS handshake stays that of a Python library.
--proxy-urlThe request goes through your proxy.Not measured. A new address does not change what the request looks like.
{
  "mcpServers": {
    "fetch": { "command": "uvx", "args": ["mcp-server-fetch", "--ignore-robots-txt"] }
  }
}

The flags help on a few sites: 41 or 42 pages read, against 39. They do not change the handshake. For the other sites you need a server that sends a browser request, or a server that drives a real browser.

Seven MCP fetch servers on the same 97 sites

Pages read, of 97 popular sites that block AI agents. Default settings, no API keys, same server.
  1. Anyfetch82 of 97
  2. Exa MCP, no API key78 of 97
  3. Scrapling MCP, stealth browser71 of 97
  4. Scrapling MCP, plain HTTP69 of 97
  5. Playwright MCP, headless52 of 97
  6. DuckDuckGo MCP server49 of 97
  7. Reference MCP fetch server39 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.

Exa is a hosted service. It answers from a stored copy of the page, which is why it reads sites that refuse every direct request. In our test, each answer stopped at about 3,000 characters, and its copy of the New York Times home page was 26 days old. The Firecrawl MCP server is not in this list: its use with no API key reached its rate limit on our test server after a few pages.

How each server gets the page. Facts from the public README and documentation of each project, checked on 2026-10-12.
ServerHow it reads a pageNeedsPages read
AnyfetchA browser-pattern request from your machine. No browser runs.One 16 MB program, or npx82
Exa MCP, no API keyThe Exa cloud answers from its index, or fetches the page for you.Nothing to install: a hosted server. A key for more than the free use78
Scrapling MCP, stealth browserA headless stealth browser on your machine.Python and a browser download71
Scrapling MCP, plain HTTPA browser-pattern request from your machine.Python69
Playwright MCP, headlessA headless Chromium on your machine. Built to control pages, not to read them.Node.js and a browser download52
DuckDuckGo MCP serverA plain HTTP request from your machine.Python (uvx)49
Reference MCP fetch serverA plain HTTP request with a bot user agent.Python (uvx)39
32 of the best-known sites in the test. A check mark means the server returned the page.
SiteAnyfetchReference fetchPlaywright MCPScrapling stealth
nytimes.comreadnot readnot readnot read
reuters.comreadnot readnot readnot read
bloomberg.comreadnot readnot readread
wsj.comnot readnot readnot readnot read
washingtonpost.comreadnot readnot readread
ft.comreadnot readnot readnot read
economist.comreadnot readnot readnot read
forbes.comreadreadreadread
reddit.comreadnot readnot readread
x.comreadnot readnot readread
linkedin.comreadnot readreadread
instagram.comreadnot readreadread
tiktok.comnot readnot readreadread
quora.comreadnot readnot readread
medium.comreadnot readnot readread
youtube.comreadnot readreadnot read
amazon.comreadnot readnot readread
ebay.comreadnot readnot readnot read
walmart.comreadreadreadread
etsy.comnot readnot readnot readnot read
booking.comnot readnot readnot readnot read
tripadvisor.comnot readnot readnot readnot read
yelp.comnot readnot readnot readnot read
zillow.comreadreadnot readread
indeed.comreadnot readnot readnot read
glassdoor.comreadnot readnot readnot read
stackoverflow.comreadnot readnot readnot read
github.comreadreadreadread
en.wikipedia.orgreadreadreadread
imdb.comreadnot readnot readnot read
sciencedirect.comreadnot readnot readread
scholar.google.comreadnot readnot readread
Read, of all 97 sites82395271

Switch from the reference server to Anyfetch

Anyfetch is a stdio MCP server, like the reference server. Change one entry in the MCP file of your client. With Node.js on the machine, there is nothing to install.

{
  "mcpServers": {
    "fetch": { "command": "uvx", "args": ["mcp-server-fetch"] }
  }
}
{
  "mcpServers": {
    "anyfetch": { "command": "npx", "args": ["-y", "@aliasmode/anyfetch", "mcp"] }
  }
}
The tool of the reference server and the tools of Anyfetch.
Reference MCP fetch serverAnyfetch
Read a pagefetchweb_fetch
Read several pages in one callNoweb_fetch_many
Search the webNoweb_search, with no API key
Characters per call5,000 by default (max_length)50,000 by default (max_chars)
Only the parts that answer a questionNoYes, with query
PDFsNoYes, as text
Obeys robots.txtYes, by defaultNo. It reads a page as a browser does.

Do you use Claude Code, Codex, Gemini CLI, or Cursor? The Anyfetch installer adds the server to each of them, so you do not edit a file.

What no fetch server reads

No server in this test read every site. Anyfetch missed 15. A page behind a CAPTCHA, a login, or a subscription stays closed for a fetch server, and Anyfetch reports it with an error code such as challenge_required.

A task that needs a login or a click needs a real browser with a saved session. AliasMode is our free, open-source browser for that work, and its MCP server gives an agent profiles that stay logged in.

Frequently asked questions

Why does the MCP fetch server return 403?

The site refuses the request. The reference server sends a user agent that says it is an autonomous bot, and its TLS handshake is that of a Python library. Sites with bot protection answer such a request with 403.

What does “robots.txt specifies that autonomous fetching is not allowed” mean?

The reference server read robots.txt of the site and found a rule against bots, so it did not ask for the page. Start the server with --ignore-robots-txt to skip the check. Many of those sites then answer 403.

Does changing the user agent fix 403 in the MCP fetch server?

On a few sites. In our test of 97 sites, the reference server with the user agent of Chrome and the robots.txt check off read 41, against 39 with its default settings. The flag does not change the TLS handshake.

Which MCP fetch server reads the most sites?

In our test of 97 popular sites that block AI agents, Anyfetch read 82, the stealth browser of Scrapling read 71, and the reference server read 39. We make Anyfetch, so the script and the result for every site are public.

Is there a free MCP fetch server with no API key?

Yes. Anyfetch, the reference server, the DuckDuckGo MCP server, Scrapling, and Playwright MCP run on your machine and need no key. Anyfetch read the most sites in our test.