screenshotrun-mcp
OfficialThis server lets you capture webpage screenshots and check your ScreenshotRun API usage.
Take screenshots of any URL and get the image back as base64-encoded data
Choose output format — PNG, JPEG, WebP, or PDF, with quality control for JPEG/WebP
Control the viewport — custom width/height, desktop/mobile/tablet presets, and retina (2x) capture
Render appearance options — dark mode and full-page capture
Target specific content — capture a single element via CSS selector
Interact before capture — click an element, scroll to an element, or hide elements via selectors
Block unwanted content — ads and cookie consent dialogs
Inject customization — custom CSS or JavaScript
Time the capture — configurable delay after page load (0–10s)
Check usage — see screenshots used, remaining, and limits for the current billing period
screenshotrun-mcp
Give your AI agent the ability to see any webpage. MCP server for ScreenshotRun Screenshot API.
Features
Capture screenshots of any public webpage as PNG, JPEG, WebP, or PDF
Render raw HTML or Markdown to image
Device emulation — desktop, mobile, and tablet viewports
Dark mode rendering with
prefers-color-scheme: darkFull-page capture with automatic scrolling
Block ads, cookie consent banners, and live chat widgets
Inject custom CSS/JavaScript before capture
Target specific elements with CSS selectors
Wait for elements, click, hover, and scroll before capture
Retina (2x) and custom device pixel ratio support
Geolocation and timezone emulation
Stealth mode to avoid bot detection
Transparent background, clipping, and output resizing
Extract page metadata (title, description, OG tags, Twitter Card)
Analyze page structure — headings, interactive elements, forms, images, navigation with bounding rectangles
Certified screenshots with SHA-256 hash
PDF output with custom page format and margins
Scroll video recording
Monitor your API usage and remaining quota
Related MCP server: ShotAPI
Quick Start
1. Get your API key
Sign up for a free API key at screenshotrun.com.
2. Configure your AI client
Claude Desktop
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"screenshotrun": {
"command": "npx",
"args": ["-y", "screenshotrun-mcp"],
"env": {
"SCREENSHOTRUN_API_KEY": "sr_live_your_key_here"
}
}
}
}Claude Code
claude mcp add screenshotrun \
npx -y screenshotrun-mcp \
-e SCREENSHOTRUN_API_KEY=sr_live_your_key_hereCursor
Add to .cursor/mcp.json in your project:
{
"mcpServers": {
"screenshotrun": {
"command": "npx",
"args": ["-y", "screenshotrun-mcp"],
"env": {
"SCREENSHOTRUN_API_KEY": "sr_live_your_key_here"
}
}
}
}Windsurf / VS Code
Add to your MCP configuration with the same npx -y screenshotrun-mcp command and set the SCREENSHOTRUN_API_KEY environment variable.
Available Tools
take_screenshot
Capture a screenshot of any webpage, raw HTML, or Markdown. Returns the image as base64-encoded data that AI agents can analyze and describe.
Source (one required)
Parameter | Type | Description |
| string | URL to screenshot (http:// or https://) |
| string | Raw HTML to render (max 500KB) |
| string | Markdown to render (max 500KB) |
Output
Parameter | Type | Default | Description |
|
|
| Output format |
| number | 80 | Image quality for JPEG/WebP (1-100) |
Viewport & Device
Parameter | Type | Default | Description |
| number | 1280 | Viewport width (320-3840) |
| number | 800 | Viewport height (200-2160) |
| boolean | false | Capture entire scrollable page |
|
| -- | Device preset |
| boolean | false | 2x resolution |
| number | -- | Custom pixel ratio (0.5-4) |
Appearance
Parameter | Type | Default | Description |
| boolean | false | Enable dark mode |
| boolean | false | Transparent background (PNG/WebP) |
|
| -- | Emulate CSS media type |
| boolean | false | Emulate prefers-reduced-motion |
| boolean | false | Disable CSS animations |
Blocking
Parameter | Type | Default | Description |
| boolean | false | Block advertisements |
| boolean | true | Block cookie consent dialogs |
| boolean | false | Block live chat widgets |
| string[] | -- | URL patterns to block |
| string[] | -- | Resource types to block (image, stylesheet, font, script, media, websocket, manifest, other) |
Interaction
Parameter | Type | Description |
| string | CSS selector to capture a specific element |
| string | Element to click before capture |
| string | Element to hover before capture |
| string | Element to scroll into view |
| string[] | Elements to hide before capture |
| string | Wait for element to appear |
Injection
Parameter | Type | Description |
| string | Custom CSS (max 10KB) |
| string | Custom JavaScript (max 10KB) |
| string | Custom User-Agent |
| object | Custom HTTP headers |
| array | Cookies to set ( |
Timing
Parameter | Type | Default | Description |
| number | 0 | Seconds to wait after load (0-10) |
| number | 30 | Max page load time (5-60s) |
| number | -- | Max navigation time (5-60s) |
| string | -- |
|
Clipping & Resizing
Parameter | Type | Description |
| number | Resize output width (16-3840) |
| number | Resize output height (16-2160) |
| object | Clip rectangle |
Advanced
Parameter | Type | Default | Description |
| boolean | false | Stealth mode (avoid bot detection) |
| boolean | false | Bypass Content Security Policy |
| number | -- | Cache duration in seconds (0-86400) |
| boolean | false | Extract page metadata (title, OG, Twitter Card) |
| boolean | false | Certified screenshot with SHA-256 |
Geolocation
Parameter | Type | Description |
| object |
|
| string | e.g. |
| string | HTTP/SOCKS proxy URL |
PDF Options (format=pdf)
Parameter | Type | Description |
| boolean | Landscape orientation |
| string |
|
| string | e.g. |
| string | Right margin |
| string | Bottom margin |
| string | Left margin |
Scroll Video
Parameter | Type | Description |
| boolean | Record scrolling video |
| number | Duration 2-30 seconds |
|
| Scroll speed |
analyze_page
Analyze any webpage and get structured data about its content. Returns headings, interactive elements (buttons, links, inputs), forms, images, and navigation links — each with a bounding rectangle [x, y, width, height] for visual mapping. Pro feature with 20 free trial runs per month.
Core Parameters
Parameter | Type | Default | Description |
| string | required | URL to analyze (http:// or https://) |
| string[] | all | Categories to return: |
| boolean | true | Only return visible elements |
| string | -- | CSS selector to limit analysis to a section (e.g. |
| boolean | false | Capture screenshot alongside analysis (costs 1 extra request) |
Viewport & Appearance
Parameter | Type | Default | Description |
| number | 1280 | Viewport width (320-3840) |
| number | 800 | Viewport height (200-2160) |
|
| -- | Device preset |
| boolean | false | Enable dark mode |
Blocking & Timing
Parameter | Type | Default | Description |
| boolean | false | Block advertisements |
| boolean | true | Block cookie consent dialogs |
| boolean | false | Block live chat widgets |
| number | 0 | Seconds to wait after load (0-10) |
| number | 30 | Max page load time (5-60s) |
| boolean | false | Stealth mode |
Injection & Advanced
Parameter | Type | Description |
| string | Custom CSS (max 10KB) |
| string | Custom JavaScript (max 10KB) |
| string[] | Elements to hide before analysis |
| string | Wait for element to appear |
| string | Custom User-Agent |
| string | HTTP/SOCKS proxy URL |
| string | e.g. |
| object |
|
| object | Custom HTTP headers |
| array | Cookies to set ( |
extract_content
Extract page metadata from any URL without downloading the full image. Returns title, description, Open Graph tags, Twitter Card tags, favicon URL, and HTTP status. Useful for SEO audits, content analysis, and link previews.
Parameter | Type | Description |
| string | URL to extract metadata from |
check_usage
Check your ScreenshotRun API usage for the current billing period. Returns screenshots used, remaining quota, usage percentage, and days remaining.
No parameters required.
Example Prompts
"Take a screenshot of screenshotrun.com"
"Screenshot stripe.com on mobile in dark mode"
"Capture full-page screenshot of my website in WebP"
"Take a retina screenshot of example.com in JPEG format"
"Screenshot a page with the cookie banner and chat widget hidden"
"Render this HTML as an image:
<h1>Hello World</h1>""Capture example.com as seen from Tokyo" (with geolocation + timezone)
"Take a screenshot with transparent background for my design comp"
"Wait for the
.loading-spinnerto disappear, then screenshot""Click the 'Show More' button, then capture the page"
"Analyze the page structure of competitor.com — show me all headings and interactive elements"
"What forms and images are on this landing page?"
"Analyze example.com on mobile and show me the navigation links"
"Extract the OG tags and meta description from competitor.com"
"Check how many screenshots I have left this month"
How It Works
Your AI agent receives a user request involving a webpage
The agent calls the appropriate tool (
take_screenshot,analyze_page, orextract_content)The MCP server sends the request to the ScreenshotRun API
The API renders the page in a real browser and returns the result
Screenshots are returned as base64 images; analysis results are returned as structured text with element positions
Requirements
Node.js 18+
A ScreenshotRun API key (get one free)
Other Projects by ScreenshotRun
SnapshotArchive — Automated website monitoring with visual diff detection
WatchCron — Cron job & heartbeat monitoring for developers
License
MIT
Available Tools
2 toolscheck_usageA
Check your ScreenshotRun API usage for the current billing period. Shows screenshots used, remaining, and limits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the read-only nature ('Check'), the temporal scope (current billing period), and the returned fields, but says nothing about auth requirements, rate limits, or whether usage is real-time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and scope, followed by the concrete return content. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no output schema, the description is largely complete: it explains what is queried and what is returned. Minor gap is lack of auth/real-time context, but nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so there is nothing to document; baseline is 4. The description correctly requires no input, matching the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (check) and resource (API usage) plus the scope (current billing period) and what is shown (screenshots used, remaining, limits). It is unambiguous what it does, though it does not explicitly name or distinguish itself from the sibling take_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'current billing period' — the agent infers this is a read-only status check. There is no explicit statement of when to use it, no exclusions, and no mention of the sibling, so guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotA
Capture a screenshot of any webpage. Returns the image as base64-encoded data. Supports custom viewport sizes, device emulation, dark mode, full-page capture, ad blocking, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| js | No | Custom JavaScript to execute before capture | |
| css | No | Custom CSS to inject into the page | |
| url | Yes | URL of the page to screenshot (must start with http:// or https://) | |
| delay | No | Delay in seconds after page load before capturing | |
| width | No | Viewport width in pixels | |
| device | No | Device preset (affects viewport and user agent) | |
| format | No | Output image format | png |
| height | No | Viewport height in pixels | |
| retina | No | Capture at 2x resolution (retina) | |
| quality | No | Image quality for JPEG/WebP (1-100) | |
| selector | No | CSS selector to capture a specific element instead of the full viewport | |
| block_ads | No | Block advertisements during capture | |
| dark_mode | No | Enable dark mode (prefers-color-scheme: dark) | |
| full_page | No | Capture the entire scrollable page | |
| scroll_to | No | CSS selector of an element to scroll into view before capture | |
| block_cookies | No | Block cookie consent dialogs | |
| click_selector | No | CSS selector of an element to click before capture | |
| hide_selectors | No | CSS selectors of elements to hide before capture |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses that the result is base64-encoded image data and mentions several feature areas, but it does not disclose important behavioral traits such as permissions, rate limits, timeout behavior, or the fact that custom JS and click actions can affect the target page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loads the core action and return format. The phrase 'and more' is slightly vague, but overall the structure is efficient and appropriately sized for a tool whose parameter details are covered by the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter tool with no annotations and no output schema, the description is adequate but not fully complete. It explains the return value and major capabilities, but it does not cover behavioral context such as side effects from JS execution, rate limits, or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents all 18 parameters, including url, viewport, format, and selectors. The description highlights a subset of capabilities such as viewport sizes, device emulation, dark mode, and full-page capture, but adds no syntax or format detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Capture a screenshot of any webpage.' It also clarifies the return format as base64-encoded image data. The purpose is unambiguous and distinct from the unrelated sibling check_usage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying it captures 'any webpage' and listing supported features, but it gives no explicit when-to-use guidance, prerequisites, or exclusions. Since the only sibling is check_usage, there is no alternative screenshot tool to compare against, but the guidance remains implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.0.3- First observed
check_usage - First observed
take_screenshot
TDQS
Scored across 2 tools
The two tools serve completely different purposes: one queries billing/quota usage, the other performs screenshot capture. There is no plausible way an agent would confuse them.
Both tools follow the same snake_case verb_noun convention (check_usage, take_screenshot), making the pattern predictable and readable.
Two tools is thin but defensible for a focused screenshot API wrapper—capture plus quota check are the core operations. It sits just below the typical 3+ range, so not a full 5.
The essential workflow (take a screenshot, check remaining quota) is covered, but there is no way to retrieve previously captured screenshots, list history, or manage account settings. These are minor gaps agents can work around for the primary use case.
Maintenance
Related MCP Connectors
Grabbit gives AI agents eyes on the web through a hosted MCP server. Send a public URL and get a pixel-perfect hosted image back, without maintaining Chromium, Playwright, or a browser fleet. Capture a full page, exact viewport, or single CSS selector as PNG, JPEG, or WebP. Grabbit handles cookie and consent banners, waits for JavaScript-heavy pages, blocks private and internal URLs, supports safe retries with idempotency keys, and delivers async results through signed webhooks. Completed captures include a CDN URL. Connect with OAuth 2.1 or an API key. Grabbit works with Claude, Cursor, Codex, and any MCP client. Live captures cost $0.002 each. The $50 annual plan includes 25,000 prepaid credits that never reset or expire. Free test keys return placeholder images, so you can wire up the integration before paying. Home: https://grabbit.live Docs: https://grabbit.live/screenshot-api Built by BrainGrid.
Screenshot, PDF and Open Graph image API for AI agents: capture pages, render PDFs, make OG images.
Screenshot, PDF and HTML-to-image rendering API so Claude and Cursor can see any web page.
Screenshot, PDF and HTML-to-image rendering API so Claude and Cursor can see any web page.
Related MCP Servers
- AlicenseAqualityBmaintenanceLets AI agents like Claude capture website screenshots, check cache status, and monitor usage.113MIT
- FlicenseNot gradedqualityDmaintenanceScreenshot & Render API for AI Agents. MCP Server lets Claude, Cursor capture webpages and render HTML. Direct access, no VPN needed.-
- AlicenseNot gradedqualityDmaintenanceScreenshot and HTML Rendering MCP Server for AI Agents. Capture screenshots, render HTML to images, and generate PDFs via simple API calls. Compatible with Claude, Cursor, and any MCP client.1MIT
- AlicenseAqualityDmaintenanceEnables AI agents to capture clean web screenshots and extract main article content from any web page, with automatic removal of cookie banners, ads, and boilerplate.2MIT