Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,070Paid calls: 1,524Letters: 13Defects: 1,322counted 3 min ago
teppi

Server definition

Hash
sha256:564a68f22fccf828e48545b7da9965278c01041826a3be386a12628c320b2760
What it is
What a remote MCP server returned when asked what it offers: 11 tools

The blob, as servednamed by its sha256

{ "instructions": "Web extraction and browser control for agents. You can try it with no key and no account: 10 page or document reads a day, 10 site listings a day, and — once, ever — one browser session with 10 actions and 5 searches. Crawls, batches and AI extraction need a key. Call GET /mcp for the table. After that, send an API key in `Authorization: Bearer oas_…`, or pay per call with a wallet over the HTTP API (x402, USDC on Base) with no account at all. To read a page use web_scrape; to fill in or click something, open a session with web_session_open and act with web_act; to find urls use web_map before paying to read them.", "tools": [ { "description": "Runs actions against an open session and returns the resulting state. Actions: {navigate}, {click:{ref}}, {type:{ref,text,clear}}, {select:{ref,value}}, {press}, {scroll}, {wait}, {back}. The `ref` is the one `controls` gave you. It stops at the first failure and tells you where. $0.0005 per action. Reference for the oassis API: https://oassis.dev/openapi.json", "inputSchema": { "properties": { "actions": { "description": "What to do, in order: click, type, select, scroll, hover, press, navigate, wait. One to twenty-five per call.", "items": { "anyOf": [ { "additionalProperties": false, "properties": { "navigate": { "format": "uri", "type": "string" } }, "required": [ "navigate" ], "type": "object" }, { "additionalProperties": false, "properties": { "click": { "additionalProperties": false, "properties": { "ref": { "minLength": 1, "type": "string" }, "selector": { "minLength": 1, "type": "string" } }, "type": "object" } }, "required": [ "click" ], "type": "object" }, { "additionalProperties": false, "properties": { "type": { "additionalProperties": false, "properties": { "clear": { "type": "boolean" }, "ref": { "minLength": 1, "type": "string" }, "selector": { "minLength": 1, "type": "string" }, "text": { "type": "string" } }, "required": [ "text" ], "type": "object" } }, "required": [ "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "select": { "additionalProperties": false, "properties": { "ref": { "minLength": 1, "type": "string" }, "selector": { "minLength": 1, "type": "string" }, "value": { "type": "string" } }, "required": [ "value" ], "type": "object" } }, "required": [ "select" ], "type": "object" }, { "additionalProperties": false, "properties": { "press": { "minLength": 1, "type": "string" } }, "required": [ "press" ], "type": "object" }, { "additionalProperties": false, "properties": { "scroll": { "additionalProperties": false, "properties": { "by": { "type": "number" }, "to": { "enum": [ "top", "bottom" ], "type": "string" } }, "type": "object" } }, "required": [ "scroll" ], "type": "object" }, { "additionalProperties": false, "properties": { "wait": { "additionalProperties": false, "properties": { "ms": { "maximum": 30000, "minimum": 0, "type": "integer" }, "selector": { "minLength": 1, "type": "string" } }, "type": "object" } }, "required": [ "wait" ], "type": "object" }, { "additionalProperties": false, "properties": { "back": { "const": true, "type": "boolean" } }, "required": [ "back" ], "type": "object" } ] }, "maxItems": 25, "minItems": 1, "type": "array" }, "binaryAs": { "default": "base64", "description": "How a screenshot or a PDF comes back. `base64` is the only value today.", "enum": [ "base64", "url" ], "type": "string" }, "block": { "additionalProperties": false, "description": "What not to load, which makes a render faster and cheaper. `resourceTypes` takes image, font, stylesheet, media… and `urlPatterns` are regular expressions, not globs: `\\.svg$`, not `*.svg`.", "properties": { "resourceTypes": { "items": { "minLength": 1, "type": "string" }, "type": "array" }, "urlPatterns": { "items": { "minLength": 1, "type": "string" }, "type": "array" } }, "type": "object" }, "controls": { "additionalProperties": false, "description": "Options for the `controls` format: `visibleOnly`, and `limit` (1 to 1000) to cut the map.", "properties": { "limit": { "maximum": 1000, "minimum": 1, "type": "integer" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "formats": { "default": [ "controls" ], "description": "Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt` or `json.schema`.", "items": { "enum": [ "html", "markdown", "links", "screenshot", "pdf", "elements", "json", "accessibility", "controls" ], "type": "string" }, "maxItems": 9, "minItems": 1, "type": "array" }, "json": { "additionalProperties": false, "description": "For the `json` format: a `prompt` describing what to pull out, a JSON `schema` to fill, or both.", "properties": { "model": { "minLength": 1, "type": "string" }, "prompt": { "minLength": 1, "type": "string" }, "schema": { "additionalProperties": {}, "type": "object" } }, "type": "object" }, "links": { "additionalProperties": false, "description": "Options for the `links` format: `visibleOnly`, `excludeExternal` to keep only internal links.", "properties": { "excludeExternal": { "type": "boolean" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "maxAge": { "description": "Accept an answer up to this many milliseconds old. A cache hit costs $0.0002 instead of the format price. Leave it out to force a fresh render.", "maximum": 604800000, "minimum": 0, "type": "integer" }, "pdf": { "additionalProperties": false, "description": "Options for the `pdf` format: `format` (a4, letter, legal…), `landscape`, `printBackground`, `scale` 0.1 to 2.", "properties": { "format": { "enum": [ "letter", "legal", "tabloid", "ledger", "a0", "a1", "a2", "a3", "a4", "a5", "a6" ], "type": "string" }, "landscape": { "type": "boolean" }, "printBackground": { "type": "boolean" }, "scale": { "maximum": 2, "minimum": 0.1, "type": "number" } }, "type": "object" }, "request": { "additionalProperties": false, "description": "How to make the request: `headers`, `cookies`, `userAgent`, and `auth` for basic authentication.", "properties": { "auth": { "additionalProperties": false, "properties": { "password": { "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "password" ], "type": "object" }, "cookies": { "items": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "httpOnly": { "type": "boolean" }, "name": { "minLength": 1, "type": "string" }, "path": { "type": "string" }, "secure": { "type": "boolean" }, "value": { "type": "string" } }, "required": [ "name", "value" ], "type": "object" }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "userAgent": { "minLength": 1, "type": "string" } }, "type": "object" }, "screenshot": { "additionalProperties": false, "description": "Options for the `screenshot` format: `fullPage` for the whole page, `type` (png, jpeg, webp), `quality` 1-100 (not with png), `omitBackground`, `selector` to capture one element, and its own `viewport`.", "properties": { "fullPage": { "type": "boolean" }, "omitBackground": { "type": "boolean" }, "quality": { "maximum": 100, "minimum": 1, "type": "integer" }, "selector": { "minLength": 1, "type": "string" }, "type": { "enum": [ "png", "jpeg", "webp" ], "type": "string" }, "viewport": { "additionalProperties": false, "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" } }, "type": "object" }, "selectors": { "description": "CSS selectors for the `elements` format.", "items": { "minLength": 1, "type": "string" }, "minItems": 1, "type": "array" }, "sessionId": { "description": "The session to act on, from `web_session_open`.", "minLength": 1, "type": "string" }, "url": { "description": "Page to process.", "format": "uri", "type": "string" }, "viewport": { "additionalProperties": false, "description": "The window to render in: `width`, `height`, `deviceScaleFactor`.", "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" }, "wait": { "additionalProperties": false, "description": "When to consider the page loaded: `until` (load, domcontentloaded, networkidle0, networkidle2), `selector` to wait for, `timeout` in ms.", "properties": { "selector": { "minLength": 1, "type": "string" }, "timeout": { "maximum": 60000, "minimum": 100, "type": "integer" }, "until": { "enum": [ "load", "domcontentloaded", "networkidle0", "networkidle2" ], "type": "string" } }, "type": "object" } }, "required": [ "sessionId", "actions" ], "type": "object" }, "name": "web_act", "outputSchema": null }, { "description": "Checks a batch of scrapes: status, how many are done, and the results. Free. Pass `cancel: true` to stop it and get the urls it never read refunded.", "inputSchema": { "properties": { "cancel": { "description": "Stop the batch and refund what it did not read.", "type": "boolean" }, "jobId": { "description": "The batch, from web_scrape_batch.", "type": "string" }, "limit": { "description": "Results to return (default 50).", "type": "number" } }, "required": [ "jobId" ], "type": "object" }, "name": "web_batch_status", "outputSchema": null }, { "description": "Follows a site's links and reads every page. Returns a jobId; poll it with web_crawl_status. Charged up front for the pages it is allowed to read (`limit`), and the pages it never reads are refunded. Use web_map first if you only need the urls. Reference for the oassis API: https://oassis.dev/openapi.json", "inputSchema": { "properties": { "binaryAs": { "default": "base64", "description": "How a screenshot or a PDF comes back. `base64` is the only value today.", "enum": [ "base64", "url" ], "type": "string" }, "block": { "additionalProperties": false, "description": "What not to load, which makes a render faster and cheaper. `resourceTypes` takes image, font, stylesheet, media… and `urlPatterns` are regular expressions, not globs: `\\.svg$`, not `*.svg`.", "properties": { "resourceTypes": { "items": { "minLength": 1, "type": "string" }, "type": "array" }, "urlPatterns": { "items": { "minLength": 1, "type": "string" }, "type": "array" } }, "type": "object" }, "controls": { "additionalProperties": false, "description": "Options for the `controls` format: `visibleOnly`, and `limit` (1 to 1000) to cut the map.", "properties": { "limit": { "maximum": 1000, "minimum": 1, "type": "integer" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "excludePaths": { "description": "Discard urls whose path contains one of these. Up to twenty. It wins over `includePaths`.", "items": { "minLength": 1, "type": "string" }, "maxItems": 20, "type": "array" }, "formats": { "description": "Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt` or `json.schema`. A screenshot or a PDF is not available here: every result is kept until you collect it. Ask for those one url at a time on web_scrape.", "items": { "enum": [ "html", "markdown", "links", "elements", "json", "accessibility", "controls" ], "type": "string" }, "type": "array" }, "includePaths": { "description": "Keep only urls whose path contains one of these. Up to twenty.", "items": { "minLength": 1, "type": "string" }, "maxItems": 20, "type": "array" }, "includeSubdomains": { "description": "Treat subdomains of the same site as part of it.", "type": "boolean" }, "json": { "additionalProperties": false, "description": "For the `json` format: a `prompt` describing what to pull out, a JSON `schema` to fill, or both.", "properties": { "model": { "minLength": 1, "type": "string" }, "prompt": { "minLength": 1, "type": "string" }, "schema": { "additionalProperties": {}, "type": "object" } }, "type": "object" }, "limit": { "default": 25, "description": "Pages this crawl may read, up to 200. Charged up front; what it does not read comes back.", "maximum": 200, "minimum": 1, "type": "integer" }, "links": { "additionalProperties": false, "description": "Options for the `links` format: `visibleOnly`, `excludeExternal` to keep only internal links.", "properties": { "excludeExternal": { "type": "boolean" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "maxAge": { "description": "Accept an answer up to this many milliseconds old. A cache hit costs $0.0002 instead of the format price. Leave it out to force a fresh render.", "maximum": 604800000, "minimum": 0, "type": "integer" }, "maxDepth": { "default": 2, "description": "How far from the starting page to follow links. 0 reads only the starting page.", "maximum": 5, "minimum": 0, "type": "integer" }, "request": { "additionalProperties": false, "description": "How to make the request: `headers`, `cookies`, `userAgent`, and `auth` for basic authentication.", "properties": { "auth": { "additionalProperties": false, "properties": { "password": { "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "password" ], "type": "object" }, "cookies": { "items": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "httpOnly": { "type": "boolean" }, "name": { "minLength": 1, "type": "string" }, "path": { "type": "string" }, "secure": { "type": "boolean" }, "value": { "type": "string" } }, "required": [ "name", "value" ], "type": "object" }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "userAgent": { "minLength": 1, "type": "string" } }, "type": "object" }, "selectors": { "description": "CSS selectors for the `elements` format.", "items": { "minLength": 1, "type": "string" }, "minItems": 1, "type": "array" }, "url": { "description": "Page to process.", "format": "uri", "type": "string" }, "viewport": { "additionalProperties": false, "description": "The window to render in: `width`, `height`, `deviceScaleFactor`.", "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" }, "wait": { "additionalProperties": false, "description": "When to consider the page loaded: `until` (load, domcontentloaded, networkidle0, networkidle2), `selector` to wait for, `timeout` in ms.", "properties": { "selector": { "minLength": 1, "type": "string" }, "timeout": { "maximum": 60000, "minimum": 100, "type": "integer" }, "until": { "enum": [ "load", "domcontentloaded", "networkidle0", "networkidle2" ], "type": "string" } }, "type": "object" } }, "required": [ "url" ], "type": "object" }, "name": "web_crawl", "outputSchema": null }, { "description": "Checks a crawl: status, pages read, discovered and still queued, and the pages themselves. Free. Pass `cancel: true` to stop it and get the unread pages refunded.", "inputSchema": { "properties": { "cancel": { "description": "Stop the crawl and refund what it did not read.", "type": "boolean" }, "jobId": { "description": "The crawl, from web_crawl.", "type": "string" }, "limit": { "description": "Pages to return (default 50).", "type": "number" } }, "required": [ "jobId" ], "type": "object" }, "name": "web_crawl_status", "outputSchema": null }, { "description": "Tell us an answer was good or bad. FREE. Use it when a result is wrong — empty markdown, a control map missing a button, data that does not match the page — with the url or the jobId so it can be reproduced. It is the only way we learn that we read a page badly: our logs cannot tell that apart from a page that is simply like that. Reference for the oassis API: https://oassis.dev/openapi.json", "inputSchema": { "properties": { "comment": { "description": "What you expected and what you got.", "maxLength": 2000, "minLength": 1, "type": "string" }, "reference": { "description": "The jobId or sessionId it happened on, so it can be looked up.", "maxLength": 200, "minLength": 1, "type": "string" }, "route": { "description": "Which tool or endpoint it is about, as you called it.", "maxLength": 120, "minLength": 1, "type": "string" }, "url": { "description": "The page that came out wrong: usually the fastest way to reproduce it.", "format": "uri", "type": "string" }, "verdict": { "description": "Did the answer do the job or not.", "enum": [ "good", "bad" ], "type": "string" } }, "required": [ "verdict" ], "type": "object" }, "name": "web_feedback", "outputSchema": null }, { "description": "Every url of a site, fast and cheap: its sitemap plus, optionally, the links on the page. Use it BEFORE crawling, to see what is there and decide what is worth reading. $0.001 with `includePage: false` (no browser at all), $0.0015 with the page. Reference for the oassis API: https://oassis.dev/openapi.json", "inputSchema": { "properties": { "excludePaths": { "description": "Discard urls whose path contains one of these. Up to twenty. It wins over `includePaths`.", "items": { "minLength": 1, "type": "string" }, "maxItems": 20, "type": "array" }, "includePage": { "description": "Render the page too, to catch urls the sitemap does not list. `false` uses no browser at all and costs a third.", "type": "boolean" }, "includePaths": { "description": "Keep only urls whose path contains one of these. Up to twenty.", "items": { "minLength": 1, "type": "string" }, "maxItems": 20, "type": "array" }, "includeSubdomains": { "description": "Treat subdomains of the same site as part of it.", "type": "boolean" }, "limit": { "default": 1000, "description": "Urls to return. Up to 5000.", "maximum": 5000, "minimum": 1, "type": "integer" }, "search": { "description": "Keep only urls containing this text.", "maxLength": 200, "minLength": 1, "type": "string" }, "url": { "description": "Page to process.", "format": "uri", "type": "string" } }, "required": [ "url" ], "type": "object" }, "name": "web_map", "outputSchema": null }, { "description": "Processes a page and returns every output you ask for at once: markdown, html, links, screenshot, PDF, accessibility tree, elements by selector, AI-structured data, and `controls` (what can be clicked). One call, and a partial failure does not void the rest. From $0.001 per output. A url pointing at a PDF, Word, Excel or CSV file is converted to markdown instead, with no browser, for $0.002. Reference for the oassis API: https://oassis.dev/openapi.json", "inputSchema": { "properties": { "binaryAs": { "default": "base64", "description": "How a screenshot or a PDF comes back. `base64` is the only value today.", "enum": [ "base64", "url" ], "type": "string" }, "block": { "additionalProperties": false, "description": "What not to load, which makes a render faster and cheaper. `resourceTypes` takes image, font, stylesheet, media… and `urlPatterns` are regular expressions, not globs: `\\.svg$`, not `*.svg`.", "properties": { "resourceTypes": { "items": { "minLength": 1, "type": "string" }, "type": "array" }, "urlPatterns": { "items": { "minLength": 1, "type": "string" }, "type": "array" } }, "type": "object" }, "controls": { "additionalProperties": false, "description": "Options for the `controls` format: `visibleOnly`, and `limit` (1 to 1000) to cut the map.", "properties": { "limit": { "maximum": 1000, "minimum": 1, "type": "integer" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "formats": { "default": [ "markdown" ], "description": "Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt` or `json.schema`.", "items": { "enum": [ "html", "markdown", "links", "screenshot", "pdf", "elements", "json", "accessibility", "controls" ], "type": "string" }, "maxItems": 9, "minItems": 1, "type": "array" }, "html": { "description": "Raw HTML instead of `url`, for a page you already have. Nothing leaves for the network.", "minLength": 1, "type": "string" }, "json": { "additionalProperties": false, "description": "For the `json` format: a `prompt` describing what to pull out, a JSON `schema` to fill, or both.", "properties": { "model": { "minLength": 1, "type": "string" }, "prompt": { "minLength": 1, "type": "string" }, "schema": { "additionalProperties": {}, "type": "object" } }, "type": "object" }, "links": { "additionalProperties": false, "description": "Options for the `links` format: `visibleOnly`, `excludeExternal` to keep only internal links.", "properties": { "excludeExternal": { "type": "boolean" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "maxAge": { "description": "Accept an answer up to this many milliseconds old. A cache hit costs $0.0002 instead of the format price. Leave it out to force a fresh render.", "maximum": 604800000, "minimum": 0, "type": "integer" }, "pdf": { "additionalProperties": false, "description": "Options for the `pdf` format: `format` (a4, letter, legal…), `landscape`, `printBackground`, `scale` 0.1 to 2.", "properties": { "format": { "enum": [ "letter", "legal", "tabloid", "ledger", "a0", "a1", "a2", "a3", "a4", "a5", "a6" ], "type": "string" }, "landscape": { "type": "boolean" }, "printBackground": { "type": "boolean" }, "scale": { "maximum": 2, "minimum": 0.1, "type": "number" } }, "type": "object" }, "request": { "additionalProperties": false, "description": "How to make the request: `headers`, `cookies`, `userAgent`, and `auth` for basic authentication.", "properties": { "auth": { "additionalProperties": false, "properties": { "password": { "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "password" ], "type": "object" }, "cookies": { "items": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "httpOnly": { "type": "boolean" }, "name": { "minLength": 1, "type": "string" }, "path": { "type": "string" }, "secure": { "type": "boolean" }, "value": { "type": "string" } }, "required": [ "name", "value" ], "type": "object" }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "userAgent": { "minLength": 1, "type": "string" } }, "type": "object" }, "screenshot": { "additionalProperties": false, "description": "Options for the `screenshot` format: `fullPage` for the whole page, `type` (png, jpeg, webp), `quality` 1-100 (not with png), `omitBackground`, `selector` to capture one element, and its own `viewport`.", "properties": { "fullPage": { "type": "boolean" }, "omitBackground": { "type": "boolean" }, "quality": { "maximum": 100, "minimum": 1, "type": "integer" }, "selector": { "minLength": 1, "type": "string" }, "type": { "enum": [ "png", "jpeg", "webp" ], "type": "string" }, "viewport": { "additionalProperties": false, "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" } }, "type": "object" }, "selectors": { "description": "CSS selectors for the `elements` format.", "items": { "minLength": 1, "type": "string" }, "minItems": 1, "type": "array" }, "url": { "description": "Page to process.", "format": "uri", "type": "string" }, "viewport": { "additionalProperties": false, "description": "The window to render in: `width`, `height`, `deviceScaleFactor`.", "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" }, "wait": { "additionalProperties": false, "description": "When to consider the page loaded: `until` (load, domcontentloaded, networkidle0, networkidle2), `selector` to wait for, `timeout` in ms.", "properties": { "selector": { "minLength": 1, "type": "string" }, "timeout": { "maximum": 60000, "minimum": 100, "type": "integer" }, "until": { "enum": [ "load", "domcontentloaded", "networkidle0", "networkidle2" ], "type": "string" } }, "type": "object" } }, "type": "object" }, "name": "web_scrape", "outputSchema": null }, { "description": "A batch OF SCRAPES: reads a list of urls YOU give it (2 to 50, from any sites) and returns a jobId. It discovers nothing on its own — for that use web_crawl. Charged up front per url; urls that fail and urls served from the cache are refunded. Poll it with web_batch_status.", "inputSchema": { "properties": { "binaryAs": { "default": "base64", "description": "How a screenshot or a PDF comes back. `base64` is the only value today.", "enum": [ "base64", "url" ], "type": "string" }, "block": { "additionalProperties": false, "description": "What not to load, which makes a render faster and cheaper. `resourceTypes` takes image, font, stylesheet, media… and `urlPatterns` are regular expressions, not globs: `\\.svg$`, not `*.svg`.", "properties": { "resourceTypes": { "items": { "minLength": 1, "type": "string" }, "type": "array" }, "urlPatterns": { "items": { "minLength": 1, "type": "string" }, "type": "array" } }, "type": "object" }, "controls": { "additionalProperties": false, "description": "Options for the `controls` format: `visibleOnly`, and `limit` (1 to 1000) to cut the map.", "properties": { "limit": { "maximum": 1000, "minimum": 1, "type": "integer" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "formats": { "description": "Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt` or `json.schema`. A screenshot or a PDF is not available here: every result is kept until you collect it. Ask for those one url at a time on web_scrape.", "items": { "enum": [ "html", "markdown", "links", "elements", "json", "accessibility", "controls" ], "type": "string" }, "type": "array" }, "json": { "additionalProperties": false, "description": "For the `json` format: a `prompt` describing what to pull out, a JSON `schema` to fill, or both.", "properties": { "model": { "minLength": 1, "type": "string" }, "prompt": { "minLength": 1, "type": "string" }, "schema": { "additionalProperties": {}, "type": "object" } }, "type": "object" }, "links": { "additionalProperties": false, "description": "Options for the `links` format: `visibleOnly`, `excludeExternal` to keep only internal links.", "properties": { "excludeExternal": { "type": "boolean" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "maxAge": { "description": "Accept an answer up to this many milliseconds old. A cache hit costs $0.0002 instead of the format price. Leave it out to force a fresh render.", "maximum": 604800000, "minimum": 0, "type": "integer" }, "request": { "additionalProperties": false, "description": "How to make the request: `headers`, `cookies`, `userAgent`, and `auth` for basic authentication.", "properties": { "auth": { "additionalProperties": false, "properties": { "password": { "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "password" ], "type": "object" }, "cookies": { "items": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "httpOnly": { "type": "boolean" }, "name": { "minLength": 1, "type": "string" }, "path": { "type": "string" }, "secure": { "type": "boolean" }, "value": { "type": "string" } }, "required": [ "name", "value" ], "type": "object" }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "userAgent": { "minLength": 1, "type": "string" } }, "type": "object" }, "selectors": { "description": "CSS selectors for the `elements` format.", "items": { "minLength": 1, "type": "string" }, "minItems": 1, "type": "array" }, "urls": { "description": "The pages of this batch. Two to fifty, no duplicates: a batch charges per url.", "items": { "format": "uri", "type": "string" }, "maxItems": 50, "minItems": 2, "type": "array" }, "viewport": { "additionalProperties": false, "description": "The window to render in: `width`, `height`, `deviceScaleFactor`.", "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" }, "wait": { "additionalProperties": false, "description": "When to consider the page loaded: `until` (load, domcontentloaded, networkidle0, networkidle2), `selector` to wait for, `timeout` in ms.", "properties": { "selector": { "minLength": 1, "type": "string" }, "timeout": { "maximum": 60000, "minimum": 100, "type": "integer" }, "until": { "enum": [ "load", "domcontentloaded", "networkidle0", "networkidle2" ], "type": "string" } }, "type": "object" } }, "required": [ "urls" ], "type": "object" }, "name": "web_scrape_batch", "outputSchema": null }, { "description": "Search the web with Exa's index: a query instead of a url, for when you do not know where to look. Returns title, url and a snippet per result. To read the pages, pass the urls to web_scrape_batch. The engine is named because the price is Exa's, passed through with no markup and read from its own payment challenge on every call — today $0.007 per search.", "inputSchema": { "properties": { "domains": { "description": "Only these domains, subdomains included: `example.com` also matches `docs.example.com`.", "items": { "minLength": 1, "type": "string" }, "maxItems": 20, "type": "array" }, "excludeDomains": { "description": "Never these domains, subdomains included.", "items": { "minLength": 1, "type": "string" }, "maxItems": 20, "type": "array" }, "limit": { "default": 10, "description": "Results to return. Up to 50.", "maximum": 50, "minimum": 1, "type": "integer" }, "query": { "description": "What to search for.", "maxLength": 500, "minLength": 1, "type": "string" }, "since": { "description": "Only results published after this ISO date.", "maxLength": 30, "minLength": 4, "type": "string" }, "snippets": { "description": "Text alongside each result. On by default: a bare url is rarely enough.", "type": "boolean" } }, "required": [ "query" ], "type": "object" }, "name": "web_search_exa", "outputSchema": null }, { "description": "Closes a session and stops billing browser time. Free. If you do not close it, it closes itself after a minute without use.", "inputSchema": { "properties": { "sessionId": { "description": "The session to close, from web_session_open.", "type": "string" } }, "required": [ "sessionId" ], "type": "object" }, "name": "web_session_close", "outputSchema": null }, { "description": "Opens a browser on a page and leaves it open, returning the map of controls. Use it when something has to be FILLED IN or CLICKED, not just read: inside the session the `controls` references keep working and you can act on the same state. $0.005 plus the outputs. Close it with web_session_close when you are done. Reference for the oassis API: https://oassis.dev/openapi.json", "inputSchema": { "properties": { "binaryAs": { "default": "base64", "description": "How a screenshot or a PDF comes back. `base64` is the only value today.", "enum": [ "base64", "url" ], "type": "string" }, "block": { "additionalProperties": false, "description": "What not to load, which makes a render faster and cheaper. `resourceTypes` takes image, font, stylesheet, media… and `urlPatterns` are regular expressions, not globs: `\\.svg$`, not `*.svg`.", "properties": { "resourceTypes": { "items": { "minLength": 1, "type": "string" }, "type": "array" }, "urlPatterns": { "items": { "minLength": 1, "type": "string" }, "type": "array" } }, "type": "object" }, "controls": { "additionalProperties": false, "description": "Options for the `controls` format: `visibleOnly`, and `limit` (1 to 1000) to cut the map.", "properties": { "limit": { "maximum": 1000, "minimum": 1, "type": "integer" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "formats": { "default": [ "controls" ], "description": "Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt` or `json.schema`.", "items": { "enum": [ "html", "markdown", "links", "screenshot", "pdf", "elements", "json", "accessibility", "controls" ], "type": "string" }, "maxItems": 9, "minItems": 1, "type": "array" }, "json": { "additionalProperties": false, "description": "For the `json` format: a `prompt` describing what to pull out, a JSON `schema` to fill, or both.", "properties": { "model": { "minLength": 1, "type": "string" }, "prompt": { "minLength": 1, "type": "string" }, "schema": { "additionalProperties": {}, "type": "object" } }, "type": "object" }, "links": { "additionalProperties": false, "description": "Options for the `links` format: `visibleOnly`, `excludeExternal` to keep only internal links.", "properties": { "excludeExternal": { "type": "boolean" }, "visibleOnly": { "type": "boolean" } }, "type": "object" }, "maxAge": { "description": "Accept an answer up to this many milliseconds old. A cache hit costs $0.0002 instead of the format price. Leave it out to force a fresh render.", "maximum": 604800000, "minimum": 0, "type": "integer" }, "pdf": { "additionalProperties": false, "description": "Options for the `pdf` format: `format` (a4, letter, legal…), `landscape`, `printBackground`, `scale` 0.1 to 2.", "properties": { "format": { "enum": [ "letter", "legal", "tabloid", "ledger", "a0", "a1", "a2", "a3", "a4", "a5", "a6" ], "type": "string" }, "landscape": { "type": "boolean" }, "printBackground": { "type": "boolean" }, "scale": { "maximum": 2, "minimum": 0.1, "type": "number" } }, "type": "object" }, "request": { "additionalProperties": false, "description": "How to make the request: `headers`, `cookies`, `userAgent`, and `auth` for basic authentication.", "properties": { "auth": { "additionalProperties": false, "properties": { "password": { "type": "string" }, "username": { "type": "string" } }, "required": [ "username", "password" ], "type": "object" }, "cookies": { "items": { "additionalProperties": false, "properties": { "domain": { "type": "string" }, "httpOnly": { "type": "boolean" }, "name": { "minLength": 1, "type": "string" }, "path": { "type": "string" }, "secure": { "type": "boolean" }, "value": { "type": "string" } }, "required": [ "name", "value" ], "type": "object" }, "type": "array" }, "headers": { "additionalProperties": { "type": "string" }, "type": "object" }, "userAgent": { "minLength": 1, "type": "string" } }, "type": "object" }, "screenshot": { "additionalProperties": false, "description": "Options for the `screenshot` format: `fullPage` for the whole page, `type` (png, jpeg, webp), `quality` 1-100 (not with png), `omitBackground`, `selector` to capture one element, and its own `viewport`.", "properties": { "fullPage": { "type": "boolean" }, "omitBackground": { "type": "boolean" }, "quality": { "maximum": 100, "minimum": 1, "type": "integer" }, "selector": { "minLength": 1, "type": "string" }, "type": { "enum": [ "png", "jpeg", "webp" ], "type": "string" }, "viewport": { "additionalProperties": false, "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" } }, "type": "object" }, "selectors": { "description": "CSS selectors for the `elements` format.", "items": { "minLength": 1, "type": "string" }, "minItems": 1, "type": "array" }, "url": { "description": "Page to process.", "format": "uri", "type": "string" }, "viewport": { "additionalProperties": false, "description": "The window to render in: `width`, `height`, `deviceScaleFactor`.", "properties": { "deviceScaleFactor": { "maximum": 3, "minimum": 0.1, "type": "number" }, "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" }, "wait": { "additionalProperties": false, "description": "When to consider the page loaded: `until` (load, domcontentloaded, networkidle0, networkidle2), `selector` to wait for, `timeout` in ms.", "properties": { "selector": { "minLength": 1, "type": "string" }, "timeout": { "maximum": 60000, "minimum": 100, "type": "integer" }, "until": { "enum": [ "load", "domcontentloaded", "networkidle0", "networkidle2" ], "type": "string" } }, "type": "object" } }, "required": [ "url" ], "type": "object" }, "name": "web_session_open", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:564a68f22fccf828e48545b7da9965278c01041826a3be386a12628c320b2760 | sha256sum