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.
claude mcp add --transport stdio xxo47oxx-spa-reader-mcp uvx spa-reader-mcp