Grabbit
Server Details
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.
- Status
- Healthy
- Uptime
- 9.1% over 46 days
- Last Tested
- Transport
- Streamable HTTP ยท MCP 2025-11-25
- URL
- Repository
- BrainGridAI/grabbit-mcp
- GitHub Stars
- 0
- Server Listing
- Grabbit
TDQS
Scored across 5 tools
Each tool has a clearly distinct purpose: grab creates a screenshot, get_grab fetches one by id, list_grabs browses recent captures, get_usage reports team credits, and get_pricing covers plans and comparisons. get_grab vs list_grabs and get_pricing vs get_usage are well-separated by their descriptions.
The set mostly follows a verb_noun pattern (get_grab, get_pricing, get_usage, list_grabs), with 'grab' standing alone as the core action verb. This is a minor, readable deviation rather than a break in convention.
Five tools is well-scoped for a hosted screenshot service: create, retrieve, list, plus account and pricing info. Each tool earns its place with no redundancy.
The capture lifecycle is well covered (create, get by id, list) along with usage and pricing. Minor gaps like a delete/expire operation or batch capture exist, but core workflows are fully supported and agents can work around them.
Available Tools
5 toolsget_grabFetch a grabARead-onlyInspect
Fetch a previously created grab by id: status, hosted image URL, and metadata. Useful for polling async grabs.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Grab id (UUID) | |
| return_image | No | Inline the image too (default false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Grab id. |
| bytes | No | Image size in bytes. |
| width | No | Viewport width in pixels. |
| format | No | Image format. |
| height | No | Viewport height in pixels (3240 in the response for full_page captures). |
| status | Yes | Lifecycle state. Only done grabs have an image_url. |
| image_url | No | Hosted image URL once status is done (relative for sk_test_ placeholders). |
| created_at | No | ISO 8601 creation time. |
| target_url | No | The captured URL. |
| execution_ms | No | Render time in milliseconds. |
| error_message | No | Why a failed grab failed. |
| credits_remaining | No | Team credits left after this grab (live keys only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description still adds real value by disclosing the async/polling workflow ('previously created grab', 'polling async grabs'), telling the agent this is a repeated-read pattern rather than a one-shot call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with zero filler, and the identity/return-value information is front-loaded before the polling hint. Every clause earns its place.
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?
An output schema exists, so the description is not obligated to explain return values (even though it briefly does). For a simple two-parameter read tool with full annotation coverage, the definition is nearly complete; only explicit sibling routing is absent.
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 both parameters (id, return_image) are fully documented in the schema itself. The description only implies the id-based lookup that the schema already states, adding no syntax, format, or default detail beyond it.
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 ('Fetch a previously created grab by id') and enumerates the payload ('status, hosted image URL, and metadata'), so an agent can tell it apart from list_grabs and grab 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?
'Useful for polling async grabs' gives one concrete use case, which is genuinely helpful routing context. However, it never names the alternatives (list_grabs for enumeration, grab for creation) or states when not to use this tool, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricingPricing & comparisonARead-onlyInspect
Grabbit's pricing plus dated, first-party sourced comparisons with Urlbox, ScreenshotOne, and ApiFlash. Includes named plan math and separate API, SDK/example, CLI, MCP, authentication, and result facts. Defaults to a compact summary; request full detail for methodology, migration notes, limitations, and the complete source registry.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | summary by default, or full for every comparison field and source | |
| provider | No | Optional provider filter for a smaller response |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| pricing | Yes | |
| comparison | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing provenance ('first-party sourced', 'dated') and the default-vs-full response behavior, which the agent cannot infer from annotations alone. It omits any caveats about freshness limits or rate limits, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool returns before the detail-level switch. Every clause carries content, though the middle run-on listing of fact categories is dense and slightly harder to parse than 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?
With an output schema present, return values need not be explained, and both parameters plus their enums are documented. The description covers scope, provenance and the default behavior, leaving only cross-tool routing guidance as a gap for what appears to be a low-risk read-only 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 coverage is 100%, so the baseline is 3 and the schema already defines both enum parameters. The description goes beyond the schema by specifying what 'full' actually unlocks (methodology, migration notes, limitations, complete source registry) and by noting the compact default, which meaningfully clarifies the cost/benefit of the flag.
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 names a specific resource (Grabbit's pricing) and enumerates exactly what the response contains: dated, first-party sourced comparisons against Urlbox, ScreenshotOne and ApiFlash, plus named plan math and separate API/SDK/CLI/MCP/auth facts. An agent can immediately distinguish this from sibling tools get_grab, get_usage, grab and list_grabs, which deal with grab records and usage rather than pricing.
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 gives real guidance on the detail parameter (compact by default, request full for methodology/migration/limitations/source registry), but never states when to reach for this tool versus alternatives or any exclusions. Usage is only implied by the topic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageCredits & usageARead-onlyInspect
Your team's remaining credits, plan, and 30-day grab counts. Check this to know when to top up (https://grabbit.live/app/billing).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| usage | Yes | |
| top_up | Yes | Where to buy more credits. |
| credits | Yes | |
| environment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the data scope (credits, plan, 30-day counts), but since an output schema exists, this overlaps structured data and adds little independent behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first front-loads exactly what is returned, the second gives the actionable purpose plus a link. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with a full output schema and clear annotations, the description covers what the agent needs to decide to call it. It hints at return values even though the output schema carries them.
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 the baseline is 4. There is nothing to disambiguate, and the description appropriately avoids inventing parameter detail.
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 resource and its contents: the team's remaining credits, plan, and 30-day grab counts. This clearly separates it from get_pricing and list_grabs, though it never explicitly names a sibling for contrast.
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?
"Check this to know when to top up" supplies a concrete decision context for invoking the tool. It gives no explicit exclusions or named alternatives, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
grabTake a screenshotAInspect
Capture a screenshot of any public web page by URL and get back a hosted image, with no local headless browser, Chromium, Playwright, or Puppeteer to install or run. Hosted rendering handles cookie and consent banners, lazy-loaded and JavaScript-heavy pages, and full-page capture. Reach for this whenever you need to SEE a page: verifying your own UI/frontend work, capturing a live site, or feeding a real rendered image into a vision step. Live grabs cost 1 credit ($0.002 flat); test-environment keys return free placeholders. Returns the image inline by default plus the hosted URL and your remaining credits. Wraps the Grabbit screenshot API (POST /v1/grabs; same parameters): https://grabbit.live/screenshot-api
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute http/https URL to capture (e.g. https://nyt.com) | |
| width | No | Viewport width (default 1280) | |
| format | No | Image format (default png) | |
| height | No | Viewport height (default 720; ignored when full_page) | |
| delay_ms | No | Settle delay before capture | |
| selector | No | CSS selector to capture a single element | |
| full_page | No | Capture the full page height | |
| return_image | No | Inline the image in the response (default true; set false to save tokens) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Grab id. |
| bytes | No | Image size in bytes. |
| width | No | Viewport width in pixels. |
| format | No | Image format. |
| height | No | Viewport height in pixels (3240 in the response for full_page captures). |
| status | Yes | Lifecycle state. Only done grabs have an image_url. |
| image_url | No | Hosted image URL once status is done (relative for sk_test_ placeholders). |
| created_at | No | ISO 8601 creation time. |
| target_url | No | The captured URL. |
| execution_ms | No | Render time in milliseconds. |
| error_message | No | Why a failed grab failed. |
| credits_remaining | No | Team credits left after this grab (live keys only). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (openWorldHint, idempotentHint=false) by disclosing the credit cost (1 credit, $0.002 flat), that test keys return free placeholders, that hosted rendering handles cookie/consent banners and lazy-loaded JS, and that the response includes the inline image plus hosted URL and remaining credits. This is the rich behavioral context annotations cannot carry.
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?
Front-loaded with the core action and benefit, then cost and return behavior; every sentence carries usable signal. Slight bloat from the 'no Playwright/Puppeteer to install' framing and the trailing API endpoint citation, which are marketing/reference rather than decision-critical.
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 an output schema present, the description needn't explain return values yet still notes the inline image plus hosted URL and remaining credits. For a single-required-param, 8-parameter tool it covers purpose, cost, use cases, and rendering behavior completely.
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 all 8 parameters carry their own descriptions, including defaults, bounds, and the height/full_page interaction. The description reinforces a couple of these (inline image by default, full-page capture) but adds little syntax or semantics beyond the schema, 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 and resource ('Capture a screenshot of any public web page by URL and get back a hosted image') and clearly distinguishes itself from the sibling read/listing tools (get_grab, list_grabs) by being the creation tool. An agent can tell this apart from the retrieval siblings without opening schemas.
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 framing ('Reach for this whenever you need to SEE a page: verifying your own UI/frontend work, capturing a live site, or feeding a real rendered image into a vision step'). It does not name the sibling alternatives or state when not to use this versus get_grab/list_grabs, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_grabsList recent grabsARead-onlyInspect
Browse your team's recent screenshots (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return (default 20) | |
| status | No | Filter by status |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| has_more | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the useful ordering trait (newest first) but says nothing about pagination or result volume, so it adds modest value beyond the 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?
A single sentence with zero filler, front-loading the verb and resource and appending the ordering constraint where it belongs.
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?
An output schema exists, so return values need no explanation, and the read-only annotations cover safety. For a simple two-parameter list tool the description is nearly complete, with only pagination behavior left implicit.
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%: limit has a documented default (20) and status has a documented enum, so the schema carries the parameter burden. The description adds no filtering or limit semantics of its own, 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 (browse) and resource (team's recent screenshots, i.e. grabs) plus the sort order (newest first). It does not explicitly distinguish itself from the sibling get_grab, but the plural/listing framing makes the distinction inferable.
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 phrase 'your team's recent' implies the listing use case, but there is no explicit when-to-use guidance and no mention of when to prefer get_grab for a single item. Usage is only implied.
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.
1 tool update
- Changed
get_pricing25 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / detailAdded value: +{ + "description": "summary by default, or full for every comparison field and source", + "enum": [ + "summary", + "full" + ], + "type": "string" +} - added
Input schema / properties / providerAdded value: +{ + "description": "Optional provider filter for a smaller response", + "enum": [ + "urlbox", + "screenshotone", + "apiflash" + ], + "type": "string" +} - added
Output schema / properties / comparison / properties / agent_surfacesAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": { + "comparison_url": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "surfaces": { + "items": { + "additionalProperties": {}, + "properties": { + "availability": { + "type": "string" + }, + "grabbit_availability": { + "type": "string" + }, + "name": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "verified_on": { + "type": "string" + } + }, + "required": [ + "name", + "availability", + "grabbit_availability", + "source_url", + "verified_on" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "provider", + "comparison_url", + "surfaces" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / comparison / properties / decision_pagesAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": { + "best_fit": { + "items": { + "type": "string" + }, + "type": "array" + }, + "capture_capabilities": { + "items": { + "type": "string" + }, + "type": "array" + }, + "competitor": { + "type": "string" + }, + "pricing_tiers": { + "items": { + "additionalProperties": {}, + "properties": { + "name": { + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + "url": { + "type": "string" + }, + "verdict": { + "type": "string" + } + }, + "required": [ + "competitor", + "url", + "verdict", + "pricing_tiers", + "capture_capabilities", + "best_fit" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / comparison / properties / detailAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / detail_hintAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / providers / items / properties / agent_evidenceAdded value: +{ + "additionalProperties": {}, + "properties": { + "locator": { + "type": "string" + }, + "note": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "source_url", + "locator", + "note", + "status" + ], + "type": "object" +} - added
Output schema / properties / comparison / properties / providers / items / properties / billing_unitAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / providers / items / properties / capture_evidenceAdded value: +{ + "additionalProperties": {}, + "properties": { + "locator": { + "type": "string" + }, + "note": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "source_url", + "locator", + "note", + "status" + ], + "type": "object" +} - added
Output schema / properties / comparison / properties / providers / items / properties / evidence_statusAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / providers / items / properties / planAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / providers / items / properties / pricing_evidenceAdded value: +{ + "additionalProperties": {}, + "properties": { + "locator": { + "type": "string" + }, + "note": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "source_url", + "locator", + "note", + "status" + ], + "type": "object" +} - added
Output schema / properties / comparison / properties / providers / items / properties / quota_evidenceAdded value: +{ + "anyOf": [ + { + "additionalProperties": {}, + "properties": { + "locator": { + "type": "string" + }, + "note": { + "type": "string" + }, + "source_url": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "source_url", + "locator", + "note", + "status" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / comparison / properties / providers / items / properties / quota_noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / providers / items / properties / source_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / providers / items / properties / verified_onAdded value: +{ + "type": "string" +} - changed
Output schema / properties / comparison / properties / providers / items / requiredPrevious value: -[ - "name", - "per_grab", - "billing", - "included", - "unused_credits", - "features_supported", - "agent_install", - "is_grabbit" -]New value: +[ + "name", + "plan", + "per_grab", + "billing", + "billing_unit", + "quota_note", + "included", + "unused_credits", + "features_supported", + "agent_install", + "source_url", + "verified_on", + "evidence_status", + "pricing_evidence", + "quota_evidence", + "capture_evidence", + "agent_evidence", + "is_grabbit" +] - added
Output schema / properties / comparison / properties / schema_versionAdded value: +{ + "type": "string" +} - added
Output schema / properties / comparison / properties / sourcesAdded value: +{ + "items": { + "additionalProperties": {}, + "properties": { + "claim_group": { + "type": "string" + }, + "evidence_status": { + "type": "string" + }, + "label": { + "type": "string" + }, + "locator": { + "type": "string" + }, + "note": { + "type": "string" + }, + "url": { + "type": "string" + }, + "verified_on": { + "type": "string" + } + }, + "required": [ + "label", + "url", + "locator", + "claim_group", + "verified_on", + "note", + "evidence_status" + ], + "type": "object" + }, + "type": "array" +} - changed
Output schema / properties / comparison / requiredPrevious value: -[ - "last_verified", - "features", - "providers", - "notes" -]New value: +[ + "schema_version", + "last_verified", + "features", + "providers", + "decision_pages", + "agent_surfaces", + "notes" +] - added
Output schema / properties / pricing / properties / annual / properties / reset_policyAdded value: +{ + "type": "string" +} - changed
Output schema / properties / pricing / properties / annual / requiredPrevious value: -[ - "price_usd", - "credits_per_year" -]New value: +[ + "price_usd", + "credits_per_year", + "reset_policy" +] - added
Output schema / properties / pricing / properties / prepaid_packages / items / properties / reset_policyAdded value: +{ + "type": "string" +} - changed
Output schema / properties / pricing / properties / prepaid_packages / items / requiredPrevious value: -[ - "name", - "credits", - "price_usd" -]New value: +[ + "name", + "credits", + "price_usd", + "reset_policy" +]
5 tool updates
- Changed
get_grab1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "bytes": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Image size in bytes." + }, + "created_at": { + "description": "ISO 8601 creation time.", + "type": "string" + }, + "credits_remaining": { + "description": "Team credits left after this grab (live keys only).", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "error_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Why a failed grab failed." + }, + "execution_ms": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Render time in milliseconds." + }, + "format": { + "anyOf": [ + { + "enum": [ + "png", + "jpeg", + "webp" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Image format." + }, + "height": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Viewport height in pixels (3240 in the response for full_page captures)." + }, + "id": { + "description": "Grab id.", + "type": "string" + }, + "image_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Hosted image URL once status is done (relative for sk_test_ placeholders)." + }, + "status": { + "description": "Lifecycle state. Only done grabs have an image_url.", + "enum": [ + "pending", + "processing", + "done", + "failed" + ], + "type": "string" + }, + "target_url": { + "description": "The captured URL.", + "type": "string" + }, + "width": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Viewport width in pixels." + } + }, + "required": [ + "id", + "status" + ], + "type": "object" +}
- Changed
get_pricing1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "comparison": { + "additionalProperties": {}, + "properties": { + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "last_verified": { + "type": "string" + }, + "notes": { + "type": "string" + }, + "providers": { + "items": { + "additionalProperties": {}, + "properties": { + "agent_install": { + "type": "string" + }, + "billing": { + "type": "string" + }, + "features_supported": { + "items": { + "type": "string" + }, + "type": "array" + }, + "included": { + "type": "string" + }, + "is_grabbit": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "per_grab": { + "type": "string" + }, + "unused_credits": { + "type": "string" + } + }, + "required": [ + "name", + "per_grab", + "billing", + "included", + "unused_credits", + "features_supported", + "agent_install", + "is_grabbit" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "last_verified", + "features", + "providers", + "notes" + ], + "type": "object" + }, + "links": { + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + }, + "type": "object" + }, + "pricing": { + "additionalProperties": {}, + "properties": { + "annual": { + "additionalProperties": {}, + "properties": { + "credits_per_year": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "price_usd": { + "type": "number" + } + }, + "required": [ + "price_usd", + "credits_per_year" + ], + "type": "object" + }, + "billing_model": { + "type": "string" + }, + "currency": { + "type": "string" + }, + "free_tier": { + "type": "boolean" + }, + "per_grab_usd": { + "type": "number" + }, + "prepaid_packages": { + "items": { + "additionalProperties": {}, + "properties": { + "credits": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "name": { + "type": "string" + }, + "price_usd": { + "type": "number" + } + }, + "required": [ + "name", + "credits", + "price_usd" + ], + "type": "object" + }, + "type": "array" + }, + "test_mode": { + "type": "string" + } + }, + "required": [ + "per_grab_usd", + "currency", + "billing_model", + "free_tier", + "test_mode", + "annual", + "prepaid_packages" + ], + "type": "object" + } + }, + "required": [ + "pricing", + "comparison", + "links" + ], + "type": "object" +}
- Changed
get_usage1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "credits": { + "additionalProperties": {}, + "properties": { + "prepaid": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "subscription": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "total": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "subscription", + "prepaid", + "total" + ], + "type": "object" + }, + "environment": { + "enum": [ + "live", + "test" + ], + "type": "string" + }, + "plan": { + "additionalProperties": {}, + "properties": { + "expires_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "name", + "status", + "expires_at" + ], + "type": "object" + }, + "top_up": { + "description": "Where to buy more credits.", + "type": "string" + }, + "usage": { + "additionalProperties": {}, + "properties": { + "grabs_last_30d": { + "description": "All grabs, both environments.", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "live_grabs_last_30d": { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + } + }, + "required": [ + "grabs_last_30d", + "live_grabs_last_30d" + ], + "type": "object" + } + }, + "required": [ + "credits", + "plan", + "usage", + "environment", + "top_up" + ], + "type": "object" +}
- Changed
grab1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "bytes": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Image size in bytes." + }, + "created_at": { + "description": "ISO 8601 creation time.", + "type": "string" + }, + "credits_remaining": { + "description": "Team credits left after this grab (live keys only).", + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + "error_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Why a failed grab failed." + }, + "execution_ms": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Render time in milliseconds." + }, + "format": { + "anyOf": [ + { + "enum": [ + "png", + "jpeg", + "webp" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Image format." + }, + "height": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Viewport height in pixels (3240 in the response for full_page captures)." + }, + "id": { + "description": "Grab id.", + "type": "string" + }, + "image_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Hosted image URL once status is done (relative for sk_test_ placeholders)." + }, + "status": { + "description": "Lifecycle state. Only done grabs have an image_url.", + "enum": [ + "pending", + "processing", + "done", + "failed" + ], + "type": "string" + }, + "target_url": { + "description": "The captured URL.", + "type": "string" + }, + "width": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Viewport width in pixels." + } + }, + "required": [ + "id", + "status" + ], + "type": "object" +}
- Changed
list_grabs1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": {}, + "properties": { + "data": { + "items": { + "additionalProperties": {}, + "properties": { + "bytes": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Image size in bytes." + }, + "created_at": { + "description": "ISO 8601 creation time.", + "type": "string" + }, + "error_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Why a failed grab failed." + }, + "execution_ms": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Render time in milliseconds." + }, + "format": { + "anyOf": [ + { + "enum": [ + "png", + "jpeg", + "webp" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Image format." + }, + "height": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Viewport height in pixels (3240 in the response for full_page captures)." + }, + "id": { + "description": "Grab id.", + "type": "string" + }, + "image_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "description": "Hosted image URL once status is done (relative for sk_test_ placeholders)." + }, + "status": { + "description": "Lifecycle state. Only done grabs have an image_url.", + "enum": [ + "pending", + "processing", + "done", + "failed" + ], + "type": "string" + }, + "target_url": { + "description": "The captured URL.", + "type": "string" + }, + "width": { + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": 0, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Viewport width in pixels." + } + }, + "required": [ + "id", + "status", + "created_at" + ], + "type": "object" + }, + "type": "array" + }, + "has_more": { + "type": "boolean" + } + }, + "required": [ + "data", + "has_more" + ], + "type": "object" +}
5 tool updates
- First observed
get_grab - First observed
get_pricing - First observed
get_usage - First observed
grab - First observed
list_grabs
Publisher details
- Operator
- BrainGrid ยท Publisher source
- Operator website
- https://grabbit.live
- Vendor relationship
- First-party
- Documentation
- https://grabbit.live/screenshot-api
- Trust center
- Unknown
- Restrictions
- Requires a Grabbit account: sign in with OAuth 2.1 or use a Bearer API key. Live grabs are billed per capture from prepaid credits; test keys return free placeholder images for wiring up integrations.
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
- FlicenseNot gradedqualityDmaintenanceScreenshot & Render API for AI Agents. MCP Server lets Claude, Cursor capture webpages and render HTML. Direct access, no VPN needed.-
- AlicenseNot gradedqualityCmaintenanceHosted, SSRF-safe, cached screenshots and Open Graph images for AI agents - no headless Chrome to run.34 npmMIT
- AlicenseCqualityCmaintenanceHosted Playwright browser automation for AI agents. Returns accessibility trees instead of screenshots, cutting token usage by 77%. Navigate, interact, extract structured data, and take screenshots โ all via MCP. Zero infrastructure, credit-based pricing.6223 npmMIT
- AlicenseAqualityDmaintenanceMCP server for ScreenshotFreeAPI โ capture website screenshots, render HTML/PDF, and fetch app store listing screenshots from any MCP-compatible AI client.710 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.