Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
The server registers 19 tools with explicit names, descriptions, and input schemas. Most tools have clear action verbs (google_search, scrape_html, crawl_start) and descriptions ranging from 50-200 characters. However, there are significant gaps: output schemas are not documented anywhere in the source code provided; parameter descriptions lack detail on format constraints, validation rules, and error recovery guidance; and critical error handling patterns are absent. The tools follow basic Arcade patterns for naming and structure, but fall short of production-grade quality due to missing output documentation and incomplete parameter guidance. Average tool score across 19 tools: 62.
Query AI scraper actors (ChatGPT, Gemini, Perplexity, Copilot, Google AI Mode, Google AI Overview, Grok, or Alexa) with web search, shopping data, and more.
Click a specific element on the page. Restrictions: Requires a valid CSS selector for the target element. Valid: Click the button with selector "#submit-button". Invalid: Click "the login button" without providing a selector.
Closes the current session by disconnecting the cloud browser. This will terminate the recording for the session.
Create or reuse a cloud browser session using Scrapeless. Updates the active session.
Go back one step in browser history. Restrictions: Only works if a previous page exists in the session history. Valid: After navigating from page A to B, go back to A. Invalid: Attempting to go back on the first page of a session.
Output schemas not documented. No tool returns a documented schema, LLMs cannot plan downstream calls or extract typed data from responses. Critical for composition.
Parameter descriptions lack format constraints and validation rules. 'target URL' in scrape_html tells LLM nothing about required format, timeout, or error recovery. Missing format hints like 'must start with http://'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | C | 69 | - | v1 |
Go forward one step in browser history. Restrictions: Only works after a "go_back" action has been performed. Valid: After going back from page B to A, go forward to B. Invalid: Attempting to go forward without a preceding "go_back" action.
Navigate browser to a specified URL. Restrictions: Only for direct URL navigation, not for searches. Valid: Go to https://google.com. Invalid: Search for "cats" on Google (use google_search).
Capture the complete structure of a webpage, including DOM and resources, for inspection and analysis.
Type text into a specified input field. Restrictions: Requires a CSS selector for an input/textarea and the text to type. Valid: Type "hello world" into input "[name='q']". Invalid: Type "hello world" without specifying a target field.
Pause execution for a fixed duration. Restrictions: Requires a duration in milliseconds. Should be used sparingly. Valid: Wait for 2000 milliseconds. Invalid: Wait for a page to finish loading (use "browser_wait_for")
Wait for a specific page element to appear. Restrictions: Requires a valid CSS selector for the element to wait for. Valid: Wait for the element "#results" to become visible. Invalid: Wait for "the results to load" without a selector.
Cancel an in-progress crawl job by its id (the id returned by crawl_start). Returns the cancelled status.
Fetch the result of a crawl job by its id (the id returned by crawl_start). Polls the job status until it reaches a terminal state (completed / failed / cancelled) or the timeout is reached. If the timeout is reached before the job finishes, the latest status is returned along with the job id so you can retry later.
Start an asynchronous crawl job. Crawls a website starting from a base URL, following links according to the provided options, and captures page content in various formats (markdown, html, links, screenshot, etc.). Returns a job id that can be used with crawl_result to fetch results and crawl_cancel to cancel the job. Only 'url' is required; all other parameters are optional.
Universal Information Search Engine.Retrieves any data information; Explanatory queries (why, how).Comparative analysis requests
Get trending search data from Google Trends. Restrictions: Activated for queries about trends, popularity, or interest over time. Valid: Find the search interest for "AI" over the last year. Invalid: A general question like "What is AI?" (use google_search).
Scrape a URL and return its full HTML content. Restrictions: Activated for URLs that require JavaScript rendering or bot protection. Valid: Get HTML from a dynamic, JS-heavy single-page application. Invalid: Fetching a simple static page (use a standard HTTP client).
Scrape a URL and return its content as markdown.
Scrape a URL and return its screenshot.
No error handling guidance or recovery instructions. Tools like crawl_result and browser_wait_for do not document what happens on timeout, what errors are retryable, or what the LLM should do next. Silent failures expected.
Ambiguous parameter names in browser tools. 'sessionId' is optional but behavior when omitted is not clearly documented, does it create a new session, fail, or use a default? Missing or implicit state management.
Missing pagination/limit documentation. crawl_start accepts 'limit' but no guidance on default behavior when omitted, or maximum allowed value. LLMs may request 10000 items without realizing impact.
Sparse descriptions for simple tools. scrape_screenshot, scrape_markdown, browser_close, browser_create, and browser_snapshot have minimal descriptions (45-50 chars) providing little context for when to use them vs alternatives.
No idempotency declarations. Tools like browser_click, browser_type, crawl_start do not document whether they are idempotent (safe to retry). Agents need this to safely retry on transient failures.
Undocumented relationships between browser_create and other browser tools. The context manager pattern is opaque, does each tool auto-create a session if none exists? Does browser_create always update a global state? This creates silent failures.