snaprender-mcp
SnapRender 集成
SnapRender 截图 API 的官方集成 — 可将任何网站截取为 PNG、JPEG、WebP 或 PDF 格式。
远程 MCP 服务器
SnapRender 运行着一个托管的 MCP 服务器 — 可从任何 MCP 客户端连接,无需安装:
https://app.snap-render.com/mcp传输协议: Streamable HTTP (MCP 规范 2025-03-26)
身份验证:
X-API-Key请求头或Authorization: Bearer请求头工具:
take_screenshot、check_screenshot_cache、get_usage提示词:
screenshot_website、compare_devices
Claude Desktop (远程 — 推荐)
{
"mcpServers": {
"snaprender": {
"type": "streamable-http",
"url": "https://app.snap-render.com/mcp",
"headers": {
"Authorization": "Bearer sk_live_your_key_here"
}
}
}
}任何 MCP 客户端 (curl)
# Initialize a session
curl -X POST https://app.snap-render.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "X-API-Key: sk_live_your_key_here" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'服务器会返回一个 Mcp-Session-Id 请求头 — 将其包含在后续请求中以复用会话。
Smithery
通过 Smithery 安装,以便与任何 MCP 客户端自动设置。
Related MCP server: screenshots-snapshot-site
本地 MCP 服务器 (npm)
如果您更喜欢通过 stdio 传输协议在本地运行:
{
"mcpServers": {
"snaprender": {
"command": "npx",
"args": ["-y", "snaprender-mcp"],
"env": {
"SNAPRENDER_API_KEY": "sk_live_your_key_here"
}
}
}
}请参阅 mcp-server/ 获取完整文档。
远程 vs 本地
远程 (托管) | 本地 ( | |
安装 | 无 — 仅需 HTTPS URL | 需要 Node.js + npx |
传输协议 | Streamable HTTP | stdio |
使用场景 | 任何 MCP 客户端、Smithery、Web 应用 | Claude Desktop、Claude Code |
MCP 工具
take_screenshot
截取任何网站的截图。返回 PNG、JPEG、WebP 或 PDF 格式的图像。
参数 | 类型 | 必需 | 描述 |
| string | 是 | 要截取的 URL (http:// 或 https://) |
| string | 否 |
|
| integer | 否 | 视口宽度 320-3840 (默认: 1280) |
| integer | 否 | 视口高度 200-10000 (默认: 800) |
| boolean | 否 | 截取整个可滚动页面 |
| string | 否 |
|
| boolean | 否 | 启用深色模式 |
| boolean | 否 | 屏蔽广告 (默认: true) |
| boolean | 否 | 移除 Cookie 横幅 (默认: true) |
| integer | 否 | JPEG/WebP 质量 1-100 (默认: 90) |
| integer | 否 | 页面加载后的等待毫秒数 (默认: 0) |
| string | 否 | 要隐藏的 CSS 选择器(逗号分隔) |
| string | 否 | 截取前要点击的 CSS 选择器 |
check_screenshot_cache
检查截图是否已缓存,无需进行截取。不计入配额。
参数 | 类型 | 必需 | 描述 |
| string | 是 | 要检查的 URL |
| string | 否 | 输出格式 (默认: |
get_usage
获取截图使用统计信息。
参数 | 类型 | 必需 | 描述 |
| string | 否 |
|
智能体框架集成
框架 | 目录 | 描述 |
| 用于 LangChain / LangGraph 智能体的 | |
| 用于 LangChain.js 智能体的 | |
| 用于 CrewAI 智能体的 | |
| 用于 Microsoft AutoGen 智能体的 | |
独立仓库 | 用于 n8n 工作流的社区节点 (npm) |
其他集成
集成 | 描述 | 设置时间 |
OpenClaw AI 智能体的技能文件 | 5 分钟 | |
用于自定义 GPT 和 OpenAI 函数调用的 OpenAPI 规范 | 5 分钟 | |
预构建的 Postman API 请求 | 1 分钟 |
SDK
# Node.js
npm install snaprender
# Python
pip install snaprender直接 API
curl "https://app.snap-render.com/v1/screenshot?url=https://example.com" \
-H "X-API-Key: sk_live_your_key_here" \
-o screenshot.png获取 API 密钥
在 snap-render.com 免费注册 — 每月 200 次截图,无需信用卡。
链接
远程 MCP 服务器 — Streamable HTTP 端点
npm 上的 MCP 服务器 (
npx snaprender-mcp)Node.js SDK (
npm install snaprender)Python SDK (
pip install snaprender)LangChain Python 工具 (
pip install langchain-snaprender)LangChain.js 工具 (
npm install langchain-snaprender)CrewAI 工具 (
pip install crewai-snaprender)AutoGen 工具 (
pip install autogen-ext-snaprender)n8n 社区节点 (
npm install n8n-nodes-snaprender)
许可证
MIT
Available Tools
11 toolsbatch_screenshotsAInspect
Create a batch screenshot job for multiple URLs (1-50). Returns immediately with a job ID. Use get_batch_status to poll for results (wait 2-5 seconds between polls). All URLs share the same screenshot options. Each URL consumes one credit; failed URLs get credits rolled back.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Array of URLs to capture (1-50) | |
| delay | No | Milliseconds to wait after load (default: 0) | |
| width | No | Viewport width in pixels (default: 1280) | |
| device | No | Device preset for emulation | |
| format | No | Output format (default: png) | |
| height | No | Viewport height in pixels (default: 800) | |
| quality | No | Image quality (default: 90) | |
| block_ads | No | Block ads (default: true) | |
| dark_mode | No | Enable dark mode (default: false) | |
| full_page | No | Capture entire scrollable page (default: false) | |
| user_agent | No | Custom user agent | |
| click_selector | No | CSS selector to click | |
| hide_selectors | No | CSS selectors to hide | |
| block_cookie_banners | No | Remove cookie banners (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it explains the asynchronous nature (returns immediately with job ID), polling requirement, credit consumption per URL, and rollback for failed URLs. Annotations indicate readOnlyHint=false (mutation) and destructiveHint=false, which align well.
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 concise (3 sentences), front-loaded with the core purpose, and contains no fluff. Every sentence adds value: purpose, workflow, and credit/rollback behavior.
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?
Given the complexity (14 parameters, 1 required), the description competently covers purpose, polling workflow, credit implications, and failure behavior. No output schema is present, but the description correctly indicates the return type (job ID) without needing to specify the full response format.
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 schema already provides parameter details. The description adds context that all URLs share the same options, but does not elaborate on individual parameters beyond what the schema offers. Baseline 3 is appropriate.
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 creates a batch screenshot job for multiple URLs (1-50) and returns immediately with a job ID, distinguishing it from the sibling tools like 'take_screenshot' (single URL) and 'get_batch_status' (polling).
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 explicitly provides context on when to use this tool (multiple URLs, polling with get_batch_status, wait 2-5 seconds between polls) and mentions credit consumption and rollback behavior. However, it does not explicitly state when not to use it or discuss alternative tools beyond polling.
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 if a screenshot is already cached without capturing a new one. Does not count against your quota. Pass the same parameters you would use for take_screenshot so the cache key matches correctly.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to check | |
| width | No | Viewport width (default: 1280) | |
| device | No | Device preset | |
| format | No | Output format (default: png) | |
| height | No | Viewport height (default: 800) | |
| quality | No | Image quality (default: 90) | |
| block_ads | No | Block ads (default: true) | |
| dark_mode | No | Dark mode (default: false) | |
| full_page | No | Full page capture (default: false) | |
| click_selector | No | CSS selector to click | |
| hide_selectors | No | CSS selectors to hide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavioral context beyond annotations: it does not capture a new screenshot and does not count against the quota. These quota and side-effect details are not in the annotations. It doesn't mention return value structure (e.g., boolean vs. metadata), but that's minor given the tool's simplicity.
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, each carrying weight: purpose, quota exemption, and parameter matching. Front-loaded with the core action and no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description could mention what is returned (e.g., a boolean or timestamp). However, for a cache-check tool, the purpose, side effects, and key-matching instruction are likely sufficient for an agent to call it correctly. A minor gap in return value description.
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 schema already documents all 11 parameters with descriptions and defaults. The description adds the important constraint that parameters must match those used for take_screenshot for the cache key to align, which is useful context not in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Check') and resource ('screenshot cache') and explicitly distinguishes from the capture action ('without capturing a new one'). An agent can differentiate this from take_screenshot immediately.
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 clear context: use it to check cache status before taking a screenshot, and critically instructs to pass the same parameters as take_screenshot so the cache key matches. This is actionable advice for correct invocation, though it doesn't explicitly state when not to use it.
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 a webhook subscription by ID. This cannot be undone.
| 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 indicate destructive nature (destructiveHint: true). Description adds 'This cannot be undone' which reinforces but does not add substantial new behavioral context beyond annotations.
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?
Extremely concise with two short sentences that convey the essential information without any 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 deletion tool with one parameter and destructive hint, the description adequately covers purpose and permanence. Could optionally mention expected return value or confirmation, but not necessary given no output 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 coverage is 100% and the input schema already provides a clear description for webhook_id. The tool description does not add additional parameter semantics beyond what is in 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?
The description clearly states the action (Delete) and resource (webhook subscription by ID), distinguishing it from sibling tools like create_webhook and list_webhooks.
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?
Provides a warning about irreversibility but lacks explicit guidance on when to use vs alternatives like list_webhooks or test_webhook. The schema description hints at using the ID from list_webhooks, but not directly in the tool description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_contentARead-onlyInspect
Extract content from a web page. Returns structured data based on the extraction type. Supports: markdown (readable content), text (plain text), html (raw HTML), article (structured with title/author/excerpt), links (all page links), metadata (OG tags, title, description).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to extract content from (must start with http:// or https://) | |
| type | No | Extraction type (default: markdown) | |
| cache | No | Use cached result if available (default: false) | |
| delay | No | Milliseconds to wait after page load (default: 0) | |
| selector | No | CSS selector to scope extraction to a specific element | |
| block_ads | No | Block advertisements and trackers (default: true) | |
| cache_ttl | No | Cache TTL in seconds (default: 86400) | |
| max_length | No | Maximum content length in characters (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 safety is covered. The description adds real value beyond that by disclosing what each extraction type returns (article = title/author/excerpt, metadata = OG tags) in the absence of an output schema. It still omits rate limits, failure modes, and JS-rendering behavior.
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, front-loaded with the core action and result, followed by a compact mode list. No filler or repetition.
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 does the necessary work of sketching return formats per mode, and 100% schema coverage handles the 9 parameters. It lacks guidance on dynamic pages, error cases, or the relationship between cache/cache_ttl/delay, which would make it fully complete for a scraping 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?
Schema description coverage is 100%, so defaults, ranges, and semantics for all 9 parameters are already documented in the schema. The description echoes the type enum values but adds no syntax or behavior detail beyond them, making the baseline 3 appropriate.
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 ('Extract content from a web page') and immediately clarifies the return shape ('structured data based on the extraction type'). The enumeration of the six extraction modes makes its scope unambiguous and clearly separates it from the screenshot/webhook 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?
The list of extraction types implicitly guides the agent toward the right mode, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as take_screenshot for visual capture. Usage must be inferred from the mode enumeration.
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 screenshot job. Poll this until status is 'completed' or 'failed' (wait 2-5 seconds between polls). Completed items include presigned download URLs valid for 24 hours.
| 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 declare readOnlyHint=false-destructive and openWorldHint, so safety is covered. The description goes beyond them usefully by disclosing polling cadence, the terminal status values, and the 24-hour lifetime of presigned download URLs returned for completed items. It stops short of describing non-terminal status values or failure payloads, 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?
Three short sentences, each carrying distinct information (purpose, polling behavior, output lifetime), with the highest-value content front-loaded. Nothing is padding.
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 does partially address it by naming the returned presigned URLs and their validity window. It omits the full set of possible status values and any failure/error detail, which would round out the picture.
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% and the single parameter is documented there, including its origin ('returned by batch_screenshots'). The description adds no parameter detail beyond that, so the baseline 3 for a fully-covered schema 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?
States a specific verb and resource ('Get the status of a batch screenshot job'), which cleanly separates it from the sibling that creates jobs (batch_screenshots). An agent can identify the tool's role without opening the 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?
Explicitly prescribes the usage pattern: poll until status is 'completed' or 'failed' with a 2-5 second interval. It also implicitly situates this tool after batch_screenshots via the job_id reference, leaving no ambiguity about when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageARead-onlyInspect
Get current month's screenshot usage statistics including screenshots used, limit, and remaining quota.
| 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, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description goes beyond them by disclosing the temporal scope (current month, not all-time) and the shape of the returned metrics in the absence of an output schema. It says nothing about auth requirements or whether limits reset, so it stops short of full behavioral coverage.
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?
A single front-loaded sentence with no filler; the scope qualifier ('current month') comes before the metric list, so an agent reads the most decision-relevant fact first.
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 parameters, no output schema, and annotations covering the safety profile, the remaining gap is what the tool returns — and the description fills that by naming the three metrics. It doesn't say how the quota is consumed or when it resets, but nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to clarify, and it correctly does not invent arguments.
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?
Specific verb+resource (get usage statistics) scoped to the current month, and it enumerates the returned metrics (used, limit, remaining). It is plainly distinct from siblings like take_screenshot or batch_screenshots, though it never explicitly names an alternative.
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?
There is no statement of when to call this versus alternatives or any prerequisite (e.g., call before taking screenshots to check remaining quota). The purpose hints at its role, but no usage guidance is actually provided.
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
Generate a signed URL for a screenshot that can be used without an API key. Useful for embedding screenshots in emails, documents, or sharing with third parties. Signing is free, rendering the URL consumes one credit. URLs expire after the specified duration.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to capture (must start with http:// or https://) | |
| delay | No | Milliseconds to wait after load (default: 0) | |
| width | No | Viewport width in pixels (default: 1280) | |
| device | No | Device preset for emulation | |
| format | No | Output format (default: png) | |
| height | No | Viewport height in pixels (default: 800) | |
| quality | No | Image quality (default: 90) | |
| block_ads | No | Block ads (default: true) | |
| dark_mode | No | Enable dark mode (default: false) | |
| full_page | No | Capture entire scrollable page (default: false) | |
| expires_in | No | URL validity in seconds, 60-2592000 (default: 86400 = 1 day) | |
| user_agent | No | Custom user agent | |
| click_selector | No | CSS selector to click | |
| hide_selectors | No | CSS selectors to hide | |
| block_cookie_banners | No | Remove cookie banners (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/openWorld/non-destructive, so the safety bar is low. The description adds genuinely useful behavior beyond that: signing is free while rendering consumes one credit, and URLs expire after the specified duration — a cost/expiry model the agent would otherwise not know.
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 purpose before use cases and the billing/expiry nuance. No sentence is wasted.
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 full schema coverage and annotations covering the safety profile, and no output schema to explain, the description covers purpose, use context, and cost/expiry. Only the sibling-routing guidance is thin.
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 all 15 parameters, so the schema already documents every input. The description only alludes to the expiry duration ('specified duration') without adding format or syntax beyond expires_in. 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 (generate/sign) and resource (screenshot URL) and immediately names the property that distinguishes it from take_screenshot: the URL works 'without an API key'. An agent can tell it apart from its siblings without opening the 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 clear use cases (embedding in emails, documents, sharing with third parties), which is real when-to-use guidance. However it never explicitly contrasts with take_screenshot or check_screenshot_cache, so the routing decision is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotARead-onlyInspect
Capture a screenshot of a website URL, raw HTML, or Markdown content. Provide exactly one of: url, html, or markdown. Returns the image as a PNG, JPEG, WebP, or PDF. Supports device emulation (iPhone, Pixel, iPad), dark mode, ad blocking, cookie banner removal, full-page capture, and custom viewports.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | URL to capture (must start with http:// or https://). Mutually exclusive with html and markdown. | |
| html | No | Raw HTML content to render and capture (max 2MB). Mutually exclusive with url and markdown. | |
| cache | No | Use cached result if available. Set to true to enable caching (default: false) | |
| delay | No | Milliseconds to wait after page load (default: 0) | |
| width | No | Viewport width in pixels (default: 1280) | |
| device | No | Device preset for mobile/tablet emulation | |
| format | No | Output format (default: png) | |
| height | No | Viewport height in pixels (default: 800) | |
| quality | No | Image quality for JPEG/WebP, 1-100 (default: 90) | |
| markdown | No | Markdown content to render with a clean styled template and capture (max 500KB). Mutually exclusive with url and html. | |
| block_ads | No | Block advertisements and trackers (default: true) | |
| cache_ttl | No | Cache TTL in seconds, 0-2592000. Clamped to your plan max (default: 86400) | |
| dark_mode | No | Enable dark mode CSS emulation (default: false) | |
| full_page | No | Capture entire scrollable page (default: false) | |
| user_agent | No | Custom user agent string to use for the request | |
| click_selector | No | CSS selector to click before capture | |
| hide_selectors | No | Comma-separated CSS selectors to hide before 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 cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=true), and the description adds useful behavioral context: the output media types and the rendering feature set (ad blocking, cookie banner removal, full-page capture). It omits auth/plan limits implied by cache_ttl clamping and any failure behavior for bad URLs.
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, front-loaded with what the tool does and the input constraint, then output formats, then optional features. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 18-parameter tool with full schema coverage and no output schema, the description adequately covers inputs and return types. It is slightly short on caching semantics (cache/cache_ttl interaction) and error handling, but nothing critical for correct invocation 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 all 18 parameters are already documented with defaults and bounds; the baseline is 3. The description restates a subset of capabilities (device emulation, dark mode, ad blocking, full-page, viewports) without adding 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 ('Capture a screenshot') and enumerates the three accepted input types (url, html, markdown), which separates it cleanly from siblings like extract_content and batch_screenshots. Output formats are named as well, so an agent knows what it gets back.
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 says 'Provide exactly one of: url, html, or markdown', a clear usage constraint. However it never routes to alternatives such as batch_screenshots for multiple targets or check_screenshot_cache for cached results, so sibling selection 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.
10 tool updates
v1.5.6- Added
batch_screenshots - Changed
check_screenshot_cache9 fields changed- added
Input schema / properties / block_adsAdded value: +{ + "description": "Block ads (default: true)", + "type": "boolean" +} - added
Input schema / properties / click_selectorAdded value: +{ + "description": "CSS selector to click", + "type": "string" +} - added
Input schema / properties / dark_modeAdded value: +{ + "description": "Dark mode (default: false)", + "type": "boolean" +} - added
Input schema / properties / deviceAdded value: +{ + "description": "Device preset", + "type": "string" +} - added
Input schema / properties / full_pageAdded value: +{ + "description": "Full page capture (default: false)", + "type": "boolean" +} - added
Input schema / properties / heightAdded value: +{ + "description": "Viewport height (default: 800)", + "type": "integer" +} - added
Input schema / properties / hide_selectorsAdded value: +{ + "description": "CSS selectors to hide", + "type": "string" +} - added
Input schema / properties / qualityAdded value: +{ + "description": "Image quality (default: 90)", + "type": "integer" +} - added
Input schema / properties / widthAdded value: +{ + "description": "Viewport width (default: 1280)", + "type": "integer" +}
- Added
create_webhook - Added
delete_webhook - Added
extract_content - Added
get_batch_status - Added
list_webhooks - Added
sign_screenshot_url - Changed
take_screenshot7 fields changed- added
Input schema / properties / cacheAdded value: +{ + "description": "Use cached result if available. Set to true to enable caching (default: false)", + "type": "boolean" +} - added
Input schema / properties / cache_ttlAdded value: +{ + "description": "Cache TTL in seconds, 0-2592000. Clamped to your plan max (default: 86400)", + "maximum": 2592000, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / htmlAdded value: +{ + "description": "Raw HTML content to render and capture (max 2MB). Mutually exclusive with url and markdown.", + "type": "string" +} - added
Input schema / properties / markdownAdded value: +{ + "description": "Markdown content to render with a clean styled template and capture (max 500KB). Mutually exclusive with url and html.", + "type": "string" +} - changed
Input schema / properties / url / descriptionPrevious value: -"URL to capture (must start with http:// or https://)"New value: +"URL to capture (must start with http:// or https://). Mutually exclusive with html and markdown." - added
Input schema / properties / user_agentAdded value: +{ + "description": "Custom user agent string to use for the request", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "url" -]New value: +[]
- Added
test_webhook
3 tool updates
v1.0.0- First observed
check_screenshot_cache - First observed
get_usage - First observed
take_screenshot
TDQS
Scored across 11 tools
Each tool targets a distinct action+resource: single capture, batch capture, cache check, URL signing, batch polling, content extraction, webhook CRUD/test, and usage. The capture-family tools (take_screenshot, batch_screenshots, extract_content) are clearly differentiated by descriptions covering single vs. bulk vs. structured extraction.
Mostly a consistent verb_noun pattern (take_screenshot, check_screenshot_cache, get_batch_status, extract_content, list_webhooks, create_webhook, delete_webhook, test_webhook, get_usage). The lone deviation is batch_screenshots, which is noun-first but still readable and unambiguous.
11 tools is well within the sweet spot for a screenshot/rendering service, with each tool covering a distinct capability (capture, batch, cache, signing, extraction, webhooks, usage). No tool feels redundant or padded.
Covers the core lifecycle: single/batch capture, cache check, signed sharing, content extraction, webhook management, and usage reporting. Minor gaps exist such as no batch cancel/list or update_webhook (delete-and-recreate is the workaround), but no workflow dead-ends.
Maintenance
Related MCP Connectors
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
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.
Screenshot any public web page from an AI agent. Free without signup, or with an API key.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to capture website screenshots, automate browser interactions, and manage recurring screenshot configurations across 150+ global locations. It also supports AI-powered domain research and visual change monitoring for any web page.10 npmMIT
- AlicenseAqualityAmaintenanceScreenshot, visual-diff, and AI page-analysis API for AI agents. Capture any URL as PNG, JPEG, WebP, PDF, or HTML, diff two versions of a page to catch visual regressions, and get an AI summary of what a page contains.344 npm1MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to capture website screenshots and record videos of web pages by providing tools for taking screenshots, recording videos, and checking video status.31MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to render website screenshots and PDFs, check page changes, and retrieve usage stats via REST calls.-