MCP

Fetch MCP Server Web Page Fetching Service

Fetches web pages for an LLM and converts the HTML to Markdown to support web-grounded Q&A. Requires uvx to be executable on the local machine, and by default only public addresses may be fetched.

Official source · Fetch MCP Server (modelcontextprotocol/servers)

Install

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

Who it's for

You need a case where the model fetches web pages itself: let an LLM read documentation sites, blogs, news pages, and API reference pages, then answer questions based on the real page content instead of stale knowledge stored in the model's memory. This service is a Model Context Protocol server that provides web content fetching capabilities, downloading the page and converting the HTML into Markdown so the model can consume it directly.

Good fit: developers building web-search-backed Q&A, documentation Q&A, or page-content summaries; and teams that want to add a read-only capability to an existing MCP client without writing the fetching and transcoding logic themselves.

Not a fit: scenarios that need a login session, JS rendering, or complex parsing. Those are outside the capability scope of this service, see "Limits and boundaries".

First run in 3 minutes

Step one, confirm the prerequisites. The server runs on Python and requires MCP Python SDK 2.x (mcp>=2.3,<3); the recommended path starts it directly with uvx, so uvx has to be executable on your machine.

Step two, write the configuration. Add a fetch entry to the MCP server configuration file of your client, using this block:

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

Keep only this one launch method and do not stack other install entries on top, otherwise the client ends up with two servers named fetch.

Step three, make one low-risk call. After restarting the client, have the model call fetch and pass only two parameters: url with the address of a publicly accessible page, and max_length with a small value such as 2000; leave start_index and raw alone for now. A single response is capped at two thousand characters, so the target page will not flood the context no matter how long it is; the fetch only reads public pages and never writes to or changes the target site.

Success signal: the body text the model returns matches the title and the opening paragraph you see in your browser, and no error is reported, which means the service is connected and the HTML-to-Markdown conversion works.

Use cases

Case one, answer questions from a documentation page. The fetch tool requires url and optionally takes max_length (default 5000), start_index (default 0), and raw (default false). The typical usage is to hand the model a framework's documentation URL, let it fetch the Markdown back, and then extract the answer; when the page is long, use max_length to control the length of a single response and start_index to continue reading the rest from a given character position. The documentation only goes as far as the parameters and their default values and gives no measured response samples for specific sites, so on the first integration you should check yourself whether the fetched Markdown is complete and whether any code block got truncated.

Case two, one-off page summary. The fetch prompt with the same name requires only a url and hands the page content to the model as Markdown, which fits tasks like "summarize the page behind this link into key points", with no need to copy the text manually and paste it first.

Limits and boundaries

A safety gate is on by default. The server refuses by default to fetch private addresses, loopback addresses, link-local addresses, and any other non-public address, including the cloud metadata endpoint 169.254.169.254, and every redirect hop is checked against the same rules. The only way to fetch an internal address is to turn this gate off with --allow-private-ips, which amounts to explicitly giving up the protection; before enabling it, confirm that the target address is trustworthy and that it will not let the model reach internal services that should stay hidden.

The capability scope is limited. The only verifiable main line is fetching a web page and converting it to Markdown; search, JS rendering, fetching with a login session, and PDF parsing have no corresponding documentation, so you need other tools for those capabilities.

The content involves trade-offs. What comes back is converted Markdown text, and the original page layout is not guaranteed to be preserved; when raw is true, the Markdown conversion is skipped and the raw content is returned directly. When the page is very long, a single call returns only the number of characters specified by max_length (default 5000), and the rest has to be fetched in segments with start_index.