Contract
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to fetch, including the http:// or https:// scheme."
},
"dedupe": {
"type": "boolean",
"default": false,
"description": "Remove visually duplicate images: every image is loaded and perceptually hashed and only the highest-resolution copy of each duplicate group is kept. Default false."
},
"maxAgeMs": {
"type": "integer",
"default": 86400000,
"maximum": 2592000000,
"minimum": 0,
"description": "Reuse a cached result younger than this many milliseconds. Default 86400000 (1 day), max 2592000000 (30 days). Set 0 to always fetch fresh."
},
"timeoutMS": {
"type": "integer",
"maximum": 300000,
"minimum": 1000,
"description": "Upstream timeout in milliseconds (max 300000). Context.dev aborts the call with a 408 when exceeded. Keep it below the endpoint's requestTimeoutMs so the provider answers before the platform's own budget expires."
},
"waitForMs": {
"type": "integer",
"maximum": 30000,
"minimum": 0,
"description": "Extra browser wait in milliseconds after page load before the content is captured (0-30000). Useful for JavaScript-heavy pages."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"success",
"url",
"images",
"cache_metadata"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "The URL that was scraped (echoes the request)."
},
"images": {
"type": "array",
"items": {
"type": "object",
"properties": {
"alt": {
"type": [
"string",
"null"
],
"description": "The image's alt text. Observed null on most images (including every linked asset seen) and a short string on at least one inline icon -- not reliably present."
},
"src": {
"type": "string",
"description": "The image's location: an absolute URL when `type` is \"url\" (a linked asset, e.g. an <img> src or favicon), or the raw inline markup (e.g. a full `<svg>...</svg>` string) when `type` is \"html\"."
},
"type": {
"type": "string",
"description": "\"url\" when `src` is a linked asset, \"html\" when `src` is inline markup."
},
"element": {
"type": "string",
"description": "The source HTML context the image was found in, e.g. \"img\", \"svg\", \"link\", \"meta\", or \"css\" (a CSS background-image), as observed across fixtures."
}
},
"additionalProperties": true
},
"description": "Every image asset found on the page, in document order. Empty when the page has no detectable image assets (observed on example.com)."
},
"success": {
"type": "boolean",
"description": "Whether the scrape completed successfully."
},
"cache_metadata": {
"type": "object",
"properties": {
"age_ms": {
"type": "number",
"description": "Age of the cached result in milliseconds. 0 on a fresh (miss) fetch."
},
"status": {
"type": "string",
"description": "\"miss\" or \"hit\", both observed across the two kept fixtures."
}
},
"description": "Whether this result was served from cache and, if so, how old it is.",
"additionalProperties": true
}
},
"description": "The scrape result, narrowed to routing.responseResultPath ($.output).",
"additionalProperties": true
}Pricing
Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.
Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.
| Charge | Rate |
|---|---|
Per call Flat, regardless of what comes back | $0.0012285 |
- Cost basis
- Not recorded
This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.
- Updated
- Sep 8, 2026
