Skip to main content
Glama
real-browser-mcp-server
by codeiva11

🦁 Real Browser MCP

npm version Node.js Version Build & Test License: ISC

A production-ready Model Context Protocol (MCP) server that equips AI agents with a reliable, controlled web browser for automation and testing. Built on Patchright (a hardened Playwright fork) and integrated with Ghostery Adblocker, Ghost Cursor (natural mouse dynamics), and an automation assistant for Cloudflare Turnstile challenges.

This server is 100% compatible with all major AI IDEs (Cursor, VS Code, Cline, Roo Code, Windsurf, PearAI, OpenCode, Kilo Code, and Claude Desktop) using standard STDIO communication.

πŸ“‹ See POLICY.md for acceptable use guidelines. This tool is intended for QA, testing, accessibility automation, and authorized research.


βš™οΈ Installation & Setup

Since this project is published on NPM, you can run it either globally via npx / npm, or locally by building from source.

⚑ Quick Start (Using npx)

Add the following to your MCP Configuration file (e.g. cline_mcp_settings.json, claude_desktop_config.json, or Cursor):

{
  "mcpServers": {
    "real-browser": {
      "command": "npx",
      "args": ["-y", "real-browser-mcp-server@latest", "mcp"]
    }
  }
}

πŸ’» Local Run (Direct Source / Pre-built)

If running directly from the local repository build:

{
  "mcpServers": {
    "real_browser_mcp_server": {
      "command": "node",
      "args": [
        "E:/Github-Software/Real-Browser-Mcp/dist/src/index.js"
      ],
      "env": {
        "AI_HEALING": "true",
        "HEADLESS": "false"
      }
    }
  }
}

🌍 Global Installation

Install it globally on your system. The hardened browser (Patchright Chromium) is downloaded automatically during install β€” no extra steps needed:

# One command: installs the server AND auto-downloads Patchright Chromium
npm install -g real-browser-mcp-server

# Run the MCP server
real-browser-mcp mcp
NOTE

Thepostinstall step automatically runs patchright install chromium, which detects your OS and CPU architecture (Windows / Linux / macOS Γ— x64 / arm64 / arm) and fetches the correct binary. If auto-download is skipped (e.g. offline), run it manually:

npx patchright install chromium

Set PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 before npm install to skip the download (e.g. in CI that only builds).

πŸ› οΈ Local Development & Build (Git Clone)

If you want to clone the repository and run it locally, follow these exact steps:

# 1. Clone the repository
git clone https://github.com/codeiva11/Real-Browser-Mcp.git

# 2. Navigate to the project directory
cd Real-Browser-Mcp

# 3. Install dependencies (Patchright Chromium is auto-downloaded via postinstall)
npm install

# 4. Build the TypeScript files
npm run build

# 5. Start the MCP server
npm run mcp
NOTE

Why does npm run build not build the entire project alone? npm run build only compiles the TypeScript code into JavaScript (dist/). However, the hardened browser engine (patchright) requires the browser binaries, which are now fetched automatically by the postinstall hook (npx patchright install chromium). If you skipped it, run that command manually. Without Chromium, the server will crash trying to find it.

We automatically build and publish a production-ready Docker image to GitHub Container Registry (GHCR).

# Pull the latest image
docker pull ghcr.io/codeiva11/real-browser-mcp:latest

# Run the MCP Server (Interactive stdio mode for AI IDEs)
docker run -i --rm ghcr.io/codeiva11/real-browser-mcp:latest

(Note: When running via Docker, it automatically runs in headless mode.)


Related MCP server: Browser MCP Server

πŸš€ Key Automation & Reliability Features

  • Reliable Browser Engine: Powered by Patchright Chromium, a hardened Playwright fork that reduces false-positives in automation environments (does not expose automation indicators or Webdriver/BiDi flags).

  • Integrated Ad & Tracker Blocker: Utilizes @ghostery/adblocker-playwright with in-memory prebuilt filter lists (no disk cache), blocking ads and speed-bumps.

  • Natural Interactions: Integrates ghost-cursor-patchright (BΓ©zier curves) to simulate natural mouse movements, velocity, and hover-before-click behaviors. Features Physics-based Smooth Scrolling (page.realScroll) utilizing real mouse-wheel events and Cubic Ease-Out deceleration to mimic manual trackpad/mouse flicks for reliable interaction with dynamic UIs.

  • Human-like Browsing: see_page lets the AI agent plan an entire multi-step task from one view and execute all actions in a single continuous flow via its unified steps workflow β€” no screenshot pause after every micro-step, just like a human. (The previously separate browse_task tool is now merged into see_page to avoid agent confusion.)

  • Rich Single-Shot Vision: see_page now returns a screenshot plus full page text, all interactive elements with selectors, and an iframe inventory in one call β€” eliminating the need to re-capture the same page repeatedly.

  • Turnstile Assist: Detects and assists with Cloudflare Turnstile challenges on pages you are authorized to access.

  • Anti-Race Condition Guards: Robust state-guards ensure popup blockers, shims, and adblockers attach exactly once per page, preventing context destruction.

  • TypeScript: Entire codebase is written in TypeScript with strict: true for type safety and maintainability.


πŸ› οΈ AI IDE Compatibility & Configuration Guide

Since this server adheres strictly to the official Model Context Protocol (MCP) specification over STDIO (with all informational logging directed safely to stderr to avoid JSON-RPC corruption), it is fully compatible with every modern AI editor.

1. Claude Desktop

Add the following to your claude_desktop_config.json:

{
  "mcpServers": {
    "real-browser-mcp-server": {
      "command": "npx",
      "args": ["-y", "real-browser-mcp-server@latest", "mcp"],
      "env": {
        "HEADLESS": "false",
        "AI_HEALING": "true"
      }
    }
  }
}

2. Cursor IDE

  1. Open Cursor Settings βž” Features βž” MCP.

  2. Click + Add New MCP Server.

  3. Configure as follows:

    • Name: real-browser-mcp-server

    • Type: command

    • Command: npx -y real-browser-mcp-server@latest mcp

  4. Click Save.

3. Cline / Roo Code (VS Code)

Add the server entry to your global MCP settings file (typically found at %APPDATA%\Code\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json):

