ScreenshotAPI
NPM · @SCREENSHOTAPINET/MCP
Website screenshots, URL/HTML to PDF, scrolling videos, and web scraping via ScreenshotAPI.
Available components
Last scanned (1 hour ago)
Scores higher than 31% of npm servers
Category Web Scraping
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security81
- No malware found by supply-chain analysis.Pass
- CVE check failed: a known high-severity CVE affects zod 3.25.76, a direct dependency. A fixed version is available. View diagnostics → Fail
- No install/post-install scripts declared.Pass
- 30 of 93 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 8 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability56
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 6361 tokens (~795/item across 8 items; 8 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 8 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 30 Oct 26 0
- Security disclosure: unverified → fail ▼ functional
- 29 Oct 26 0
- Security disclosure: fail → unverified ▼ functional
- 28 Oct 26 +15
- Malware scan: unverified → pass ▲ security
- 27 Oct 26 46
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed npm/@screenshotapinet/mcp@1.0.2
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | npm |
Background: How many MCP packages publish verified provenance →
Vulnerabilities 1 finding
| ID | CVE | Severity | Vector | Fix available |
|---|---|---|---|---|
| GHSA-mrhx-c7xc-m3w5 | CVE-2023-54404 | high | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H | yes |
Background: What a vulnerability scan can and cannot prove →
Dependencies 93 packages
| Packages resolved | 93 |
|---|---|
| Stale | 30 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
bulk_screenshots Capture screenshots of many URLs ~190
Submits up to 50 URLs as one bulk screenshot job (JSON bulk API). Each entry is a URL plus any take_screenshot option using the raw API parameter names (file_type, width, height, full_page, fresh, delay, css, block_ads, no_cookie_banners, ...). 'defaults' are applied to every entry unless the entry overrides them. Returns the API's job response; if it contains a uuid, track it with get_bulk_status and fetch results with download_bulk_results. Paid plans only.
| Name | Type | Req | Description |
|---|---|---|---|
| defaults | object | – | Options applied to every entry, e.g. {file_type:'png', width:1440, height:900, no_cookie_banners:true}. |
| screenshots | array | yes | Entries to capture, e.g. [{url:'https://a.com'},{url:'https://b.com',full_page:true}]. Max 50. |
No output schema declared.
No examples provided.
bulk_screenshots_csv Start a bulk screenshot job from a CSV ~170
Uploads a CSV to start a bulk screenshot job. The CSV must have a 'url' column with full https:// URLs; any other column is treated as a render option for that row using the API parameter names (file_type, width, height, css, delay, headers, ...). Pass either a local csv_path or the CSV text in csv_content. Returns the job response including its uuid for get_bulk_status and download_bulk_results. ScreenshotAPI also emails a download link when the job finishes. Paid plans only.
| Name | Type | Req | Description |
|---|---|---|---|
| csv_content | string | – | CSV text, e.g. 'url,file_type\nhttps://a.com,png\nhttps://b.com,jpg'. Used when csv_path is not given. |
| csv_path | string | – | Path to a local CSV file. |
No output schema declared.
No examples provided.
download_bulk_results Download bulk screenshot results ~55
Downloads the results of a finished bulk screenshot job by uuid: one row per URL with its status, the hosted screenshot URL, and any error message.
| Name | Type | Req | Description |
|---|---|---|---|
| uuid | string | yes | Job uuid returned when the bulk job was submitted. |
No output schema declared.
No examples provided.
generate_pdf Convert a web page or HTML to PDF ~1,551
Renders a URL or raw HTML in a real browser and converts it to a PDF, returning the hosted PDF URL. Choose a paper size ('format') for paginated output; without format (and without width/height) the whole page becomes one long continuous PDF page. Supports landscape, page ranges, print backgrounds, print vs screen CSS, and all page preparation options (delay, lazy_load, ad/cookie-banner blocking, CSS/JS injection). Use save_path to save the PDF locally.
| Name | Type | Req | Description |
|---|---|---|---|
| accept_languages | string | – | Accept-Language header for localized content, e.g. 'fr-FR,fr;q=0.9'. Default 'en-US,en;q=0.8'. |
| adjust_top | integer | – | Scroll the viewport down this many pixels before capture. Default 0. Not supported for PDFs. |
| block | array | – | Resources to block while rendering. For a clean capture use ['ads', 'cookie_banners', 'chat_widgets']. 'tracking' blocks analytics. 'javascript', 'stylesheets', 'xhr', and 'fetch' can break pages or… |
| block_specific_requests | string | – | Specific request URLs or patterns to block, separated by commas, spaces, or newlines, e.g. 'https://example.com/api/data, https://ads-domain.com'. |
| blur_selector | string | – | CSS selector(s) of elements to blur, comma-separated — for redacting emails, account numbers, or other sensitive data. |
| bucket_name | string | – | Bucket to use with byob when several are configured under the same service. |
| byob | boolean | – | Save the output to your own bucket configured under Storage Integrations in the dashboard (Bring Your Own Bucket). Default false. |
| click_recursion | integer | – | How many times to click selector_to_click in sequence. Requires selector_to_click. Default 0. |
| cookies | string | – | Cookies to set before loading, as 'name=value; other=value;'. Use for pages behind a login. |
| css | string | – | CSS injected before capture, e.g. '.header { display: none; }'. |
| css_url | string | – | URL of an external stylesheet to inject before capture. |
| custom_html | string | – | Raw HTML to render instead of loading a URL. Takes precedence over url. Inline CSS and JavaScript in the HTML are applied. Useful for pages that are not publicly reachable. |
| dark_mode | boolean | – | Render with the dark color scheme (for sites that support it). Default false. |
| delay | integer | – | Extra wait in milliseconds after the page loads, before capture. Default 0. Use 1000-5000 for animations, charts, or late-loading content. |
| enable_caching | boolean | – | Store this capture in the cache for reuse. Cached captures served later (with fresh=false) do not consume credits. Default false. |
| enable_incognito | boolean | – | Render in an isolated incognito session with no persisted cookies or storage. Default false. |
| format | string | – | Paper size. A4 or Letter for documents and invoices. Omit for a single continuous page. |
| fresh | boolean | – | true (default) always renders a new capture; false returns a cached capture when one exists from a request with enable_caching=true and identical parameters. |
| grayscale | integer | – | Desaturate the output, 0 (full color, default) to 100 (fully grayscale). |
| headers | string | – | Extra HTTP headers as 'Name: value;' pairs separated by semicolons, e.g. 'Authorization: Bearer abc; X-Test: 1;'. |
| height | integer | – | Browser viewport height in pixels (max 4320). Default 876. |
| js | string | – | JavaScript executed in the page before capture, e.g. "document.querySelector('.popup').remove();". |
| js_url | string | – | URL of an external JavaScript file to execute before capture. |
| landscape | boolean | – | Landscape orientation — good for wide tables and dashboards. Default false (portrait). |
| latitude | number | – | Latitude reported by the browser Geolocation API. |
| lazy_load | boolean | – | Scroll through the whole page first so lazy-loaded images and sections render. Default false. |
| longitude | number | – | Longitude reported by the browser Geolocation API. |
| media | string | – | CSS media type to emulate: 'print' uses the site's print stylesheet, 'screen' matches what a visitor sees. |
| page_range | string | – | Keep only these pages, as 'start-end', e.g. '1-3' or '5-5'. Needs a paginated PDF (format or width/height). |
| print_background | boolean | – | Include background colors and images in the PDF. |
| proxy | string | – | Proxy to route the request through: 'address:port' or 'username:password@address:port' (an http:// prefix is accepted). Useful for geo-specific content or CAPTCHA-prone sites. |
| remove_selector | string | – | CSS selector(s) of elements to remove from the page before capture, comma-separated, e.g. '.ad-banner, #sidebar'. Non-matching selectors are ignored. |
| result_file_name | string | – | Custom file name for the stored output. Non-unique names can overwrite earlier files. |
| save_path | string | – | Optional local path to also save the file to, e.g. './shots/home.png'. A directory path (ending in '/' or an existing directory) keeps the remote file name. Relative paths resolve against the MCP ser… |
| scroll_delay | integer | – | Milliseconds to wait between scroll steps when lazy_load is true. Default 500. High values on long pages can hit the timeout. |
| scroll_to_element | string | – | CSS selector of an element to scroll into view before a viewport capture. |
| selector_to_click | string | – | CSS selector of an element to click before capture, e.g. to open a tab, dropdown, or accordion. |
| storage_service | string | – | Storage service to use with byob when several are configured: 'aws', 'wasabi', or 'google_cloud'. |
| template_id | string | – | ID of a saved cookie template from the ScreenshotAPI dashboard to apply before navigation. |
| timeout | integer | – | Maximum milliseconds the API waits for the page to load before aborting. Default 100000. |
| timezone | string | – | IANA timezone to emulate, e.g. 'America/New_York', 'Asia/Karachi'. Default is the server timezone. |
| ttl | integer | – | Cache lifetime in seconds when enable_caching is true. Default 2592000 (30 days). |
| url | string | – | Website URL to render, including the protocol, e.g. 'https://example.com'. Either url or custom_html is required. |
| user_agent | string | – | Custom User-Agent string, e.g. a mobile Safari UA to get the mobile site. |
| wait_for_event | string | – | Page lifecycle event to wait for before capture. 'load' (default) waits for all resources; 'domcontentloaded' is faster but may miss images; 'networkidle' waits until no network requests for 500ms —… |
| width | integer | – | Browser viewport width in pixels (max 7680). Default 1680. Use ~390 to emulate a phone, ~768 for a tablet. |
No output schema declared.
No examples provided.
get_bulk_status Check a bulk screenshot job ~54
Returns the progress of a bulk screenshot job by uuid: percent complete plus successful and failed URLs. Call download_bulk_results once it reaches 100%.
| Name | Type | Req | Description |
|---|---|---|---|
| uuid | string | yes | Job uuid returned when the bulk job was submitted. |
No output schema declared.
No examples provided.
record_scrolling_video Record a scrolling video of a web page ~1,345
Records a video (mp4, webm, or gif) of the browser scrolling down a web page and returns the hosted video URL. Control scroll speed, duration, and scrolling back to the top. Set video=true to record the viewport without scrolling (for animations or live dashboards). Pass 'sizes' to record the same page at several viewport sizes in one request. Rendering takes noticeably longer than a screenshot.
| Name | Type | Req | Description |
|---|---|---|---|
| accept_languages | string | – | Accept-Language header for localized content, e.g. 'fr-FR,fr;q=0.9'. Default 'en-US,en;q=0.8'. |
| adjust_top | integer | – | Scroll the viewport down this many pixels before capture. Default 0. Not supported for PDFs. |
| block | array | – | Resources to block while rendering. For a clean capture use ['ads', 'cookie_banners', 'chat_widgets']. 'tracking' blocks analytics. 'javascript', 'stylesheets', 'xhr', and 'fetch' can break pages or… |
| block_specific_requests | string | – | Specific request URLs or patterns to block, separated by commas, spaces, or newlines, e.g. 'https://example.com/api/data, https://ads-domain.com'. |
| blur_selector | string | – | CSS selector(s) of elements to blur, comma-separated — for redacting emails, account numbers, or other sensitive data. |
| click_recursion | integer | – | How many times to click selector_to_click in sequence. Requires selector_to_click. Default 0. |
| cookies | string | – | Cookies to set before loading, as 'name=value; other=value;'. Use for pages behind a login. |
| css | string | – | CSS injected before capture, e.g. '.header { display: none; }'. |
| css_url | string | – | URL of an external stylesheet to inject before capture. |
| custom_html | string | – | Raw HTML to render instead of loading a URL. Takes precedence over url. Inline CSS and JavaScript in the HTML are applied. Useful for pages that are not publicly reachable. |
| dark_mode | boolean | – | Render with the dark color scheme (for sites that support it). Default false. |
| delay | integer | – | Extra wait in milliseconds after the page loads, before capture. Default 0. Use 1000-5000 for animations, charts, or late-loading content. |
| duration | number | – | How long the scrolling (or viewport recording) lasts, in seconds, 0-60. |
| enable_incognito | boolean | – | Render in an isolated incognito session with no persisted cookies or storage. Default false. |
| file_type | string | – | Video format. Default mp4. gif loops and has no sound; webm is smaller. |
| grayscale | integer | – | Desaturate the output, 0 (full color, default) to 100 (fully grayscale). |
| headers | string | – | Extra HTTP headers as 'Name: value;' pairs separated by semicolons, e.g. 'Authorization: Bearer abc; X-Test: 1;'. |
| height | integer | – | Browser viewport height in pixels (max 4320). Default 876. |
| js | string | – | JavaScript executed in the page before capture, e.g. "document.querySelector('.popup').remove();". |
| js_url | string | – | URL of an external JavaScript file to execute before capture. |
| latitude | number | – | Latitude reported by the browser Geolocation API. |
| lazy_load | boolean | – | Scroll through the whole page first so lazy-loaded images and sections render. Default false. |
| longitude | number | – | Longitude reported by the browser Geolocation API. |
| proxy | string | – | Proxy to route the request through: 'address:port' or 'username:password@address:port' (an http:// prefix is accepted). Useful for geo-specific content or CAPTCHA-prone sites. |
| remove_selector | string | – | CSS selector(s) of elements to remove from the page before capture, comma-separated, e.g. '.ad-banner, #sidebar'. Non-matching selectors are ignored. |
| save_path | string | – | Optional local path to save the video to (ignored when 'sizes' is used, since that returns several files). |
| scroll_back | boolean | – | Scroll back up to the top after reaching the bottom. Default false. |
| scroll_delay | integer | – | Milliseconds to wait between scroll steps when lazy_load is true. Default 500. High values on long pages can hit the timeout. |
| scroll_speed | string | – | Scrolling speed. Default normal. |
| scroll_to_element | string | – | CSS selector of an element to scroll into view before a viewport capture. |
| selector_to_click | string | – | CSS selector of an element to click before capture, e.g. to open a tab, dropdown, or accordion. |
| sizes | array | – | Record one video per viewport size, e.g. [{width:1920,height:1080},{width:390,height:844}]. Overrides width/height. |
| start_immediately | boolean | – | Start recording as soon as navigation begins instead of after load, to capture the page loading. Default false. |
| template_id | string | – | ID of a saved cookie template from the ScreenshotAPI dashboard to apply before navigation. |
| timeout | integer | – | Maximum milliseconds the API waits for the page to load before aborting. Default 100000. |
| timezone | string | – | IANA timezone to emulate, e.g. 'America/New_York', 'Asia/Karachi'. Default is the server timezone. |
| url | string | – | Website URL to render, including the protocol, e.g. 'https://example.com'. Either url or custom_html is required. |
| user_agent | string | – | Custom User-Agent string, e.g. a mobile Safari UA to get the mobile site. |
| video | boolean | – | Record the visible viewport for 'duration' seconds without scrolling. Default false. |
| wait_for_event | string | – | Page lifecycle event to wait for before capture. 'load' (default) waits for all resources; 'domcontentloaded' is faster but may miss images; 'networkidle' waits until no network requests for 500ms —… |
| width | integer | – | Browser viewport width in pixels (max 7680). Default 1680. Use ~390 to emulate a phone, ~768 for a tablet. |
No output schema declared.
No examples provided.
scrape_page Scrape page content as Markdown, text, or HTML ~1,220
Loads a page in a real browser (JavaScript executed) and extracts its content: clean Markdown (best for reading and summarizing), plain text, the fully rendered HTML, and/or every image URL on the page. Extracted files are fetched and returned inline, truncated to max_content_chars. Works on JavaScript-heavy sites that plain HTTP fetches can't read. A screenshot is captured as part of the same request and counts as one credit.
| Name | Type | Req | Description |
|---|---|---|---|
| accept_languages | string | – | Accept-Language header for localized content, e.g. 'fr-FR,fr;q=0.9'. Default 'en-US,en;q=0.8'. |
| adjust_top | integer | – | Scroll the viewport down this many pixels before capture. Default 0. Not supported for PDFs. |
| block | array | – | Resources to block while rendering. For a clean capture use ['ads', 'cookie_banners', 'chat_widgets']. 'tracking' blocks analytics. 'javascript', 'stylesheets', 'xhr', and 'fetch' can break pages or… |
| block_specific_requests | string | – | Specific request URLs or patterns to block, separated by commas, spaces, or newlines, e.g. 'https://example.com/api/data, https://ads-domain.com'. |
| blur_selector | string | – | CSS selector(s) of elements to blur, comma-separated — for redacting emails, account numbers, or other sensitive data. |
| click_recursion | integer | – | How many times to click selector_to_click in sequence. Requires selector_to_click. Default 0. |
| cookies | string | – | Cookies to set before loading, as 'name=value; other=value;'. Use for pages behind a login. |
| css | string | – | CSS injected before capture, e.g. '.header { display: none; }'. |
| css_url | string | – | URL of an external stylesheet to inject before capture. |
| custom_html | string | – | Raw HTML to render instead of loading a URL. Takes precedence over url. Inline CSS and JavaScript in the HTML are applied. Useful for pages that are not publicly reachable. |
| dark_mode | boolean | – | Render with the dark color scheme (for sites that support it). Default false. |
| delay | integer | – | Extra wait in milliseconds after the page loads, before capture. Default 0. Use 1000-5000 for animations, charts, or late-loading content. |
| enable_incognito | boolean | – | Render in an isolated incognito session with no persisted cookies or storage. Default false. |
| extract | array | – | What to extract. Default ['markdown']. Options: markdown, text, html, image_urls. |
| grayscale | integer | – | Desaturate the output, 0 (full color, default) to 100 (fully grayscale). |
| headers | string | – | Extra HTTP headers as 'Name: value;' pairs separated by semicolons, e.g. 'Authorization: Bearer abc; X-Test: 1;'. |
| height | integer | – | Browser viewport height in pixels (max 4320). Default 876. |
| include_content | boolean | – | Fetch the extracted files and return their contents inline. Default true. false returns only the file URLs. |
| js | string | – | JavaScript executed in the page before capture, e.g. "document.querySelector('.popup').remove();". |
| js_url | string | – | URL of an external JavaScript file to execute before capture. |
| latitude | number | – | Latitude reported by the browser Geolocation API. |
| lazy_load | boolean | – | Scroll through the whole page first so lazy-loaded images and sections render. Default false. |
| longitude | number | – | Longitude reported by the browser Geolocation API. |
| max_content_chars | integer | – | Truncate each extracted file to this many characters. Default 50000. |
| proxy | string | – | Proxy to route the request through: 'address:port' or 'username:password@address:port' (an http:// prefix is accepted). Useful for geo-specific content or CAPTCHA-prone sites. |
| remove_selector | string | – | CSS selector(s) of elements to remove from the page before capture, comma-separated, e.g. '.ad-banner, #sidebar'. Non-matching selectors are ignored. |
| scroll_delay | integer | – | Milliseconds to wait between scroll steps when lazy_load is true. Default 500. High values on long pages can hit the timeout. |
| scroll_to_element | string | – | CSS selector of an element to scroll into view before a viewport capture. |
| selector_to_click | string | – | CSS selector of an element to click before capture, e.g. to open a tab, dropdown, or accordion. |
| template_id | string | – | ID of a saved cookie template from the ScreenshotAPI dashboard to apply before navigation. |
| timeout | integer | – | Maximum milliseconds the API waits for the page to load before aborting. Default 100000. |
| timezone | string | – | IANA timezone to emulate, e.g. 'America/New_York', 'Asia/Karachi'. Default is the server timezone. |
| url | string | – | Website URL to render, including the protocol, e.g. 'https://example.com'. Either url or custom_html is required. |
| user_agent | string | – | Custom User-Agent string, e.g. a mobile Safari UA to get the mobile site. |
| wait_for_event | string | – | Page lifecycle event to wait for before capture. 'load' (default) waits for all resources; 'domcontentloaded' is faster but may miss images; 'networkidle' waits until no network requests for 500ms —… |
| width | integer | – | Browser viewport width in pixels (max 7680). Default 1680. Use ~390 to emulate a phone, ~768 for a tablet. |
No output schema declared.
No examples provided.
take_screenshot Take a website screenshot ~1,776
Captures a screenshot of a web page (or of raw HTML) in a real browser and returns the hosted image URL. By default the image is also returned inline so you can see it — except for full_page captures, which are often too tall to view; set include_image=true to force it. Supports viewport or full-page capture, a single element via 'selector', a pixel region via 'clip', retina output, ad/cookie-banner blocking, CSS/JS injection, clicking elements first, dark mode, custom headers/cookies, proxies, geolocation, and timezone. Each call uses one screenshot credit unless a cached capture is served.
| Name | Type | Req | Description |
|---|---|---|---|
| accept_languages | string | – | Accept-Language header for localized content, e.g. 'fr-FR,fr;q=0.9'. Default 'en-US,en;q=0.8'. |
| adjust_top | integer | – | Scroll the viewport down this many pixels before capture. Default 0. Not supported for PDFs. |
| block | array | – | Resources to block while rendering. For a clean capture use ['ads', 'cookie_banners', 'chat_widgets']. 'tracking' blocks analytics. 'javascript', 'stylesheets', 'xhr', and 'fetch' can break pages or… |
| block_specific_requests | string | – | Specific request URLs or patterns to block, separated by commas, spaces, or newlines, e.g. 'https://example.com/api/data, https://ads-domain.com'. |
| blur_selector | string | – | CSS selector(s) of elements to blur, comma-separated — for redacting emails, account numbers, or other sensitive data. |
| bucket_name | string | – | Bucket to use with byob when several are configured under the same service. |
| byob | boolean | – | Save the output to your own bucket configured under Storage Integrations in the dashboard (Bring Your Own Bucket). Default false. |
| click_recursion | integer | – | How many times to click selector_to_click in sequence. Requires selector_to_click. Default 0. |
| clip | object | – | Capture only this rectangle of the page. |
| cookies | string | – | Cookies to set before loading, as 'name=value; other=value;'. Use for pages behind a login. |
| css | string | – | CSS injected before capture, e.g. '.header { display: none; }'. |
| css_url | string | – | URL of an external stylesheet to inject before capture. |
| custom_html | string | – | Raw HTML to render instead of loading a URL. Takes precedence over url. Inline CSS and JavaScript in the HTML are applied. Useful for pages that are not publicly reachable. |
| dark_mode | boolean | – | Render with the dark color scheme (for sites that support it). Default false. |
| delay | integer | – | Extra wait in milliseconds after the page loads, before capture. Default 0. Use 1000-5000 for animations, charts, or late-loading content. |
| enable_caching | boolean | – | Store this capture in the cache for reuse. Cached captures served later (with fresh=false) do not consume credits. Default false. |
| enable_incognito | boolean | – | Render in an isolated incognito session with no persisted cookies or storage. Default false. |
| file_type | string | – | Image format. Default png. jpg is smallest (see image_quality); webp balances size and quality. For PDF use generate_pdf. |
| fresh | boolean | – | true (default) always renders a new capture; false returns a cached capture when one exists from a request with enable_caching=true and identical parameters. |
| full_page | boolean | – | Capture the entire scrollable page instead of just the viewport. Default false. Combine with lazy_load for pages with lazy images. |
| grayscale | integer | – | Desaturate the output, 0 (full color, default) to 100 (fully grayscale). |
| headers | string | – | Extra HTTP headers as 'Name: value;' pairs separated by semicolons, e.g. 'Authorization: Bearer abc; X-Test: 1;'. |
| height | integer | – | Browser viewport height in pixels (max 4320). Default 876. |
| image_quality | integer | – | JPEG compression quality 0-100 (jpg only). Default 80. |
| include_image | boolean | – | Return the image inline in the tool result so you can see it. Default true, or false when full_page is true. Images above SCREENSHOTAPI_MAX_INLINE_IMAGE_BYTES (default 3500000 bytes) are returned as… |
| js | string | – | JavaScript executed in the page before capture, e.g. "document.querySelector('.popup').remove();". |
| js_url | string | – | URL of an external JavaScript file to execute before capture. |
| latitude | number | – | Latitude reported by the browser Geolocation API. |
| lazy_load | boolean | – | Scroll through the whole page first so lazy-loaded images and sections render. Default false. |
| longitude | number | – | Longitude reported by the browser Geolocation API. |
| omit_background | boolean | – | Make plain white/solid page backgrounds transparent (png only). Default false. |
| proxy | string | – | Proxy to route the request through: 'address:port' or 'username:password@address:port' (an http:// prefix is accepted). Useful for geo-specific content or CAPTCHA-prone sites. |
| remove_selector | string | – | CSS selector(s) of elements to remove from the page before capture, comma-separated, e.g. '.ad-banner, #sidebar'. Non-matching selectors are ignored. |
| result_file_name | string | – | Custom file name for the stored output. Non-unique names can overwrite earlier files. |
| retina | boolean | – | Render at 2x pixel density for a sharper, larger image. Default false. |
| save_path | string | – | Optional local path to also save the file to, e.g. './shots/home.png'. A directory path (ending in '/' or an existing directory) keeps the remote file name. Relative paths resolve against the MCP ser… |
| scroll_delay | integer | – | Milliseconds to wait between scroll steps when lazy_load is true. Default 500. High values on long pages can hit the timeout. |
| scroll_to_element | string | – | CSS selector of an element to scroll into view before a viewport capture. |
| selector | string | – | CSS selector of a single element to capture instead of the viewport, e.g. '#pricing' or '.product-card'. |
| selector_to_click | string | – | CSS selector of an element to click before capture, e.g. to open a tab, dropdown, or accordion. |
| sizes | array | – | Capture the page at several viewport sizes in one request, e.g. [{width:1920,height:1080},{width:768,height:1024},{width:390,height:844}]. Overrides width/height. Returns one hosted image per size; i… |
| storage_service | string | – | Storage service to use with byob when several are configured: 'aws', 'wasabi', or 'google_cloud'. |
| template_id | string | – | ID of a saved cookie template from the ScreenshotAPI dashboard to apply before navigation. |
| thumbnail_width | integer | – | Resize the output to this width in pixels, keeping the aspect ratio. Handy for previews and to keep inline images small. |
| timeout | integer | – | Maximum milliseconds the API waits for the page to load before aborting. Default 100000. |
| timezone | string | – | IANA timezone to emulate, e.g. 'America/New_York', 'Asia/Karachi'. Default is the server timezone. |
| ttl | integer | – | Cache lifetime in seconds when enable_caching is true. Default 2592000 (30 days). |
| url | string | – | Website URL to render, including the protocol, e.g. 'https://example.com'. Either url or custom_html is required. |
| user_agent | string | – | Custom User-Agent string, e.g. a mobile Safari UA to get the mobile site. |
| wait_for_event | string | – | Page lifecycle event to wait for before capture. 'load' (default) waits for all resources; 'domcontentloaded' is faster but may miss images; 'networkidle' waits until no network requests for 500ms —… |
| width | integer | – | Browser viewport width in pixels (max 7680). Default 1680. Use ~390 to emulate a phone, ~768 for a tablet. |
No output schema declared.
No examples provided.
How do I install the ScreenshotAPI MCP server?
ScreenshotAPI runs locally as an npm package, launched with npx -y @screenshotapinet/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @screenshotapinet/mcp
claude mcp add screenshot-api-screenshot-mcp -- npx -y @screenshotapinet/mcp
What is the ScreenshotAPI MCP server?
ScreenshotAPI is an MCP server listed in the public MCP registry as io.github.Screenshot-API/screenshot-mcp. Website screenshots, URL/HTML to PDF, scrolling videos, and web scraping via ScreenshotAPI. This page covers its npm package (@screenshotapinet/mcp).
Is the ScreenshotAPI MCP server safe to use?
ScreenshotAPI scores 61 out of 100 on VerifyMCP. We recorded 1 known advisory against it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the ScreenshotAPI MCP server expose?
ScreenshotAPI exposes 8 tools: take_screenshot, generate_pdf, scrape_page, record_scrolling_video, bulk_screenshots, and 3 more. Their descriptions and schemas cost roughly 6,361 tokens of context every time the server is loaded.
Is the ScreenshotAPI MCP server still maintained?
ScreenshotAPI is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the ScreenshotAPI MCP server under?
ScreenshotAPI declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.