Server definition
- Hash
- sha256:f09e6f7ebf86e7c74456c4c4dc045dea3dc10b2c4a527d95f68f9776e0edc234
- 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.",
"inputSchema": {
"properties": {
"actions": {
"description": "Actions, in order.",
"items": {
"type": "object"
},
"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`.",
"items": {
"enum": [
"html",
"markdown",
"links",
"screenshot",
"pdf",
"elements",
"json",
"accessibility",
"controls"
],
"type": "string"
},
"type": "array"
},
"json": {
"description": "For the `json` format: `prompt` and/or `schema`.",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object"
}
},
"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.",
"type": "number"
},
"selectors": {
"description": "CSS selectors for `elements`.",
"items": {
"type": "string"
},
"type": "array"
},
"sessionId": {
"description": "The one web_session_open returned.",
"type": "string"
},
"url": {
"description": "Page to process.",
"type": "string"
},
"wait": {
"description": "When to consider the page loaded: `until`, `selector`, `timeout`.",
"properties": {
"selector": {
"type": "string"
},
"timeout": {
"type": "number"
},
"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": {
"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.",
"inputSchema": {
"properties": {
"excludePaths": {
"items": {
"type": "string"
},
"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`.",
"items": {
"enum": [
"html",
"markdown",
"links",
"screenshot",
"pdf",
"elements",
"json",
"accessibility",
"controls"
],
"type": "string"
},
"type": "array"
},
"includePaths": {
"items": {
"type": "string"
},
"type": "array"
},
"includeSubdomains": {
"type": "boolean"
},
"limit": {
"description": "Pages it may read (default 25, max 200).",
"type": "number"
},
"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.",
"type": "number"
},
"maxDepth": {
"description": "How far to follow links (default 2, max 5).",
"type": "number"
},
"url": {
"description": "Where to start.",
"type": "string"
}
},
"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": {
"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.",
"inputSchema": {
"properties": {
"comment": {
"description": "What you expected and what you got.",
"type": "string"
},
"reference": {
"description": "The jobId or sessionId it happened on.",
"type": "string"
},
"route": {
"description": "Which tool or endpoint it is about.",
"type": "string"
},
"url": {
"description": "The page that came out wrong.",
"type": "string"
},
"verdict": {
"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.0003 with `includePage: false` (no browser at all), $0.0015 with the page.",
"inputSchema": {
"properties": {
"excludePaths": {
"items": {
"type": "string"
},
"type": "array"
},
"includePage": {
"description": "Render the page too (default true).",
"type": "boolean"
},
"includePaths": {
"items": {
"type": "string"
},
"type": "array"
},
"includeSubdomains": {
"type": "boolean"
},
"limit": {
"description": "Urls to return (default 1000, max 5000).",
"type": "number"
},
"search": {
"description": "Keep only urls containing this text.",
"type": "string"
},
"url": {
"description": "The site to map.",
"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.",
"inputSchema": {
"properties": {
"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`.",
"items": {
"enum": [
"html",
"markdown",
"links",
"screenshot",
"pdf",
"elements",
"json",
"accessibility",
"controls"
],
"type": "string"
},
"type": "array"
},
"html": {
"description": "Raw HTML instead of `url`.",
"type": "string"
},
"json": {
"description": "For the `json` format: `prompt` and/or `schema`.",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object"
}
},
"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.",
"type": "number"
},
"selectors": {
"description": "CSS selectors for `elements`.",
"items": {
"type": "string"
},
"type": "array"
},
"url": {
"description": "Page to process.",
"type": "string"
},
"wait": {
"description": "When to consider the page loaded: `until`, `selector`, `timeout`.",
"properties": {
"selector": {
"type": "string"
},
"timeout": {
"type": "number"
},
"until": {
"enum": [
"load",
"domcontentloaded",
"networkidle0",
"networkidle2"
],
"type": "string"
}
},
"type": "object"
}
},
"required": [],
"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": {
"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`.",
"items": {
"enum": [
"html",
"markdown",
"links",
"screenshot",
"pdf",
"elements",
"json",
"accessibility",
"controls"
],
"type": "string"
},
"type": "array"
},
"json": {
"description": "For the `json` format: `prompt` and/or `schema`.",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object"
}
},
"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.",
"type": "number"
},
"selectors": {
"description": "CSS selectors for `elements`.",
"items": {
"type": "string"
},
"type": "array"
},
"urls": {
"description": "The urls to read, 2 to 50. They do not have to share a site.",
"items": {
"type": "string"
},
"type": "array"
},
"wait": {
"description": "When to consider the page loaded: `until`, `selector`, `timeout`.",
"properties": {
"selector": {
"type": "string"
},
"timeout": {
"type": "number"
},
"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.",
"items": {
"type": "string"
},
"type": "array"
},
"excludeDomains": {
"description": "Never these domains.",
"items": {
"type": "string"
},
"type": "array"
},
"limit": {
"description": "Results (default 10, max 50).",
"type": "number"
},
"query": {
"description": "What to search for.",
"type": "string"
},
"since": {
"description": "Only results published after this ISO date.",
"type": "string"
},
"snippets": {
"description": "Text alongside each result (default true).",
"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": {
"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.",
"inputSchema": {
"properties": {
"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`.",
"items": {
"enum": [
"html",
"markdown",
"links",
"screenshot",
"pdf",
"elements",
"json",
"accessibility",
"controls"
],
"type": "string"
},
"type": "array"
},
"json": {
"description": "For the `json` format: `prompt` and/or `schema`.",
"properties": {
"prompt": {
"type": "string"
},
"schema": {
"type": "object"
}
},
"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.",
"type": "number"
},
"selectors": {
"description": "CSS selectors for `elements`.",
"items": {
"type": "string"
},
"type": "array"
},
"url": {
"description": "Page to process.",
"type": "string"
},
"wait": {
"description": "When to consider the page loaded: `until`, `selector`, `timeout`.",
"properties": {
"selector": {
"type": "string"
},
"timeout": {
"type": "number"
},
"until": {
"enum": [
"load",
"domcontentloaded",
"networkidle0",
"networkidle2"
],
"type": "string"
}
},
"type": "object"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "web_session_open",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:f09e6f7ebf86e7c74456c4c4dc045dea3dc10b2c4a527d95f68f9776e0edc234 | sha256sum