check_screenshot_cache is documented as free, sign_screenshot_url charges on render rather than on signing, and batch_screenshots rolls credits back for URLs that fail — so the cost of a workflow can be reasoned about before it runs, with get_usage and the quota.warning and quota.exceeded webhook events closing the loop. The trap is the cache probe itself: it tells the truth only when passed the identical parameter set take_screenshot would use, so a probe missing one option reports a miss on a capture that already exists.
A client for the SnapRender screenshot API with 11 tools: single and batch capture, a free cache probe, signed URLs, page-content extraction, webhook management and usage reporting.
- A capture tool that takes three kinds of input: take_screenshot accepts exactly one of url, html or markdown and returns PNG, JPEG, WebP or PDF, with device emulation for iPhone, Pixel and iPad, plus dark_mode, full_page, custom width and height, block_ads, block_cookie_banners, hide_selectors and click_selector.
- A cache probe that costs nothing: check_screenshot_cache reports whether a capture already exists and is documented as not counting against your quota, provided you pass the same parameters take_screenshot would use so the cache key matches.
- Screenshots you can hand out without the key: sign_screenshot_url returns a signed URL that expires after expires_in, free to generate, with one credit charged when the URL is rendered.
- Page content without the picture: extract_content returns markdown, plain text, raw html, an article with title, author and excerpt, all links, or metadata from OG tags — narrowed by selector and capped by max_length.
- Batching as a job rather than a loop: batch_screenshots takes 1-50 urls sharing one option set and returns a job ID, get_batch_status polls it and hands back presigned download URLs valid for 24 hours, and credits for failed URLs are rolled back.
- Notification instead of polling: create_webhook subscribes to screenshot.completed, quota.warning at 80% used and quota.exceeded at 100% used, with payloads signed HMAC-SHA256 and a returned secret to verify them; list_webhooks, test_webhook and delete_webhook manage the set, capped at 5 per account.
- Quota visible before you hit it: get_usage returns this month's screenshots used and the account limit.
SNAPRENDER_API_KEY. Everything else is decided per call: take_screenshot needs exactly one of url, html or markdown, and check_screenshot_cache needs the identical parameter set as the capture it is asking about or the cache key will not line up. sign_screenshot_url is the exception in the other direction — the URL it returns is usable without the key until expires_in runs out.
One command plus a key — npx snaprender-mcp, then supply credentials
