Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,537Letters: 14Defects: 1,323counted 4 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:f09e6f7ebf86e7c74456c4c4dc045dea3dc10b2c4a527d95f68f9776e0edc234 | sha256sum