Skip to main content
Glama

Take a website screenshot

take_screenshot

Capture a web page or raw HTML in a real browser and return a hosted image URL, with options for viewport, full-page, or element captures.

Instructions

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.

Input Schema

NameRequiredDescriptionDefault
jsNoJavaScript executed in the page before capture, e.g. "document.querySelector('.popup').remove();".
cssNoCSS injected before capture, e.g. '.header { display: none; }'.
ttlNoCache lifetime in seconds when enable_caching is true. Default 2592000 (30 days).
urlNoWebsite URL to render, including the protocol, e.g. 'https://example.com'. Either url or custom_html is required.
byobNoSave the output to your own bucket configured under Storage Integrations in the dashboard (Bring Your Own Bucket). Default false.
clipNoCapture only this rectangle of the page.
blockNoResources 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 hide content — use only when needed. Others: images, media (audio/video), fonts, text_tracks, event_source, websockets, manifest.
delayNoExtra wait in milliseconds after the page loads, before capture. Default 0. Use 1000-5000 for animations, charts, or late-loading content.
freshNotrue (default) always renders a new capture; false returns a cached capture when one exists from a request with enable_caching=true and identical parameters.
proxyNoProxy 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.
sizesNoCapture 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; images are not shown inline in this mode.
widthNoBrowser viewport width in pixels (max 7680). Default 1680. Use ~390 to emulate a phone, ~768 for a tablet.
heightNoBrowser viewport height in pixels (max 4320). Default 876.
js_urlNoURL of an external JavaScript file to execute before capture.
retinaNoRender at 2x pixel density for a sharper, larger image. Default false.
cookiesNoCookies to set before loading, as 'name=value; other=value;'. Use for pages behind a login.
css_urlNoURL of an external stylesheet to inject before capture.
headersNoExtra HTTP headers as 'Name: value;' pairs separated by semicolons, e.g. 'Authorization: Bearer abc; X-Test: 1;'.
timeoutNoMaximum milliseconds the API waits for the page to load before aborting. Default 100000.
latitudeNoLatitude reported by the browser Geolocation API.
selectorNoCSS selector of a single element to capture instead of the viewport, e.g. '#pricing' or '.product-card'.
timezoneNoIANA timezone to emulate, e.g. 'America/New_York', 'Asia/Karachi'. Default is the server timezone.
dark_modeNoRender with the dark color scheme (for sites that support it). Default false.
file_typeNoImage format. Default png. jpg is smallest (see image_quality); webp balances size and quality. For PDF use generate_pdf.
full_pageNoCapture the entire scrollable page instead of just the viewport. Default false. Combine with lazy_load for pages with lazy images.
grayscaleNoDesaturate the output, 0 (full color, default) to 100 (fully grayscale).
lazy_loadNoScroll through the whole page first so lazy-loaded images and sections render. Default false.
longitudeNoLongitude reported by the browser Geolocation API.
save_pathNoOptional 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 server's working directory.
adjust_topNoScroll the viewport down this many pixels before capture. Default 0. Not supported for PDFs.
user_agentNoCustom User-Agent string, e.g. a mobile Safari UA to get the mobile site.
bucket_nameNoBucket to use with byob when several are configured under the same service.
custom_htmlNoRaw 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.
template_idNoID of a saved cookie template from the ScreenshotAPI dashboard to apply before navigation.
scroll_delayNoMilliseconds to wait between scroll steps when lazy_load is true. Default 500. High values on long pages can hit the timeout.
blur_selectorNoCSS selector(s) of elements to blur, comma-separated — for redacting emails, account numbers, or other sensitive data.
image_qualityNoJPEG compression quality 0-100 (jpg only). Default 80.
include_imageNoReturn 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 a URL only.
enable_cachingNoStore this capture in the cache for reuse. Cached captures served later (with fresh=false) do not consume credits. Default false.
wait_for_eventNoPage 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 — best for SPAs and dashboards.
click_recursionNoHow many times to click selector_to_click in sequence. Requires selector_to_click. Default 0.
omit_backgroundNoMake plain white/solid page backgrounds transparent (png only). Default false.
remove_selectorNoCSS selector(s) of elements to remove from the page before capture, comma-separated, e.g. '.ad-banner, #sidebar'. Non-matching selectors are ignored.
storage_serviceNoStorage service to use with byob when several are configured: 'aws', 'wasabi', or 'google_cloud'.
thumbnail_widthNoResize the output to this width in pixels, keeping the aspect ratio. Handy for previews and to keep inline images small.
accept_languagesNoAccept-Language header for localized content, e.g. 'fr-FR,fr;q=0.9'. Default 'en-US,en;q=0.8'.
enable_incognitoNoRender in an isolated incognito session with no persisted cookies or storage. Default false.
result_file_nameNoCustom file name for the stored output. Non-unique names can overwrite earlier files.
scroll_to_elementNoCSS selector of an element to scroll into view before a viewport capture.
selector_to_clickNoCSS selector of an element to click before capture, e.g. to open a tab, dropdown, or accordion.
block_specific_requestsNoSpecific request URLs or patterns to block, separated by commas, spaces, or newlines, e.g. 'https://example.com/api/data, https://ads-domain.com'.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.0.2

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that each call consumes one screenshot credit, that cached captures are free, and that a URL is always returned even when inline rendering is suppressed. It omits auth/prerequisite needs and timeout/error behavior, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and return value; the long capability clause is dense but justified for a 51-parameter tool. The middle sentence is a borderline run-on list, which costs a point but costs little comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, but the description states what is returned (hosted URL, conditional inline image) and the cost model, covering the essentials for a 51-param, zero-required-parameter tool. Multi-size output (sizes array, one image per size, no inline) is only documented in the schema, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 51 parameters including enum values and examples; baseline is 3. The description's capability enumeration (selector, clip, retina, blocking, injection, cookies, proxy, geolocation) helps an agent know what surface exists without scanning 51 fields, but adds no syntax or defaults beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ("Captures a screenshot of a web page (or of raw HTML) in a real browser") plus what it returns ("hosted image URL"). The raw-HTML variant and the capture modes make it clearly distinct from scrape_page, generate_pdf, and record_scrolling_video.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the default inline-render behavior and the full_page exception with the include_image=true override, which is exactly the kind of when-to-use nuance an agent needs. It stops short of explicitly excluding siblings (e.g., 'for PDFs use generate_pdf' lives only in the schema), so no explicit alternative routing in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.