real-browser-mcp-server
Assists with Cloudflare Turnstile challenges on pages the user is authorized to access, enabling automated handling of bot-check prompts.
Integrates Ghostery's ad and tracker blocking engine to block ads and trackers during browsing, reducing distractions and improving page load times.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@real-browser-mcp-serverOpen https://news.ycombinator.com and summarize the top 3 Hacker News stories"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
π¦ Real Browser MCP
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, the easiest way to use it is via npx (which handles downloading and executing automatically).
β‘ Quick Start (Using npx)
Add the following to your MCP Configuration file (e.g. cline_mcp_settings.json or claude_desktop_config.json):
{
"mcpServers": {
"real-browser": {
"command": "npx",
"args": ["-y", "real-browser-mcp-server@latest", "mcp"]
}
}
}{
"mcpServers": {
"real_browser_mcp_server": {
"command": "node",
"args": [
"c:/Users/Admin/Desktop/Software/Real-Browser-Mcp/dist/src/index.js"
],
"env": {
"AI_HEALING": "true",
"HEADLESS": "true"
}
}
}
}π 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 mcpThepostinstall 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 chromiumSet 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 mcpWhy 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.
π³ Run via Docker (Recommended for Servers)
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: cloakbrowser-mcp
π 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-playwrightwith 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_pagelets the AI agent plan an entire multi-step task from one view and execute all actions in a single continuous flow via its unifiedstepsworkflow β no screenshot pause after every micro-step, just like a human. (The previously separatebrowse_tasktool is now merged intosee_pageto avoid agent confusion.)Rich Single-Shot Vision:
see_pagenow 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: truefor 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
Open Cursor Settings β Features β MCP.
Click + Add New MCP Server.
Configure as follows:
Name:
real-browser-mcp-serverType:
commandCommand:
npx -y real-browser-mcp-server@latest mcp
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 kilo.jsonc:
{
"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 |
|
| auto (CI + no-display detection) | Run browser headless (no visible window) |
|
|
| Auto-repair broken CSS selectors in |
|
|
| Block ads and trackers |
|
|
| Assist with Cloudflare Turnstile challenges |
|
| off | Allow |
|
| auto (CI/root detection) | Force-disable or force-enable the Chromium OS sandbox |
| integer |
| Hard watchdog budget per tool call (avoids client "Request timed out") |
|
|
| Structured JSON log verbosity (stdout stays clean for MCP) |
|
| off | Emit |
| path |
| Where |
| UA string or comma-separated list | auto (built from Chromium version) | Override/rotate the browser User-Agent. A list ( |
|
| off | Opt-in for |
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 21 tools categorized into functional units:
π Browser & Session
Tool Name | Description | Key Parameters |
| Initialize Patchright browser with ad blocker, AI healing, embedded-widget assist, WebGL/hardware spoofing, and WebRTC leak protection. |
|
| Close browser with cleanup. |
|
π§ Navigation & Tab Management
Tool Name | Description | Key Parameters |
| Navigate to URL or manage browser tabs ( |
|
π Natural Interaction
Tool Name | Description | Key Parameters |
| Natural click or drag-and-drop ( |
|
| Type text with natural speed variation, smart clearing, and iframe support. |
|
| Form filling and embedded widget completion for pages you are testing (JS widgets, text/image input recognition). Externally hosted services are not supported. |
|
| Natural scrolling with lazy-load detection. |
|
| Press keyboard keys with modifier key support (Ctrl/Shift/Alt). |
|
| Run custom JavaScript inside a page or iframe. β οΈ Use with trusted input only. |
|
π Extraction & Decoding
Tool Name | Description | Key Parameters |
| Retrieve page content in |
|
| Advanced extractor: regex, JSON, meta, structured, auto, API discovery, string conversion, links. |
|
| Extract HLS/DASH/MP4, control player APIs, convert string formats. |
|
π‘ Network & Utilities
Tool Name | Description | Key Parameters |
| Trace full redirect chains (HTTP 301/302, JS, meta refresh). |
|
| Capture requests, responses, intercepted APIs, GraphQL, WebSockets, media URLs, block unwanted resource URLs (3x faster loads), and mock API routes. Export HAR. |
|
| DOM structure, scripts, page components, tech stack, SEO, and recommendations. |
|
| Smart delay for selectors, navigation events, or fixed timeout. |
|
| Track automation progress with AI-estimated remaining time. |
|
| Inspect & manage client-side storage, cookies, and session state persistence ( |
|
| Replay a captured API request in browser context. |
|
| Generate JSON schemas, diff two JSONs, or create SDK boilerplates (Python/TypeScript). |
|
ποΈ AI Vision & Human-like Workflow
Tool Name | Description | Key Parameters |
| Unified vision + human-like task runner: screenshot + page text + all interactive elements + iframe inventory in ONE call. Optionally pass a |
|
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]
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 |
| Start the MCP server using standard STDIO transport. |
| Build and start the MCP server. |
| Start the MCP server. |
| Start the MCP server with verbose tool listing on |
| List all 21 registered MCP tools with categories. |
| Compile TypeScript into the |
| Build, then run the live anti-bot test suite ( |
| Run CommonJS test scripts. |
| 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.tsand dispatched through a singleexecuteTool()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
stateobject insrc/mcp/handlers/state.tsholds the current browser/page instance and network recorder data.requireBrowser()/getState()provide typed accessors for handlers.Human-like workflow: the unified
see_pagesteps[]workflow orchestrates the existingclick/type/scroll/press_key/wait/extracthandlers in a continuous sequence β no extra LLM or API key required. The AI agent (LLM client) plans the steps;see_pageexecutes 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.cachefolder in your project tree.execute_jscaveat: theexecute_jstool 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_pageandsolve_captchareturn images. Non-vision models get a full text + JSON summary fallback.TypeScript strict mode: the project compiles with
strict: trueacross all source files, andnoEmitOnError: truemakes a type error fail the build outright (tsc --noEmitpasses cleanly).
π‘οΈ License
This project is licensed under the ISC License. Created and maintained by codeiva11.
Available Tools
21 toolsapi_analyzerB
Generate JSON schemas from API responses, diff two JSON objects, or create SDK boilerplate code in Python or TypeScript.
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | JSON string (for schema/diff) or URL (for sdk) | |
| lang | No | ts | |
| data2 | No | Second JSON string for diff comparison | |
| action | Yes | schema |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states the high-level operations and does not mention side effects, network requests (e.g., when data is a URL), output format, error conditions, or reversibility. For a tool that can generate code and fetch remote responses, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler words. Each clause corresponds to a distinct action and adds concrete information. It is front-loaded with the primary capability and remains easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has four parameters, two required, no output schema, and no annotations, the one-line description is insufficient. It does not explain that data2 is only for diff, that data must be a URL for sdk, what the generated output looks like, or what side effects may occur. An agent would need to infer too much to use the tool reliably across all three actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers data and data2 with descriptions, but action and lang lack descriptions. The description partially compensates by explaining the three actions and the Python/TypeScript language options, mapping to action and lang. However, it does not clarify parameter relationships such as data2 being needed for diff or that action defaults to schema. The addition of meaning over the schema is moderate, not outstanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states specific verbs and resources for each mode: generate schemas, diff objects, create SDK boilerplate. It clearly communicates the three distinct capabilities of the tool and leaves no ambiguity about what it does. It is not a tautology and stands apart from the unrelated sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists what the tool can do but gives no guidance on when to use it, when not to use it, or which mode to choose in which situation. There are no explicit alternatives or exclusions. The agent must infer usage entirely from the action enum values.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Force-kill the browser process |
TDQS
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.
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.
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.
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.
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.
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_initA
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.
| Name | Required | Description | Default |
|---|---|---|---|
| proxy | No | ||
| headless | No | ||
| aiHealing | No | Enable selector fallback when a selector does not match | |
| recordVideo | No | Record continuous video of the session | |
| widgetAssist | No | Automatically interact with embedded page widgets and challenge elements when present | |
| enableBlocker | No | Filter auxiliary scripts, telemetry, and background tracking requests | |
| contextOptions | No | Playwright BrowserContext options (viewport, userAgent, geolocation, permissions, httpCredentials, extraHTTPHeaders, etc.) | |
| blockWebRTCLeaks | No | Prevent local IP leaks via WebRTC when using proxies | |
| spoofFingerprint | No | Spoof WebGL vendor/renderer, Canvas noise, and AudioContext to defeat bot fingerprinting |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does add some behavioral context: it mentions automatic recovery of stale sessions and exposes anti-detection/WebRTC protections. But it does not disclose consequences such as browser process lifetime, resource consumption, or the need to later call browser_close.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler: the first states the core action and enumerates capabilities, the second adds an important recovery behavior. The most important verb ('Initialize') is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter tool with no output schema and no annotations, the description is too thin: it never states what the tool returns or how the agent knows initialization succeeded. It also omits setup details like proxy formatting or how contextOptions interact with defaults, leaving the agent to infer success criteria.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema documentation already covers 7 of 9 parameters, and the description adds useful semantic grouping (e.g., 'biometric anti-detection hardware spoofing (WebGL, Canvas, AudioContext)' for spoofFingerprint, 'resource filtering' for enableBlocker, 'WebRTC leak protection' for blockWebRTCLeaks). This goes beyond the bare schema labels without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Initialize' and a clear resource ('a browser session'), and the enumerated configuration options make its scope explicit. Among sibling tools like navigate, browser_close, and wait, this is unambiguously the session-start tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it should be used to start a browser session but never states when to call it, such as before navigation actions, or when not to use it. It also does not mention alternatives or warn against re-initializing an existing session, beyond the vague recovery behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickB
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.
| Name | Required | Description | Default |
|---|---|---|---|
| delay | No | ||
| aiHeal | No | Try alternative selector if primary fails | |
| dragTo | No | Drag and drop the source element to target selector or coordinates with biological friction and overshoot correction | |
| iframe | No | Target a specific iframe by index (use media_extractor list_iframes to get index) | |
| retries | No | Retry count on failure | |
| timeout | No | Max time to wait for element to appear (ms) | |
| selector | No | CSS selector for the element to click | |
| hoverOnly | No | Hover only, do not click (to reveal hidden controls) | |
| humanLike | No | Smooth cursor movement before click | |
| clickCount | No | ||
| forceClick | No | Click via JavaScript even if element is not visible | |
| hoverFirst | No | Hover over element before clicking (for dynamic controls) | |
| waitForPlay | No | Wait until the video starts playing after click | |
| annotationId | No | Annotation number from see_page(annotate:true) β use instead of selector | |
| usePlayerAPI | No | Control video player via its JavaScript API instead of DOM click | |
| hoverDuration | No | Wait time after hover before clicking (ms) | |
| playerTimeout | No | Max time to wait for video playback to start (ms) | |
| iframeSelector | No | Target a specific iframe by CSS selector | |
| scrollIntoView | No | Scroll element into view before clicking | |
| autoDetectPlayer | No | Detect and target embedded video player iframes automatically | |
| autoAcceptDialogs | No | Auto-dismiss browser dialogs (alerts, confirms) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does reveal several behaviors: drag simulation with biological friction, iframe targeting, hover-before-click, video player API control, and automatic retry with fallback selectors. However, it omits side effects like auto-dismissing dialogs, force-click via JavaScript, and potential navigation outcomes from clicking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core action and then lists supported capabilities. It is efficient with no filler, though the feature list is somewhat packed and could benefit from slight structural separation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 21 parameters, nested objects, and no output schema, the description gives a useful high-level summary but relies heavily on the schema for invocation details. It does not address return behavior or clarify which combinations of options are mutually exclusive or complementary, leaving moderate gaps for an agent selecting parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 90%, so the input schema already documents most parameter meanings. The description only names feature areas like dragTo and iframe handling without adding semantic detail beyond the schema, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Click or drag a page element by CSS selector or annotation ID.' It clearly states what the tool does and how elements are targeted, and the click/drag scope distinguishes it from sibling input tools like type and press_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to prefer this tool over alternatives such as type, press_key, or see_page. Usage context is only implied by the tool name and the action verb, with no exclusions or routing recommendations.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| detailed | No | ||
| aiInsights | No | Include loading strategy recommendations | |
| detectAccessControls | No | Identify embedded widgets and page components |
TDQS
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.
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.
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.
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.
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.
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_jsB
Execute custom JavaScript in the page context with async support, return value capture, and iframe targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript code to execute in the page context | |
| async | No | Wrap code in an async function | |
| iframe | No | Execute inside a specific iframe (0 = main frame, 1+ = iframe by index) | |
| timeout | No | ||
| returnValue | No | Return the result of the expression | |
| waitForIframe | No | Wait for the iframe to finish loading before executing | |
| iframeSelector | No | Execute inside iframe matched by CSS selector |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It does mention several key traits: async execution, return value capture, and iframe targeting. However, it is silent on side effects of arbitrary JS execution, error handling, page-state impact, or limitations, which is a notable gap for a high-privilege execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no filler. It front-loads the core purpose and then lists the key capabilities compactly, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, potentially side-effect-heavy tool with 7 parameters and no annotations or output schema, the description is too sparse. It does not explain how return values are serialized, how iframe selection behaves in edge cases, what happens on timeout or JS errors, or what side effects may occur in the page.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (86%), so the schema already documents most parameters. The description adds context around code, async, return value, and iframe targeting, but it does not clarify timeout, waitForIframe behavior, or the relationship between iframe and iframeSelector beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Execute'), a resource ('custom JavaScript in the page context'), and includes differentiators: async support, return value capture, and iframe targeting. This makes it immediately distinct from sibling tools like click, type, or navigate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or conditions where built-in browser actions should be preferred. Usage is only implicitly inferable from the phrase 'custom JavaScript'.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | auto | |
| flags | No | Regex flags | gi |
| types | No | For meta mode: which tag groups to include (all, meta, og, twitter) | |
| source | No | all | |
| pattern | No | For regex mode: the regular expression pattern | |
| jsonPath | No | For json mode: JSONPath expression | |
| selector | No | For structured/links mode: CSS selector to scope the extraction | |
| inputData | No | For transform mode: the string to convert | |
| keyOffset | No | For transform mode: offset value (optional) | |
| autoDecode | No | Automatically process Base64 or percent-encoded values in results | |
| transformKey | No | For transform mode: optional conversion parameter | |
| autoDetectKey | No | For transform mode: locate the conversion parameter from page scripts automatically | |
| includeHidden | No | For links mode: include hidden/non-visible links | |
| searchIframes | No | For links mode: search inside embedded frames |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Find elements containing this text | |
| xpath | No | XPath selector | |
| format | No | text | |
| saveAs | No | Absolute file path to save extracted content to disk | |
| timeout | No | ||
| multiple | No | Return multiple matching elements (for format=elements) | |
| selector | No | CSS selector | |
| waitForJS | No | Wait for JavaScript to finish rendering | |
| rawHttpUrl | No | URL to fetch raw HTTP without JS rendering. Defaults to current page URL. | |
| includeMeta | No | Include page title and URL at the top | |
| extractAttributes | No | Extract all element attributes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| deep | No | Also scan inline scripts and data attributes | |
| urls | No | List of URLs for batch_extract action | |
| index | No | iframe index number | |
| types | No | Media types to find: video, audio, hls, dash, download, iframes | |
| action | No | extract | |
| quality | No | best | |
| selector | No | iframe CSS selector | |
| decoderIV | No | Optional secondary parameter (for custom conversion) | |
| aiOptimize | No | Select extraction strategy automatically | |
| decoderKey | No | Optional transformation parameter (for custom conversion) | |
| decoderType | No | Conversion type: auto-detect, url, base64, or custom | auto |
| encodedData | No | String data to convert (for decode_url action) | |
| playerAction | No | info | |
| searchIframes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden. It does disclose some behavior: extraction includes nested iframes, player_control operates 'via player API', and decode_url 'inspect[s] converted string and token formats.' However, it does not explain important behavioral aspects such as return values, side effects of switching iframes, what batch_extract returns, or how aiOptimize changes behavior. It is minimally adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose and then compactly lists the six actions with brief parenthetical explanations. There is no filler or redundancy. It is concise and easy to scan, though a bulleted structure could have improved readability given the multi-action nature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a 14-parameter, 6-action tool with no output schema and no annotations, so the description carries a heavy completeness burden. It outlines the actions but omits critical invocation context: which parameters are required for each action, what the output shape is, how iframe switching is resolved, and how decode_url parameters should be supplied. The description is a useful summary but not complete enough for an agent to confidently invoke many of the actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so the description is expected to add meaning for the remaining gaps and for cross-parameter relationships. It names actions like batch_extract, decode_url, and player_control but does not clarify which parameters apply to which actions, how decoderKey/decoderIV/encodedData interact, or how index/selector relate to iframe actions. The action names mostly repeat the schema enum, adding little parameter-level value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb-resource pairing: 'Extract and control media from the current page.' It then enumerates six concrete actions, which clearly differentiates this tool from the sibling set (e.g., get_content, network_recorder, extract_data). The purpose is immediately understandable and not a mere restatement of the tool name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists supported actions but provides no guidance on when to use this tool instead of sibling alternatives like network_recorder, extract_data, or execute_js. There are no explicit conditions, exclusions, or routing hints. Usage context is only implied by the phrase 'from the current page' and the action list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_recorderC
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mock | No | Configuration for mock_route action | |
| action | No | get | |
| filter | No | ||
| patterns | No | URL patterns or glob filters for block_urls action (e.g. ["*.png", "*.jpg", "*google-analytics*"]) | |
| captureXhrBody | No | Capture fetch/XHR response bodies (JSON or form-urlencoded) | |
| aiDetectStreams | No | Identify video and audio stream URLs in recorded requests |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full disclosure burden, but it only adds two behavioral hints: the 3x-5x speed-boost claim for block_urls and the intercept/mock behavior of mock_route. It says nothing about side effects of start/stop/clear/clear_routes, whether recorded data persists, whether blocking or mocking survives navigation, or what the get actions return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded in the first clause, and the action enumeration is dense but information-bearing β the parentheticals on block_urls and mock_route earn their place. It is a long single sentence, which slightly hurts scannability, but there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a high-complexity tool: 14 actions, 6 parameters including nested objects, no output schema, and no annotations. The description answers 'what actions exist' but not 'when to use them', 'what happens when invoked', or 'what the recorded data looks like'. For an umbrella tool of this size, the description is a catalog, not a usable guide.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% (4 of 6 params documented), with the nested filter object and the action enum lacking schema descriptions. The description partly compensates by spelling out all 14 action values with parenthetical meaning for the two least obvious ones (block_urls and mock_route). However, filter's subfields (type, mediaOnly, urlPattern, resourceType) remain unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource statement ('Record, inspect, and control network activity') and then enumerates 14 concrete actions, giving an agent a precise map of the tool's scope. It differentiates from browser-interaction siblings like click/type/navigate through the network focus, though it does blur slightly against api_analyzer and media_extractor given the overlapping get_api_calls/get_media actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to pick this tool over network-adjacent siblings. The description never names api_analyzer, media_extractor, or redirect_tracer as alternatives, nor does it explain which of the 14 actions fits which scenario. An agent must infer usage entirely from action names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyB
Press keyboard keys with configurable modifier keys, repeat count, and keystroke delay.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name (e.g. Enter, Tab, ArrowDown, a) | |
| count | No | Number of times to press the key | |
| modifiers | No | Modifier keys (Alt, Control, Meta, Shift) | |
| humanDelay | No | Add natural delay between repeated presses |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It mostly paraphrases the schema parameters and does not explain focus requirements, potential global or browser-level effects, or any side effects of pressing keys. This is minimal disclosure for a tool that simulates input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and resource. Every phrase earns its place, with no redundant or vague filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple tool with fully documented parameters, the description is minimally adequate. However, it omits important context such as when to use this tool versus type, and whether the key press targets the page or the browser UI, which an agent would need to call it correctly in the right situation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well documented. The description adds no new semantic detail beyond summarizing modifier keys, repeat count, and keystroke delay, which is already visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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'), and lists configurable aspects such as modifiers, repeat count, and delay. It is clear enough to be distinguished from sibling tools like click, though it does not explicitly differentiate itself from type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool β any time keyboard keys need to be pressed with modifiers or repetition β but it does not explicitly state when to prefer it over alternatives like type or click. No exclusions or comparison to sibling tools are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
progress_trackerC
Track multi-step task progress with estimated time remaining.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | get | |
| progress | No | Progress value from 0 to 100 | |
| taskName | No | ||
| aiEstimate | No | Estimate remaining time from current progress rate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose side effects, but it says only that progress is tracked and time is estimated. It fails to mention that start/update/complete/clear mutate internal state, that updates are incremental, or how estimates are calculated beyond the schema hint on aiEstimate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The one-sentence description is tight and front-loaded, with no filler. It is appropriately concise but so short that it sacrifices informative content, though that tradeoff is accounted for in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a multi-action stateful tool with no annotations and no output schema, the description is incomplete. It doesn't explain the action lifecycle, how taskName scopes state, what 'get' returns, or what 'clear' resets. An agent would need to inspect the schema and infer usage from enum names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the description compensates poorly: it adds context for progress and aiEstimate but says nothing about the required action enum semantics or what taskName identifies. The action parameter with five enum values is left entirely unexplained, which is a significant gap for a stateful tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('track') and resource ('multi-step task progress') and adds the differentiator of estimated time remaining. It separates the tool from its browser-automation siblings, though it does not mention the action state machine or specific operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives, nor any conditionals like 'use start before update' or 'use get to retrieve current progress'. The description gives a general purpose but no practical direction for the agent on selecting or sequencing calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
random_scrollB
Scroll the page with configurable direction, amount, and automatic lazy-load triggering.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | Pixels to scroll. 0 = auto-decide based on page content height | |
| smooth | No | ||
| direction | No | smart | |
| aiDetectLazyLoad | No | Detect and trigger lazy-loaded content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden of behavioral disclosure. It mentions lazy-load triggering but does not explain side effects, the meaning of 'smart' or 'random' direction, what happens with amount=0, or whether scrolling may trigger network requests or wait for content. This is under-disclosed for an interaction tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It efficiently conveys the core action and key options before the schema details are needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is too short to fully equip an agent. It lacks guidance on direction semantics, default behavior, when to invoke this tool, and what observable effects or return value to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%, so the description should compensate. It restates that direction, amount, and lazy-loading are configurable, but adds no new meaning beyond the parameter names and existing schema descriptions. It omits the 'smooth' parameter entirely and does not clarify the ambiguous 'smart' direction value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Scroll'), a specific resource ('the page'), and the configurable aspects (direction, amount, lazy-load triggering). Among the sibling tools, none other is a scrolling tool, so this is clearly differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It does not mention conditions such as 'use when content is below the fold' or 'use for lazy-loaded pages', nor does it suggest a sibling tool for other cases.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| timeout | No | Navigation timeout in ms | |
| followJS | No | Track JavaScript-triggered navigations | |
| decodeURLs | No | Automatically decode percent-encoded URLs in the chain | |
| followMeta | No | Track meta refresh redirects | |
| maxRedirects | No | ||
| includeHeaders | No |
TDQS
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.
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.
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.
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.
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.
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.
replay_requestB
Re-send a network request inside the page context, reusing the current session headers.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| body | No | ||
| method | No | GET | |
| headers | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It discloses two meaningful behaviors: execution happens inside the page context and session headers are reused. However, it does not state whether the request triggers navigation, whether the response is returned, or that re-sending a request may have side effects on the server.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no wasted words. The core scoping constraints, 'inside the page context' and 'reusing the current session headers', are front-loaded and immediately useful to an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters, no annotations, and no output schema, the description omits significant contextual details: what the tool returns, whether it performs a page navigation, how body and headers interact with the original request, and whether replaying is safe. It gives a good one-line summary but is not complete enough for an agent to invoke it confidently in varied situations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description mentions none of the four parameters (url, body, method, headers). It does not clarify how the headers parameter interacts with the reused session headers, what format body expects, or how the method default works. The description adds no parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Re-send') and a clear resource ('network request inside the page context'), and notes that it reuses the current session headers. It is distinct enough from siblings like navigate or execute_js, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'inside the page context, reusing the current session headers' implies when to use the tool: when the agent needs to replay a request with existing session/auth state. However, it gives no explicit guidance about when not to use it, nor does it identify alternatives among the many sibling tools.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | File path to also save the screenshot image | |
| steps | No | Actions 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. | |
| format | No | jpeg | |
| quality | No | JPEG quality 0-100 | |
| annotate | No | Draw numbered bounding boxes over interactive elements for precise targeting | |
| fullPage | No | Capture the full scrollable page instead of only the visible viewport | |
| autoHover | No | Hover over navigation menus before capturing to reveal dropdowns | |
| maxElements | No | Maximum number of interactive elements to map | |
| scanIframes | No | List embedded iframes with their index and URL | |
| stopOnError | No | Stop step execution on first failure | |
| captureAfter | No | Take a screenshot after the steps array completes | |
| captureBefore | No | Take a screenshot before running the steps array | |
| includeDomText | No | Include the full DOM text content | |
| watchMutations | No | Report DOM mutations (popups, alerts) since the last capture | |
| includeElements | No | Include the interactive element map in the response | |
| includePageText | No | Include cleaned page text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of explaining behavior. It discloses the composite response, the ability to execute a steps array of actions without re-capturing, and the expected re-capture cadence. It does not explicitly warn that actions like click or type can mutate the live page, but this is strongly implied by the workflow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first sentence states exactly what is returned, and the second sentence gives actionable workflow guidance. There is no filler or repetition of schema details, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 16 parameters, a complex nested steps array, and no output schema. The description gives a high-level return description and workflow, but it does not specify how the screenshot is returned, how the element map is structured, or how captureBefore/captureAfter defaults affect the response. These gaps are meaningful for an agent trying to consume the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 94%, so the schema already documents most parameters. The description adds useful workflow-level meaning by recommending fullPage:true and annotate:true and explaining how the steps array should be used, but it does not add substantial per-parameter semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Capture a snapshot of the current page.' It then enumerates a concrete composite return value: screenshot, optional full-page text, interactive element map, and iframe inventory. This clearly separates it from navigation or isolated action tools, though it does not explicitly name a sibling it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The workflow paragraph is strong: it tells the agent to call once with fullPage:true and annotate:true, run all planned actions as a steps array, and not call see_page again until the page genuinely changes. This provides clear when-to-use and when-not-to-use guidance, though it does not explicitly contrast with sibling tools like click or type.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solve_captchaC
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Text recognition language code: eng, hin, or eng+hin | eng |
| type | No | Widget type: js_widget (JavaScript-based embedded challenge widget), text (text transcription verification), image (image-based input), auto (detect automatically). | auto |
| iframe | No | Target a specific iframe by index | |
| submit | No | Submit the form after filling all fields | |
| aiMatch | No | Match form fields by semantic similarity even if names differ | |
| timeout | No | ||
| formData | No | Key-value pairs of form fields to fill (field names matched automatically to page inputs) | |
| humanLike | No | Type with variable keystroke delays | |
| maxRetries | No | Maximum refresh attempts before giving up | |
| allowedChars | No | Character set allowed in the answer | |
| analyzeFirst | No | Inspect page structure before filling fields | |
| formSelector | No | CSS selector for the form element (auto-detected if not provided) | |
| inputSelector | No | CSS selector for the answer input field | |
| expectedLength | No | Expected character length of the answer | |
| iframeSelector | No | Target a specific iframe by CSS selector | |
| widgetSelector | No | Alias for captchaSelector | |
| captchaSelector | No | CSS selector targeting the verification element, canvas, image, or interactive widget container | |
| refreshSelector | No | CSS selector for the reload/refresh button | |
| preferTextFallback | No | Return text-only guidance instead of an image when the model cannot process images |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It states that the tool automates form completion and widget verification, but it doesn't disclose side effects like form submission, page interaction, retries, or the risk of triggering anti-bot protections. Key behavioral parameters such as submit, maxRetries, and humanLike are left to the schema rather than explained in the description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and structured as two sentences without filler. It loses a point because 'interactive widget verification' is vague euphemism for captcha solving and the first sentence could more directly state the tool's unique purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with 19 parameters, no annotations, and no output schema, so the description must carry substantial context. It provides an overview of capabilities but omits return behavior, failure modes, and how it composes with the other browser automation siblings. An agent would need to infer important invocation context from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (95%), so the baseline is 3. The description adds no parameter-level detail, but nearly every parameter already has a clear schema description, including the enum for type and selectors for captcha-specific targeting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's verb (automate) and resources (form completion, interactive widget verification on web pages), and lists concrete supported capabilities like JavaScript challenge widgets and image text transcription. However, it doesn't explicitly differentiate itself from sibling tools like type or click, relying on the tool name and higher-level scope to set it apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives such as type, click, or execute_js. The mention of 'for QA and automated browsing workflows' provides a general audience but not conditions, exclusions, or alternative tool routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_inspectorC
Inspect and manage client-side storage & sessions. Supports 6 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, indexeddb, service_workers.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | cookies | |
| sessionPath | No | File path to save or load session state (cookies & localStorage) from disk |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It does reveal that save_session persists state and load_session restores it, but it omits important behaviors: what clear_cookies, indexeddb, and service_workers do beyond their names, whether load_session overwrites current state, whether save_session prompts or overwrites files, and any side effects on the active session. The mutating nature and potential side effects are not sufficiently disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized as an action list. The opening sentence front-loads the core purpose, and the parenthetical explanations are short. It is efficient, though the last few actions receive no detail, making the list slightly uneven in clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-action tool with no output schema, the description is incomplete. It does not specify return values, required arguments per action, error cases, or the behavior of undocumented actions. An agent would need to guess what indexeddb and service_workers return or how they affect the browser. The tool is complex enough that more detail is necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (sessionPath has a description). The description adds meaning for three of the six action enum values (cookies, save_session, load_session), but leaves clear_cookies, indexeddb, and service_workers as bare names with no explanation. It does not clarify that sessionPath is only relevant for save_session/load_session, leaving the agent to infer parameter applicability. Partial compensation for schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Inspect and manage client-side storage & sessions' and lists six specific action names with brief explanations for most. It identifies a unique domain (storage/sessions) that is distinct from sibling browser-automation tools, though it does not explicitly contrast itself with any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given about when to use this tool versus alternatives. The action descriptions imply some use cases (e.g., 'restore state from file without re-logging'), but there is no direct statement of when to prefer storage_inspector over other tools or when not to use it. Context is left entirely to the agent's inference.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| clear | No | Clear the field before typing | |
| delay | No | Delay between keystrokes in ms | |
| aiHeal | No | Try alternative selector if primary fails | |
| iframe | No | Target a specific iframe by index | |
| selector | No | CSS selector for the input field | |
| pressEnter | No | Press Enter after typing | |
| annotationId | No | Annotation number from see_page(annotate:true) β use instead of selector | |
| iframeSelector | No | Target a specific iframe by CSS selector | |
| waitForSelector | No | Wait for the element to appear before typing |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose configurable keystroke delay, field clearing, and iframe targeting. However, it omits other significant default behaviors such as waiting for the selector, AI-based selector healing, the option to press Enter, and the fact that clearing defaults to true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence communicates the core action and key capabilities with no filler or repetition. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no annotations and no output schema, the one-sentence description is minimally adequate: it orients the agent and the schema fills the parameter details. Still, it leaves important contextual gaps around selector versus annotationId targeting, iframe selector/index options, and default wait/heal behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. The description adds only a loose mapping to delay, clear, and iframe options and does not clarify the selector-versus-annotationId choice, but it does not need to compensate for missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pairing, 'Type text into an input field', which clearly distinguishes it from navigation or clicking tools. It also names several option classes (delay, clearing, iframe support) that make the tool's scope evident, though it does not explicitly contrast it with siblings like press_key.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to choose this tool over alternatives such as press_key or click, nor any conditions or exclusions. The intended context is implied by 'input field' but never stated as a selection rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
waitA
Wait for a selector, navigation event, networkidle state, or a fixed timeout before continuing.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | timeout | |
| value | No | Selector string or timeout value in ms | |
| timeout | No |
TDQS
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 disclose the four wait modes, which is substantive, but it omits meaningful behaviors: what happens when the selector is not found or the timeout elapses (error vs. continue), whether selector waits for appearance or visibility, and what 'networkidle' actually waits for. These are real unknowns for a tool that controls execution flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero wasted words. It opens with the verb, immediately enumerates all four wait targets, and communicates the purpose in one pass β an agent can grasp the full scope at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with zero required parameters, and the schema defaults (type='timeout', timeout=30000) plus the description's type list cover basic invocation. However, the per-type parameter interplay, default behavior when only 'type' is supplied, and failure/error semantics are left unstated, which matters for a tool whose purpose is controlling the flow of a browsing session.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% β only 'value' is documented in the schema, while 'type' and 'timeout' lack descriptions. The tool description adds value by enumerating the wait types and clarifying that the timeout value is in milliseconds, but it does not explain which parameters are required per type or how the 'value' field relates to the numeric 'timeout' parameter beyond the phrase 'timeout value in ms.'
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('wait for') and a clear resource scope: 'a selector, navigation event, networkidle state, or a fixed timeout before continuing.' These four wait targets map exactly to the schema enum, and no sibling tool performs a wait-like operation, so it is easily distinguished from navigate, click, and 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'before continuing' implies a synchronization use case between page interactions, which gives some contextual guidance. However, there is no explicit when-to-use explanation, no conditions for choosing one wait type over another, and no named alternatives β though no sibling provides a comparable wait capability, so the exclusion guidance is largely unnecessary.
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. Dates show when Glama detected each change.
21 tool updates
v3.2.13- First observed
api_analyzer - First observed
browser_close - First observed
browser_init - First observed
click - First observed
deep_analysis - First observed
execute_js - First observed
extract_data - First observed
get_content - First observed
media_extractor - First observed
navigate - First observed
network_recorder - First observed
press_key - First observed
progress_tracker - First observed
random_scroll - First observed
redirect_tracer - First observed
replay_request - First observed
see_page - First observed
solve_captcha - First observed
storage_inspector - First observed
type - First observed
wait
TDQS
Most tools have distinct purposes, but there is meaningful overlap among get_content, extract_data, see_page, and deep_analysis, all of which can be used to access page content or structure. Network_recorder and api_analyzer also overlap somewhat around API inspection. The detailed descriptions help, but an agent could still hesitate when choosing between them.
All names are lowercase snake_case, which helps, but conventions are mixed: some are bare verbs (wait, navigate, click, type), some are verb_noun (extract_data, press_key), and several are noun-style tool names (network_recorder, media_extractor, storage_inspector, api_analyzer). This is readable but not a consistent verb_noun pattern.
At 21 tools, the server sits in the heavy range for an MCP surface. The broad browser-automation domain justifies many capabilities, but several tools are niche and could be consolidated, making the overall count feel sprawling rather than tightly scoped.
The core browser lifecycle is well covered: init, navigate, click, type, scroll, wait, extract, and close, plus network, storage, media, and session persistence. Minor gaps remain, such as no dedicated file upload/download or explicit select/assert tool, but these can generally be worked around via execute_js or existing interactions.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
Stealth web automation for AI agents. Login, signup, navigate, screenshot.
AI-powered browser automation β navigate, click, fill forms, and extract data from any website.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
61
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to perform undetectable browser automation that bypasses Cloudflare, antibots, and social media blocks. Provides 105 tools for element extraction, network debugging, and real-world web scraping with a 98.7% success rate on protected sites.1,883MIT
- AlicenseAqualityDmaintenanceStealth browser automation for AI agents, using source-patched Chromium to bypass bot detection systems like Cloudflare, reCAPTCHA, and FingerprintJS.28Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to fully control a browser for web automation, including navigation, clicking, typing, scrolling, screenshots, and DOM inspection, with session persistence and anti-bot bypass.14MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control browsers with human-like behavior, stealth anti-detection, and 70 tools for navigation, interaction, and monitoring.221MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/codeiva11/Real-Browser-Mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server