Fetch web pages with SSRF protection. Returns clean, readable markdown from any URL.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Give your AI assistant the ability to read any webpage.
A lightweight MCP server that fetches URLs and returns clean, readable markdown. Built with Go β starts in 5ms, uses ~10MB RAM, zero runtime dependencies.
You give it a URL β it returns clean markdown.
Good for:
Not good for:
Pick one method:
Add this to your MCP client config:
Your AI can now read any URL you give it.
| paimon-mcp-fetch | Basic text fetch | |
|---|---|---|
| Output | Structured markdown | Plain text |
| Article extraction | Readability algorithm (strips ads, nav, sidebars) | Raw HTML body |
| Images | Optional extraction + processing | None |
| JS rendering | Optional (headless Chrome) | Static only |
| Caching | Built-in LRU cache | None |
| Rate limiting | Per-domain, configurable | None |
| SSRF protection | 7-layer defense | None |
| Startup time | ~5ms | Varies |
| Memory | ~10MB | Varies |
Everything is controlled via environment variables. You probably don't need to change anything β defaults work well for most use cases.
| Variable | Default | What it does |
|---|---|---|
PAIMON_MCP_FETCH_TIMEOUT_MS | 12000 | Request timeout (ms) |
PAIMON_MCP_FETCH_MAX_HTML_BYTES | 10485760 | Max page size (10MB) |
PAIMON_MCP_FETCH_CACHE_TTL_SECS | 300 | Cache lifetime (5 min) |
PAIMON_MCP_FETCH_RATE_LIMIT_PER_SECOND | 5.0 | Requests/sec per domain |
PAIMON_MCP_FETCH_RATE_LIMIT_BURST | 10 | Max burst size |
PAIMON_MCP_FETCH_RETRY_MAX_ATTEMPTS | 3 | Retry on transient errors |
PAIMON_MCP_FETCH_JS_RENDER_ENABLED | false | Enable headless Chrome |
Extract and process images from webpages:
For JavaScript-heavy sites (SPAs, dynamic content):
Note: Requires Chrome or Chromium installed. Slower (~3-5s/page) but handles sites that static fetch can't.
Works with any MCP-compatible client. Add the configuration below to your client's config file.
Config file: ~/.config/opencode/opencode.json
Config file: claude_desktop_config.json
Config file: .cursor/mcp.json (project) or ~/.cursor/mcp.json (global)
Config file: .vscode/mcp.json (workspace) or user settings
Config file: .cline/mcp.json
Config file: .windsurf/mcp.json
All clients support environment variables. Example with custom timeout and cache:
Built with security in mind from day one:
Some antivirus may flag unsigned Go binaries as a false positive. This is a known industry issue. Solutions:
go install β antivirus sees the signed Go compilerBuilt with Clean Architecture principles:
Full details in the project plan.
MIT β do whatever you want with it.
Built with Go. Zero runtime dependencies. Single binary. ~10MB RAM. Starts in 5ms.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/web-page-fetcher)<a href="https://allmcps.com/mcp/web-page-fetcher"><img src="https://allmcps.com/api/badge/web-page-fetcher?style=directory" alt="Web Page Fetcher on AllMCPs" /></a>