koon-mcp
Web fetching for Claude Code that gets past the 403. koon-mcp fetches pages the way Chrome does, down to the TLS and HTTP/2 handshake, so sites behind Cloudflare, Akamai and other bot protection hand over the page instead of an error. And PDFs come back as text that Claude can read and cite.
It is built on koon, a browser-impersonating HTTP client written in Rust on BoringSSL.
Why
WebFetch gets turned away. Claude Code's built-in WebFetch tells every site it is a bot, and many of the pages you need while coding or researching answer with a 403. koon-mcp gets them:
PDFs Claude can actually read. WebFetch hands its model the raw PDF bytes, and the answer is "compressed binary data". koon-mcp returns the text, page by page.
The page itself, not a summary. WebFetch shows Claude a small model's answer about the page. koon-mcp hands over the page as Markdown, so nothing gets lost in between.
Install as a Claude Code plugin
claude plugin marketplace add scrape-hub/koon-mcp
claude plugin install koon-fetch@koon-marketplace
Features
- Browser impersonation: requests go out as the latest Chrome that koon knows, with its TLS, HTTP/2 and HTTP/3 fingerprint and the language of your system.
- Browser fallback: when a site turns away the request as Chrome, it goes out again as Firefox, then Safari.
- Stack Overflow: questions on Stack Overflow and the other Stack Exchange sites come with their top answers through the official API.
- Blocks named: when all three are turned away, the error names the bot protection that answered, instead of returning its page as content.
- HTML to Markdown: Readability extracts the main content and Turndown converts it, without images, scripts or iframes.
- JSON: JSON responses come back as fenced code blocks.
- PDF: text with page numbers, more pages on request, papers with title, authors and DOI. See PDFs.
- 15-minute cache: repeated fetches of the same URL are answered from memory.
- Truncation: pages are capped at 100,000 characters to fit the context.
- Default scheme: a URL without a scheme is fetched over
https://.
Manual setup
To use the MCP server without the plugin:
claude mcp add koon-fetch -- npx -y koon-mcp
Or in a project's .mcp.json:
{
"mcpServers": {
"koon-fetch": {
"command": "npx",
"args": ["-y", "koon-mcp"]
}
}
}
Tool
koon_fetch
Fetches a URL and returns the content as Markdown.
Parameters:
Example in Claude Code:
"Fetch the pricing page from example.com"
Claude calls koon_fetch with url: "https://example.com/pricing" and gets the page back as Markdown.
PDFs
- Text with page numbers, so Claude can cite the page.
- Long PDFs start with the first pages and the table of contents;
pages: "12-15"reads on. - Papers with a DOI or arXiv id come with title, authors, year and DOI.
save: truekeeps the PDF inpdf/of your project asVaswani et al. - 2017 - Attention Is All You Need.pdf(another folder:save_dirorKOON_MCP_PDF_DIR).
How it works
- koonjs opens the connection with the TLS ClientHello and HTTP/2 or HTTP/3 settings of Chrome, or of Firefox and then Safari when the site turns the request away.
- HTML: JSDOM parses the page, Readability extracts the main content (or the whole body if it finds none) and Turndown converts it to Markdown.
- PDF: pdf.js, through
unpdf, extracts the text of each page. - Pages are cached for 15 minutes; a PDF stays as a working copy for the session.
Requirements
- Node.js 18.17 or newer
- The koon native binaries come with
koonjs, so there is nothing else to install.
License
MIT