{
  "mcpServers": {
    "real-browser-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "real-browser-mcp-server@latest", "mcp"],
      "env": {
        "HEADLESS": "false",
        "AI_HEALING": "true"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

4. Kilo Code (VS Code)

Add the server entry to your ~/.config/kilo/kilo.jsonc (global) or project kilo.jsonc:

Option A: Local Clone (Recommended for development)

{
  "mcp": {
    "real_browser_mcp_server": {
      "type": "local",
      "command": [
        "node",
        "E:/Github-Software/Real-Browser-Mcp/dist/src/index.js"
      ],
      "environment": {
        "HEADLESS": "false",
        "AI_HEALING": "true"
      },
      "enabled": true
    }
  }
}

Option B: Global via npx (Windows) On Windows, call through cmd.exe /c npx so the batch script resolves cleanly:

{
  "mcp": {
    "real_browser_mcp_server": {
      "type": "local",
      "command": ["cmd.exe", "/c", "npx", "-y", "real-browser-mcp-server@latest", "mcp"],
      "environment": {
        "HEADLESS": "false",
        "AI_HEALING": "true"
      },
      "enabled": true
    }
  }
}

Option C: Global via npx (macOS / Linux)

{
  "mcp": {
    "real_browser_mcp_server": {
      "type": "local",
      "command": ["npx", "-y", "real-browser-mcp-server@latest", "mcp"],
      "environment": {
        "HEADLESS": "false",
        "AI_HEALING": "true"
      },
      "enabled": true
    }
  }
}

5. Windsurf IDE

Configure the server in your ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "real-browser-mcp-server": {
      "command": "npx",
      "args": ["-y", "real-browser-mcp-server@latest", "mcp"],
      "env": {
        "HEADLESS": "false",
        "AI_HEALING": "true"
      }
    }
  }
}

6. PearAI

Add the configuration via PearAI Settings βž” MCP Servers using the standard command setup:

{
  "mcpServers": {
    "real-browser-mcp-server": {
      "command": "npx",
      "args": ["-y", "real-browser-mcp-server@latest", "mcp"],
      "env": { "HEADLESS": "false" }
    }
  }
}

7. OpenCode AI IDE

Configure the server in your opencode.jsonc or standard MCP settings configuration:

{
  "mcpServers": {
    "real-browser-mcp-server": {
      "command": "npx",
      "args": ["-y", "real-browser-mcp-server@latest", "mcp"],
      "env": {
        "HEADLESS": "false",
        "AI_HEALING": "true"
      }
    }
  }
}

βš™οΈ Environment Variables

You can configure browser_init defaults directly from the MCP client env block, without passing parameters on every call. Explicit parameters passed to browser_init always override these environment variables.

Variable

Values

Default

Controls

HEADLESS

true / false / 1 / 0 / yes / no

auto (CI + no-display detection)

Run browser headless (no visible window)

AI_HEALING

true / false / 1 / 0 / yes / no / on / off

true

Auto-repair broken CSS selectors in click/type

ENABLE_BLOCKER

true / false / 1 / 0 / yes / no / on / off

true

Block ads and trackers

TURNSTILE

true / false / 1 / 0 / yes / no / on / off

false

Assist with Cloudflare Turnstile challenges

REAL_BROWSER_ALLOW_PRIVATE_NETWORK

true / 1 / yes

off

Allow navigate/replay_request/redirect_tracer to target localhost/private IPs (off by default β€” SSRF guard)

CHROME_NO_SANDBOX

true / 1 / yes / false / 0

auto (CI/root detection)

Force-disable or force-enable the Chromium OS sandbox

REAL_BROWSER_TOOL_TIMEOUT_MS

integer

120000

Hard watchdog budget per tool call (avoids client "Request timed out")

REAL_BROWSER_LOG_LEVEL

debug / info / warn / error

info

Structured JSON log verbosity (stdout stays clean for MCP)

REAL_BROWSER_SEND_PROGRESS

true / 1

off

Emit notifications/progress JSON-RPC messages to the MCP client

REAL_BROWSER_VIDEO_DIR

path

$TMPDIR/real-browser-mcp/videos

Where recordVideo writes .webm recordings

REAL_BROWSER_USER_AGENT

UA string or comma-separated list

auto (built from Chromium version)

Override/rotate the browser User-Agent. A list (ua1,ua2) rotates one entry per browser_init call

REAL_BROWSER_ALLOW_DECRYPT

true / 1 / yes

off

Opt-in for extract_data's auto key-discovery AES conversion. Off by default because it can strip content protection (and it also trips AI-provider safety classifiers). Basic format conversion (URL/base64/hex) always works

Values are case-insensitive. Priority for each option is: explicit browser_init param > environment variable > built-in default.

⚠️ Tool-result content safety: some AI providers (e.g. Anthropic) run safety classifiers on tool results, not just tool definitions. Tool payloads in this server are written content-neutral on purpose β€” do not patch instructions into tool results telling the model to "read the verification image and type the answer", or you will get [400]: content-blocked.

πŸ›‘οΈ Input caps (hard limits): press_key.count ≀ 100, click.clickCount ≀ 50, see_page.steps ≀ 100, media_extractor batch_extract.urls ≀ 50, execute_js.code ≀ 200k chars. Values beyond these are clamped with a warning β€” a runaway agent can never lock the server for hours.


🌐 Complete MCP Tool Reference (21 Tools)

The server exposes 18 tools categorized into functional units:

🌐 Browser & Session

Tool Name

Description

Key Parameters

browser_init

Initialize Patchright browser with ad blocker, AI healing, embedded-widget assist, WebGL/hardware spoofing, WebRTC leak protection, and fingerprint profiles.

headless, proxy, widgetAssist, enableBlocker, aiHealing, spoofFingerprint, blockWebRTCLeaks, fingerprint

browser_close

Close browser with cleanup.

force

🧭 Navigation & Tab Management

Tool Name

Description

Key Parameters

navigate

Navigate to URL or manage browser tabs (list, switch, new, close) with auto-switch for popups, smart retry, and waitForChallenge to auto-solve Cloudflare-style JS challenges.

url, tabAction, tabIndex, autoSwitchNewTab, waitUntil, timeout, waitForChallenge, challengeTimeout

πŸ‘† Natural Interaction

Tool Name

Description

Key Parameters

click

Natural click or drag-and-drop (dragTo) using ghost cursor with slider friction, iframe, hover, and video player support.

selector, annotationId, dragTo, humanLike, hoverFirst, iframe, autoDetectPlayer

type

Type text with natural speed variation, smart clearing, and iframe support.

selector, annotationId, text, clear, pressEnter, iframe

solve_captcha

Form filling and embedded widget completion for pages you are testing (JS widgets, text/image input recognition). Externally hosted services are not supported.

type, captchaSelector, formData, submit

random_scroll

Natural scrolling with lazy-load detection, including inside specific iframes.

direction, amount, smooth, aiDetectLazyLoad, iframe, iframeSelector

press_key

Press keyboard keys with modifier key support (Ctrl/Shift/Alt).

key, modifiers, count

execute_js

Run custom JavaScript inside a page or iframe. Also supports action="fetch" to replay HTTP requests with the page session (cookies/auth inherited). ⚠️ Use with trusted input only.

code, action, url, method, headers, body, async, iframe, timeout

πŸ“„ Extraction & Decoding

Tool Name

Description

Key Parameters

get_content

Retrieve page content in html, text, markdown, rawHttp, or elements mode.

format, selector, xpath, saveAs

extract_data

Advanced extractor: regex, JSON, meta, structured, auto, API discovery, string conversion, links.

type, pattern, source, transformKey

media_extractor

Extract HLS/DASH/MP4, control player APIs, convert string formats.

action, types, quality, playerAction

πŸ“‘ Network & Utilities

Tool Name

Description

Key Parameters

redirect_tracer

Trace full redirect chains (HTTP 301/302, JS, meta refresh).

url, maxRedirects, decodeURLs

network_recorder

Capture requests, responses, intercepted APIs, GraphQL, WebSockets, media URLs, block unwanted resource URLs (3x faster loads), and mock API routes. Export HAR.

action, patterns, mock, captureXhrBody

deep_analysis

DOM structure, scripts, page components, tech stack, SEO, web performance metrics, console errors, and recommendations.

types, detailed, detectAccessControls, includeWebPerf, includeConsole

wait

Smart delay for selectors, navigation events, or fixed timeout.

type, value, timeout

storage_inspector

Inspect & manage client-side storage, cookies, and session state persistence (cookies, save_session, load_session, clear_cookies, autosave, indexeddb, service_workers). Sessions can optionally be AES-256-GCM encrypted via passphrase.

action, sessionPath, passphrase, enabled

see_page

Capture a snapshot of the current page: screenshot image with optional full-page text, interactive element map, iframe inventory, and visual baseline save/compare for regression testing.

fullPage, annotate, saveBaseline, compareBaseline, steps

πŸ‘οΈ AI Vision & Human-like Workflow

Tool Name

Description

Key Parameters

see_page

Unified vision + human-like task runner: screenshot + page text + all interactive elements + iframe inventory in ONE call. Optionally pass a steps[] array (click, type, drag, hover, double_click, triple_click, idle, scroll, wait, extract, see) to execute the whole multi-step task back-to-back in a single continuous flow β€” no screenshot pause between steps, with automatic before + after screenshots and a per-step report.

fullPage, annotate, includePageText, scanIframes, maxElements, format, quality, steps[], captureBefore, captureAfter, stopOnError

Human-like Workflow Pattern:

OLD (repetitive): see_page β†’ click β†’ see_page β†’ type β†’ see_page β†’ click ...
NEW (human-like): see_page (once, fullPage) β†’ steps:[click, type, scroll, extract] β†’ see_page (only on page change)
IMPORTANT

[!IMPORTANT] The verification-widget tool is namedsolve_captcha and its captchaSelector parameter targets the input image or widget element. It only assists with widgets on pages you are testing; externally hosted services (reCAPTCHA/hCaptcha) are not supported β€” descriptions stay neutral.

If the current model cannot consume images, see_page still returns a full text + JSON summary, and solve_captcha can return text-only fallback guidance when called with preferTextFallback: true.


πŸ“ˆ Reliability & Test Coverage

Our test suites cover several real-world pages. Results depend on environment, third-party site changes, and network conditions.

Target Test Platform

Detection Type

Status

Sannysoft WebDriver

WebDriver/navigator properties check

βœ… Pass

Cloudflare WAF

Web Application Firewall challenge

βœ… Pass

Cloudflare Turnstile

CAPTCHA widget assist

βœ… Pass

FingerprintJS Bot Detector

Fingerprint-based bot detection

βœ… Pass

reCAPTCHA v3 Score

Google Trust Score test

βœ… Environment-dependent

Pixelscan Fingerprint

Canvas fingerprint check

βœ… Pass (No Masking Detected)

Rebrowser Bot Detector

Advanced bot signal detection

βœ… Pass

πŸ§ͺ Local Test Suite

Test Suite

Test Case

Status

CJS + ESM

Sannysoft WebDriver Detector

βœ… Passed

CJS + ESM

Cloudflare WAF

βœ… Passed

CJS + ESM

Cloudflare Turnstile

βœ… Passed

CJS + ESM

Fingerprint JS Bot Detector

βœ… Passed

CJS + ESM

Recaptcha V3 Score

βœ… Passed

CJS + ESM

Pixelscan Fingerprint Check

βœ… Passed


πŸ’» Programmatic Usage (Node.js SDK)

You can also use the core browser connector directly in your custom Node.js scripts.

CommonJS

const { connect } = require('real-browser-mcp-server');

(async () => {
  const { browser, page } = await connect({
    headless: false,
    turnstile: true
  });

  await page.goto('https://example.com');

  // Natural mouse movement and click
  await page.realClick('#my-button');

  // Natural smooth scrolling (60FPS Cubic Ease-Out physics)
  await page.realScroll(400); // scrolls down 400px smoothly

  await browser.close();
})();

ESM (ECMAScript Modules)

import { connect } from 'real-browser-mcp-server';

const { browser, page } = await connect({
  headless: false,
  turnstile: true
});

await page.goto('https://example.com');
await page.realClick('#my-button');

// Natural smooth scrolling (60FPS Cubic Ease-Out physics)
await page.realScroll(400); // scrolls down 400px smoothly

await browser.close();

⌨️ NPM Script Commands

Run these scripts from the project root directory:

Command

Description

npm start

Start the MCP server using standard STDIO transport.

npm run dev

Build and start the MCP server.

npm run mcp

Start the MCP server.

npm run mcp:verbose

Start the MCP server with verbose tool listing on stderr.

npm run list

List all 21 registered MCP tools with categories.

npm run build

Compile TypeScript into the dist/ folder.

npm test

Build, then run the live anti-bot test suite (test/test.mjs) for both CJS and ESM. ⚠️ Launches a real browser and hits live third-party sites β€” network- and IP-dependent. Every check is strict; a failing check fails the run, nothing is skipped.

npm run cjs_test

Run CommonJS test scripts.

npm run esm_test

Run ECMAScript Module test scripts.

Every check in the live-site suite is strict: a failing check (e.g. reCAPTCHA v3 score below 0.9) fails the run. Nothing is ever skipped.


πŸ—οΈ Architecture Notes

Design

  • MCP-first: every tool is defined in src/shared/tools.ts and dispatched through a single executeTool() router.

  • Handler modules: src/mcp/handlers/ contains focused files β€” network-recorder.ts, network-extractors.ts, vision-captcha.ts, vision-see-page.ts, media-handlers.ts β€” with thin wrappers (network.ts, vision.ts, index.ts) for the tool-facing API.

  • Browser state: a single global state object in src/mcp/handlers/state.ts holds the current browser/page instance and network recorder data. requireBrowser() / getState() provide typed accessors for handlers.

  • Human-like workflow: the unified see_page steps[] workflow orchestrates the existing click/type/scroll/press_key/wait/extract handlers in a continuous sequence β€” no extra LLM or API key required. The AI agent (LLM client) plans the steps; see_page executes them without pausing.

  • No project pollution: runtime caches (User-Agent detection, saved sessions) are written to the OS temp directory (os.tmpdir()/real-browser-mcp), never inside the project or working directory. The server does not create a .cache folder in your project tree.

  • execute_js caveat: the execute_js tool runs arbitrary JavaScript inside the controlled browser page context (a sandboxed browser tab). Only invoke it with trusted input.

Known Limitations

  • Single-session model: the MCP server manages one browser instance at a time. Concurrent multi-session isolation is not supported.

  • reCAPTCHA / hCaptcha: detected honestly but not solved automatically. Use a third-party service for these.

  • Vision tools require image-capable models: see_page and solve_captcha return images. Non-vision models get a full text + JSON summary fallback.

  • TypeScript strict mode: the project compiles with strict: true across all source files, and noEmitOnError: true makes a type error fail the build outright (tsc --noEmit passes cleanly).


πŸ›‘οΈ License

This project is licensed under the ISC License. Created and maintained by codeiva11.

Available Tools

19 tools
async_jobA

Poll or cancel background jobs started with async:true on media_extractor batch_extract, see_page steps, or execute_js. Read-only except cancel.

NameRequiredDescriptionDefault
jobIdNoJob id returned by an async:true call (required for status/result/cancel)
actionNostatus: job status + timing (no result payload); result: stored result/error once finished; list: recent jobs (metadata only); cancel: stop a running jobstatus

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses 'Read-only except cancel,' clarifying that three of four actions are non-mutating. However, it doesn't say what cancel does to stored results (destructive? reversible?), nor permissions or timing behavior for status polling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence with the resource and provenance front-loaded and the read-only caveat at the end. No filler; every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with full schema coverage and no output schema, the description covers origin, actions, and mutation caveat adequately. Minor gap: no mention of how 'list' behaves (scope/pagination) or how long results are retained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both jobId and the action enum are fully documented in the schema. The description adds no parameter meaning beyond the schema's own text, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verbs (poll/cancel) and resource (background jobs) and names the exact origins of those jobs (media_extractor batch_extract, see_page steps, execute_js). An agent can distinguish this from siblings like wait or get_content without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly scopes usage to jobs created with async:true on three named tools, which is a strong selection signal. It stops short of explicitly contrasting with the sibling 'wait' (i.e., when to poll vs. block) or stating exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_closeA

Close the browser session and release all browser resources.

NameRequiredDescriptionDefault
forceNoForce-kill the browser process

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry behavioral transparency on its own. It does state the core behaviorβ€”closing the session and releasing resourcesβ€”which is meaningful. However, it does not disclose potential side effects such as losing page state, pending actions becoming invalid, or the implications of force-killing beyond what the schema parameter description already says.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, grammatically complete sentence that communicates the essential action and consequence without filler. It is appropriately sized for a simple one-parameter tool and front-loads the primary action clearly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-required-parameter tool with no output schema, the description is mostly adequate, but it lacks usage context and side-effect warnings. The tool is destructive in nature, and an agent would benefit from knowing that closing the session is irreversible and that force is only needed when normal close fails. Overall completeness is acceptable but has clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the 'force' parameter is already documented as 'Force-kill the browser process.' The description adds no extra meaning about when force should be true or what the default behavior implies. This meets the baseline for a fully schema-documented parameter but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Close') and identifies the resource ('browser session'), making the tool's function unmistakable. It also clearly differentiates from siblings like browser_init and navigate by stating this terminates the entire session. No ambiguity remains about what operation this tool performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to call this tool versus alternatives, such as using it only at the end of a browser session or not for closing individual tabs. Nothing distinguishes appropriate usage scenarios or warns against misuse. The only implied context is the tool's name and sibling relationships, which is not explicit enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_initB

Initialize a browser session with configurable options: headless mode, proxy, viewport, video recording, resource filtering, biometric anti-detection hardware spoofing (WebGL, Canvas, AudioContext), and WebRTC leak protection. Automatically recovers stale sessions.

NameRequiredDescriptionDefault
proxyNo
headlessNo
aiHealingNoEnable selector fallback when a selector does not match
fingerprintNoFingerprint profile: 'random' picks a coherent realistic profile (UA + viewport + timezone + locale), or pass an object {userAgent, viewport:{width,height}, timezoneId, locale, geolocation, colorScheme}. Explicit contextOptions win on conflict.
recordVideoNoRecord continuous video of the session
widgetAssistNoAutomatically interact with embedded page widgets and challenge elements when present
enableBlockerNoFilter auxiliary scripts, telemetry, and background tracking requests
contextOptionsNoPlaywright BrowserContext options (viewport, userAgent, geolocation, permissions, httpCredentials, extraHTTPHeaders, etc.)
blockWebRTCLeaksNoPrevent local IP leaks via WebRTC when using proxies
spoofFingerprintNoSpoof WebGL vendor/renderer, Canvas noise, and AudioContext to defeat bot fingerprinting

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose some behavior: automatic recovery of stale sessions, fingerprint spoofing, WebRTC leak protection, and resource filtering. However, it omits key lifecycle semantics an agent needs β€” whether a second call replaces or reuses an existing session, whether prior state is destroyed, and what a 'session' handle looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler, and the core action is front-loaded before the option enumeration. The long comma-separated capability list is dense but each item maps to a real parameter, so little is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter session-creation tool with no annotations and no output schema, the description covers the option surface but leaves lifecycle questions unanswered: what the call returns, whether sessions must be closed, and how repeated calls behave. It is adequate but not sufficient on its own.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80%, so the schema already documents nearly all ten parameters, including the non-obvious ones (fingerprint, aiHealing, widgetAssist). The description's option list largely restates those parameter names and adds no format, default, or conflict-resolution detail beyond what the schema provides, making baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource ('Initialize a browser session') and enumerates the capability areas (headless, proxy, viewport, video, filtering, spoofing, WebRTC). It never names or distinguishes itself from siblings such as browser_close or navigate, so sibling differentiation is absent, but the purpose itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance: no statement that this must be called before navigate/click/see_page, no condition for choosing it over an existing session, and no mention of pairing with browser_close. 'Automatically recovers stale sessions' is a behavioral trait, not usage routing, so an agent gets no help deciding when to invoke this.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clickA

Click or drag a page element by CSS selector or annotation ID. Supports drag-and-drop / slider manipulation via dragTo, iframe context, hover before click, video player API, and automatic retry with fallback selectors.

NameRequiredDescriptionDefault
delayNo
aiHealNoTry alternative selector if primary fails
dragToNoDrag and drop the source element to target selector or coordinates with biological friction and overshoot correction
iframeNoTarget a specific iframe by index (use media_extractor list_iframes to get index)
retriesNoRetry count on failure
timeoutNoMax time to wait for element to appear (ms)
selectorNoCSS selector for the element to click
hoverOnlyNoHover only, do not click (to reveal hidden controls)
humanLikeNoSmooth cursor movement before click
clickCountNo
forceClickNoClick via JavaScript even if element is not visible
hoverFirstNoHover over element before clicking (for dynamic controls)
waitForPlayNoWait until the video starts playing after click
annotationIdNoAnnotation number from see_page(annotate:true) β€” use instead of selector
usePlayerAPINoControl video player via its JavaScript API instead of DOM click
hoverDurationNoWait time after hover before clicking (ms)
playerTimeoutNoMax time to wait for video playback to start (ms)
iframeSelectorNoTarget a specific iframe by CSS selector
scrollIntoViewNoScroll element into view before clicking
autoDetectPlayerNoDetect and target embedded video player iframes automatically
autoAcceptDialogsNoAuto-dismiss browser dialogs (alerts, confirms)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It discloses several capabilities (drag-and-drop, iframe context, hover, video player API, automatic retry with fallback selectors), but it does not mention side effects (navigation, form submission), permissions, or failure behavior beyond retry. This is useful but incomplete for a potentially destructive action like clicking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the primary action and then a compact list of supported behaviors. No filler or redundancy; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a rich schema (21 params, 90% coverage, nested object) and no output schema, the description covers the main capabilities adequately. It does not explain parameter interactions or the anyOf requirement, but the schema handles those details, so the description is nearly complete for its complementary role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 90%, so the schema already documents nearly all parameters in detail. The description only references dragTo, iframe, hover, and retry at a high level, adding no new semantic detail beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Click or drag a page element by CSS selector or annotation ID.' It is immediately clear what the tool does and how the target is specified, distinguishing it from siblings like type or press_key without needing to enumerate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives (e.g., type, press_key, execute_js) or when not to use it. The only implicit hint is 'use instead of selector' for annotationId, which is parameter-level, not tool-level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deep_analysisA

Inspect the current page in depth: DOM structure, scripts, stylesheets, accessibility, performance metrics, SEO tags, response headers, loaded technologies, and content-loading strategy recommendations.

NameRequiredDescriptionDefault
detailedNo
aiInsightsNoInclude loading strategy recommendations
detectAccessControlsNoIdentify embedded widgets and page components

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does identify the tool as an inspection ('Inspect') that covers many read-oriented aspects of a page. However, it does not disclose whether the operation is truly read-only, whether it triggers network requests, how long it may take, or how results are returned. The listed coverage areas provide useful transparency, but side effects and output behavior remain unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence that front-loads the main purpose ('Inspect the current page in depth') before listing coverage areas. It is compact and free of filler, though the long enumerate list is slightly run-on and could be structured with separators or short phrases for easier scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a broad analysis tool with no output schema and no annotations, the description lists what is inspected but not what the agent should expect in return, whether results are aggregated, or how the optional boolean parameters alter the output. It is adequate for a first-order understanding but leaves operational detail unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 67%, and the tool description adds no parameter-level meaning. The 'detailed' boolean is left undocumented, and the 'detectAccessControls' schema description ('Identify embedded widgets and page components') appears mismatched with the parameter name. The tool description echoes 'content-loading strategy recommendations' which maps to aiInsights, but that is redundant with the schema rather than additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Inspect') and a concrete resource ('the current page'), and then enumerates a distinctive set of inspection areas (DOM, scripts, stylesheets, accessibility, performance, SEO, response headers, technologies, loading strategies). This makes it clearly distinguishable from sibling tools like see_page or get_content, which are narrower content/visual viewers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for comprehensive, multi-faceted page analysis, but it does not explicitly state when to use it over siblings such as see_page, get_content, extract_data, or api_analyzer. There are no when-not-to-use conditions or alternative routing hints, leaving the agent to infer the intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_jsA

Execute custom JavaScript in the page context with async support, return value capture, and iframe targeting. Also supports action="fetch" to replay HTTP requests with the page session (cookies/auth inherited, 30s timeout, structured status/headers/body output).

NameRequiredDescriptionDefault
urlNoURL for fetch action
bodyNoBody for fetch action (POST/PUT)
codeNoJavaScript code to execute in the page context (required unless action="fetch")
asyncNoRun as a background job: returns a jobId immediately instead of blocking; poll async_job for the result. Inside the job the code is wrapped in an async function, so top-level await works.
actionNoexecute: run JS code; fetch: replay an HTTP request with page sessionexecute
iframeNoExecute inside a specific iframe (0 = main frame, 1+ = iframe by index)
methodNoHTTP method for fetch actionGET
headersNoHeaders for fetch action
timeoutNo
returnValueNoReturn the result of the expression
waitForIframeNoWait for the iframe to finish loading before executing
iframeSelectorNoExecute inside iframe matched by CSS selector

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does add real behavioral context: cookies/auth are inherited from the page session, fetch has a 30s timeout, and output is structured as status/headers/body. It omits the elevated trust level of arbitrary page-context code execution and what happens on script errors, but the fetch-mode semantics are unusually well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with the primary capability front-loaded and the secondary mode clearly signposted by 'Also supports'. The middle clause is a compressed parameter summary that reads slightly like a teaser list, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter, no-annotation, no-output-schema tool this covers the two modes and the fetch return shape adequately. Gaps remain around what execute mode returns, error/timeout behavior beyond fetch, and the async job hand-off, which is left entirely to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 92%, so parameter documentation is already largely handled and the baseline is 3. The description mirrors the schema's framing (async support, return value capture, iframe targeting, fetch action) rather than adding format or behavioral detail beyond it, and says nothing about the 200k code length cap or the timeout/returnValue interactions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource combination ('Execute custom JavaScript in the page context') and enumerates the three capabilities (async, return value, iframe targeting) plus a second mode ('action="fetch"' for HTTP replay). Among siblings it is clearly the only arbitrary-code tool, though it doesn't explicitly name which sibling to use instead for read/extract tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use / when-not-to guidance or named alternatives; the async path's hand-off to async_job polling appears only in the schema, not the description. Usage is implied by the capability list, so an agent must infer that this is the fallback when structured tools like get_content or extract_data can't do the job.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_dataB

Extract structured data from the current page in multiple modes: regex, json, meta, structured, auto, apiDiscovery, parse (string conversion), transform (data format conversion), or links (all links including nested iframes).

NameRequiredDescriptionDefault
typeNoauto
flagsNoRegex flagsgi
typesNoFor meta mode: which tag groups to include (all, meta, og, twitter)
sourceNoall
patternNoFor regex mode: the regular expression pattern
jsonPathNoFor json mode: JSONPath expression
selectorNoFor structured/links mode: CSS selector to scope the extraction
inputDataNoFor transform mode: the string to convert
keyOffsetNoFor transform mode: offset value (optional)
autoDecodeNoAutomatically process Base64 or percent-encoded values in results
transformKeyNoFor transform mode: optional conversion parameter
autoDetectKeyNoFor transform mode: locate the conversion parameter from page scripts automatically
includeHiddenNoFor links mode: include hidden/non-visible links
searchIframesNoFor links mode: search inside embedded frames

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does add useful scope information: extraction is from the current page, and links mode includes nested iframes. However, it does not disclose return behavior, auto-mode behavior, potential side effects, or whether any network/API calls are triggered by modes like apiDiscovery.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence with the core action front-loaded and the mode list following. It is efficient and contains no filler, though the long comma-separated list is somewhat heavy and could benefit from clearer grouping or line breaks.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex 14-parameter tool with no output schema and no annotations, so the description must compensate. It provides a useful mode inventory but does not explain mode-to-parameter mapping, default behavior, return values, or failure modes. An agent would likely need to inspect the schema carefully and still be uncertain about how modes like apiDiscovery or transform behave end-to-end.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 86%, so the baseline is 3. The description adds value beyond the schema by defining ambiguous mode names: parse is 'string conversion,' transform is 'data format conversion,' and links mode explicitly covers nested iframes. This helps an agent understand the enumeration beyond raw parameter metadata.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: 'Extract structured data from the current page,' and enumerates distinct extraction modes (regex, json, meta, structured, etc.). It does not explicitly differentiate from sibling tools like get_content or deep_analysis, but the mode list gives enough specificity that the purpose is not ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives like get_content, api_analyzer, or media_extractor. It does not mention prerequisites, recommended modes for common scenarios, or exclusions. The only implicit usage signal is that it operates on the current page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_contentB

Get page content in multiple formats: html, text, markdown, rawHttp, or elements. Extracts text, attributes, or bounding box coordinates. Can save directly to a file.

NameRequiredDescriptionDefault
textNoFind elements containing this text
xpathNoXPath selector
formatNotext
saveAsNoAbsolute file path to save extracted content to disk
timeoutNo
multipleNoReturn multiple matching elements (for format=elements)
selectorNoCSS selector
waitForJSNoWait for JavaScript to finish rendering
rawHttpUrlNoURL to fetch raw HTTP without JS rendering. Defaults to current page URL.
includeMetaNoInclude page title and URL at the top
extractAttributesNoExtract all element attributes

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral disclosure burden. It does add meaningful context: content can be returned in multiple formats, text/attributes/bounding boxes can be extracted, and results can be saved to a file. However, it does not disclose what is returned when saveAs is used, the effect of waitForJS, or whether rawHttp bypasses the browser rendering, leaving some behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loads the core purpose and format options, and avoids filler. Every sentence adds useful information about what the tool does or supports.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 11 parameters, no annotations, and no output schema, the description is adequate but not complete. It explains the core operation and parameter-backed capabilities, but it does not describe the return contract, especially the behavior when saveAs is used, nor does it clarify how this tool relates to extract_data and see_page.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 82%, so the baseline for this dimension is 3. The description adds a little extra meaning by mentioning bounding box coordinates and file saving, which map to format=elements and saveAs, but it does not meaningfully clarify undocumented params like timeout or format beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'page content', then names the available formats (html, text, markdown, rawHttp, elements) and types of extraction (text, attributes, bounding box coordinates). It does not explicitly differentiate this from sibling tools like extract_data or see_page, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to prefer get_content over nearby sibling tools such as extract_data, see_page, or navigate. The description implies format-based use cases, but there are no exclusions, prerequisites, or explicit alternative-selection cues.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

media_extractorB

Extract and control media from the current page. Supports 6 actions: extract (find video/audio/HLS/DASH/download URLs including nested iframes), list_iframes, switch_iframe, player_control (play/pause/seek/sources via player API), decode_url (inspect converted string and token formats), batch_extract.

NameRequiredDescriptionDefault
deepNoAlso scan inline scripts and data attributes
urlsNoList of URLs for batch_extract action
asyncNoFor batch_extract only: run as a background job β€” returns a jobId immediately instead of blocking; poll async_job for the result.
indexNoiframe index number
typesNoMedia types to find: video, audio, hls, dash, download, iframes
actionNoextract
qualityNobest
selectorNoiframe CSS selector
decoderIVNoOptional secondary parameter (for custom conversion)
aiOptimizeNoSelect extraction strategy automatically
decoderKeyNoOptional transformation parameter (for custom conversion)
decoderTypeNoConversion type: auto-detect, url, base64, or customauto
encodedDataNoString data to convert (for decode_url action)
playerActionNoinfo
searchIframesNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, yet it says nothing about state mutation (switch_iframe changes frame context, player_control alters playback), permissions, side effects, or how batch_extract behaves without the async flag. 'Including nested iframes' and 'via player API' are the only behavioral hints for a 6-action, 15-param tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose followed by a compact action enumeration. Dense but every clause adds information; only mild density cost from packing six actions into one sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with six distinct action modes, 15 params and no annotations or output schema, the description covers the action menu but not per-action parameter applicability or what each action returns. It is enough to pick an action, but not enough to call the more complex modes (player_control, decode_url, batch_extract) confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 73%, so the schema documents most parameters (deep, async, types, selector, encodedData, etc.) and the baseline is 3. The description adds meaning by mapping actions to capabilities, but it does not clarify which parameters apply to which action, nor does it explain the undocumented enum values (quality, playerAction) or decoderKey/decoderIV semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Extract and control media from the current page') and enumerates all six actions with what each does, so an agent can map intent to action. It does not explicitly differentiate from plausible siblings like extract_data or network_recorder, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical glosses for each action (e.g. 'player_control (play/pause/seek/sources)', 'decode_url (inspect converted string and token formats)') imply when each sub-mode applies. However, there is no explicit when-to-use guidance versus siblings like extract_data or network_recorder, and no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_recorderB

Record, inspect, and control network activity. Supports 14 actions: start, stop, get, clear, get_media, get_navigations, get_api_calls, get_intercepted_apis, get_websockets, get_graphql, export_har, block_urls (block images/trackers to boost speed 3x-5x), mock_route (intercept & mock API responses), clear_routes.

NameRequiredDescriptionDefault
mockNoConfiguration for mock_route action
limitNoFor the get action: maximum records to return (default 200, hard max 1000). The result includes totalCount so you know when more records exist.
actionNoget
filterNo
offsetNoFor the get action: number of matching records to skip before returning (default 0). Use with limit to page through a recording.
patternsNoURL patterns or glob filters for block_urls action (e.g. ["*.png", "*.jpg", "*google-analytics*"])
captureXhrBodyNoCapture fetch/XHR response bodies (JSON or form-urlencoded)
aiDetectStreamsNoIdentify video and audio stream URLs in recorded requests

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It mentions some behavior, such as blocking images/trackers to boost speed and mocking API responses, but does not disclose critical traits like whether clear/clear_routes destroy data, how start/stop recording persists, what capture scope applies, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then lists actions in a single compact sentence. The action list is long but useful for selecting the correct action, though the run-on enumeration is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a complex 14-action tool with no annotations and no output schema. The description lists action names but does not explain return formats, data retention, start/stop recording semantics, or what each get_* action returns, leaving significant gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so the schema already documents several parameters such as limit, offset, patterns, and mock configuration. The description adds action-name context but does not explain key parameters like filter, captureXhrBody, or aiDetectStreams, so it neither fully compensates nor adds strong semantic detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Record, inspect, and control network activity.' It also enumerates the 14 supported actions, making the tool's scope clear. It does not explicitly distinguish itself from siblings such as media_extractor or redirect_tracer, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The action list implies when to use the tool for recording, inspecting, and controlling network activity, and notes specific uses like blocking URLs for speed. However, it gives no explicit when-to-use versus alternatives, no prerequisites, and no when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

press_keyC

Press keyboard keys with configurable modifier keys, repeat count, and keystroke delay.

NameRequiredDescriptionDefault
keyYesKey name (e.g. Enter, Tab, ArrowDown, a)
countNoNumber of times to press the key
modifiersNoModifier keys (Alt, Control, Meta, Shift)
humanDelayNoAdd natural delay between repeated presses

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden yet discloses nothing about focus requirements, which element receives the key event, error behavior for invalid key names, or side effects. It only restates the configurable parameters rather than describing how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is appropriately sized, though the space saved is space not used for the missing behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple four-parameter tool with fully documented schema and no output schema, the description covers the basic operation. However, with annotations absent, it should at least state that keys are sent to the currently focused element/session, which is the main thing an agent could get wrong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented in the schema with examples and defaults. The description merely echoes 'modifier keys, repeat count, and keystroke delay' without adding format or interaction details, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (press) and resource (keyboard keys) plus the configurable axes, which is clear. It does not distinguish itself from siblings like `type` or `click`, so an agent must infer that this is for discrete key presses rather than text entry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus `type` (text entry) or `click`, nor any mention of prerequisites such as an initialized browser session or a focused element. The agent is left to infer all selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

random_scrollA

Scroll the page with configurable direction, amount, and automatic lazy-load triggering.

NameRequiredDescriptionDefault
amountNoPixels to scroll. 0 = auto-decide based on page content height
iframeNoScroll inside a specific iframe by index instead of the main frame
smoothNo
directionNosmart
iframeSelectorNoScroll inside a specific iframe by CSS selector instead of the main frame
aiDetectLazyLoadNoDetect and trigger lazy-loaded content

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It does disclose the core action and the automatic lazy-load triggering side effect, but it does not describe iframe targeting, smart/random direction semantics, smoothness behavior, or other potential effects on page state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no redundant words. It efficiently conveys the core action and key configurable aspects.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple utility with all-optional parameters, the description plus schema is mostly adequate. However, with no annotations and no output schema, the description leaves behavioral context like smart/random direction and iframe targeting to be inferred rather than explained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, and the description mainly restates high-level concepts like direction, amount, and lazy-loading. It does not add meaning for underspecified parameters such as smooth or the direction enum values smart/random.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('scroll the page') and names configurable behaviors: direction, amount, and lazy-load triggering. This makes the tool's function clear and distinguishes it from sibling interaction tools like click or press_key.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use for scrolling and triggering lazy-loaded content, and the schema exposes iframe targeting, but it does not explicitly state when to use this tool over alternatives or when not to use it. An agent must infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

redirect_tracerA

Trace the complete redirect chain of a URL. Tracks HTTP 301/302, JavaScript navigation (window.location, setTimeout), and meta refresh tags. Returns the full path with status codes and headers.

NameRequiredDescriptionDefault
urlYes
timeoutNoNavigation timeout in ms
followJSNoTrack JavaScript-triggered navigations
decodeURLsNoAutomatically decode percent-encoded URLs in the chain
followMetaNoTrack meta refresh redirects
maxRedirectsNo
includeHeadersNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden and does name the redirect mechanisms it follows and the return data. However, the claim that the result includes headers is at odds with the schema's includeHeaders default false, and it does not clarify whether tracing performs a live browser navigation that could affect the current session state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core action is front-loaded, and each clause adds useful information: which redirect mechanisms are tracked and what the tool returns.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core behavior and return summary are present, but because there is no output schema and no annotations, important context is missing: whether the path is a list of hop objects, how headers depend on includeHeaders, and whether the trace mutates the current browser page. The schema defaults help, but they do not fully compensate for these gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 57%, yet the description adds no parameter-specific guidance for the undocumented url, maxRedirects, or includeHeaders fields. The mention of returned headers conflicts with the includeHeaders default, and the redirect-type details do not explain how the followJS and followMeta booleans affect the output.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Trace the complete redirect chain'), the concrete resource (a URL), and the exact tracking scope (HTTP 301/302, JavaScript navigation, meta refresh). It also states the return value, which makes it easy to distinguish this tool from browser-navigation or network-capture siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The behavior implies the use case: analyze why a URL ends up where it does. However, the description never explicitly says when to choose this tool over alternatives such as replay_request or network_recorder, nor does it mention any exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

