βοΈ
io.github.XXO47OXX/spa-reader-mcp
MCP Server that renders JavaScript SPA pages and extracts LLM-ready Markdown content
0 installs
Trust: 37 β Low
Cloud
Ask AI about io.github.XXO47OXX/spa-reader-mcp
Powered by Claude Β· Grounded in docs
I know everything about io.github.XXO47OXX/spa-reader-mcp. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Loading tools...
Reviews
Documentation
spa-reader-mcp
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.
Install
npx playwright install chromium
Claude Desktop
{
"mcpServers": {
"spa-reader": {
"command": "npx",
"args": ["-y", "spa-reader-mcp"]
}
}
}
Claude Code
claude mcp add spa-reader -- npx -y spa-reader-mcp
Tools
spa_read
Render 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_screenshot
Capture 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 |
Security
- SSRF protection: blocks private/loopback IPs
- Only
http:andhttps:schemes allowed - Selector injection prevention
- Content capped at 100KB
Dev
pnpm install && pnpm build
pnpm test
License
MIT
