Fetch MCP Server

Official

The simplest web tool that matters — fetch any URL and get model-ready markdown back.

Local serverstdioPythonMIT 63.0k

What is the Fetch MCP server?

Fetch is the smallest useful web server in the MCP ecosystem: one tool that takes a URL, retrieves the page, and returns its content converted to markdown. No index, no API key, no crawling — just "go read this page for me," done properly.

The markdown conversion is the quietly important part. Raw HTML is a terrible input for language models — navigation chrome, scripts and markup noise eat tokens and bury the content. Fetch strips pages down to headings, paragraphs, lists and links, which typically shrinks a page to a fraction of its raw size while keeping everything the model actually needs. There's also a max_length and start_index mechanism for reading long pages in chunks, so a 20,000-word doc doesn't blow the context window in one gulp.

Its natural habitat is link-driven work: paste a documentation page and ask for an implementation; drop a blog post and ask for the three key claims; give it a changelog and ask what breaks your code. Paired with a search server (Brave, say), it completes the loop — search finds the pages, Fetch reads them.

Honest limitations: it does plain HTTP fetching, so JavaScript-rendered SPAs may come back thin — that's browser-automation territory (Playwright) or crawler territory (Firecrawl). It can also fetch internal URLs reachable from your machine, so treat it accordingly on sensitive networks. Within its lane, it's the highest value-per-kilobyte server you can install, and for many people the correct first MCP server, full stop.

Mistakes to avoid

  • Don't ask for a long page in one gulp. The default max_length truncates silently, and a model handed a cut-off document will summarise it as if it were the whole thing — walk forward with start_index instead.
  • The raw option returns unconverted HTML. Reach for it when the markdown conversion mangles a table or you genuinely need the markup; otherwise it's just tokens.
  • Cookie walls, login gates and bot-check interstitials return HTTP 200 with useless bodies. The fetch "succeeds", the content is a consent banner, and nothing in the response flags the difference.
  • On a work machine, remember URLs resolve from your network — localhost, link-local metadata addresses and internal hostnames are all in reach. The robots.txt override flag exists for sites you control, not as a general escape hatch.

What you can do with it

Read this link

Paste any article, doc page or README and work with its actual content.

Search-then-read pipelines

A search server finds candidates; Fetch reads the winners in full.

Long-document digestion

Chunked fetching walks through big pages without flooding the context window.

Available tools

ToolWhat it does
fetchFetch a URL and return its content as markdown, with chunked reading via max_length and start_index

How to install the Fetch MCP server

{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": ["mcp-server-fetch"]
    }
  }
}

Configuration

Python 3.10+ with uv. No accounts or keys.

Example prompts to try

  • Fetch this API documentation page and write the client code for the /orders endpoint.
  • Read this blog post and tell me which claims are actually supported by its own data.
  • Fetch the changelog at this URL and list anything that breaks our v3 integration.

Frequently asked questions

Scale and machinery. Fetch reads one page per call with plain HTTP — free, instant, zero setup. Firecrawl is a hosted crawler that handles JavaScript rendering, whole-site crawls and structured extraction. Start with Fetch; upgrade when pages need rendering or you need a whole site.