see_pageA

Capture a snapshot of the current page. Returns a screenshot image together with optional full-page text, an interactive element map (buttons, links, inputs with position and selector), and an iframe inventory β€” all in a single call.

Workflow: Call once with fullPage:true and annotate:true. From that snapshot, run all planned actions (click, type, scroll, wait, extract) as a steps array without re-capturing the page. Call see_page again only when the page genuinely changes (new navigation, modal, or dynamic content load).

NameRequiredDescriptionDefault
pathNoFile path to also save the screenshot image
asyncNoWhen steps are present: run as a background job β€” returns a jobId immediately instead of blocking; poll async_job for the result.
stepsNoActions to run sequentially right after capturing the page, without re-capturing between steps. Supported: click, type, press_key, scroll, wait, extract, see, drag, hover, double_click, triple_click, idle.
formatNojpeg
qualityNoJPEG quality 0-100
annotateNoDraw numbered bounding boxes over interactive elements for precise targeting
fullPageNoCapture the full scrollable page instead of only the visible viewport
autoHoverNoHover over navigation menus before capturing to reveal dropdowns
maxElementsNoMaximum number of interactive elements to map
scanIframesNoList embedded iframes with their index and URL
stopOnErrorNoStop step execution on first failure
captureAfterNoTake a screenshot after the steps array completes
saveBaselineNoSave current screenshot as visual baseline for later comparison
captureBeforeNoTake a screenshot before running the steps array
includeDomTextNoInclude the full DOM text content
watchMutationsNoReport DOM mutations (popups, alerts) since the last capture
compareBaselineNoCompare current screenshot against saved baseline; returns diffPercent
includeElementsNoInclude the interactive element map in the response
includePageTextNoInclude cleaned page text

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the return payload shape and the important non-obvious behavior that steps execute without intermediate re-capture. It leaves unmentioned the baseline save/compare, mutation watching, and the async job behavior, all of which remain schema-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short paragraphs; the first states what the tool is and returns, the second is a labeled workflow rule. Every sentence carries decision-relevant information and the recommended invocation flags are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter, zero-required browser-capture tool with no annotations and no output schema, the description covers the core loop an agent needs (capture once, batch actions, recapture only on real change). It omits any mention of the async job path, baseline comparison, or mutation watching, which are secondary but not negligible given async changes the call semantics entirely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 95%, so baseline is 3; the description earns above baseline by explaining the relationship the schema cannot β€” that 'steps' runs sequentially after the capture with no re-capture between steps, and that fullPage/annotate are the recommended starting flags. It does not touch the other 17 parameters, but the schema documents them fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Capture a snapshot of the current page') and enumerates precisely what the snapshot contains: screenshot image, optional page text, interactive element map, iframe inventory. That composite output implicitly differentiates it from single-purpose siblings like get_content or click, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly prescribes a call pattern ('Call once with fullPage:true and annotate:true'), states the alternative workflow (run all planned actions as a steps array without re-capturing), and gives the exact condition for a repeat call ('only when the page genuinely changes β€” new navigation, modal, or dynamic content load'). This is as close to a rulebook as a description gets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

