/ Directory / Playground / Fetch
● Official modelcontextprotocol ⚡ Instant

Fetch

by modelcontextprotocol · modelcontextprotocol/servers

The simplest way to give Claude the web — fetch a URL, get clean Markdown. No JS rendering, no API keys, no fuss.

The reference Fetch MCP. Takes a URL, downloads the page, strips boilerplate, converts to Markdown, and returns a chunk. Ideal for static pages, docs, changelogs, RSS — anywhere you don't need JavaScript to run. For SPAs and anti-bot sites, reach for Firecrawl or Chrome DevTools instead.

Why use it

Key features

Live Demo

What it looks like in practice

fetch.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ]
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ]
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ]
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "fetch": {
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ]
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "fetch",
      "command": "uvx",
      "args": [
        "mcp-server-fetch"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "fetch": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-server-fetch"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add fetch -- uvx mcp-server-fetch

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Fetch

Summarize an article or blog post from a URL

👤 Anyone dropping links into chat and asking 'what does this say?' ⏱ ~3 min beginner

When to use: You hit a paywall-free article, docs page, or blog post and want TL;DR plus an opinion without reading it yourself.

Flow
  1. Fetch with Markdown output
    Fetch https://example.com/blog/post and give me the first ~3000 chars as clean Markdown.✓ Copied
    → Content arrives with working headings and no nav chrome
  2. Summarize and extract claims
    Summarize in 5 bullets. List any specific numbers or claims the author makes, with the sentence they appear in.✓ Copied
    → Bulleted summary plus cited quotes, not paraphrased
  3. Critique
    What's the strongest counter-argument to the author's main thesis? Be specific.✓ Copied
    → Real critique, not 'on the other hand...' mush

Outcome: A useful read of the article in 30 seconds, with quotes you can verify.

Pitfalls
  • Page is JS-rendered and fetch returns a near-empty shell — Check first fetch output — if it's suspiciously short or says 'Loading...', switch to Firecrawl or Chrome DevTools MCP
  • Long page truncated by max_length — Use start_index to paginate: second call with start_index: 5000 picks up where the first left off
Combine with: memory

Check a vendor's changelog for what changed this week

👤 Developers tracking dependency releases or competitor features ⏱ ~5 min beginner

When to use: A library you depend on publishes release notes on a static page and you haven't checked in a month.

Flow
  1. Fetch the changelog page
    Fetch https://vendor.com/changelog and list every release since 2026-03-01 with its date and a one-line summary of what changed.✓ Copied
    → Chronological list with dates
  2. Classify by impact
    Categorize each into: breaking change, new feature, bug fix, internal. Flag anything marked breaking or deprecated.✓ Copied
    → Per-release tag with breaking items called out
  3. Call out what affects us
    We use this library mainly for <feature X>. Which of these changes affect our usage, and what action (if any) should we take?✓ Copied
    → Actionable list, not generic 'review the notes'

Outcome: Know in 2 minutes whether you need to bump the version and test, or skip the release entirely.

Pitfalls
  • Changelogs paginate — first page only has last 2 months — Scroll with start_index or fetch the archive URL explicitly
  • GitHub release pages render via JS now — Use the raw API instead: https://api.github.com/repos/owner/repo/releases returns JSON without needing JS
Combine with: github · memory

Pull an RFC or docs page into context for a coding task

👤 Engineers implementing a spec or API integration ⏱ ~15 min intermediate

When to use: You're coding against a public spec (OAuth, RFC 9457 problem details, a REST API's reference docs) and want Claude to have the canonical source.

Flow
  1. Fetch the spec page(s)
    Fetch https://datatracker.ietf.org/doc/html/rfc9457 as Markdown. Return just sections 1-4.✓ Copied
    → Clean Markdown of the normative sections
  2. Implement against it
    Using that RFC as the source of truth, write me a TypeScript type plus validator for the problem details object. Cite specific section numbers in comments.✓ Copied
    → Code with inline // per RFC 9457 §3.1 references
  3. Edge case check
    From the same RFC, what edge cases or optional fields does my implementation not handle? Decide whether to handle them or document the choice.✓ Copied
    → Honest gap analysis against the spec

Outcome: A spec-faithful implementation with traceable citations you can defend in code review.

Pitfalls
  • IETF pages are huge — a whole RFC can exceed context budget — Fetch only the sections you need using anchor links or start_index, not the full doc
Combine with: filesystem · github

Combinations

Pair with other MCPs for X10 leverage

fetch + filesystem

Save fetched pages locally for offline RAG or archiving

Fetch https://docs.anthropic.com/en/docs/mcp and save as /knowledge/anthropic/mcp.md.✓ Copied
fetch + memory

Remember key facts from a page so you don't re-fetch next time

Fetch the Stripe pricing page and store the per-transaction fees as observations on the 'stripe-pricing' entity with today's date.✓ Copied

Fetch several sources, then reason through them step-by-step

Fetch these 3 competing articles on topic X. Use sequential thinking to identify where they actually disagree vs just use different words.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
fetch url: str, max_length?: int (default 5000), start_index?: int, raw?: bool Retrieve a single URL as Markdown; set raw=true to skip the Markdown conversion free (bandwidth only)

Cost & Limits

What this costs to run

API quota
No quota — limited only by your bandwidth and target site rate limits
Tokens per call
Default max_length is 5000 chars (~1500 tokens); long pages need multiple calls
Monetary
Free
Tip
If you find yourself paginating the same page often, cache it via filesystem MCP after first fetch.

Security

Permissions, secrets, blast radius

Credential storage: None
Data egress: Direct from your machine to the target URL — no proxy, no third party

Troubleshooting

Common errors and fixes

Content is suspiciously short (<200 chars)

Page is likely JS-rendered. Confirm by viewing the URL in curl; if curl output is tiny too, fetch can't help — use Firecrawl or chrome-devtools MCP.

Verify: curl -sL <url> | wc -c
403 Forbidden

Site blocks non-browser user agents. Fetch MCP sends a modern UA by default; if still blocked, the site explicitly disallows scraping — respect that.

robots.txt disallowed

For user-initiated, one-off fetches (not autonomous crawls), you can disable the robots check per the server docs. Do not disable for agent loops.

Truncation — response cut mid-sentence

Increase max_length or call again with start_index set to where the last call ended.

Alternatives

Fetch vs others

AlternativeWhen to use it insteadTradeoff
FirecrawlTarget is a JS-rendered SPA, or you need structured JSON extraction via schemaPaid after free credits; adds a third-party dependency
Chrome DevTools MCPYou need to interact (click, login, scroll) with the page to reveal contentHeavier — launches a real browser; slower per page
Brightdata MCPTarget actively blocks datacenter IPs and you need residential proxiesEnterprise-priced; overkill for most needs

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills