{
  "markdown": "# paimon-mcp-fetch\n\n**Give your AI assistant the ability to read any webpage.**\n\nA lightweight MCP server that fetches URLs and returns clean, readable markdown. Built with Go — starts in 5ms, uses ~10MB RAM, zero runtime dependencies.\n\n[![Release](https://img.shields.io/github/v/release/paimonchan/paimon-mcp-fetch)](https://github.com/paimonchan/paimon-mcp-fetch/releases)\n[![Go Version](https://img.shields.io/badge/go-1.26+-blue.svg)](https://go.dev/dl/)\n[![License](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)\n\n---\n\n## What It Does\n\nYou give it a URL → it returns clean markdown.\n\n**Good for:**\n- Reading articles, blog posts, documentation\n- Extracting data from news sites, forums, schedules\n- Summarizing web content for your AI assistant\n- Getting structured output (headings, lists, tables, code blocks preserved)\n\n**Not good for:**\n- Scraping login-protected pages\n- Bypassing paywalls\n- Replacing a full browser automation tool\n\n---\n\n## Quick Start\n\n### 1. Install\n\nPick one method:\n\n```bash\n# Go (recommended)\ngo install github.com/paimonchan/paimon-mcp-fetch/cmd/paimon-mcp-fetch@latest\n\n# Homebrew (macOS/Linux)\nbrew tap paimonchan/tap\nbrew install paimon-mcp-fetch\n\n# Scoop (Windows)\nscoop bucket add paimonchan https://github.com/paimonchan/scoop-bucket\nscoop install paimon-mcp-fetch\n\n# Winget (Windows)\nwinget install paimonchan.paimon-mcp-fetch\n\n# Docker\ndocker run -i --rm ghcr.io/paimonchan/paimon-mcp-fetch:latest\n```\n\n### 2. Configure Your AI Assistant\n\nAdd this to your MCP client config:\n\n```json\n{\n  \"mcp\": {\n    \"paimon-mcp-fetch\": {\n      \"type\": \"local\",\n      \"command\": [\"paimon-mcp-fetch\"],\n      \"enabled\": true\n    }\n  }\n}\n```\n\n### 3. Done\n\nYour AI can now read any URL you give it.\n\n---\n\n## Why This Over Other Fetch Tools?\n\n| | paimon-mcp-fetch | Basic text fetch |\n|--|------------------|------------------|\n| **Output** | Structured markdown | Plain text |\n| **Article extraction** | Readability algorithm (strips ads, nav, sidebars) | Raw HTML body |\n| **Images** | Optional extraction + processing | None |\n| **JS rendering** | Optional (headless Chrome) | Static only |\n| **Caching** | Built-in LRU cache | None |\n| **Rate limiting** | Per-domain, configurable | None |\n| **SSRF protection** | 7-layer defense | None |\n| **Startup time** | ~5ms | Varies |\n| **Memory** | ~10MB | Varies |\n\n---\n\n## Configuration\n\nEverything is controlled via environment variables. You probably don't need to change anything — defaults work well for most use cases.\n\n| Variable | Default | What it does |\n|----------|---------|--------------|\n| `PAIMON_MCP_FETCH_TIMEOUT_MS` | `12000` | Request timeout (ms) |\n| `PAIMON_MCP_FETCH_MAX_HTML_BYTES` | `10485760` | Max page size (10MB) |\n| `PAIMON_MCP_FETCH_CACHE_TTL_SECS` | `300` | Cache lifetime (5 min) |\n| `PAIMON_MCP_FETCH_RATE_LIMIT_PER_SECOND` | `5.0` | Requests/sec per domain |\n| `PAIMON_MCP_FETCH_RATE_LIMIT_BURST` | `10` | Max burst size |\n| `PAIMON_MCP_FETCH_RETRY_MAX_ATTEMPTS` | `3` | Retry on transient errors |\n| `PAIMON_MCP_FETCH_JS_RENDER_ENABLED` | `false` | Enable headless Chrome |\n\n---\n\n## Optional Features\n\n### Image Processing\n\nExtract and process images from webpages:\n\n```bash\ngo build -tags image -o paimon-mcp-fetch ./cmd/paimon-mcp-fetch/\n```\n\n### JS Rendering\n\nFor JavaScript-heavy sites (SPAs, dynamic content):\n\n```bash\ngo build -tags jsrender -o paimon-mcp-fetch ./cmd/paimon-mcp-fetch/\nPAIMON_MCP_FETCH_JS_RENDER_ENABLED=true ./paimon-mcp-fetch\n```\n\n**Note:** Requires Chrome or Chromium installed. Slower (~3-5s/page) but handles sites that static fetch can't.\n\n---\n\n## Supported AI Assistants\n\nWorks with any MCP-compatible client. Add the configuration below to your client's config file.\n\n### OpenCode\n\n**Config file:** `~/.config/opencode/opencode.json`\n\n```json\n{\n  \"mcp\": {\n    \"paimon-mcp-fetch\": {\n      \"type\": \"local\",\n      \"command\": [\"paimon-mcp-fetch\"],\n      \"enabled\": true\n    }\n  }\n}\n```\n\n### Claude Desktop\n\n**Config file:** `claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"paimon-mcp-fetch\": {\n      \"command\": \"paimon-mcp-fetch\"\n    }\n  }\n}\n```\n\n### Cursor\n\n**Config file:** `.cursor/mcp.json` (project) or `~/.cursor/mcp.json` (global)\n\n```json\n{\n  \"mcpServers\": {\n    \"paimon-mcp-fetch\": {\n      \"command\": \"paimon-mcp-fetch\",\n      \"env\": {}\n    }\n  }\n}\n```\n\n### VS Code (GitHub Copilot)\n\n**Config file:** `.vscode/mcp.json` (workspace) or user settings\n\n```json\n{\n  \"servers\": {\n    \"paimon-mcp-fetch\": {\n      \"type\": \"stdio\",\n      \"command\": \"paimon-mcp-fetch\"\n    }\n  }\n}\n```\n\n### Cline\n\n**Config file:** `.cline/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"paimon-mcp-fetch\": {\n      \"command\": \"paimon-mcp-fetch\"\n    }\n  }\n}\n```\n\n### Windsurf\n\n**Config file:** `.windsurf/mcp.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"paimon-mcp-fetch\": {\n      \"command\": \"paimon-mcp-fetch\"\n    }\n  }\n}\n```\n\n### With Custom Configuration\n\nAll clients support environment variables. Example with custom timeout and cache:\n\n```json\n{\n  \"mcpServers\": {\n    \"paimon-mcp-fetch\": {\n      \"command\": \"paimon-mcp-fetch\",\n      \"env\": {\n        \"PAIMON_MCP_FETCH_TIMEOUT_MS\": \"30000\",\n        \"PAIMON_MCP_FETCH_CACHE_TTL_SECS\": \"600\"\n      }\n    }\n  }\n}\n```\n\n---\n\n## Security\n\nBuilt with security in mind from day one:\n\n- **SSRF Protection** — 7-layer defense against server-side request forgery\n- **Private IP blocking** — Can't access localhost or internal networks\n- **Redirect validation** — Every redirect hop re-checked for safety\n- **Size limits** — Stream-based reading, no memory bombs\n- **Timeouts** — All requests have deadlines\n- **No secrets in logs** — API keys and tokens never logged\n\n### Windows Antivirus\n\nSome antivirus may flag unsigned Go binaries as a false positive. This is a known industry issue. Solutions:\n\n1. Use `go install` — antivirus sees the signed Go compiler\n2. Use Docker — no local binary\n3. Build from source — verify the code yourself\n\n---\n\n## Architecture\n\nBuilt with Clean Architecture principles:\n\n```\nMCP Server → UseCase → Domain (entities, ports)\n                        ↑\n            Adapters implement interfaces\n```\n\n- **Domain** — Business rules, zero external dependencies\n- **UseCase** — Orchestration logic\n- **Adapters** — HTTP client, content extractor, cache, rate limiter, image processor, JS renderer\n\nFull details in the [project plan](https://github.com/paimonchan/mcp-plan).\n\n---\n\n## License\n\nMIT — do whatever you want with it.\n\n---\n\n> Built with Go. Zero runtime dependencies. Single binary. ~10MB RAM. Starts in 5ms.\n",
  "bytes": 6523,
  "sha": "097e55f51132cbbe5b99eb251838bf781683a19beca580a922a86f84b1855b9e",
  "repo_slug": "paimonchan/paimon-mcp-fetch",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_paimonchan_paimon_mcp_fetch_15114763/readme"
}