solve_captchaB

Automate form completion and interactive widget verification on web pages. Supports JavaScript-based challenge widgets, image text transcription, and intelligent form field mapping for QA and automated browsing workflows.

NameRequiredDescriptionDefault
langNoText recognition language code: eng, hin, or eng+hineng
typeNoWidget type: js_widget (JavaScript-based embedded challenge widget), text (text transcription verification), image (image-based input), auto (detect automatically).auto
iframeNoTarget a specific iframe by index
submitNoSubmit the form after filling all fields
aiMatchNoMatch form fields by semantic similarity even if names differ
timeoutNo
formDataNoKey-value pairs of form fields to fill (field names matched automatically to page inputs)
humanLikeNoType with variable keystroke delays
maxRetriesNoMaximum refresh attempts before giving up
allowedCharsNoCharacter set allowed in the answer
analyzeFirstNoInspect page structure before filling fields
formSelectorNoCSS selector for the form element (auto-detected if not provided)
inputSelectorNoCSS selector for the answer input field
expectedLengthNoExpected character length of the answer
iframeSelectorNoTarget a specific iframe by CSS selector
widgetSelectorNoAlias for captchaSelector
captchaSelectorNoCSS selector targeting the verification element, canvas, image, or interactive widget container
refreshSelectorNoCSS selector for the reload/refresh button
preferTextFallbackNoReturn text-only guidance instead of an image when the model cannot process images

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, yet it never says this is a mutating operation that types into fields, may click refresh buttons, and can submit the form (the `submit` param defaults to false but can trigger navigation). It discloses nothing about required page state, failure behavior after `maxRetries`, or what is returned, all of which matter for a 19-parameter side-effecting tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the capability list front-loaded and no filler. It is arguably undersized rather than overly verbose for a tool this broad.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter tool with nested objects, no output schema, and no annotations, the description leaves key questions unanswered: what it returns (answer text, filled form, status), what happens when all retries fail, and whether the page must be pre-navigated. It is minimally viable but not sufficient on its own.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 95%, so the baseline is 3; the description's mention of 'JavaScript-based challenge widgets, image text transcription, and intelligent form field mapping' loosely maps to the `type`, `lang`, and `aiMatch`/`formData` params but adds no new semantics like selector precedence or how `auto` detection resolves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action set: automate form completion and interactive widget verification, covering JS widgets, image text transcription, and field mapping. The verb+resource is clear, though the description never uses the term 'captcha' that the tool name and `captchaSelector` imply, and it does not differentiate from siblings such as `type`, `click`, or `extract_data`.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It names intended contexts (QA, automated browsing workflows) which implies when to reach for it, but gives no explicit when-not-to-use and no mention of the alternative of driving forms manually via `type`/`click` or of prerequisites like an already-loaded page.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

storage_inspectorA

Inspect and manage client-side storage & sessions. Supports 7 actions: cookies (get all current cookies), save_session (persist cookies & storage state to file), load_session (restore state from file without re-logging), clear_cookies, autosave (auto-save session on every navigation), indexeddb, service_workers.

NameRequiredDescriptionDefault
actionNocookies
enabledNoFor autosave action: true to enable, false to disable
passphraseNoAES-256-GCM passphrase. When provided with save_session the file is encrypted; required to load an encrypted session. Never logged or stored.
sessionPathNoFile path to save or load session state (cookies & localStorage) from disk

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose real behavior beyond the schema: encryption behavior via passphrase, and that autosave fires on every navigation. However it omits what clear_cookies destroys, whether save_session overwrites an existing file, and any permission or side-effect warnings for a mutation-capable tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence of purpose followed by a compact, parallel action list. Front-loaded and no filler; every clause carries information an agent needs to pick an action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, yet the description says nothing about what cookies, indexeddb, or service_workers return, nor how errors surface when sessionPath is missing or passphrase is wrong. For a 4-parameter, unannotated tool with no return documentation, this is a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the description adds genuine value on top: it maps each enum value to its semantic meaning (e.g. save_session persists cookies & storage to file, load_session restores without re-logging). It is silent on the interaction of passphrase with load_session/autosave, but the parameter descriptions in the schema cover that adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Inspect and manage client-side storage & sessions') and then enumerates all 7 supported actions with brief glosses, so an agent knows exactly what capability surface exists. No sibling tool in the list touches cookies/IndexedDB/service workers, so the boundary is inherently clear from the wording alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied through the action glosses ('restore state from file without re-logging' hints at the load_session scenario). There is no explicit when-to-use/when-not guidance, no statement of prerequisites, and no comparison to any alternative approach for state persistence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

