Solves the classic SPA scraping problem by spinning up headless Chromium via Playwright, waiting for JavaScript to finish executing, then extracting clean Markdown using Readability and Turndown. Exposes two tools: spa_read for pulling rendered content with optional YAML frontmatter, and spa_screenshot for grabbing PNGs after page load. You can pass custom selectors to wait for, set timeouts, inject cookies and headers for authenticated pages, and control viewport dimensions. Includes SSRF protection that blocks private IPs and caps content at 100KB. Reach for this when you need Claude to read documentation sites, dashboards, or any content that doesn't exist until React or Vue renders it.
MCP server that renders JavaScript SPA pages and extracts Markdown via headless Chromium.
Traditional scrapers fail on SPAs because content is rendered client-side. This tool launches Playwright, waits for JS to finish, then extracts clean Markdown using Readability + Turndown.
npx playwright install chromium
{
"mcpServers": {
"spa-reader": {
"command": "npx",
"args": ["-y", "spa-reader-mcp"]
}
}
}
claude mcp add spa-reader -- npx -y spa-reader-mcp
spa_readRender a page and extract content as Markdown.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | — | URL to read (required) |
waitForSelector | string | — | CSS selector to wait for |
waitTimeout | number | 30000 | Timeout in ms |
includeMetadata | boolean | true | Add YAML frontmatter |
cookies | array | — | Cookies for auth |
headers | object | — | Custom HTTP headers |
spa_screenshotCapture a PNG screenshot after JS rendering.
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | — | URL to capture (required) |
waitForSelector | string | — | CSS selector to wait for |
waitTimeout | number | 30000 | Timeout in ms |
width | number | 1280 | Viewport width |
height | number | 720 | Viewport height |
fullPage | boolean | false | Full page capture |
cookies | array | — | Cookies for auth |
headers | object | — | Custom HTTP headers |
http: and https: schemes allowedpnpm install && pnpm build
pnpm test
MIT
io.github.ericm1018/skillfm-llm-cost-optimizer-openai-anthropic-usage
io.github.mikerawsonnz/llm-orchestration-agent
io.github.mikerawsonnz/authenticated-llm-agent
labforgedev/copilot-memory-mcp
csoai-org/agent-prompt-injection-firewall-mcp
io.github.mikerawsonnz/authenticated-multi-llm-agent