SnapRender
Server Details
SnapRender gives AI agents eyes on the web through a hosted MCP server. Send a public URL and get the page back as an image, a PDF or clean markdown, with no browser to run or maintain.
Capture the viewport or the full page as PNG, JPEG, WebP or PDF, at desktop size or with a phone, tablet or laptop preset, in light or dark mode. Ads and cookie banners are removed by default, and you can hide elements or click one before the capture. extract_content reads the same page as markdown, text, article, links or metadata, so an agent can see a page and read it in one session.
Made for monitoring and client work: batch up to 50 URLs in one job, check the cache for free before spending a capture, share signed links that render without an API key, and get webhooks when a batch finishes or a scheduled capture spots a change. Track competitors' pricing and landing pages, or send clients current screenshots of their sites.
Connect with OAuth (Google, GitHub or email) or an API key. Works with Claude, ChatGPT, Cursor, VS Code and any MCP client.
Free plan: 200 screenshots a month, no credit card. Paid plans from $9 a month for 2,000 up to $199 a month for 200,000.
Home: https://snap-render.com
- Status
- Healthy
- Uptime
- 70.8% over 60 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- User0856/snaprender-integrations
- GitHub Stars
- 3
- Server Listing
- snaprender-mcp
TDQS
Scored across 11 tools
Each tool targets a distinct action or resource: single vs batch capture, content extraction, cache check, usage, webhook management, and signed URL creation. Overlaps are minimal and descriptions clearly differentiate similar-sounding tools like take_screenshot and extract_content.
All tool names use snake_case with a verb-first pattern (e.g., take_screenshot, create_webhook, get_usage, list_webhooks). Minor multi-word nouns like check_screenshot_cache and sign_screenshot_url remain consistent and predictable.
With 11 tools, the set is well-scoped for a screenshot rendering API. Each tool has a clear purpose, and there are no redundant or trivial additions.
Core workflows—single/batch capture, content extraction, cache checking, usage, webhooks, and signed URLs—are covered. However, webhook events reference scheduled captures and change detection without tools to manage those schedules, and batch jobs lack list/cancel operations, leaving minor gaps.
Available Tools
11 toolsbatch_screenshotsAInspect
Capture up to 50 URLs with the same options in one background job. Returns a job ID at once; call get_batch_status every 2-5 seconds until the job is completed. Each URL uses one capture, reserved when the job starts; URLs that fail are refunded. Results are download links valid for 24 hours (images are not returned inline).
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | URLs to capture (1-50) | |
| delay | No | Extra milliseconds to wait after the page loads, 0-10000 (default: 0) | |
| width | No | Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set. | |
| device | No | Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900) | |
| format | No | Output format: png (default), jpeg, webp, or pdf | |
| height | No | Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set. | |
| quality | No | JPEG and WebP quality, 1-100 (default: 90). Ignored for png. | |
| block_ads | No | Block ads and trackers (default: true) | |
| dark_mode | No | Ask the page for its dark color scheme (default: false) | |
| full_page | No | Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets). | |
| user_agent | No | Custom User-Agent string | |
| click_selector | No | CSS selector to click before the capture | |
| hide_selectors | No | Comma-separated CSS selectors to hide before the capture | |
| block_cookie_banners | No | Remove cookie consent banners (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true) by disclosing the async job model, immediate job-ID return, polling cadence, per-URL capture reservation at job start, refunds for failed URLs, and 24-hour link expiry — all operationally critical and not derivable from structured fields.
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?
Four tight sentences, front-loaded with purpose and capped size, then the polling protocol, then the billing/refund rule, then the return format. Nothing is redundant and each sentence carries distinct operational information.
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?
With no output schema, the description compensates by explaining what is returned (a job ID at once, no inline images) and how to retrieve results (get_batch_status plus 24-hour download links). Nothing needed to invoke and follow through 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?
Schema description coverage is 100%, so ranges, defaults, enum values, and interactions (device overrides width/height; quality ignored for png) are already documented in the schema. The description only adds the 'same options applied to every URL' batching semantic, so the baseline 3 is correct.
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 (Capture) and resource (URLs), plus the batching scope ('up to 50 URLs with the same options in one background job'), which cleanly separates it from the single-URL 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?
Prescribes the follow-up workflow explicitly: call get_batch_status every 2-5 seconds until the job is completed, and notes results come back as download links rather than inline images. It never explicitly states when to prefer take_screenshot instead of batching, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_screenshot_cacheARead-onlyInspect
Check whether take_screenshot would return a cached copy (free) for this URL and these options, without capturing anything. Pass the same options you would give take_screenshot. Free to call. When cached, the result says when the copy was captured and when it expires.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to check (must start with http:// or https://) | |
| delay | No | Extra milliseconds to wait after the page loads, 0-10000 (default: 0) | |
| width | No | Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set. | |
| device | No | Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900) | |
| format | No | Output format: png (default), jpeg, webp, or pdf | |
| height | No | Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set. | |
| quality | No | JPEG and WebP quality, 1-100 (default: 90). Ignored for png. | |
| block_ads | No | Block ads and trackers (default: true) | |
| dark_mode | No | Ask the page for its dark color scheme (default: false) | |
| full_page | No | Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets). | |
| user_agent | No | Custom User-Agent string | |
| click_selector | No | CSS selector to click before the capture | |
| hide_selectors | No | Comma-separated CSS selectors to hide before the capture | |
| block_cookie_banners | No | Remove cookie consent banners (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds value beyond that: it confirms nothing is captured, that the call is free, and that a cached hit reports capture time and expiry, which tells the agent what a positive result means.
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?
Four short sentences, front-loaded with the core purpose and no filler; the standalone 'Free to call.' fragment still earns its place by stating a cost fact the agent needs. Slightly clipped phrasing keeps it just short of ideal.
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 14-parameter read-only probe with no output schema, the description covers what the tool does, what to pass, and what a cached result contains. It leaves the non-cached result shape and any TTL/prefetch guidance unstated, a minor gap given the rich schema.
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% across 14 parameters, so the schema carries the full parameter burden and the baseline is 3. The instruction to mirror take_screenshot's options adds useful framing but no new per-parameter semantics.
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 and resource ('Check whether take_screenshot would return a cached copy') and explicitly names the sibling it mirrors, so an agent can distinguish it from take_screenshot without opening either schema. The 'without capturing anything' clause pins down the side-effect-free nature of the operation.
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?
Clearly implies the use case: call this before take_screenshot to find out if a capture would be free, and it instructs the caller to pass the same options. It does not explicitly state an exclusion such as 'do not use this to actually retrieve the image', but the context is unambiguous for any reasonable agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_webhookAInspect
Create a webhook subscription for event notifications. Events: screenshot.completed (batch job done), quota.warning (80% used), quota.exceeded (100% used), capture.completed and change.detected (scheduled captures). Max 5 webhooks per account. Payloads are signed with HMAC-SHA256. Save the returned secret to verify signatures.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Webhook endpoint URL. Must be a public HTTPS URL. | |
| events | Yes | Events to subscribe to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (not read-only, not destructive, open-world), while the description adds genuinely new behavior: a hard cap of 5 webhooks per account, HMAC-SHA256 payload signing, and the fact that a secret is returned and must be stored to verify signatures. It stops short of describing failure behavior when the cap is hit or auth requirements, so it is strong but not exhaustive.
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?
Five short sentences, each load-bearing: purpose first, then event semantics, then the quota cap, signing method, and the secret-handling instruction. No filler and no repetition of schema content.
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?
With no output schema, the description correctly compensates by telling the agent the response contains a secret that must be saved. Combined with the quota cap, signing details, and full parameter coverage, the only gap is error/permission behavior when the 5-webhook limit is reached.
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 3 baseline applies, but the description enriches the events enum with operational meaning (quota.warning = 80% used, quota.exceeded = 100% used, screenshot.completed = batch job done), which the bare enum values do not convey. The url parameter gains nothing beyond the schema's HTTPS requirement.
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 first sentence states a specific verb and resource ('Create a webhook subscription for event notifications'), which cleanly separates it from delete_webhook, list_webhooks and test_webhook without needing to name them. An agent can pick this tool from the sibling list on the verb alone.
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 the event catalog and the 'Max 5 webhooks per account' constraint, so an agent can infer when subscriptions make sense. However, there is no explicit when-to-use versus test_webhook or list_webhooks, and no stated precondition (e.g. verifying the endpoint first).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_webhookADestructiveInspect
Delete one of your webhook subscriptions by ID so it stops receiving events. This cannot be undone. Webhooks cannot be edited: to change the URL or events, delete the webhook and add a new one with create_webhook. Get the ID from list_webhooks. Returns a confirmation, or an error when no webhook has that ID.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_id | Yes | The webhook ID to delete (from list_webhooks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description still adds value by stating the operation is irreversible, that webhooks are immutable, and that a missing ID produces an error rather than a silent no-op.
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?
Four tight sentences, front-loaded with the action and the irreversibility warning, then the alternative path and the ID source. No filler.
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 one-parameter destructive tool with no output schema, the description covers purpose, irreversibility, the alternative workflow, ID provenance, and the return/error behavior. Nothing material 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?
Schema coverage is 100% and the single parameter already documents itself, including its '(from list_webhooks)' provenance. The description only repeats that the ID comes from list_webhooks, adding no syntax or format detail beyond the 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 and resource ('Delete one of your webhook subscriptions by ID') plus the effect ('stops receiving events'). This clearly separates it from create_webhook and list_webhooks among the siblings.
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?
Explicitly states the alternative workflow (webhooks cannot be edited; delete and use create_webhook instead) and where to obtain the ID (list_webhooks). This is exactly the when/when-not/alternatives routing an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_contentARead-onlyInspect
Read a public web page as clean markdown (or text, html, article, links, metadata), rendered in the same real browser. Use it after take_screenshot when you need the words, or on its own for research. Uses one capture; failed extractions are free. Returns up to max_length characters (default: 100,000); pass selector, for example main or article, to keep it short. Public URLs only.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to extract content from (must start with http:// or https://) | |
| type | No | What to return: markdown (default, readable content), text (plain text), html (raw HTML), article (title, author, excerpt and content), links (every link on the page), metadata (title, description, Open Graph and Twitter tags) | |
| delay | No | Extra milliseconds to wait after the page loads, 0-10000 (default: 0) | |
| selector | No | CSS selector to read only part of the page, for example main or article | |
| block_ads | No | Block ads and trackers (default: true) | |
| max_length | No | Maximum characters to return, 1-500000 (default: 100000) | |
| block_cookie_banners | No | Remove cookie consent banners (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely non-redundant behavior: 'Uses one capture; failed extractions are free' (billing/retry semantics), the public-URL-only access limit, and the truncation behavior tied to max_length. It omits details like rate limits or JS-render timeouts, so not a full 5.
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?
Five compact sentences, front-loaded with purpose and format list before usage and constraints. The parenthetical format enumeration is dense but each clause carries information; only slight compression could be gained.
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?
With no output schema, the description carries the return-value burden, and it does explain that content is returned as markdown/text/html/etc. up to max_length characters. Combined with full schema coverage and strong annotations, an agent has what it needs; the only gap is richer detail on failure modes.
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 every parameter is already documented in the schema, including the enum values, defaults and ranges. The description restates default max_length and a selector example but adds no format or syntax detail beyond the schema — the baseline 3 applies.
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 (extract/read) and resource (a public web page) with the output formats enumerated, and it explicitly contrasts itself with take_screenshot ('rendered in the same real browser'). An agent can distinguish this from all eleven siblings without opening a schema.
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?
It names the sibling tool (take_screenshot) and the conditions that select each: 'after take_screenshot when you need the words, or on its own for research.' It also states the eligibility constraint ('Public URLs only'), leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_batch_statusARead-onlyInspect
Get the status of a batch job from batch_screenshots. Poll this until status is 'completed' or 'failed' (wait 2-5 seconds between polls). Completed items include download links valid for 24 hours. Free to call.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The batch job ID returned by batch_screenshots |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds real behavioral value beyond them: polling cadence, the terminal status values, 24-hour download-link validity, and that calls are free. It stops short of describing pagination or the shape of non-terminal responses.
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?
Three tight sentences with no filler; the core action is front-loaded and each following sentence carries distinct operational information (polling, link expiry, cost).
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?
With no output schema, the description usefully notes that completed items carry 24-hour download links, partially covering return expectations. It leaves out the full status value set and non-terminal response contents, so it is not fully exhaustive for a polling tool.
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?
Only one parameter (job_id) with 100% schema description coverage, so the schema fully documents it and the description adds no syntax or format detail. Baseline 3 applies since the schema does all the work.
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 (get) and resource (status of a batch job) and explicitly ties it to batch_screenshots as the originating job creator, which cleanly distinguishes it from the sibling that starts the job.
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?
Gives concrete operational guidance: poll until status is 'completed' or 'failed' with a 2-5 second interval. It clearly implies the when-to-use context (after launching a job via batch_screenshots) but does not explicitly state when not to call it or name an alternative status mechanism.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageARead-onlyInspect
Read how many captures the account has used and has left. Returns the plan, screenshots_used, screenshots_limit, screenshots_remaining (the monthly allowance left plus extra_credits), the period and the reset date (resets_at, UTC). For an email sign-up that is not verified yet it also returns why the limit is 25 (limit_reason) and where to verify (verify_at). Counts are live and the call is free. Use it before a large batch_screenshots job, or when a capture says the month is used up; pass month to read an earlier month.
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Month to query in YYYY-MM format (default: current month) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/destructiveHint, but the description adds genuinely non-structured behavior: counts are live, the call is free (no quota cost), resets_at is UTC, and unverified email sign-ups get limit_reason/verify_at. It stops short of describing rate limits or caching, but the added context is substantive.
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?
Single dense paragraph that front-loads what is read and what is returned before moving to usage guidance. Every sentence carries information, though the return-field enumeration is long and could be tightened.
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?
No output schema exists, so the description carries the return-value burden and does so fully, listing every field, its meaning (screenshots_remaining includes extra_credits), and the UTC convention. Nothing needed to call this tool 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?
Schema coverage is 100% and already documents the YYYY-MM format and current-month default, so baseline is 3; the description adds the semantic purpose ('pass month to read an earlier month'), telling the agent why it would override the default.
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+resource ('Read how many captures the account has used and has left') and enumerates the returned fields (plan, screenshots_used, screenshots_limit, screenshots_remaining, period, resets_at), distinguishing it from every sibling, none of which read account-level quota.
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?
Gives explicit when-to-use conditions ('before a large batch_screenshots job, or when a capture says the month is used up') and names the sibling tool it pairs with, plus the month parameter's use case for historical reads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_webhooksARead-onlyInspect
List all webhook subscriptions on your account. Returns webhook IDs, URLs, subscribed events, and creation dates.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. Description adds that it returns specific fields, which is helpful but not deep behavioral detail like pagination. No contradiction.
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?
Single sentence, front-loaded with purpose, no unnecessary words.
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 simple list tool with no parameters, the description covers purpose and output adequately. No missing context.
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?
No parameters in schema, so description doesn't need to add param details. Baseline 4 for zero-param tools.
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?
Clearly states the action (list), resource (webhook subscriptions), and return fields. Distinguishes from sibling tools like create_webhook and delete_webhook.
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?
No explicit guidance on when to use or alternatives. Usage is implied as listing subscriptions, but no when-not-to-use or comparison with other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sign_screenshot_urlARead-onlyInspect
Create a signed link that renders a screenshot when opened, with no API key needed: for emails, documents or sharing with others. Creating the link is free. Opening it renders the page and uses one capture from this account (a recent cached copy is served free). Links expire after expires_in seconds (default: 1 day).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to capture (must start with http:// or https://) | |
| delay | No | Extra milliseconds to wait after the page loads, 0-10000 (default: 0) | |
| width | No | Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set. | |
| device | No | Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900) | |
| format | No | Output format: png (default), jpeg, webp, or pdf | |
| height | No | Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set. | |
| quality | No | JPEG and WebP quality, 1-100 (default: 90). Ignored for png. | |
| block_ads | No | Block ads and trackers (default: true) | |
| dark_mode | No | Ask the page for its dark color scheme (default: false) | |
| full_page | No | Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets). | |
| expires_in | No | Link validity in seconds, 60-2592000 (default: 86400 = 1 day) | |
| user_agent | No | Custom User-Agent string | |
| click_selector | No | CSS selector to click before the capture | |
| hide_selectors | No | Comma-separated CSS selectors to hide before the capture | |
| block_cookie_banners | No | Remove cookie consent banners (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish it's a read-only, non-destructive operation, so the bar is lower. The description still adds valuable billing and caching context: 'Creating the link is free. Opening it renders the page and uses one capture from this account (a recent cached copy is served free).' This tells the agent that opening the link consumes credits, not just creating it. Missing explicit mention of auth requirements beyond 'no API key needed.'
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?
Three sentences, front-loaded with what the link is and does. Efficient, but the billing/caching detail could be slightly tighter.
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 tool with a rich 15-param schema (100% coverage), the description covers the key non-schema concerns: sharing purpose, cost model, and link expiration. No output schema exists, but for a link-creation tool the output (the signed URL) is self-evident. Adequate.
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 coverage is 100%, so the input schema already documents all 15 parameters thoroughly. The description only adds the expires_in default behavior ('default: 1 day'), which the schema also states. Baseline 3 is correct when schema does the heavy lifting.
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+resource ('Create a signed link that renders a screenshot') and distinguishes from siblings by noting it's a shareable link requiring no API key, unlike take_screenshot which presumably returns an image directly.
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?
Clear context for when to use: 'for emails, documents or sharing with others.' Does not explicitly exclude use cases or name alternatives, but the sharing-with-others framing is sufficiently differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotARead-onlyInspect
See a public web page the way a person does. Renders the URL in a real browser with ads and cookie banners removed and returns the image inline (PNG unless format is set; pdf comes back as base64 text), followed by a line with the captures left this month. Use device for a phone or tablet view and full_page for the whole page. To read the words, use extract_content. Most pages take a few seconds; a page still loading after about 30 seconds is captured as it stands. Uses one capture. Pass fresh: false to accept a free copy of the same URL and options captured in the last 24 hours. Public URLs only: localhost and private network addresses are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public page to capture: a full URL starting with https:// or http:// | |
| delay | No | Extra milliseconds to wait after the page loads, 0-10000 (default: 0) | |
| fresh | No | Default true: render the page now (uses one capture). false: a copy of the same URL and options captured in the last 24 hours may be returned for free; the result then says when it was captured. | |
| width | No | Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set. | |
| device | No | Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900) | |
| format | No | Output format: png (default), jpeg, webp, or pdf | |
| height | No | Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set. | |
| quality | No | JPEG and WebP quality, 1-100 (default: 90). Ignored for png. | |
| block_ads | No | Block ads and trackers (default: true) | |
| dark_mode | No | Ask the page for its dark color scheme (default: false) | |
| full_page | No | Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets). | |
| user_agent | No | Custom User-Agent string. A capture with a custom user agent is always rendered new. | |
| click_selector | No | CSS selector to click before the capture | |
| hide_selectors | No | Comma-separated CSS selectors to hide before the capture | |
| block_cookie_banners | No | Remove cookie consent banners (default: true). false always renders a new capture. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnlyHint, openWorldHint, destructiveHint), and the description adds substantial context beyond them: credit consumption ('Uses one capture', 'captures left this month'), caching semantics for fresh:false within 24 hours, a ~30 second loading timeout, and inline base64 output for pdf.
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?
Dense but front-loaded: the core action and return format come first, then option hints, then the cost/constraint details. Every sentence carries information, though it is longer than strictly necessary.
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 15-parameter tool with no output schema, the description covers return format (inline image, pdf as base64, trailing capture-count line), timeout behavior, cost, caching, and access restrictions. An agent has what it needs to invoke successfully.
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 coverage is 100%, so the baseline is 3, but the description adds real meaning: device for phone/tablet views, full_page for the whole page, and format-specific output behavior (PNG inline vs pdf as base64). It does not restate ranges, but it clarifies intent for the higher-level options.
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 and resource ('Renders the URL in a real browser') and describes the output ('returns the image inline'). It explicitly distinguishes itself from the sibling extract_content ('To read the words, use extract_content'), so an agent can route correctly without opening a schema.
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?
Gives explicit when-to-use (see a page visually), when-not (reading words -> extract_content), an alternative-cost path (fresh: false for a free cached copy), and a hard constraint ('Public URLs only: localhost and private network addresses are refused'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_webhookAInspect
Send a test payload to a webhook endpoint to verify it receives events correctly. Returns the delivery status and HTTP response code.
| Name | Required | Description | Default |
|---|---|---|---|
| webhook_id | Yes | The webhook ID to test (from list_webhooks) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond annotations: it sends a test payload and returns delivery status and HTTP response code. Since annotations already declare readOnlyHint=false, destructiveHint=false, the description's mention of a test action with non-destructive consequences is appropriate and adds value.
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 two sentences, no filler, and front-loaded with the core action. Every word is necessary and informative.
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 simple tool with one parameter and no output schema, the description is complete: it explains the action, the return value (delivery status and HTTP code), and the parameter is fully described in the schema. Annotations provide additional safety context.
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 coverage is 100% with one parameter (webhook_id) described as 'The webhook ID to test (from list_webhooks)'. The description mentions 'webhook endpoint' but adds little beyond the schema. Baseline 3 is appropriate since the schema already fully documents the parameter.
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 clearly states the tool's action: sending a test payload to a webhook endpoint to verify event reception. It names the specific verb 'send' and resource 'test payload', and distinguishes from sibling tools like create_webhook (creation) and list_webhooks (listing).
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 indicates the tool is used to verify that a webhook receives events correctly, providing clear context. However, it does not explicitly state when not to use it or suggest alternatives, such as checking webhook configuration via list_webhooks before testing.
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.
5 tool updates
- Changed
batch_screenshots14 fields changed- changed
Input schema / properties / block_ads / descriptionPrevious value: -"Block ads (default: true)"New value: +"Block ads and trackers (default: true)" - changed
Input schema / properties / block_cookie_banners / descriptionPrevious value: -"Remove cookie banners (default: true)"New value: +"Remove cookie consent banners (default: true)" - changed
Input schema / properties / click_selector / descriptionPrevious value: -"CSS selector to click"New value: +"CSS selector to click before the capture" - changed
Input schema / properties / dark_mode / descriptionPrevious value: -"Enable dark mode (default: false)"New value: +"Ask the page for its dark color scheme (default: false)" - changed
Input schema / properties / delay / descriptionPrevious value: -"Milliseconds to wait after load (default: 0)"New value: +"Extra milliseconds to wait after the page loads, 0-10000 (default: 0)" - changed
Input schema / properties / device / descriptionPrevious value: -"Device preset for emulation"New value: +"Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900)" - changed
Input schema / properties / format / descriptionPrevious value: -"Output format (default: png)"New value: +"Output format: png (default), jpeg, webp, or pdf" - changed
Input schema / properties / full_page / descriptionPrevious value: -"Capture entire scrollable page (default: false)"New value: +"Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets)." - changed
Input schema / properties / height / descriptionPrevious value: -"Viewport height in pixels (default: 800)"New value: +"Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set." - changed
Input schema / properties / hide_selectors / descriptionPrevious value: -"CSS selectors to hide"New value: +"Comma-separated CSS selectors to hide before the capture" - changed
Input schema / properties / quality / descriptionPrevious value: -"Image quality (default: 90)"New value: +"JPEG and WebP quality, 1-100 (default: 90). Ignored for png." - changed
Input schema / properties / urls / descriptionPrevious value: -"Array of URLs to capture (1-50)"New value: +"URLs to capture (1-50)" - changed
Input schema / properties / user_agent / descriptionPrevious value: -"Custom user agent"New value: +"Custom User-Agent string" - changed
Input schema / properties / width / descriptionPrevious value: -"Viewport width in pixels (default: 1280)"New value: +"Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set."
- Changed
check_screenshot_cache14 fields changed- added
Input schema / properties / block_adsAdded value: +{ + "description": "Block ads and trackers (default: true)", + "type": "boolean" +} - added
Input schema / properties / block_cookie_bannersAdded value: +{ + "description": "Remove cookie consent banners (default: true)", + "type": "boolean" +} - added
Input schema / properties / click_selectorAdded value: +{ + "description": "CSS selector to click before the capture", + "type": "string" +} - added
Input schema / properties / dark_modeAdded value: +{ + "description": "Ask the page for its dark color scheme (default: false)", + "type": "boolean" +} - added
Input schema / properties / delayAdded value: +{ + "description": "Extra milliseconds to wait after the page loads, 0-10000 (default: 0)", + "maximum": 10000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / deviceAdded value: +{ + "description": "Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900)", + "enum": [ + "iphone_14", + "iphone_15_pro", + "pixel_7", + "ipad_pro", + "macbook_pro" + ], + "type": "string" +} - changed
Input schema / properties / format / descriptionPrevious value: -"Output format to check cache for (default: png)"New value: +"Output format: png (default), jpeg, webp, or pdf" - added
Input schema / properties / full_pageAdded value: +{ + "description": "Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets).", + "type": "boolean" +} - added
Input schema / properties / heightAdded value: +{ + "description": "Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set.", + "maximum": 10000, + "minimum": 200, + "type": "integer" +} - added
Input schema / properties / hide_selectorsAdded value: +{ + "description": "Comma-separated CSS selectors to hide before the capture", + "type": "string" +} - added
Input schema / properties / qualityAdded value: +{ + "description": "JPEG and WebP quality, 1-100 (default: 90). Ignored for png.", + "maximum": 100, + "minimum": 1, + "type": "integer" +} - changed
Input schema / properties / url / descriptionPrevious value: -"URL to check cache status for (must start with http:// or https://)"New value: +"URL to check (must start with http:// or https://)" - added
Input schema / properties / user_agentAdded value: +{ + "description": "Custom User-Agent string", + "type": "string" +} - added
Input schema / properties / widthAdded value: +{ + "description": "Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set.", + "maximum": 3840, + "minimum": 320, + "type": "integer" +}
- Changed
extract_content5 fields changed- changed
Input schema / properties / block_ads / descriptionPrevious value: -"Block advertisements and trackers (default: true)"New value: +"Block ads and trackers (default: true)" - changed
Input schema / properties / delay / descriptionPrevious value: -"Milliseconds to wait after page load (default: 0)"New value: +"Extra milliseconds to wait after the page loads, 0-10000 (default: 0)" - changed
Input schema / properties / max_length / descriptionPrevious value: -"Maximum content length in characters (default: 100000)"New value: +"Maximum characters to return, 1-500000 (default: 100000)" - changed
Input schema / properties / selector / descriptionPrevious value: -"CSS selector to scope extraction to a specific element"New value: +"CSS selector to read only part of the page, for example main or article" - changed
Input schema / properties / type / descriptionPrevious value: -"Extraction type (default: markdown)"New value: +"What to return: markdown (default, readable content), text (plain text), html (raw HTML), article (title, author, excerpt and content), links (every link on the page), metadata (title, description, Open Graph and Twitter tags)"
- Changed
sign_screenshot_url14 fields changed- changed
Input schema / properties / block_ads / descriptionPrevious value: -"Block ads (default: true)"New value: +"Block ads and trackers (default: true)" - changed
Input schema / properties / block_cookie_banners / descriptionPrevious value: -"Remove cookie banners (default: true)"New value: +"Remove cookie consent banners (default: true)" - changed
Input schema / properties / click_selector / descriptionPrevious value: -"CSS selector to click"New value: +"CSS selector to click before the capture" - changed
Input schema / properties / dark_mode / descriptionPrevious value: -"Enable dark mode (default: false)"New value: +"Ask the page for its dark color scheme (default: false)" - changed
Input schema / properties / delay / descriptionPrevious value: -"Milliseconds to wait after load (default: 0)"New value: +"Extra milliseconds to wait after the page loads, 0-10000 (default: 0)" - changed
Input schema / properties / device / descriptionPrevious value: -"Device preset for emulation"New value: +"Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900)" - changed
Input schema / properties / expires_in / descriptionPrevious value: -"URL validity in seconds, 60-2592000 (default: 86400 = 1 day)"New value: +"Link validity in seconds, 60-2592000 (default: 86400 = 1 day)" - changed
Input schema / properties / format / descriptionPrevious value: -"Output format (default: png)"New value: +"Output format: png (default), jpeg, webp, or pdf" - changed
Input schema / properties / full_page / descriptionPrevious value: -"Capture entire scrollable page (default: false)"New value: +"Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets)." - changed
Input schema / properties / height / descriptionPrevious value: -"Viewport height in pixels (default: 800)"New value: +"Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set." - changed
Input schema / properties / hide_selectors / descriptionPrevious value: -"CSS selectors to hide"New value: +"Comma-separated CSS selectors to hide before the capture" - changed
Input schema / properties / quality / descriptionPrevious value: -"Image quality (default: 90)"New value: +"JPEG and WebP quality, 1-100 (default: 90). Ignored for png." - changed
Input schema / properties / user_agent / descriptionPrevious value: -"Custom user agent"New value: +"Custom User-Agent string" - changed
Input schema / properties / width / descriptionPrevious value: -"Viewport width in pixels (default: 1280)"New value: +"Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set."
- Changed
take_screenshot15 fields changed- changed
Input schema / properties / block_ads / descriptionPrevious value: -"Block advertisements and trackers (default: true)"New value: +"Block ads and trackers (default: true)" - changed
Input schema / properties / block_cookie_banners / descriptionPrevious value: -"Remove cookie consent banners (default: true)"New value: +"Remove cookie consent banners (default: true). false always renders a new capture." - changed
Input schema / properties / click_selector / descriptionPrevious value: -"CSS selector to click before capture"New value: +"CSS selector to click before the capture" - changed
Input schema / properties / dark_mode / descriptionPrevious value: -"Enable dark mode CSS emulation (default: false)"New value: +"Ask the page for its dark color scheme (default: false)" - changed
Input schema / properties / delay / descriptionPrevious value: -"Milliseconds to wait after page load (default: 0)"New value: +"Extra milliseconds to wait after the page loads, 0-10000 (default: 0)" - changed
Input schema / properties / device / descriptionPrevious value: -"Device preset for mobile/tablet emulation"New value: +"Phone, tablet or laptop preset (overrides width and height): iphone_14 (390x844), iphone_15_pro (393x852), pixel_7 (412x915), ipad_pro (1024x1366), macbook_pro (1440x900)" - changed
Input schema / properties / format / descriptionPrevious value: -"Output format (default: png)"New value: +"Output format: png (default), jpeg, webp, or pdf" - added
Input schema / properties / freshAdded value: +{ + "description": "Default true: render the page now (uses one capture). false: a copy of the same URL and options captured in the last 24 hours may be returned for free; the result then says when it was captured.", + "type": "boolean" +} - changed
Input schema / properties / full_page / descriptionPrevious value: -"Capture entire scrollable page (default: false)"New value: +"Capture the whole scrollable page instead of one screen (default: false). Very tall pages are cut at about 32,000 px (about 8,000 px for webp, less with phone presets)." - changed
Input schema / properties / height / descriptionPrevious value: -"Viewport height in pixels (default: 800)"New value: +"Viewport height in CSS pixels, 200-10000 (default: 800). Ignored when device is set." - changed
Input schema / properties / hide_selectors / descriptionPrevious value: -"Comma-separated CSS selectors to hide before capture"New value: +"Comma-separated CSS selectors to hide before the capture" - changed
Input schema / properties / quality / descriptionPrevious value: -"Image quality for JPEG/WebP, 1-100 (default: 90)"New value: +"JPEG and WebP quality, 1-100 (default: 90). Ignored for png." - changed
Input schema / properties / url / descriptionPrevious value: -"URL to capture (must start with http:// or https://)"New value: +"Public page to capture: a full URL starting with https:// or http://" - added
Input schema / properties / user_agentAdded value: +{ + "description": "Custom User-Agent string. A capture with a custom user agent is always rendered new.", + "type": "string" +} - changed
Input schema / properties / width / descriptionPrevious value: -"Viewport width in pixels (default: 1280)"New value: +"Viewport width in CSS pixels, 320-3840 (default: 1280). Ignored when device is set."
1 tool update
- Changed
create_webhook1 field changed- changed
Input schema / properties / events / items / enumPrevious value: -[ - "screenshot.completed", - "quota.warning", - "quota.exceeded" -]New value: +[ + "screenshot.completed", + "quota.warning", + "quota.exceeded", + "capture.completed", + "change.detected" +]
5 tool updates
- Added
create_webhook - Added
delete_webhook - Added
list_webhooks - Removed
manage_webhooks - Added
test_webhook
5 tool updates
- Added
batch_screenshots - Added
extract_content - Added
get_batch_status - Added
manage_webhooks - Added
sign_screenshot_url
3 tool updates
- First observed
check_screenshot_cache - First observed
get_usage - First observed
take_screenshot
Publisher details
- Operator
- SnapRender · Publisher source
- Operator website
- https://snap-render.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://snap-render.com/ai-connectors · Publisher source
- Trust center
- Not available
- Restrictions
- None. Works on the free plan (200 screenshots a month, no credit card). Sign in with OAuth or an API key. · Publisher source
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.
Screenshots, PDFs and Markdown from any URL or HTML for AI agents, via the SnapForge API
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
- FlicenseNot gradedqualityDmaintenanceScreenshot & Render API for AI Agents. MCP Server lets Claude, Cursor capture webpages and render HTML. Direct access, no VPN needed.-
- AlicenseAqualityDmaintenanceMCP server for the SnapAPI web capture API. Take screenshots, scrape pages, extract structured data, generate PDFs, record videos, and run AI analysis on any URL — all from Claude, Cursor, VS Code, or any MCP client. 9 tools, 30+ device presets, ad/cookie blocking. Install: npx snapapi-mcp910 npmMIT
- 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
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to capture any public URL as PNG, JPEG, or PDF via REST API or MCP tools, including screenshot capture, page description, and PDF rendering.9 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.