typeB

Type text into an input field with configurable keystroke delay, field clearing, and iframe support.

NameRequiredDescriptionDefault
textYes
clearNoClear the field before typing
delayNoDelay between keystrokes in ms
aiHealNoTry alternative selector if primary fails
iframeNoTarget a specific iframe by index
selectorNoCSS selector for the input field
pressEnterNoPress Enter after typing
annotationIdNoAnnotation number from see_page(annotate:true) β€” use instead of selector
iframeSelectorNoTarget a specific iframe by CSS selector
waitForSelectorNoWait for the element to appear before typing

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It mentions clearing and delay, but largely restates schema parameters and omits important behavioral context such as focus behavior, wait/heal behavior, and what happens if the target is not found.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It states the core action first and then the notable configurable features.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The rich schema covers most parameter details and there is no output schema, so the description is adequate for the core action. However, for a 10-parameter browser automation tool with no annotations, it leaves target-selection and side-effect context to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 90%, so the schema already documents most parameters. The description highlights delay, clearing, and iframe support but does not add syntax or targeting guidance beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Type text into an input field." It adds configurable behaviors, but does not explicitly distinguish itself from sibling tools such as press_key or click.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives no explicit guidance on when to use this tool versus alternatives, nor when to prefer selector versus annotationId. Usage is only implied by the mention of typing into an input field.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

