
Fetch
โ 793from zcaceres
Fetch web content as HTML, JSON, plain text, or Markdown.
Fetch MCP Server
An MCP server for fetching web content in multiple formats โ HTML, JSON, plain text, Markdown, readable article content, and YouTube transcripts.
Tools
All tools accept the following common parameters:
Parameter Type Required Description
url string Yes URL to fetch
headers object No Custom headers to include in the request
max_length number No Maximum characters to return (default: 5000)
start_index number No Start from this character index (default: 0)
proxy string No Proxy URL (e.g. http://proxy:8080)
fetch_html โ Fetch a website and return its raw HTML content.
fetch_markdown โ Fetch a website and return its content converted to Markdown.
fetch_txt โ Fetch a website and return plain text with HTML tags, scripts, and styles removed.
fetch_json โ Fetch a URL and return the JSON response.
fetch_readable โ Fetch a website and extract the main article content using Mozilla Readability, returned as Markdown. Strips navigation, ads, and boilerplate. Ideal for articles and blog posts.
fetch_youtube_transcript โ Fetch a YouTube video's captions/transcript. Uses yt-dlp if available, otherwise extracts directly from the page. Accepts an additional lang parameter (default: "en") to select the caption language.
Environment Variables
Variable Description
DEFAULT_LIMIT Default character limit for responses (default: 5000, set to 0 for no limit)
MAX_RESPONSE_BYTES Maximum response body size in bytes (default: 10485760 / 10 MB)
Example with a custom limit:
{
"mcpServers": {
"fetch": {
"command": "npx",
"args": ["mcp-fetch-server"],
"env": {
"DEFAULT_LIMIT": "50000"
}
}
}
}
Features
-
Fetch web content as HTML, JSON, plain text, or Markdown
-
Extract article content with Mozilla Readability (strips ads, nav, boilerplate)
-
Extract YouTube video transcripts (via
yt-dlpor direct extraction) -
Proxy support for requests behind firewalls
-
Pagination with
max_lengthandstart_index -
Custom request headers
-
SSRF protection (blocks private/localhost addresses and DNS rebinding)
-
Response size limits to prevent memory exhaustion
Development
bun install
bun run dev # start with watch mode
bun test # run tests
bun run build # build for production
License
This project is licensed under the MIT License.
npx mcp-fetch [flags]Before it works, you'll need: DEFAULT_LIMIT
Installation
As an MCP server
Add to your MCP client configuration:
{
"mcpServers": {
"fetch": {
"command": "npx",
"args": ["mcp-fetch-server"]
}
}
}
As a CLI
npx mcp-fetch [flags]
Or install globally:
npm install -g mcp-fetch-server
mcp-fetch [flags]
CLI Usage
mcp-fetch [flags]
Commands
Command Description
html Fetch a URL and return raw HTML
markdown Fetch a URL and return Markdown
readable Fetch a URL and return article content as Markdown (via Readability)
txt Fetch a URL and return plain text
json Fetch a URL and return JSON
youtube Fetch a YouTube video transcript
Flags
Flag Description
--max-length <N> Maximum characters to return
--start-index <N> Start from this character index
--proxy <URL> Proxy URL
--lang <code> Language code for YouTube transcripts (default: en)
--help Show help message
--version Show version
Examples
# Fetch a page as markdown
mcp-fetch markdown https://example.com
# Extract article content without boilerplate
mcp-fetch readable https://example.com/blog/post
# Get a YouTube transcript in Spanish
mcp-fetch youtube https://www.youtube.com/watch?v=dQw4w9WgXcQ --lang es
# Fetch with a length limit
mcp-fetch html https://example.com --max-length 10000
# Fetch through a proxy
mcp-fetch json https://api.example.com/data --proxy http://proxy:8080
No common issues documented yet. If you hit a problem, the repository's GitHub Issues page is the best place to look.