Servidor MCP

oassis — web for agents

dev.oassis/web

Qué hace este MCP

Searches, maps, scrapes, crawls, and interactively browses web pages and documents, including structured extraction and browser actions.

web_act
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.
Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['sessionId', 'actions'], 'properties': {'url': {'type': 'string', 'description': 'Page to process.'}, 'json': {'type': 'object', 'properties': {'prompt': {'type': 'string'}, 'schema': {'type': 'object'}}, 'description': 'For the `json` format: `prompt` and/or `schema`.'}, 'wait': {'type': 'object', 'properties': {'until': {'enum': ['load', 'domcontentloaded', 'networkidle0', 'networkidle2'], 'type': 'string'}, 'timeout': {'type': 'number'}, 'selector': {'type': 'string'}}, 'description': 'When to consider the page loaded: `until`, `selector`, `timeout`.'}, 'maxAge': {'type': 'number', '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.'}, 'actions': {'type': 'array', 'items': {'type': 'object'}, 'description': 'Actions, in order.'}, 'formats': {'type': 'array', 'items': {'enum': ['html', 'markdown', 'links', 'screenshot', 'pdf', 'elements', 'json', 'accessibility', 'controls'], 'type': 'string'}, 'description': 'Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt`.'}, 'selectors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'CSS selectors for `elements`.'}, 'sessionId': {'type': 'string', 'description': 'The one web_session_open returned.'}}}
web_batch_status
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.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['jobId'], 'properties': {'jobId': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'Results to return (default 50).'}, 'cancel': {'type': 'boolean', 'description': 'Stop the batch and refund what it did not read.'}}}
web_crawl
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.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Where to start.'}, 'limit': {'type': 'number', 'description': 'Pages it may read (default 25, max 200).'}, 'maxAge': {'type': 'number', '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.'}, 'formats': {'type': 'array', 'items': {'enum': ['html', 'markdown', 'links', 'screenshot', 'pdf', 'elements', 'json', 'accessibility', 'controls'], 'type': 'string'}, 'description': 'Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt`.'}, 'maxDepth': {'type': 'number', 'description': 'How far to follow links (default 2, max 5).'}, 'excludePaths': {'type': 'array', 'items': {'type': 'string'}}, 'includePaths': {'type': 'array', 'items': {'type': 'string'}}, 'includeSubdomains': {'type': 'boolean'}}}
web_crawl_status
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.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['jobId'], 'properties': {'jobId': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'Pages to return (default 50).'}, 'cancel': {'type': 'boolean', 'description': 'Stop the crawl and refund what it did not read.'}}}
web_feedback
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.
Esquema de entrada
{'type': 'object', 'required': ['verdict'], 'properties': {'url': {'type': 'string', 'description': 'The page that came out wrong.'}, 'route': {'type': 'string', 'description': 'Which tool or endpoint it is about.'}, 'comment': {'type': 'string', 'description': 'What you expected and what you got.'}, 'verdict': {'enum': ['good', 'bad'], 'type': 'string'}, 'reference': {'type': 'string', 'description': 'The jobId or sessionId it happened on.'}}}
web_map
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.
Solo lectura Acceso externo Idempotente
Esquema de entrada
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'The site to map.'}, 'limit': {'type': 'number', 'description': 'Urls to return (default 1000, max 5000).'}, 'search': {'type': 'string', 'description': 'Keep only urls containing this text.'}, 'includePage': {'type': 'boolean', 'description': 'Render the page too (default true).'}, 'excludePaths': {'type': 'array', 'items': {'type': 'string'}}, 'includePaths': {'type': 'array', 'items': {'type': 'string'}}, 'includeSubdomains': {'type': 'boolean'}}}
web_scrape
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.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': [], 'properties': {'url': {'type': 'string', 'description': 'Page to process.'}, 'html': {'type': 'string', 'description': 'Raw HTML instead of `url`.'}, 'json': {'type': 'object', 'properties': {'prompt': {'type': 'string'}, 'schema': {'type': 'object'}}, 'description': 'For the `json` format: `prompt` and/or `schema`.'}, 'wait': {'type': 'object', 'properties': {'until': {'enum': ['load', 'domcontentloaded', 'networkidle0', 'networkidle2'], 'type': 'string'}, 'timeout': {'type': 'number'}, 'selector': {'type': 'string'}}, 'description': 'When to consider the page loaded: `until`, `selector`, `timeout`.'}, 'maxAge': {'type': 'number', '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.'}, 'formats': {'type': 'array', 'items': {'enum': ['html', 'markdown', 'links', 'screenshot', 'pdf', 'elements', 'json', 'accessibility', 'controls'], 'type': 'string'}, 'description': 'Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt`.'}, 'selectors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'CSS selectors for `elements`.'}}}
web_scrape_batch
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.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['urls'], 'properties': {'json': {'type': 'object', 'properties': {'prompt': {'type': 'string'}, 'schema': {'type': 'object'}}, 'description': 'For the `json` format: `prompt` and/or `schema`.'}, 'urls': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The urls to read, 2 to 50. They do not have to share a site.'}, 'wait': {'type': 'object', 'properties': {'until': {'enum': ['load', 'domcontentloaded', 'networkidle0', 'networkidle2'], 'type': 'string'}, 'timeout': {'type': 'number'}, 'selector': {'type': 'string'}}, 'description': 'When to consider the page loaded: `until`, `selector`, `timeout`.'}, 'maxAge': {'type': 'number', '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.'}, 'formats': {'type': 'array', 'items': {'enum': ['html', 'markdown', 'links', 'screenshot', 'pdf', 'elements', 'json', 'accessibility', 'controls'], 'type': 'string'}, 'description': 'Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt`.'}, 'selectors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'CSS selectors for `elements`.'}}}
web_search_exa
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.
Solo lectura Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'number', 'description': 'Results (default 10, max 50).'}, 'query': {'type': 'string', 'description': 'What to search for.'}, 'since': {'type': 'string', 'description': 'Only results published after this ISO date.'}, 'domains': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Only these domains.'}, 'snippets': {'type': 'boolean', 'description': 'Text alongside each result (default true).'}, 'excludeDomains': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Never these domains.'}}}
web_session_close
Closes a session and stops billing browser time. Free. If you do not close it, it closes itself after a minute without use.
Idempotente
Esquema de entrada
{'type': 'object', 'required': ['sessionId'], 'properties': {'sessionId': {'type': 'string'}}}
web_session_open
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.
Acceso externo
Esquema de entrada
{'type': 'object', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Page to process.'}, 'json': {'type': 'object', 'properties': {'prompt': {'type': 'string'}, 'schema': {'type': 'object'}}, 'description': 'For the `json` format: `prompt` and/or `schema`.'}, 'wait': {'type': 'object', 'properties': {'until': {'enum': ['load', 'domcontentloaded', 'networkidle0', 'networkidle2'], 'type': 'string'}, 'timeout': {'type': 'number'}, 'selector': {'type': 'string'}}, 'description': 'When to consider the page loaded: `until`, `selector`, `timeout`.'}, 'maxAge': {'type': 'number', '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.'}, 'formats': {'type': 'array', 'items': {'enum': ['html', 'markdown', 'links', 'screenshot', 'pdf', 'elements', 'json', 'accessibility', 'controls'], 'type': 'string'}, 'description': 'Outputs you want in the same response. `controls` is the map of what can be clicked; `elements` needs `selectors`; `json` needs `json.prompt`.'}, 'selectors': {'type': 'array', 'items': {'type': 'string'}, 'description': 'CSS selectors for `elements`.'}}}
Modificado
web_session_close
2 de October de 2026 a las 02:40
Modificado
web_feedback
2 de October de 2026 a las 02:40
Modificado
web_search_exa
2 de October de 2026 a las 02:40
Modificado
web_crawl_status
2 de October de 2026 a las 02:40
Modificado
web_crawl
2 de October de 2026 a las 02:40
Modificado
web_map
2 de October de 2026 a las 02:40
Modificado
web_batch_status
2 de October de 2026 a las 02:40
Modificado
web_scrape_batch
2 de October de 2026 a las 02:40
Modificado
web_act
2 de October de 2026 a las 02:40
Modificado
web_session_open
2 de October de 2026 a las 02:40
Modificado
web_scrape
2 de October de 2026 a las 02:40
Añadido
web_session_close
30 de September de 2026 a las 02:40
Añadido
web_feedback
30 de September de 2026 a las 02:40
Añadido
web_search_exa
30 de September de 2026 a las 02:40
Añadido
web_crawl_status
30 de September de 2026 a las 02:40
Añadido
web_crawl
30 de September de 2026 a las 02:40
Añadido
web_map
30 de September de 2026 a las 02:40
Añadido
web_batch_status
30 de September de 2026 a las 02:40
Añadido
web_scrape_batch
30 de September de 2026 a las 02:40
Añadido
web_act
30 de September de 2026 a las 02:40
Añadido
web_session_open
30 de September de 2026 a las 02:40
Añadido
web_scrape
30 de September de 2026 a las 02:40