waitB

Wait for a selector, navigation event, networkidle state, or a fixed timeout before continuing.

NameRequiredDescriptionDefault
typeNotimeout
valueNoSelector string or timeout value in ms
timeoutNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether timeouts throw errors, what happens when a selector never appears, the default/max timeout behavior, or any side effects; it mostly restates the enum modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that lists the supported wait conditions with no wasted text. It is appropriately sized for the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a browser wait tool with no annotations, no output schema, and low parameter coverage, the description omits failure semantics, parameter coupling, and timeout behavior. An agent lacks enough information to call it correctly in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, and the description does not explain how the 'value' parameter should be interpreted for each wait type or what role 'timeout' plays relative to the default. 'value' and 'timeout' remain underdocumented across schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (wait) and four wait conditions (selector, navigation, networkidle, timeout), clearly distinguishing it from browser action siblings like click or navigate. It lacks explicit comparison to alternatives, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'before continuing' implies when to use it, but there is no explicit guidance on choosing between wait types or when to avoid waiting. The usage context is present but left largely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 11 tool updatesv3.3.14
    • Addedasync_job
    • Changedclick4 fields changed
      • addedInput schema / properties / delay / maximum
        Added value: +1000
      • addedInput schema / properties / playerTimeout / maximum
        Added value: +30000
      • addedInput schema / properties / retries / maximum
        Added value: +5
      • addedInput schema / properties / timeout / maximum
        Added value: +60000
    • Changedexecute_js2 fields changed
      • changedInput schema / properties / async / description
        Previous value: -"Wrap code in an async function"New value: +"Run as a background job: returns a jobId immediately instead of blocking; poll async_job for the result. Inside the job the code is wrapped in an async function, so top-level await works."
      • addedInput schema / properties / code / maxLength
        Added value: +200000
    • Changedmedia_extractor2 fields changed
      • addedInput schema / properties / async
        Added value: +{
        +  "default": false,
        +  "description": "For batch_extract only: run as a background job β€” returns a jobId immediately instead of blocking; poll async_job for the result.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / urls / maxItems
        Added value: +50
    • Changednavigate3 fields changed
      • addedInput schema / properties / challengeTimeout / maximum
        Added value: +90000
      • addedInput schema / properties / retries / maximum
        Added value: +3
      • addedInput schema / properties / timeout / maximum
        Added value: +60000
    • Changednetwork_recorder2 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "For the get action: maximum records to return (default 200, hard max 1000). The result includes totalCount so you know when more records exist.",
        +  "maximum": 1000,
        +  "type": "number"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "For the get action: number of matching records to skip before returning (default 0). Use with limit to page through a recording.",
        +  "type": "number"
        +}
    • Changedpress_key1 field changed
      • addedInput schema / properties / count / maximum
        Added value: +100
    • Changedsee_page3 fields changed
      • addedInput schema / properties / async
        Added value: +{
        +  "default": false,
        +  "description": "When steps are present: run as a background job β€” returns a jobId immediately instead of blocking; poll async_job for the result.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / maxElements / maximum
        Added value: +200
      • addedInput schema / properties / steps / maxItems
        Added value: +100
    • Changedsolve_captcha1 field changed
      • addedInput schema / properties / timeout / maximum
        Added value: +120000
    • Changedtype2 fields changed
      • addedInput schema / properties / delay / maximum
        Added value: +200
      • addedInput schema / properties / text / maxLength
        Added value: +10000
    • Changedwait1 field changed
      • addedInput schema / properties / timeout / maximum
        Added value: +60000
  2. 8 tool updatesv3.3.10
    • Removedapi_analyzer
    • Changedbrowser_init1 field changed
      • addedInput schema / properties / fingerprint
        Added value: +{
        +  "description": "Fingerprint profile: 'random' picks a coherent realistic profile (UA + viewport + timezone + locale), or pass an object {userAgent, viewport:{width,height}, timezoneId, locale, geolocation, colorScheme}. Explicit contextOptions win on conflict.",
        +  "type": [
        +    "string",
        +    "object"
        +  ]
        +}
    • Changedexecute_js7 fields changed
      • addedInput schema / properties / action
        Added value: +{
        +  "default": "execute",
        +  "description": "execute: run JS code; fetch: replay an HTTP request with page session",
        +  "enum": [
        +    "execute",
        +    "fetch"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / body
        Added value: +{
        +  "description": "Body for fetch action (POST/PUT)",
        +  "type": "string"
        +}
      • changedInput schema / properties / code / description
        Previous value: -"JavaScript code to execute in the page context"New value: +"JavaScript code to execute in the page context (required unless action=\"fetch\")"
      • addedInput schema / properties / headers
        Added value: +{
        +  "description": "Headers for fetch action",
        +  "type": "object"
        +}
      • addedInput schema / properties / method
        Added value: +{
        +  "default": "GET",
        +  "description": "HTTP method for fetch action",
        +  "type": "string"
        +}
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "URL for fetch action",
        +  "type": "string"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "code"
        -]
    • Changednavigate3 fields changed
      • addedInput schema / properties / challengePollInterval
        Added value: +{
        +  "default": 2000,
        +  "description": "Poll interval ms while waiting for challenge",
        +  "type": "number"
        +}
      • addedInput schema / properties / challengeTimeout
        Added value: +{
        +  "default": 90000,
        +  "description": "Max ms to wait for challenge to clear (with waitForChallenge)",
        +  "type": "number"
        +}
      • addedInput schema / properties / waitForChallenge
        Added value: +{
        +  "default": false,
        +  "description": "After navigation, wait for Cloudflare-style JS challenge (\"Just a moment\") to auto-solve; returns challenge status + clearance cookies",
        +  "type": "boolean"
        +}
    • Removedprogress_tracker
    • Removedreplay_request
    • Changedsee_page2 fields changed
      • addedInput schema / properties / compareBaseline
        Added value: +{
        +  "default": false,
        +  "description": "Compare current screenshot against saved baseline; returns diffPercent",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / saveBaseline
        Added value: +{
        +  "default": false,
        +  "description": "Save current screenshot as visual baseline for later comparison",
        +  "type": "boolean"
        +}
    • Changedstorage_inspector2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "cookies",
        -  "save_session",
        -  "load_session",
        -  "clear_cookies",
        -  "indexeddb",
        -  "service_workers"
        -]New value: +[
        +  "cookies",
        +  "save_session",
        +  "load_session",
        +  "clear_cookies",
        +  "autosave",
        +  "indexeddb",
        +  "service_workers"
        +]
      • addedInput schema / properties / enabled
        Added value: +{
        +  "description": "For autosave action: true to enable, false to disable",
        +  "type": "boolean"
        +}
  3. 2 tool updatesv3.3.1
    • Changedrandom_scroll2 fields changed
      • addedInput schema / properties / iframe
        Added value: +{
        +  "description": "Scroll inside a specific iframe by index instead of the main frame",
        +  "type": "number"
        +}
      • addedInput schema / properties / iframeSelector
        Added value: +{
        +  "description": "Scroll inside a specific iframe by CSS selector instead of the main frame",
        +  "type": "string"
        +}
    • Changedstorage_inspector1 field changed
      • addedInput schema / properties / passphrase
        Added value: +{
        +  "description": "AES-256-GCM passphrase. When provided with save_session the file is encrypted; required to load an encrypted session. Never logged or stored.",
        +  "type": "string"
        +}
  4. 21 tool updatesv3.2.13
    • First observedapi_analyzer
    • First observedbrowser_close
    • First observedbrowser_init
    • First observedclick
    • First observeddeep_analysis
    • First observedexecute_js
    • First observedextract_data
    • First observedget_content
    • First observedmedia_extractor
    • First observednavigate
    • First observednetwork_recorder
    • First observedpress_key
    • First observedprogress_tracker
    • First observedrandom_scroll
    • First observedredirect_tracer
    • First observedreplay_request
    • First observedsee_page
    • First observedsolve_captcha
    • First observedstorage_inspector
    • First observedtype
    • First observedwait

TDQS

B3.2/5.0

Scored across 19 tools

Disambiguation3/5

Core interaction tools (click, type, press_key, wait, navigate) are clearly distinct, but the read/extract cluster overlaps heavily: get_content, extract_data, see_page, and deep_analysis all retrieve page information, and an agent must read long descriptions to choose. Several tools (network_recorder, media_extractor, storage_inspector, extract_data) bundle many actions behind one name, adding internal selection ambiguity.

Naming Consistency3/5

Most names are snake_case, but conventions are mixed: noun-first compounds (browser_init, browser_close), verb-first (get_content, execute_js), and bare verbs (wait, navigate, click, type). Individually readable, yet there is no single predictable pattern to infer names.

Tool Count3/5

19 tools is on the heavy side for a browser automation server, and the multi-action mega-tools effectively expand the surface well beyond 19. Most tools are justified by real capabilities, but some inspection tools could be folded into see_page/extract_data.

Completeness4/5

The lifecycle is well covered: init/close, navigation and tabs, interaction, scrolling, waiting, content/media/network/storage extraction, captcha, redirect tracing, and async jobs. Minor gaps exist for dropdown selection, file upload, and dialog/alert handling, but agents can work around these with execute_js.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Stealth browser automation for AI agents, using source-patched Chromium to bypass bot detection systems like Cloudflare, reCAPTCHA, and FingerprintJS.
    28
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to run Playwright-compatible browser automation against Chromium with persistent profiles, proxy matching, humanized interactions, and npm, Docker, stdio, or Streamable HTTP deployment.
    485 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to drive a Chromium-based browser for web research, testing, and automation with Playwright-compatible tools, persistent profiles, proxy matching, extension loading, and humanized input across local or containerized deployments.
    485 npm
    MIT