mcp-stealth-chrome
MCP Stealth Chrome is an MCP server with 147 tools for AI agents to automate Chrome stealthily, bypass anti-bot systems, and conduct web research.
Anti-Bot Bypass & Stealth
Bypass Cloudflare Turnstile, solve reCAPTCHA v2 via vision LLM or CapSolver API, detect/bypass DataDome, PerimeterX, Imperva
Spoof TLS fingerprints (JA3/JA4), rotate UA/language/timezone, warm up sessions with natural browsing patterns
Save/load session state to reuse previously solved challenges
Stealth Browser Automation
Launch undetected Chrome (nodriver), navigate, click, fill forms, scroll, upload files, manage tabs, handle dialogs
Screenshots (PNG/JPEG, full-page, region), PDF generation, JavaScript execution
Humanized mouse (Bezier curves, drift simulation, record/replay human paths), Gaussian typing delays
OpenCV image-based clicking, offset/corner clicks
TLS-Perfect HTTP (Dual-Mode)
http_request: curl_cffi requests impersonating Chrome/Firefox/Safarihttp_request_with_session: authenticated requests bridging browser cookies into HTTP
LLM-Optimized Agent Toolkit
describe_page: compact JSON page summary for agentssmart_fill: fuzzy label-based form fillingvision_locate: find elements by natural language + vision LLMworkflow_run: sequential resumable tool workflowsAssertion tools,
click_and_wait,form_introspect, storage snapshot/diff
Web Research & Scraping
Keyless web search (Bing/Brave/DuckDuckGo/Exa), scrape to clean markdown,
smart_fetch(auto-escalates to browser if blocked)Deep research (search → fetch → markdown + citations), social media OSINT (Reddit, Threads, Facebook, X)
GitHub repo/README/issues reader, YouTube metadata + transcripts
Network Capture & Auth Bridge
Capture network traffic with response bodies, intercept Bearer tokens/CSRF from SPA traffic, wait for specific requests
DevTools & Performance
Performance traces, Core Web Vitals (LCP, CLS, INP), JS/CSS coverage, memory heap snapshots
Network/CPU throttling, device emulation (iPhone, Pixel, iPad), HAR export
Multi-Instance Management
Spawn multiple named parallel Chrome instances with isolated profiles, switch between them, clone existing Chrome profiles
DOM, Storage & JavaScript
Read/write localStorage/sessionStorage/IndexedDB, import/export cookies (JSON, Netscape, curl), clear cache
Accessibility tree snapshots, structured data extraction from tables and repeating containers
Bypass Cloudflare Turnstile widgets and managed-mode challenges, allowing automated access to Cloudflare-protected pages.
Solve Google reCAPTCHA v2 image challenges using AI vision models, enabling automation on sites protected by reCAPTCHA.
Integrate with local Ollama models for reCAPTCHA solving, providing an offline AI vision option.
Use OpenAI GPT-4o and other vision-capable models to solve reCAPTCHA via API.
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., "@mcp-stealth-chromebypass the Turnstile captcha on 2captcha.com/demo/cloudflare-turnstile"
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.
MCP Stealth Chrome
160 tools for AI agents that bypass Cloudflare, Turnstile, reCAPTCHA, and modern anti-bot systems — with an LLM-optimized action kit (describe_page, smart_fill, workflow_run, vision-LLM element locator) and a self-sufficient web-research kit (web_search, scrape_markdown, deep_research, social_research) layered on top of standard automation.
Browser stealth when you need eyes. TLS-perfect HTTP when you need speed.
Built on nodriver (direct CDP, no WebDriver leak) + curl_cffi (TLS fingerprint spoofing) + FastMCP.
One-line install with uvx:
claude mcp add stealth-chrome -- uvx mcp-stealth-chrome@latestProven on Real Sites
Site | Challenge | Result |
| All fingerprint tests | ✅ 100% pass (proof) |
| Turnstile visible | ✅ Passed via |
| Headless-chrome detection | ✅ "You are not Chrome headless" (proof) |
| WebDriver/Selenium/CDP/Headless | ✅ All categories "Normal" (proof) |
| TLS JA3/JA4 fingerprint | ✅ Real Chrome/Firefox/Safari JA3 hashes (see output below) |
| Multi-instance isolation | ✅ Two browsers parallel |
| reCAPTCHA v2 image challenge | ✅ 5/5 = 100% via |
🎯 click_turnstile → Cloudflare Turnstile Bypass
One-liner bypass on supported widget shapes. click_turnstile() → checkbox switches from "Verify you are human" ☐ to "Success!" ✅.
✅ Works on: 2captcha.com/demo/cloudflare-turnstile, dash.cloudflare.com login, nopecha.com/captcha/turnstile (via template-match fallback since v0.1.7), any page embedding the standard CF Turnstile widget with [data-sitekey] / .cf-turnstile / challenges.cloudflare.com iframe.
❌ Does NOT work on: Cloudflare managed-mode interstitials — the "Just a moment..." full-page challenge (e.g. nopecha.com/demo/cloudflare). CF scores the click as non-human and resets the Ray ID. For those pages use solve_captcha with a CAPSOLVER_KEY, or storage_state_load with a pre-warmed session.
🧪 bot.sannysoft.com → All Fingerprint Tests Pass
navigator.webdriver missing, WebDriver Advanced passed, Chrome present, Plugins detected correctly, PHANTOM_* probes all ok, WebGL shows real Apple M1 Pro GPU — nodriver's CDP-direct approach leaves zero automation traces.
🤖 areyouheadless → Headless Chrome Detection
Antoine Vastel's public headless-detection test says "You are not Chrome headless" — even though we run Chrome controlled programmatically.
🔍 browserscan.net/bot-detection → All Categories Normal
14 signals checked (WebDriver, WebDriver Advance, Selenium, NightmareJS, PhantomJS, Awesomium, Cef, CefSharp, Coaches, FMiner, Born, Phantomas, Rhino, Webdriverio, Headless Chrome, CDP, Dev Tool, Native Navigator) — every one returns "Normal".
🔐 TLS Fingerprint Proof
http_request(impersonate="chrome") vs vanilla Python httpx — tls.browserleaks.com:
Vanilla httpx: JA3: 37f7d09ced1a845dc48872abc1a29d7b UA: python-httpx/0.28.1 ❌ BOT
Chrome impersonate: JA3: f830262a93191fd695c65531282d5657 UA: Chrome/146.0.0.0 ✅ real Chrome
Firefox impersonate: JA3: 6f7889b9fb1a62a9577e685c1fcfa919 UA: Firefox/147.0 ✅ real Firefox
Safari impersonate: JA3: ecdf4f49dd59effc439639da29186671 UA: Safari/605.1.15 ✅ real SafariEach impersonation produces authentic browser JA3/JA4 — Cloudflare, DataDome, and Akamai cannot distinguish our HTTP requests from real browsers.
🏆 reCAPTCHA v2 Benchmark (5 consecutive runs)
Fresh profile + mouse drift warmup + an OpenAI-compatible vision model:
Run 1: ✅ 2169ch token, tiles=[3,4,7], 146s
Run 2: ✅ 2126ch token, tiles=[0,2,4,7], 80s
Run 3: ✅ 2169ch token, tiles=[1,2,4,8], 143s
Run 4: ✅ 2148ch token, tiles=[1,4,5,6,8,9], 126s
Run 5: ✅ 2169ch token, tiles=[0,3,4], 69s
Success rate: 5/5 = 100%
Avg solve: 113s
Token range: 2126–2169 chars (all Google-accepted)First OSS MCP with proven 100% reCAPTCHA v2 bypass via BYO-API-key — works with Claude, gpt-4o, gpt-5.x, Gemini, Groq, local Ollama, any OpenAI-compatible vision model.
Method: neutral prompt language bypasses LLM safety filter + auto-refresh challenge when vision returns empty + dynamic 3x3/4x4 grid detection + humanized mouse behavior.
Related MCP server: ScrapeLab MCP
Key Differentiators
Compared to the leading Python stealth MCP (vibheksoni/stealth-browser-mcp, 476⭐):
Feature | mcp-stealth-chrome | vibheksoni |
Tools | 143 | 90 |
LLM-optimized kit (describe_page, smart_fill, vision_locate, workflow_run, assert_*) | ✅ Unique | ❌ |
Network body capture + session-bridged HTTP | ✅ Unique | ❌ |
| ✅ Embed widgets + template fallback | ❌ |
Dual-mode HTTP (curl_cffi TLS) | ✅ Unique | ❌ |
AI Vision reCAPTCHA solver (Claude) | ✅ Unique | ❌ |
Precision Mouse Kit (11 tools) | ✅ Unique | ❌ |
Multi-instance + idle reaper | ✅ | ✅ |
Install |
|
|
Sister Firefox package | ❌ | |
Network interception hooks | ⚠️ basic | ✅ AI-generated Python hooks |
Pixel-perfect element cloning | ⚠️ basic | ✅ 300+ CSS + events |
Different niches: we focus on anti-bot bypass, they focus on UI reverse-engineering. Both MCPs work great together.
Quick Install (3 commands per OS)
macOS:
curl -LsSf https://astral.sh/uv/install.sh | sh # install uv
brew install --cask google-chrome # install Chrome (skip if already installed)
claude mcp add stealth-chrome --scope user -- uvx mcp-stealth-chrome@latestLinux (Ubuntu/Debian):
curl -LsSf https://astral.sh/uv/install.sh | sh
sudo apt install -y google-chrome-stable # or chromium-browser
claude mcp add stealth-chrome --scope user -- uvx mcp-stealth-chrome@latestWindows (PowerShell):
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
winget install Google.Chrome
claude mcp add stealth-chrome --scope user -- uvx mcp-stealth-chrome@latestNo Chrome? Server gives a friendly error with install instructions before failing.
See INSTALL.md for detailed per-client setup + troubleshooting. Per-client snippets below:
Global (available in all projects):
claude mcp add stealth-chrome --scope user -- uvx mcp-stealth-chrome@latestProject only (current project):
claude mcp add stealth-chrome -- uvx mcp-stealth-chrome@latestGlobal — add to config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"stealth-chrome": {
"command": "uvx",
"args": ["mcp-stealth-chrome@latest"]
}
}
}Claude Desktop is always global — no project-level config.
Global — Preferences > Features > MCP, or ~/.cursor/mcp.json:
Project — .cursor/mcp.json in project root:
{
"mcpServers": {
"stealth-chrome": {
"command": "uvx",
"args": ["mcp-stealth-chrome@latest"]
}
}
}Global — ~/.windsurf/mcp.json:
Project — .windsurf/mcp.json in project root:
{
"servers": {
"stealth-chrome": {
"command": "uvx",
"args": ["mcp-stealth-chrome@latest"]
}
}
}Global — VS Code settings or ~/.continue/config.json:
Project — .vscode/mcp.json in project root:
{
"mcpServers": {
"stealth-chrome": {
"command": "uvx",
"args": ["mcp-stealth-chrome@latest"]
}
}
}Settings → Extensions → MCP Servers, or edit ~/.config/zed/settings.json:
{
"context_servers": {
"stealth-chrome": {
"command": {
"path": "uvx",
"args": ["mcp-stealth-chrome@latest"]
}
}
}
}🔑 BYOK (Bring Your Own Key) — Optional
mcp-stealth-chrome is fully functional without any API key — 157 of 160 tools work out of the box, including click_turnstile (Cloudflare Turnstile bypass), TLS-perfect HTTP, multi-instance, DevTools-level perf/coverage/emulation, the full LLM-optimized kit (describe_page / smart_fill / workflow_run), the web-research kit (web_search / scrape_markdown / deep_research / social_research — no search-API key needed), and all scraping tools.
API keys are optional — only needed for 3 vision/solver tools:
Tool | Purpose | Required key | Cost |
| reCAPTCHA v2 image challenges via AI vision | Any vision-capable LLM (OpenAI-compat / Claude / Ollama) | ~$0.005-0.03 per solve |
| Find DOM element by natural-language description ( | Same vision provider as | ~$0.001-0.01 per call |
| Turnstile, reCAPTCHA v2, reCAPTCHA v3, hCaptcha via paid solver | CapSolver API | ~$0.80-1.00 per 1000 |
Everything else (click_turnstile, verify_cf, storage_state, http_request, detect_anti_bot, clone_chrome_profile, etc.) works 100% without any key.
When BYOK Matters
solve_recaptcha_ai→ auto-solve reCAPTCHA v2 image challenges ("select all images with cars") via vision LLM. Best for: low-volume automation where you want self-hosted / BYO-key.solve_captcha→ solve via CapSolver's dedicated captcha-solving service. Best for: production reliability, high success rate (95%+), handles multiple types (Turnstile + reCAPTCHA v2 + v3 + hCaptcha + more).
You can use either one or both depending on your budget and reliability needs. Add to the MCP env block.
⚠️ Model Must Be Multimodal (Vision-Capable)
solve_recaptcha_ai sends a screenshot + text prompt to the model — text-only models will fail silently.
✅ Vision-capable (supported):
OpenAI:
gpt-4o,gpt-4o-mini,gpt-4-vision-preview,gpt-5.xAnthropic:
claude-opus-4-7,claude-sonnet-4-*Local Ollama:
llava,llava-llama3,bakllava,llama3.2-visionGroq:
llama-3.2-90b-vision-previewCustom: any model documented as "multimodal" / "vision"
❌ Text-only (NOT supported):
gpt-3.5-turbo,llama3(non-vision variant),claude-3-haiku(limited)
Config Options
{
"mcpServers": {
"stealth-chrome": {
"command": "uvx",
"args": ["mcp-stealth-chrome@latest"],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-xxxxx",
"ANTHROPIC_MODEL": "claude-opus-4-7"
}
}
}
}Get key at console.anthropic.com.
"env": {
"OPENAI_API_KEY": "sk-proj-xxxxx",
"OPENAI_MODEL": "gpt-4o"
}Get key at platform.openai.com.
"env": {
"OPENAI_BASE_URL": "https://your-provider.example.com/v1",
"OPENAI_API_KEY": "your-api-key",
"OPENAI_MODEL": "model-name-that-supports-vision"
}Uses OpenAI SDK standard env names (OPENAI_API_KEY, OPENAI_BASE_URL).
Works with any provider exposing /v1/chat/completions with image_url content support.
Example — Groq:
"env": {
"OPENAI_BASE_URL": "https://api.groq.com/openai/v1",
"OPENAI_API_KEY": "gsk_xxxxx",
"OPENAI_MODEL": "llama-3.2-90b-vision-preview"
}ollama pull llava"env": {
"OPENAI_BASE_URL": "http://localhost:11434/v1",
"OPENAI_API_KEY": "ollama",
"OPENAI_MODEL": "llava:latest"
}Fully offline, no cost. Accuracy varies by model.
"env": {
"CAPSOLVER_KEY": "CAP-xxxxxxxxxxxxx"
}Enables solve_captcha tool. ~$0.80/1000 solves for Turnstile. Get key at capsolver.com.
Provider Resolution Priority
Explicit args to
solve_recaptcha_ai(provider=, base_url=, api_key=, model=)OPENAI_API_KEY+OPENAI_BASE_URL+OPENAI_MODEL— standard (OpenAI SDK convention)AI_VISION_API_KEY+AI_VISION_BASE_URL+AI_VISION_MODEL— deprecated (removed in v0.2.0)ANTHROPIC_API_KEY+ANTHROPIC_MODEL— Claude
Legacy AI_VISION_* env still work but emit DeprecationWarning. Migrate to OPENAI_* standard for future compatibility.
Requirements
Python 3.11+
uvinstalled:curl -LsSf https://astral.sh/uv/install.sh | shChrome or Chromium browser (auto-detected by nodriver)
Honest reporting (v0.9.0)
Tools that report a rosier state than reality are the worst failure mode for an agent: the caller has no way to notice, so a wrong "success" spreads into wrong conclusions. These no longer lie:
Behaviour | Before | Now |
|
| Refuses and names the blocker: |
Click that lands but changes nothing |
|
|
| always | Promises are awaited ( |
| bare |
|
| textContent — inlined GTM/JSON a human never sees | innerText semantics; |
| emitted a blob that got the whole result rejected | refuses over |
| pressed without hovering — hover-only menus unreachable | hovers first ( |
Lost CDP session | opaque | names the condition and the exact recovery |
| could silently switch profile → logins looked wiped | profile affinity keeps the process on its profile |
New diagnostics: assert_clickable (would a click reach this? what's in the
way? — without clicking) and wait_for_change (click-then-wait in one call,
with an honest timeout). screenshot(region_selector="css") measures the crop box
for you, removing the CSS-px-vs-device-px guesswork.
Tool Categories (160)
⭐⭐⭐ Self-Sufficient Web Research (new) — replaces firecrawl/tavily for most tasks
Browserless-first (curl_cffi), escalates to the stealth browser only when a page is anti-bot blocked. Runs fully headless/API-mode and is ~10–12× lighter than driving Chrome for normal pages (verified: HTTP path 10–12× faster than headless render on example.com / Wikipedia).
Tool | Purpose |
| SERP search with no browser and no API key (Bing default, Brave/DuckDuckGo/Exa optional) → |
| One URL → clean LLM-ready markdown (stdlib, ~70–98% smaller than raw HTML) |
| HTTP-first; auto-escalates to the stealth browser only when the request is blocked |
| search → fetch top-N sources → markdown + citations, in one call |
| Grep the current page's text (zero-LLM, instant) |
| Structured, account-independent Reddit community digest (votes/comments/age) |
| Repo / README / issues / releases via GitHub REST API (pure HTTP) |
| Video metadata + transcript (native timedtext, yt-dlp fallback) |
| Social-media market/competitor research — WHO sells/makes X + HOW loud. Sweeps Reddit/Threads/Facebook/X via OSINT: Google/Bing |
⭐⭐⭐ Dual-Mode HTTP (unique)
Tool | Purpose |
| TLS-perfect HTTP via curl_cffi (chrome/firefox/safari impersonation) |
| Inspect which browser cookies match a URL |
| Natural browsing pattern (homepage/referer/scroll) before target |
| Identify CF/DataDome/PerimeterX/Kasada/Imperva on current page |
⭐⭐ Precision Mouse Kit (unique)
Tool | Purpose |
| CF Turnstile bypass for embed widgets + template-match fallback |
| Click at % position inside element (not center) |
| Click top-left/right/bottom-left/right of element |
| OpenCV template match → coordinates |
| Find image + click its center |
| Random Bezier wandering (pass behavioral ML) |
| Capture real human mouse patterns, replay |
⭐⭐ AI Vision Solver (unique)
Tool | Purpose |
| Vision LLM picks matching tiles — solve image challenges (auto-clicks anchor checkbox in v0.2.10+) |
| NL → element coordinates: |
⭐⭐⭐ AI-Agent Action Kit (LLM-optimized, new in v0.3.0)
Designed for LLM-driven workflows — token-efficient page summaries, label-fuzzy form filling, verification primitives, resumable orchestration.
Tool | Purpose |
| Compact JSON summary (title/url/headings/fields/actions/errors/navigation) — ~10× fewer tokens than |
| Fill form by label text (fuzzy match: exact > prefix > substring > token); native value setter for React/Vue. Returns |
| Full paste-event sequence (ClipboardEvent + DataTransfer + beforeinput inputType:'insertFromPaste') for SolidJS/Svelte 5/Qwik forms that ignore plain |
| Verification primitives with internal poll-loop |
| Click + observe one of navigation / url / text / selector / request / network_idle. Distinguishes real submit from silent invalid-form click |
| Per-field detail (label, framework binding react/vue/solid/lit, validation state, pattern/length constraints, aria-invalid) |
| Sequential tool runner with resumable |
| Snapshot cookies + localStorage + sessionStorage + url to a named slot, then diff after an action — debug "what did this click actually change?" |
| One-shot: detect anti-bot wall (CF / DataDome / PX / Akamai / Imperva / Kasada) and apply best bypass we have |
⭐⭐ Network + Auth Bridge (new in v0.4.0)
Network capture with response bodies, plus a bridge from browser session into TLS-perfect HTTP for authenticated API debugging.
Tool | Purpose |
| Index every request by request_id and lazy-fetch response bodies via CDP |
| Intercept the next N requests matching a URL pattern and return their headers (Authorization, Cookie, X-CSRF-*) — for SPAs that hold bearer tokens in JS memory |
| Authenticated curl_cffi request that piggybacks on browser cookies + auto-extracts most recent same-host bearer from |
| Block until a request matching |
| Persistent native-dialog handler with type filter (alert / confirm / prompt / beforeunload). Update action without re-arming. Idempotent per tab |
⭐⭐ Request Interception — see a request before the server does
Tool | Purpose |
| Explore a logged-in account without changing anything. Blocks POST/PUT/PATCH/DELETE and records what each WOULD have sent (method, URL, headers, body) while reads still work — click the delete button, then read the exact request that was stopped |
| Pause matching requests and |
| What was seen, plus whether interception is still active — an empty log cannot be mistaken for "the page sent nothing" |
| End it early; it also disables itself on a deadline so a forgotten intercept cannot wedge the page |
| Turn a captured request into a runnable |
⭐ Stealth Toolkit
Tool | Purpose |
| Portable session export — bypass Turnstile via reuse |
| CapSolver API — Turnstile/reCAPTCHA/hCaptcha |
| Cloudflare checkbox via OpenCV template match |
| UA/lang/platform/timezone via CDP |
| Audit this browser's OWN fingerprint for the leaks detectors read — in-page, nothing leaves the machine. Weights cross-field consistency (a Windows UA on a MacIntel platform) and states what it cannot see from inside a page (TLS/JA3, IP-vs-timezone) |
| Persist and inspect a stable fingerprint + proxy per browser instance |
| Fresh randomized fingerprint + disposable profile removed on close |
| Bezier+Gaussian for single actions |
Local Human Handoff
Tool | Purpose |
| Focus a headed local browser and promptly tell the human what to complete |
| Separately wait for an expected URL, selector, or real page change; timeouts are explicit |
Multi-Instance
Tool | Purpose |
| New named instance (parallel profiles), with optional |
| Manage multiple browsers |
| Set/append semantic purpose memory that survives instance switching |
| Clean shutdown |
⭐⭐ DevTools Suite — perf, coverage, emulation (new in v0.2.0)
Tool | Purpose |
| CDP Tracing — save .json, drop into chrome://tracing or DevTools Performance panel |
| Runtime Performance.getMetrics (Nodes, JSHeap, TaskDuration, FPS…) |
| TTFB / FCP / DOMContentLoaded / load + slowest 5 resources (instant, no trace capture) |
| Core Web Vitals via web-vitals v4 — LCP/CLS/INP/FCP/TTFB with pass/fail ratings |
| JS + CSS precise coverage — % unused bytes per file |
| V8 .heapsnapshot — drag into DevTools Memory panel |
| Preset throttles (offline / slow-3g / 3g / slow-4g / 4g / wifi) + custom |
| 1–6× CPU throttle (4× = DevTools default, 6× = low-end mobile) |
| Device presets: iphone-15, iphone-se, pixel-8, galaxy-s23, ipad, desktop |
| SPA-safe load detection — waits for N ms of no fetch/XHR activity |
| Reset captured console buffer |
⚡ Performance optimizations
Feature | What it does |
| Skip getComputedStyle + minimal attrs (2–3× faster) |
| Only elements inside current scroll viewport (5–10× on long pages) |
| Cache DOM hash — near-instant if page unchanged |
| Prefix only new/changed elements with |
| JPEG vs PNG — ~3× smaller file |
| Clip via CDP — 2–5× faster for small crops |
| Disable images / background throttling / translate — 2–5× faster nav for perf tests (not for stealth) |
Standard Browser Automation (lifecycle/navigation/DOM/interaction/scraping)
Count | Examples |
Lifecycle: 2 | browser_launch, browser_close |
Navigation: 4 | navigate, go_back, go_forward, reload |
DOM/Content: 6 | browser_snapshot, screenshot, get_text, get_html, get_url, save_pdf |
Interaction: 10 | click, click_text, click_role, assert_clickable, hover, fill, select_option, check, uncheck, upload_file |
Keyboard: 2 | type_text, press_key |
Mouse: 3 | mouse_click_xy, mouse_move, drag_and_drop |
Wait: 6 | wait_for, wait_for_change, wait_for_navigation, wait_for_url, wait_for_response, wait_for_request |
Tabs: 4 | tab_list, tab_new, tab_select, tab_close |
Cookies: 5 | cookie_list/set/delete, cookie_import (+ raw_text auto-detect), cookie_export |
Storage: 9 | localstorage_get/set/clear, sessionstorage_get/set/clear, cache_clear, indexeddb_list/delete |
JavaScript: 2 | evaluate, inject_init_script |
Inspection: 4 | inspect_element, get_attribute, query_selector_all, get_links |
Frames: 2 | list_frames, frame_evaluate |
Batch: 3 | batch_actions, fill_form, navigate_and_snapshot |
Viewport/Scroll: 4 | get/set_viewport_size, scroll, scroll_to |
Dialog: 2 | dialog_handle, dialog_auto_handle |
A11y: 1 | accessibility_snapshot |
Console/Network: 9 | console_start/get, network_start/get, intercept_start/log/stop, dry_run, export_curl |
Debug: 3 | server_status, get_page_errors, export_har |
Scraping: 4 | detect_content_pattern, extract_structured, extract_table, scrape_page |
Chrome profile integration: 2 | list_chrome_profiles, clone_chrome_profile |
Example Workflows
One-liner Cloudflare Turnstile bypass (embed widget)
browser_launch(url="https://site-with-turnstile.com")
mouse_drift(duration_seconds=2) # natural behavior
click_turnstile() # works on embedded widgets
# Login button now enabled, fill form, submitWorks on pages that embed the CF Turnstile widget (.cf-turnstile, [data-sitekey],
or a challenges.cloudflare.com iframe). For managed-mode interstitials ("Just
a moment..." full-page challenges), this tool cannot bypass — use solve_captcha
or storage_state_load instead.
Bypass Turnstile via saved session (most reliable)
# Once — manual:
browser_launch(url="https://target.com/login", headless=false)
# [user logs in manually in browser window]
storage_state_save(filename="target-session.json")
browser_close()
# Every time after — automated:
browser_launch(
url="https://target.com/dashboard",
headless=true, # can go headless
storage_state_path="~/.mcp-stealth/storage-states/target-session.json"
)
# Turnstile never triggers — session is validSolve reCAPTCHA v2 image challenge via Claude
browser_launch(url="https://site-with-recaptcha.com")
click_element_offset(ref="recaptcha-checkbox-ref", x_percent=8)
# Image challenge appears
solve_recaptcha_ai(max_rounds=3) # uses ANTHROPIC_API_KEY
# Token injected, form ready to submitMulti-account scraping in parallel
browser_launch(url="https://site.com", headless=true) # main instance
spawn_browser("account_2", url="https://site.com", headless=true)
spawn_browser("account_3", url="https://site.com", headless=true)
list_instances() # see all 3 running
switch_instance("account_2")
# All subsequent tool calls target account_2
click(ref="login-btn")
...
switch_instance("main") # back to mainBrowser login + fast API scraping
# Login with browser (renders JS, solves challenges)
browser_launch(url="https://api-site.com/login")
click_turnstile()
fill(ref="email-ref", value="you@example.com")
fill(ref="password-ref", value="...")
click(ref="submit-ref")
# Scrape API 10x faster with TLS-perfect HTTP
http_request(
url="https://api-site.com/v1/data",
impersonate="chrome",
use_browser_cookies=true # reuse login session
)Auto-detect anti-bot + recommended strategy
browser_launch(url="https://unknown-site.com")
detect_anti_bot()
# Returns: {"detected": ["Cloudflare", "reCAPTCHA"],
# "recommended_tools": [...]}Social-media market/competitor research (who sells + how loud)
browser_launch()
social_research(
topic="AI carousel generator",
platforms="reddit,threads,facebook",
cookie_files="threads.json,fb.json", # auto-(re)imports sessions — crash-resilient
)
# One call → per platform: Google site: dork (clean, non-personalized) + native
# in-platform search (engagement/likes/views). Reddit needs no login; Threads/FB/X
# use your imported session. Read the posts to judge sentiment / rank sellers.Architecture
uvx mcp-stealth-chrome → Python 3.11 → FastMCP → nodriver → Chrome/Chromium
↓
curl_cffi (TLS)Data locations:
Profile (main):
~/.mcp-stealth/profile/Profiles (multi-instance):
~/.mcp-stealth/profiles/<instance_id>/Screenshots:
~/.mcp-stealth/screenshots/Exports (PDF, HAR):
~/.mcp-stealth/exports/Storage states:
~/.mcp-stealth/storage-states/
Environment Variables
Variable | Default | Purpose |
|
| Auto-close browsers after idle seconds (0 = never) |
|
| How often reaper checks idle state |
| — | Enable |
| — | OpenAI-compat |
|
| Custom endpoint (Groq, Together, Ollama, etc.) |
|
| Vision-capable model name (required multimodal) |
| — | Claude |
|
| Claude model name |
Deprecated (still work but emit DeprecationWarning — migrate to OpenAI standards above):
AI_VISION_BASE_URL, AI_VISION_API_KEY, AI_VISION_MODEL, AI_VISION_PROVIDER
Stealth Details
Underlying tech stack:
nodriver — Python CDP client with no WebDriver/Runtime.Enable leaks
curl_cffi — libcurl with CFFI, matches Chrome/Firefox/Safari TLS handshake exactly (JA3/JA4 authenticity)
OpenCV — template matching for visual CAPTCHA checkbox detection
Bypass layer vs detection:
Detection | Bypass |
| nodriver doesn't set it |
| nodriver avoids it |
Automation flags | No |
Headless fingerprint |
|
TLS/JA3/JA4 |
|
Turnstile checkbox |
|
reCAPTCHA v2 image |
|
Behavioral ML |
|
Honest limits — these are HARDEST OSS bypass targets and require commercial services for production:
DataDome (real-time behavioral ML across 50+ signals)
Kasada (proprietary JS, rotates daily)
PerimeterX/HUMAN (ML-based request scoring)
ChatGPT managed Turnstile (checks React internal state)
For these, storage_state_save/load (manual-login-once, reuse) is the most reliable OSS approach.
Sister Package
mcp-camoufox — Firefox stealth with same API. Use when you need:
Hardest anti-bot bypass (Camoufox C++ level patches = stealth score 6% CreepJS)
Firefox-specific rendering
Node.js ecosystem
Both packages share tool names, snapshot format, ref system — switch seamlessly.
Development
git clone https://github.com/RobithYusuf/mcp-stealth-chrome
cd mcp-stealth-chrome
uv sync
uv run mcp-stealth-chrome # run stdio server locallyTesting:
uv run python /tmp/smoke-test.py # full smoke test (see /tmp/ examples)Credits
nodriver by ultrafunkamsterdam — undetected Chrome via CDP
curl_cffi by lexiforest — TLS browser impersonation
FastMCP — Python MCP SDK
Camoufox by daijro — sister Firefox stealth (via mcp-camoufox)
CapSolver — CAPTCHA solving API
vibheksoni/stealth-browser-mcp — complementary MCP for UI cloning & network hooks
License
MIT — see LICENSE.
Available Tools
138 toolsaccessibility_snapshotC
Return ARIA accessibility tree of current page.
| Name | Required | Description | Default |
|---|---|---|---|
| interesting_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It does not mention performance implications, the structure of the returned tree, or the effect of the 'interesting_only' parameter. The description is too minimal.
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?
While the description is short, it lacks necessary details. Conciseness is not achieved at the expense of completeness; here, important information about parameters and behavior is missing.
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 one parameter and no explanation in the description, the contextual completeness is poor. The agent would not understand what 'interesting_only' means or how the return value is structured, despite an output schema being available.
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 description does not mention the single parameter 'interesting_only'. With 0% schema description coverage, the description should clarify what 'interesting' means, but it adds no value beyond the parameter name.
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 it returns the ARIA accessibility tree of the current page, which is a specific and distinct function from sibling tools like 'browser_snapshot' or 'describe_page'. It uses a specific verb and resource.
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 provided on when to use this tool versus alternatives such as 'browser_snapshot' or 'extract_structured'. The description does not specify context or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assert_element_visibleA
⭐ Verify an element is visible (rendered, non-zero size, not hidden). Pass selector OR text — text uses fuzzy contains match. Returns ok(rect) or err(timeout).
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| text | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It specifies the verification criteria, the alternative identification methods, and the return type. However, it does not disclose potential side effects or details about waiting/polling behavior beyond the timeout parameter.
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 extremely concise, consisting of three short lines. It front-loads the purpose with an emoji and provides all key information without any unnecessary words.
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 3 parameters and a mentioned return type (ok(rect) or err(timeout)), the description is fairly complete. It covers identification methods, visibility criteria, and the timeout parameter. Some implicit context (e.g., works on current page) is assumed but not critical.
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%, so the description must compensate. It explains that selector and text are alternative identifiers and that text uses fuzzy contains match, adding meaning beyond the schema. The timeout parameter is mentioned with its default, though the default is already 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 clearly states the tool verifies element visibility with specific criteria (rendered, non-zero size, not hidden). It also explains two identification methods (selector or text with fuzzy match), which distinguishes it from siblings like 'check' or 'inspect_element'.
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 does not explicitly state when to use this tool versus alternatives like 'assert_text_present' or 'assert_url_matches'. The usage is implied through the return type (ok(rect) or err(timeout)), but no direct guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assert_text_presentA
⭐ Verify text appears anywhere on page within timeout. Returns ok(found) or err(not found + sample of body text).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It mentions the return types and timeout, but does not specify whether hidden text is considered, case sensitivity, or if it works across iframes—typical 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?
Two concise sentences with a prominent emoji star and front-loaded verb. Every word is functional, zero verbosity.
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, but missing details on text matching behavior (e.g., exact match vs substring) and whether timeout is in seconds or milliseconds. An output schema exists but description doesn't reference it.
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%, so the description must add meaning. It mentions 'text' and 'timeout' implicitly but provides no details on matching rules (exact, substring, case) or timeout unit/behavior.
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 clear verb ('Verify'), a specific resource ('text appears anywhere on page'), and a condition ('within timeout'), distinguishing it from sibling assertions like assert_element_visible and assert_url_matches.
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 explicitly states the return format ('ok(found) or err(not found + sample of body text)'), implying when to use it for text presence checks. However, it does not explicitly mention when not to use it or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assert_url_matchesA
⭐ Verify current URL matches regex within timeout. Returns ok(current_url) or err(timeout + last_url).
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and discloses the timeout behavior and return format (ok/err with last URL). It could detail polling behavior but is sufficient.
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 short sentences with no fluff: first states purpose, second states return values. 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?
Basic completeness with output schema existing and return values mentioned, but missing parameter descriptions and usage guidance for a tool with siblings like wait_for_url.
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 adds no parameter explanations (e.g., pattern is a regex, timeout is seconds). This leaves agents to infer from names alone.
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 'Verify', the resource 'current URL', and the condition 'matches regex' with a timeout, distinguishing it from siblings like get_url (just returns URL) and wait_for_url (waits for URL to become something).
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 usage for verifying URL after navigation but does not explicitly state when to use this tool over alternatives like wait_for_url or give exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_to_chromeA
⭐ Attach to an existing Chrome instance via CDP — no new browser launch,
no profile lock conflict. Target Chrome must have been started with
--remote-debugging-port=<N>. Auto-detects port if omitted (picks lowest).
Use cases:
- Control your existing Chrome (e.g. Profile 21) without closing it.
- Drive a Chrome session you launched manually with custom flags.
- Connect to a remote/Docker Chrome via host=<remote> port=<N>.
To detach without closing Chrome, call detach(). Calling browser_close()
after attach DOES close the target Chrome — use detach() instead if you
want to keep it running.
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| host | No | 127.0.0.1 | |
| instance_id | No | attached |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description carries full burden. Discloses key behaviors: auto-detects port, requires Chrome to be started with --remote-debugging-port, warns that browser_close after attach closes Chrome. Minor omission: error handling if Chrome not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with emoji, clear sections, and front-loaded purpose. No unnecessary words; every sentence adds value.
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?
Adequately covers the tool's complexity with three parameters and an output schema (not shown but exists). Could add brief description of instance_id parameter for full completeness.
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 0%, so description must add meaning. Explains port (auto-detects, defaults to lowest) and host (remote connections). However, instance_id parameter is not described beyond its default 'attached', leaving ambiguity about its purpose.
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 attaches to an existing Chrome instance via CDP, distinguishing it from siblings like browser_launch (which launches new browser) and detach. It specifies the exact resource (Chrome instance) and action (attach).
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?
Provides explicit use cases: controlling existing Chrome, manually launched Chrome, remote/Docker Chrome. Also tells when not to use browser_close (use detach instead). References sibling tool detach() as alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
auth_captureA
⭐ Intercept the next N requests matching a URL pattern and return their headers (Authorization, Cookie, X-CSRF-*, etc.) — useful for SPAs that hold bearer tokens in JS memory and never write them to localStorage.
Pattern: substring match on URL (case-sensitive). For regex use
network_get instead.
Args:
filter_url_pattern: e.g. "/api/" or "graphql"
count: stop capturing after this many matches (default 1)
timeout: max seconds to wait (default 10)
include_response_headers: also wait for + return response headers
Returns JSON array of {url, method, request_headers, request_body,
[response_headers, status]}.
| Name | Required | Description | Default |
|---|---|---|---|
| filter_url_pattern | Yes | ||
| count | No | ||
| timeout | No | ||
| include_response_headers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description thoroughly discloses behavior: intercepts requests, stops after count matches, has timeout, optionally includes response headers, and returns a JSON array.
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?
Well-structured with brief intro, pattern note, argument list, and return format. A star emoji adds minimal verbosity but doesn't detract.
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's complexity and no annotations, the description covers all necessary aspects: use case, pattern details, parameters, and return format, making it fully informative.
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 0%, so description compensates by explaining each parameter's purpose and defaults, adding value beyond raw 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 clearly states the tool intercepts requests matching a URL pattern to capture headers, and explicitly distinguishes from sibling tool network_get for regex matching.
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?
It provides explicit context for when to use (SPAs with bearer tokens in JS memory) and when not to (use network_get for regex), plus pattern matching details.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_actionsA
Execute a list of actions sequentially.
Each action: {type: click|fill|type|wait|press|navigate, ...params}
Example: [{"type":"click","ref":"e3"},{"type":"fill","ref":"e4","value":"x"}]
| Name | Required | Description | Default |
|---|---|---|---|
| actions | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the actions are executed sequentially, but lacks details on error handling, atomicity, or what happens on failure. The return value is not mentioned.
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 two sentences plus an example, front-loaded with the core purpose. Every element is relevant and non-redundant.
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's complexity (batch execution) and the presence of an output schema (not shown), the description does not explain return values or execution results. It covers the basics but lacks depth for a batch operation.
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 0%, so the description must compensate. It provides structure and an example, adding meaning beyond the raw schema. However, it does not document all possible parameters for each action type, leaving 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 'Execute a list of actions sequentially' with an example showing structure. It distinguishes from sibling tools like click, fill, etc., which are individual 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?
The description implies usage for running multiple actions in order, but does not explicitly state when not to use it or provide alternative tools for single actions. The context of sibling tools makes it clear enough.
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 and free the profile lock.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses closing the browser and freeing the profile lock, but does not mention side effects like unsaved data loss or whether the tool is idempotent.
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 wasted words. It conveys the essential action and outcome efficiently.
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 no parameters and an output schema (implied), the description adequately covers the action and consequence. It lacks usage guidance but is complete for the basic operation.
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?
There are zero parameters and schema coverage is 100%. The description does not need to add parameter info, so baseline 3 is appropriate. It does not provide additional parameter context.
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 resource ('browser'), and adds a unique detail ('free the profile lock'). It clearly differentiates from sibling tools like browser_launch or attach_to_chrome.
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 provided on when to use this tool versus alternatives (e.g., close_all_instances, detach). There is no mention of prerequisites or conditions for closing the browser.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_launchA
Launch stealth Chrome via nodriver. Creates persistent profile by default.
Args:
url: initial URL to load
headless: run without UI (many sites detect headless — prefer False)
proxy: "http://user:pass@host:port" or "socks5://host:port"
user_agent: override UA string
window_width, window_height: viewport size
persistent: reuse profile at ~/.mcp-stealth/profile
lang: browser language
extra_args: additional Chromium flags
storage_state_path: load cookies/localStorage from JSON before first nav
testing_mode: 2-5× faster startup+nav for perf/regression testing —
disables image loading, background throttling dampers, translate,
notifications, media autoplay. WARNING: reduces stealth — not for
anti-bot work (sites can detect missing images as automation signal).
auto_verify: if True (default), automatically detect Cloudflare /
Turnstile challenges after the initial load and dispatch a
CDP-level click on the checkbox. Caps at 2 attempts ~6s total —
never loops. Set False to opt out.
user_data_dir: launch Chrome against an EXISTING user profile root
(e.g. "~/Library/Application Support/Google/Chrome"). Overrides
persistent + the default MCP profile. The target Chrome instance
(if any) MUST be closed first — locked profiles are detected
upfront and refused with the lock-holder PID. Supports ~ expansion.
profile_directory: when paired with user_data_dir, picks a sub-profile
inside it (e.g. "Default", "Profile 21"). Without this, Chrome
uses "Default". Helpful to drive a specific persona without
cloning the profile. Use list_chrome_profiles to enumerate.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | about:blank | |
| headless | No | ||
| proxy | No | ||
| user_agent | No | ||
| window_width | No | ||
| window_height | No | ||
| persistent | No | ||
| lang | No | en-US | |
| extra_args | No | ||
| storage_state_path | No | ||
| testing_mode | No | ||
| auto_verify | No | ||
| user_data_dir | No | ||
| profile_directory | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It covers stealth modifications, persistent profile default, headless detection warning, testing_mode impacts, auto_verify behavior, and user_data_dir constraints. However, it does not describe the output behavior (e.g., returns a browser instance ID) or lifecycle aspects.
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 well-structured with a clear purpose statement followed by a detailed parameter list. It is relatively long but each sentence adds value. Minor improvement could be using bullet points for readability, but it remains efficient.
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 14 parameters, no annotations, and an output schema that is not explained, the description covers all parameters with thorough explanations, including edge cases and warnings. It provides sufficient context for an AI agent to correctly invoke the tool.
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%, so the description must fully explain parameters. It does so excellently: each parameter is described with context, warnings, and defaults (e.g., 'many sites detect headless — prefer False', 'caps at 2 attempts ~6s total'). This adds significant value 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 explicitly states 'Launch stealth Chrome via nodriver. Creates persistent profile by default.' This clearly identifies the tool's action and resource, distinguishing it from siblings like attach_to_chrome (which attaches to existing instances) and spawn_browser.
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 on when to use this tool versus alternatives. The description does not mention when to prefer browser_launch over sibling tools like spawn_browser or attach_to_chrome, nor does it provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_recoverA
Force-recover from a stuck browser state.
Escape hatch when browser_close() can't run (graceful shutdown depends
on internal state that may be corrupt). Steps:
1. Best-effort browser.stop() — ignore any errors
2. Kill orphan Chrome PIDs whose argv references the active profile
(SIGTERM, then SIGKILL after 2s if still alive) — only PIDs spawned
against THIS MCP profile, never the user's daily Chrome
3. Reset BrowserState (clears tabs, instances, network index, locks)
4. Clear devtools / dialog caches
5. Wipe stale Singleton* lock files in all known profile dirs
Always succeeds — never raises. Use this when normal close hangs or
returns an error you can't diagnose. After this, browser_launch()
again to start fresh.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details all steps of recovery including killing orphan PIDs, resetting state, clearing caches, and wiping lock files. It notes that the operation 'Always succeeds — never raises.' With no annotations provided, the description fully discloses the aggressive and destructive nature of the 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 well-structured with a lead sentence and numbered steps. Every sentence serves a purpose, and it is appropriately sized for the tool's complexity.
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 no parameters and an output schema, the description fully explains the tool's behavior, prerequisites, and post-conditions. It covers all necessary contextual information.
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 tool has no parameters, so the schema does not need description. Per guidelines, baseline is 4 for zero parameters. The description correctly omits parameter details.
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 clear verb+resource: 'Force-recover from a stuck browser state.' It explicitly distinguishes itself from siblings like browser_close by stating it's an 'escape hatch when browser_close() can't run.'
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 explicitly states when to use: 'Use this when normal close hangs or returns an error you can't diagnose.' It also explains the follow-up action: 'After this, browser_launch() again to start fresh.' This provides clear guidance and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_snapshotA
Inject SNAPSHOT_JS and return a ref-indexed list of interactive elements.
Refs (e0, e1, ...) are attached via data-mcp-ref and valid until next nav.
Modes (performance vs completeness tradeoff):
full — default; same shape as mcp-camoufox (computed-style visibility + full attrs)
fast — skip getComputedStyle + minimal attrs (2-3× faster, less info per element)
viewport — full fidelity but only elements inside current scroll viewport
(5-10× faster on long feeds/SERPs, pair with scroll for segment-by-segment)
diff_from_last=True caches a DOM hash per tab; if the hash matches the previous
call on the same URL, returns "unchanged" without re-serializing the element list
(near-instant for re-check loops).
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | full | |
| diff_from_last | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully bears the burden. It discloses that refs are attached via data-mcp-ref and are valid until next navigation, explains the tradeoffs of different modes, and describes the caching behavior of diff_from_last. This provides comprehensive behavioral understanding.
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 well-structured with clear sections for modes and diff_from_last. It is somewhat lengthy but each sentence adds value. Minor redundancy could be trimmed, but overall it is efficient.
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 presence of an output schema (though not shown), the description does not need to detail return values. It covers purpose, modes, and caching behavior adequately. However, it lacks mention of prerequisites, side effects, or what happens if called before navigation, which would improve completeness.
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 0%, so the description must add meaning. It thoroughly explains both parameters: the mode parameter's three options with their performance and fidelity differences, and the diff_from_last boolean's caching mechanism. This goes well beyond the schema's minimal definitions.
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 injects SNAPSHOT_JS and returns a ref-indexed list of interactive elements. It distinguishes itself from siblings like accessibility_snapshot and navigate_and_snapshot by focusing on interactive elements and performance tradeoffs.
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 explicit guidance on when to use each mode (full, fast, viewport) based on performance vs completeness tradeoffs, and explains the diff_from_last option. It implies usage for taking snapshots after navigation but does not explicitly mention when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cache_clearA
Clear the browser HTTP cache (CDP Network.clearBrowserCache).
Mirrors DevTools → Application → Clear storage → Clear site data (cache).
Does NOT touch cookies, localStorage, or IndexedDB — use dedicated tools
or browser_launch(persistent=False) for a full wipe.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the specific scope (HTTP cache only) and explicitly lists what is not affected. It lacks mention of prerequisites or error conditions, but for a simple zero-parameter tool, this is highly transparent.
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 concise: one sentence for the core action, one for context, and one for exclusions. Every sentence adds value, no fluff. Front-loaded with the primary 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?
Given zero parameters, no annotations, and an output schema (presumed present), the description is complete. It covers the tool's exact scope, boundaries, and relationships to sibling tools, leaving no ambiguity for agent 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?
The tool has no parameters, so schema coverage is 100%. The baseline for 0 params is 4, and the description correctly adds no redundant info 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 clearly states the tool's purpose: clearing the browser HTTP cache via CDP Network.clearBrowserCache. It explicitly distinguishes itself from siblings by noting what it does NOT affect (cookies, localStorage, IndexedDB), providing clear differentiation.
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 explicit guidance: use this tool for clearing only the HTTP cache; for a full wipe, use dedicated tools or browser_launch(persistent=False). This helps the agent decide when to use this tool vs alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
checkC
Tick a checkbox/radio (idempotent).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only mentions idempotency but fails to disclose behavior on already-checked elements, missing elements, or side effects (e.g., events triggered). Minimal transparency.
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 fluff. However, it may be too concise, omitting necessary details for correct invocation.
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's two optional parameters and existence of sibling tools like 'click' and 'uncheck', the description lacks information on parameter usage, return values, and when to deploy this tool over alternatives.
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 provides no explanation of the two parameters ('ref' and 'selector'). The agent cannot infer how to target the element or what each parameter means.
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 action ('Tick') and the target resource ('checkbox/radio'), and the idempotency qualifier distinguishes it from sibling tools like 'uncheck'. It is specific and unambiguous.
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 on when to use this tool versus alternatives (e.g., 'click' or 'uncheck'). The idempotency hint is present but no when-not-to-use or context for selecting between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickC
Click an element by ref (from snapshot) or CSS selector. JS fallback on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No | ||
| humanize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It mentions 'JS fallback on failure' but omits critical details: what happens on success (navigation? page load?), whether it scrolls into view, and how 'humanize' parameter affects behavior.
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, but could be restructured to separate targeting modes and behavioral notes.
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 3 undocumented parameters, no annotations, and many sibling tools, the description is insufficient. It lacks details on parameter interplay, return value (output schema exists but not hinted), and when to use fallback.
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%, so the description must compensate. It only mentions 'ref' and 'selector' generically, with no explanation of optionality, mutual exclusivity, or the 'humanize' parameter.
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 action ('Click an element') and the two modes of targeting: by ref from snapshot or by CSS selector. This distinguishes it from sibling tools that click by text, role, or coordinates.
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 use this tool versus alternatives like click_text, click_role, or click_and_wait. It does not explain trade-offs or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_and_waitA
⭐ Click + wait for the side-effect to land. Distinguishes a successful action from a silent failure (e.g. form invalid where click() returns success but submit never happened).
Args:
ref / selector / text: element to click (passed through to existing
click tools — text uses click_text fuzzy match)
expect: what to wait for after the click. One of:
"navigation" — URL changes
"url" — URL matches expect_url_pattern (regex)
"text" — page contains expect_text
"selector" — expect_selector becomes visible
"request" — outgoing request matches expect_request_pattern
"network_idle" — no in-flight requests for 500ms
"auto" — try navigation→network_idle→nothing
expect_*: target for the matching expect mode
timeout: per-mode max wait
Returns JSON {clicked, observed: {what, evidence}, elapsed_ms}.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No | ||
| text | No | ||
| expect | No | auto | |
| expect_url_pattern | No | ||
| expect_text | No | ||
| expect_selector | No | ||
| expect_request_pattern | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the behavioral traits: click action, waiting for various conditions, and response JSON structure. It lacks explicit mention of page state changes or destructive potential, but for a click tool the transparency is adequate.
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 concise yet comprehensive. It front-loads the core purpose with an emoji, then uses a bullet list with clear labels for each parameter and value. Every sentence adds information without redundancy.
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 9 parameters and no annotations, the description covers all necessary details: what the tool does, how to use each parameter, what to expect in the return value, and the behavioral nuances of each expect mode. It is fully self-contained for an agent to invoke 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?
The input schema has 0% description coverage, but the description adds rich semantic meaning for every parameter: explains element selection methods (fuzzy match for text), enumerates all expect modes with clear definitions, and describes the expect_* targets and timeout. This fully compensates for the schema gap.
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 performs a click and then waits for a side-effect, distinguishing it from a plain click that may silently fail. It uses a specific verb-resource pair and contrasts with 'click()' to emphasize verification of outcomes.
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 explains when to use the tool (to confirm a successful action) and contrasts it with silent failure scenarios. It does not explicitly list when not to use or name alternative sibling tools, but the purpose is clear enough for an agent to differentiate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_at_cornerA
Click at a corner of element (close X buttons, delete icons, dismiss).
corner: top-left | top-right | bottom-left | bottom-right
offset: inset pixels from corner (default 8px — works for most X buttons)
| Name | Required | Description | Default |
|---|---|---|---|
| corner | No | top-right | |
| offset | No | ||
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses the corner parameter and offset behavior (inset pixels from corner, default 8px), which is not in the schema. However, it omits error handling behavior (e.g., if element not found) and does not mention any side effects, which would be helpful for a click action 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?
Extremely concise: two lines for purpose and explicit use cases, then two lines for parameter details. Every sentence adds value with no redundancy.
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 description covers the core behavior and primary parameters, but lacks explanation for the optional 'ref' and 'selector' parameters. Given that the schema has no descriptions (0% coverage) and no annotations, the description should address all parameters to be fully complete.
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 description explains the 'corner' enum and 'offset' integer (with example default). However, it does not document 'ref' and 'selector' parameters, which remain entirely unexplained despite 0% schema description coverage. Only 2 of 4 parameters are clarified.
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?
Description clearly states 'Click at a corner of element' with specific use cases like close X buttons and delete icons. This effectively distinguishes it from sibling tools like 'click' (center click) and 'click_element_offset' (arbitrary offset).
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?
Description implies usage for corner-based interactions (dismiss buttons, delete icons) but does not explicitly state when to use this tool versus alternatives like 'click' or 'click_element_offset'. No exclusions or when-not-to-use guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_at_imageA
⭐ Find image via template matching, then click its center.
Combines find_by_image + humanize_move + mouse_click. Useful for visual
CAPTCHAs, custom buttons without reliable selectors, or interacting with
canvas-based UIs.
| Name | Required | Description | Default |
|---|---|---|---|
| template_path | Yes | ||
| threshold | No | ||
| humanize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It discloses the basic action sequence but omits important behaviors: error handling if image not found, wait times, scrolling needed, return value, or that humanize_move introduces random delays. The lack of these details is a significant 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 two concise sentences, front-loaded with the core action. The emoji provides quick visual context. No extraneous words; 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?
Given the tool's complexity (template matching + composite click), the description omits parameter details, return value (despite having an output schema), and error conditions. It is not complete enough for an agent to safely invoke without guessing.
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%, so the description must add meaning. It only implicitly covers 'template_path' (the image to find) but fails to explain 'threshold' (controls matching sensitivity) or 'humanize' (whether to add human-like randomness). Most parameter semantics are missing.
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 it finds an image via template matching and clicks its center. It uses specific verbs ('Find', 'click') and distinguishes itself from siblings like 'find_by_image' and 'humanize_click' by explicitly stating it combines multiple 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?
The description explicitly suggests use cases: 'visual CAPTCHAs, custom buttons without reliable selectors, or interacting with canvas-based UIs.' It does not mention when not to use or directly compare with alternatives, but the context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_element_offsetB
Click inside element at percentage position (not center).
Examples:
x_percent=8 → checkbox at left edge of label
x_percent=90 → right-side toggle slider
y_percent=20 → top portion of a card
| Name | Required | Description | Default |
|---|---|---|---|
| x_percent | No | ||
| y_percent | No | ||
| ref | No | ||
| selector | No | ||
| humanize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses core behavior (click at percentage position) and hints that it is not center. However, it does not mention scrolling, waiting, or the 'humanize' default behavior, which would be valuable given no annotations.
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 concise with one sentence plus examples. It front-loads the purpose. However, it lacks parameter explanations, which would improve structure.
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 5 parameters and no annotations, the description is incomplete. It does not explain how to target an element (ref vs selector), the humanize behavior, or the return value (output schema exists but not described).
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 description fails to explain the five parameters, especially 'ref', 'selector', and 'humanize'. The examples only illustrate x_percent and y_percent values. With 0% schema description coverage, the description should compensate but does not.
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 clicks inside an element at a percentage position, not the center. It distinguishes from sibling tools like 'click' (which likely clicks center) and provides examples that illustrate specific use cases.
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 (clicking at a specific offset) by stating 'not center' and giving examples. It does not explicitly list alternatives or when not to use, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_roleA
Click by ARIA role (e.g. button, link, textbox), optional accessible name.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description only explains the targeting method (by ARIA role) but does not disclose behavioral traits such as waiting behavior, handling of multiple matches, or whether it works on hidden elements. With no annotations, the description carries the full burden.
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 immediately conveys the purpose and key parameters. No extraneous words.
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 description is adequate for a simple click action but lacks details on error handling (e.g., element not found) and does not leverage the existence of an output schema. Given the many sibling tools, more context on when to prefer this tool would improve completeness.
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 description adds significant meaning beyond the bare schema by explaining 'role' as an ARIA role (with examples) and 'name' as an accessible name. This helps the agent understand valid inputs.
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 clicks an element identified by its ARIA role, with an optional accessible name. This distinguishes it from sibling tools like 'click' (by selector) and other click variants.
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 use this tool versus alternatives like 'click' or 'click_text'. It does not mention prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_textB
Find and click element whose text matches.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| exact | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description does not disclose behavioral traits such as whether it scrolls into view, waits for element availability, or triggers navigation. Only the basic search-and-click mechanism is implied.
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 sentence of 7 words is very concise with no fluff. However, it sacrifices some necessary detail for brevity, earning a high but not perfect score.
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 2 parameters, no annotations, and an output schema (not shown), the description fails to cover return values, search scope, or post-click behavior. It is insufficient for an agent to use correctly without additional context.
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 description adds meaning to the 'text' parameter by stating matching is involved, but it does not explain the 'exact' boolean parameter (e.g., whether it controls case sensitivity or substring matching). With 0% schema description coverage, the description partially compensates.
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 'Find and click element whose text matches' clearly states the action (find and click) and the resource (element by text). It distinguishes from sibling tools like 'click' (which likely uses selectors) and 'click_role' (by role).
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 on when to use this tool vs alternatives like 'click', 'click_role', or 'click_and_wait'. No exclusions or context about when this is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_turnstileA
Auto-find and click the Cloudflare Turnstile checkbox.
Three-tier detection strategy:
1. Primary selectors: iframe[src*=challenges.cloudflare.com], [data-sitekey], .cf-turnstile
2. Secondary: .turnstile, input[name=cf-turnstile-response] → nearest sized container
3. Fallback (if fallback_template=True): OpenCV template match via verify_cf
— covers out-of-process iframe cases (e.g. nopecha.com/captcha/turnstile)
Args:
offset_x: pixels from widget left edge (default 30, calibrated for CF checkbox)
offset_y: vertical offset (default = container center)
fallback_template: if selectors fail, try OpenCV template click (default True)
Known to work on: 2captcha.com/demo/cloudflare-turnstile, dash.cloudflare.com login,
nopecha.com/captcha/turnstile (via template fallback).
Does NOT work on: Cloudflare managed-mode interstitials ("Just a moment..." full-page
challenges) — use solve_captcha or storage_state_load for those.
| Name | Required | Description | Default |
|---|---|---|---|
| offset_x | No | ||
| offset_y | No | ||
| fallback_template | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It details the three-tier detection strategy, fallback behavior, and limitations comprehensively.
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?
Well-structured with numbered tiers and parameter descriptions. Slightly long but every sentence adds value. Could be slightly more concise.
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 3 parameters with no schema descriptions and no annotations, the description is thorough: covers purpose, mechanism, usage guidance, parameter details, and limitations. Fully complete.
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 0%, so description must compensate. It explains each parameter's purpose, default, and calibration (e.g., offset_x calibrated for CF checkbox).
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?
Clearly states it auto-finds and clicks the Cloudflare Turnstile checkbox. Specific verb and resource, distinguishes from sibling click 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?
Explicitly says when NOT to use (Cloudflare managed-mode interstitials) and provides alternatives (solve_captcha or storage_state_load). Also lists known working sites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_chrome_profileA
Clone an existing Chrome profile into isolated mcp-stealth location.
SAFE: reads source profile without modification, copies to
~/.mcp-stealth/profiles/<target_instance_id>/Default/
Chrome desktop MUST be closed for source profile (we check SingletonLock).
Preserves: cookies, history, bookmarks, saved passwords, extensions state.
Skips (if skip_cache=True): Cache, Code Cache, GPUCache, Media Cache,
Service Worker, IndexedDB (regenerable, saves 500MB+).
Args:
source_profile: Chrome profile dir name ("Default", "Profile 1", etc).
Use list_chrome_profiles() to see options.
target_instance_id: Name for the cloned instance (becomes folder name).
skip_cache: Exclude cache dirs for fast + smaller copy (default True).
overwrite: Delete target if exists before copying (default False).
After clone, launch with:
spawn_browser(instance_id='<target_instance_id>')
| Name | Required | Description | Default |
|---|---|---|---|
| source_profile | No | Default | |
| target_instance_id | No | chrome_clone | |
| skip_cache | No | ||
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It explains the tool is safe (reads without modification), copies to a specific directory, checks SingletonLock, and details what is preserved or skipped (with cache details). This is comprehensive.
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 well-structured with headings (SAFE, Args, After clone) and bullet points. It is concise, every sentence adds value, and the key information 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?
Given the tool's complexity (4 parameters, 0 required) and the presence of an output schema (though not shown), the description is complete. It covers the operation, side effects, parameter details, and post-clone actions, leaving no 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 0%, but the description provides detailed explanations for all four parameters. It explains source_profile (use list_chrome_profiles), target_instance_id, skip_cache (excludes large regenerable directories), and overwrite. This adds significant 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 clearly states it clones an existing Chrome profile into an isolated location. It distinguishes itself from sibling tools like list_chrome_profiles and spawn_browser by explaining the cloning process and its purpose.
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 explicitly mentions prerequisites (Chrome must be closed) and how to use the cloned profile (launch with spawn_browser). It provides a tip to use list_chrome_profiles for source options. However, it does not explicitly state when not to use this tool or what alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_all_instancesA
⭐ Close every running browser instance. Useful for cleanup.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the action but does not disclose consequences such as unsaved data loss or that all instances will be closed without confirmation.
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 wasted words, front-loading the core action.
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 no-parameter tool with an output schema, the description is largely sufficient, though it could mention lack of confirmation or irreversible effects.
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?
There are no parameters (schema coverage 100%), and the description adds no parameter info; baseline of 4 is appropriate for zero-parameter tools.
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 'Close every running browser instance' with a specific verb and resource, and it distinguishes from siblings like close_instance (singular) and browser_close (current browser).
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 says 'Useful for cleanup' but does not explicitly state when to use versus alternatives like close_instance or browser_close, lacking explicit context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_instanceB
⭐ Close a specific browser instance (frees profile + memory).
| Name | Required | Description | Default |
|---|---|---|---|
| instance_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that closing frees profile and memory, indicating a destructive side effect. However, it omits details about irreversibility, error conditions, or required permissions.
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 extremely concise—one sentence plus a parenthetical note. It front-loads the core action, and every word earns its place without redundancy.
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 one parameter and an output schema (not documented), the description is too brief. It lacks information about return value, error handling, and prerequisites (e.g., instance must be open). For a simple tool, this is a significant gap.
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 for parameters is 0%, so the description must compensate. The phrase 'specific browser instance' weakly implies the parameter identifies the instance, but it adds no detail about the expected format, validation, or behavior if the ID is invalid.
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 resource ('a specific browser instance'), making the action unmistakable. It distinguishes from siblings like 'close_all_instances' by emphasizing 'specific', implying the need for an instance identifier.
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 use this tool versus alternatives such as 'browser_close' or 'close_all_instances'. It does not mention prerequisites (e.g., instance must exist) or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_clearA
Clear the captured console buffer + call console.clear() in the page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It transparently states both effects: clearing the captured buffer and calling console.clear() in the page. No contradictions or hidden side effects.
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 that is concise and front-loaded. Every word is necessary, no waste.
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's simplicity (no parameters, trivial input schema, and presence of output schema), the description is complete enough. It explains the action and side effects clearly.
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 tool has no parameters, and schema coverage is 100% trivially. According to guidelines, baseline is 3 when coverage is high. The description adds no parameter info, which is fine.
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 action: clearing the captured console buffer and calling console.clear() in the page. It uses a specific verb and resource, distinguishing it from sibling tools like console_get and console_start.
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 used to clear the console buffer, which is clear from context. However, it lacks explicit guidance on when not to use it or alternatives, but given the tool's simplicity, this is acceptable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_getA
Retrieve captured console messages (chronological: oldest first within the last limit, newest last).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. 'Retrieve' suggests a read-only operation, but there is no explicit statement about non-destructiveness, message persistence after retrieval, or error conditions. The description does not contradict annotations (none exist), but leaves some behavioral traits implied rather than explicit.
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 sentence that is front-loaded with the verb and resource, containing no redundant information. Every word earns its place, and the structure is optimal for quick parsing.
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 one optional parameter and an output schema (exists but not shown). The description covers the key behavioral aspect (chronological order with limit) and is complete for the tool's scope. Minor gaps like error handling or empty state behavior are not critical given the output schema likely documents return values.
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 0% with no parameter descriptions. The description compensates by explaining the 'limit' parameter's role in controlling how many messages are returned and the ordering (oldest first within last limit, newest last). This adds significant meaning beyond the raw 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 clearly states the verb 'Retrieve' and resource 'captured console messages', specifying chronological ordering. It distinguishes from sibling tools like console_clear (delete) and console_start (start capture), making the tool's purpose unambiguous.
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 this tool is for reading messages, but does not explicitly provide when-to-use guidance or contrast with alternatives like console_clear or console_start. The chronological ordering detail is useful but insufficient for full usage guidelines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_startA
Begin capturing console messages of active tab.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits like whether previous captures are overwritten, if there is a limit, or if it returns a status.
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?
Single sentence with no wasted words, front-loading the action and resource effectively.
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 simplicity of the tool and the presence of an output schema (not shown), the description is adequate but lacks context about how it relates to console_get and console_clear, and whether a stop action is needed.
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?
There are no parameters, and schema coverage is 100%. The description adds no extra meaning beyond the action, but a baseline of 4 is appropriate for zero-parameter tools.
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 has a specific verb 'Begin capturing' and a clear resource 'console messages of active tab', which distinguishes it from sibling tools like console_clear and console_get.
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 on when to use this tool vs alternatives, such as when to start capturing vs retrieving messages with console_get, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cookie_deleteB
Delete cookies matching name (optionally scoped to domain).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| domain | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates deletion (a destructive action) but does not disclose details such as whether cookies are deleted permanently, if domain scoping affects behavior, or any side effects like session termination. No annotations provided to supplement.
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?
Single, well-structured sentence that front-loads the action and resource. No unnecessary words.
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 description covers the basic purpose and optional parameter, but lacks detail on exact behavior, return values, and edge cases (e.g., no matching cookies). An output schema exists, so return format is not needed, but more context would help.
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 description explains the optional domain scoping, adding meaning beyond the schema. However, it does not specify name matching behavior (exact, case-sensitive, wildcard) or the effect of null domain, and the schema has 0% description 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 clearly states the verb 'Delete' and the resource 'cookies' with the condition 'matching name (optionally scoped to domain)', effectively distinguishing it from sibling tools like cookie_list, cookie_set, etc.
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 on when to use this tool versus alternatives (e.g., cache_clear for all cookies) or when not to use it. The context is implied by the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cookie_exportA
Export cookies to a JSON file. Cookies-only (use storage_state_save for full session).
Output is a plain JSON array compatible with cookie_import / EditThisCookie /
Playwright cookies format. Saved to ~/.mcp-stealth/storage-states/.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses output format (JSON array), location (~/.mcp-stealth/storage-states/), and compatibility. Does not mention whether it overwrites existing files or requires any particular permissions, but the operation is likely non-destructive. Adequate but could be more detailed about side effects.
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?
Extremely concise: two sentences. The first sentence states purpose, the second adds key details (format, location, compatibility). No unnecessary words.
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 an output schema (not shown) which likely covers return values. The description covers format, location, and sibling alternative. However, it omits parameter semantics and any preconditions. Simple tool but missing parameter details reduces completeness.
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 has 2 parameters (filename, url) with 0% description coverage. The description provides no explanation of these parameters, leaving the agent to infer from names and context. This is a significant gap: the description must compensate for missing schema descriptions but fails to do so.
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 'Export' and resource 'cookies', and distinguishes from the sibling 'storage_state_save' by specifying 'Cookies-only (use storage_state_save for full session)'. It also mentions output format (JSON) and location.
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?
Provides explicit when-to-use guidance by comparing with storage_state_save for full session. Mentions compatibility with cookie_import/EditThisCookie/Playwright, giving context. Lacks explicit when-not-to-use scenarios but is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cookie_importA
Bulk-import cookies. Three input modes — pick whichever is easiest:
1. cookies=[{...}] inline array of dicts (DevTools / EditThisCookie shape)
2. file_path="..." JSON file (array OR storage_state {"cookies":[...]})
3. raw_text="..." paste any of these and we auto-parse:
• JSON array / object (same shapes as 1+2)
• Header string: "name=val; name2=val2" or
"Cookie: name=val; name2=val2"
• Netscape cookies.txt (tab-separated)
• curl --cookie / -b argument string
NOTE: header / netscape formats lack domain — pass default_domain=".example.com"
(or call this AFTER navigate so the active tab's URL provides it).
Per-cookie fields (when JSON):
{"name":"...", "value":"...", "domain":".example.com", "path":"/",
"expires":1234567890, "secure":true, "httpOnly":false, "sameSite":"Lax"}
Args:
cookies: inline array
file_path: JSON file
raw_text: any cookie text — format auto-detected
default_domain: fallback domain for header / netscape cookies (or auto-uses
current tab URL's host)
clear_first: wipe all existing cookies before import (default False)
For full cookies + localStorage + sessionStorage restore, use storage_state_load.
| Name | Required | Description | Default |
|---|---|---|---|
| cookies | No | ||
| file_path | No | ||
| raw_text | No | ||
| default_domain | No | ||
| clear_first | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: import modes, auto-parsing of raw_text, the effect of clear_first flag, and domain fallback logic. It does not contradict annotations (none provided). However, it could add details on error handling or side effects like overwriting existing cookies.
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 well-organized with a summary, bulleted modes, and args list. It is slightly verbose (e.g., per-cookie field example), but the structure aids readability. Could be trimmed slightly without losing 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?
Given the tool's complexity (5 parameters, multiple input modes, auto-parsing, domain handling), the description covers all aspects thoroughly, includes examples, and references the output schema implicitly. It is complete for an agent to invoke 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?
With 0% schema description coverage, the description fully compensates by explaining each parameter in detail, providing examples (inline array, file path, raw text formats), and noting default behavior for domain and clear_first. This goes well beyond the schema's type-only definitions.
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 as 'Bulk-import cookies' and enumerates three distinct input modes, making it specific and actionable. It also differentiates from a sibling tool (storage_state_load) by noting that this tool handles cookies only, not full storage.
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 explicit guidance on when to use each input mode, including fallback domain handling for header/netscape formats, and advises calling after navigate or providing default_domain. It also points to the alternative sibling for full storage restore, giving clear when-to and when-not-to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cookie_listB
List all cookies (optionally filtered by URL).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only says 'list all cookies' without disclosing return format, scope, or any side effects. It lacks behavioral details beyond the basic function.
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 with no unnecessary words, but sacrifices detail for brevity.
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 an output schema and one optional parameter, the description is minimally adequate but does not explain return values or behavior beyond listing.
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?
With 0% schema description coverage, the description adds minimal value by indicating the URL parameter is for filtering, but does not explain URL matching or format.
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 lists cookies and optionally filters by URL, distinguishing it from sibling cookie manipulation tools like cookie_delete or cookie_set.
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 usage for viewing cookies but provides no explicit guidance on when to use vs alternatives or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cookie_setC
Set a cookie on the browser.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| value | Yes | ||
| domain | Yes | ||
| path | No | / | |
| secure | No | ||
| http_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states the basic action, omitting details like overwriting behavior, side effects, or dependencies on page state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded but could benefit from slightly more detail without sacrificing conciseness.
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 6 parameters, an output schema exists, and no annotations, the description is too sparse. It lacks essential context for correct invocation and understanding of 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 0%, and the description adds no meaning to the 6 parameters (name, value, domain, path, secure, http_only). It fails to compensate for the lack of parameter 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 'Set a cookie on the browser' clearly states the action (set) and resource (cookie), distinguishing it from sibling tools like cookie_delete, cookie_list, etc.
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 provided on when to use this tool versus alternatives, nor any prerequisites or exclusions. The description is silent on usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coverage_startA
Start collecting JS/CSS code coverage.
Wraps CDP Profiler.startPreciseCoverage + CSS.startRuleUsageTracking.
Call coverage_stop() to get the usage report (bytes used vs unused).
| Name | Required | Description | Default |
|---|---|---|---|
| js | No | ||
| css | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the burden of behavioral disclosure. It mentions wrapping CDP methods but does not state whether re-invocation restarts tracking, if it is safe to call multiple times, or what side effects occur (e.g., clearing previous data). The behavioral context is minimal.
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 two concise sentences, front-loaded with the primary purpose, followed by implementation detail and usage guidance. Every word adds value, and there is no redundancy.
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's simplicity (2 booleans, no required params, output schema exists), the description covers the essential workflow. It could mention behavior on repeated calls or whether prior coverage data is discarded, but overall it is sufficient for an agent to use 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 0%, but the two Boolean parameters (js, css) are self-explanatory from the tool name and description. The description adds no further detail about their meaning beyond indicating that they enable collection for respective types. Baseline score of 3 is appropriate given simplicity and context.
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 action ('Start collecting') and the resource ('JS/CSS code coverage'). It also references underlying CDP methods, distinguishing it from sibling 'coverage_stop'. The tool's purpose is unambiguous.
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 explicitly tells the user to call 'coverage_stop()' to retrieve the report, providing a clear usage pattern. While it doesn't exclude other uses, this is sufficient guidance for the paired workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
coverage_stopA
Stop coverage collection and return used/unused breakdown.
Returns per-file summary: bytes used, bytes total, unused %. Sorted by
largest unused byte count (biggest dead-code wins first).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully explain behavior. It describes the action and return value but lacks details on side effects (e.g., whether coverage data is reset, if the tool can be called multiple times, or if it requires prior state). The description is functional but not comprehensive.
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 front-loaded action and result. Every sentence adds value: first states the purpose, second details output format and sorting. No fluff or redundancy.
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 no parameters and presence of an output schema, the description provides key output details (per-file summary, sorting). However, it omits prerequisite context (e.g., coverage must be started first) and any state implications. Could be slightly more complete.
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?
Input schema has zero parameters, so baseline is 4. The description adds no parameter information, which is appropriate since there are none. Schema coverage is 100%, so the description does not need to compensate.
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 stops coverage collection and returns a used/unused breakdown. It specifies the output format (per-file summary with bytes used, total, and unused percentage) and sorting order (by largest unused byte count). This distinguishes it from sibling tools like coverage_start.
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 on when to use this tool vs. alternatives. It does not mention that coverage must be started first (via coverage_start) or any prerequisites. Sibling tools include many other actions, but the description offers no context for appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_pageA
⭐ Compact AI-friendly page summary — replaces accessibility_snapshot for LLM workflows. Returns JSON with the page's intent + interactable surface in ~10× fewer tokens than a full a11y dump.
Args:
wait_stable: if True, install a MutationObserver and wait until the
DOM has been quiet for `stable_ms` before snapshotting (max
`max_wait` seconds). Use on SPA / lazy-rendered pages so the
LLM sees the final state, not a half-hydrated render. Cheap
(~50-200ms typical, capped at max_wait).
max_wait: outer cap for stability wait (default 2.5s)
stable_ms: required quiet window in ms (default 400)
Output shape:
{
"title": "...",
"url": "...",
"headings": [{"level":"h1","text":"..."}],
"fields": [{"label":"...","type":"text|email|...","required":bool,"value":"...","name":"...","id":"..."}],
"actions": [{"text":"Submit","kind":"button","disabled":false}],
"errors": ["..."],
"navigation": ["Dashboard","Settings",...],
"stability": "stable|timeout|skipped" (only present if wait_stable=True)
}
Use this BEFORE smart_fill so the LLM knows which labels exist.
| Name | Required | Description | Default |
|---|---|---|---|
| wait_stable | No | ||
| max_wait | No | ||
| stable_ms | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description explains the wait_stable behavior with MutationObserver, default values, and output shape, but omits details about error handling or performance implications.
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 well-structured with separate sections for args and output shape, front-loaded with purpose, and every sentence adds value.
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's complexity (3 parameters, one conditional behavior), the description covers parameter details, output format, and usage context (before smart_fill), making it fully complete.
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?
With 0% schema description coverage, the description fully explains all three parameters, including their purpose, defaults, and behavioral effects.
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 produces a compact AI-friendly page summary, replacing accessibility_snapshot for LLM workflows, and distinguishes itself by being more token-efficient.
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?
Explicitly says 'Use this BEFORE smart_fill so the LLM knows which labels exist' and mentions it replaces accessibility_snapshot, but does not provide alternative tools for other use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detachA
⭐ Release CDP connection to an attached Chrome WITHOUT closing it. Only valid for browsers connected via attach_to_chrome — for browsers spawned by browser_launch/spawn_browser this is equivalent to a no-op (use browser_close instead).
After detach, Chrome keeps running with all tabs intact. You can
re-attach later with attach_to_chrome(port=...).| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: does not close Chrome, is a no-op for spawned browsers, and Chrome continues running. Also specifies that re-attachment is possible.
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 clear sentences front-loading the core action and side effects. Every word adds value without repetition.
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 no parameters and output schema present, the description covers the tool's domain, prerequisites, and alternatives completely.
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?
No parameters, so baseline is 4. The description adds no param info, but none is needed.
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 specific verb 'Release' and unique resource 'CDP connection to an attached Chrome'. It distinguishes from siblings like attach_to_chrome and browser_close.
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?
Explicitly states when to use (only for attach_to_chrome connections) and when not to (for spawned browsers, use browser_close). Also mentions re-attach possibility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_and_bypassA
⭐ One-shot: detect anti-bot wall on current page and apply the best bypass we have. Returns JSON with detection + bypass result.
Bypass routing:
- Cloudflare Turnstile / interstitial → _auto_verify_cf (DOM + OpenCV)
- Other walls (DataDome, PerimeterX, Akamai, Imperva, Kasada) →
return detection + recommended-action list (no auto-bypass since
those need session reuse / proxies / paid solvers).
- No wall detected → returns ok with empty bypass.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that some walls receive automatic bypass while others only return recommendations, and notes requirements for session reuse/proxies/paid solvers. However, it lacks details on prerequisites (e.g., attached browser, loaded page), potential side effects, or failure modes.
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 concise and front-loaded with the key action ('One-shot: detect anti-bot wall...'). The bullet list for bypass routing is well-structured and adds clarity without unnecessary words. Very minor redundancy (e.g., 'No wall detected → returns ok with empty bypass' could be inferred from 'detection + bypass result').
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's complexity (multiple wall types, different bypass strategies) and the existence of an output schema, the description adequately covers the core behavior. However, it omits important context such as expected page state (e.g., must be navigated to a page with a wall), error handling, and whether the tool is idempotent.
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 tool has zero parameters, so the schema provides complete coverage. The description adds no parameter information, which is acceptable since none are needed. Per guidelines, baseline score is 4 for zero-parameter tools.
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 that the tool detects anti-bot walls and applies the best bypass in one shot. It specifies supported walls (Cloudflare Turnstile, DataDome, etc.) and how bypass differs, distinguishing it from sibling tools like 'detect_anti_bot' (likely detection only) and 'verify_cf' (focused solely on Cloudflare).
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 explains when to use the tool (on a page with an anti-bot wall) and provides routing details for different wall types. It implicitly covers when not to use (no wall returns ok) but does not explicitly mention alternative sibling tools or when to prefer them over this one-shot approach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_anti_botA
⭐ Analyze current page + HTTP headers to identify anti-bot system.
Detects: Cloudflare, DataDome, PerimeterX/HUMAN, Akamai Bot Manager,
Kasada, Imperva/Incapsula, F5 Shape, none. Returns system + recommended
bypass strategy from our toolkit.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states that the tool analyzes the current page and headers, which suggests a non-destructive read operation. However, it does not explicitly confirm no side effects, state changes, or prerequisites, leaving some ambiguity.
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 concise: three sentences, front-loaded with an emoji and clear action. It uses a bullet-like list for detected systems, and every sentence adds value without redundancy.
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 no parameters and the existence of an output schema, the description covers the tool's purpose and return value (system + recommended bypass strategy) adequately. It provides sufficient context for an agent to understand what the tool does and what it returns.
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 tool has no parameters, and the schema is empty (100% coverage). According to guidelines, with 0 parameters the baseline is 4. No additional parameter info is needed, and the description does not add any, which is appropriate.
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: analyze current page and HTTP headers to identify anti-bot systems. It lists specific systems (Cloudflare, DataDome, etc.) and mentions returning the identified system plus a recommended bypass strategy. This distinguishes it from sibling tools like detect_and_bypass, which likely also executes bypass.
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 usage when needing to identify which anti-bot system is present on a page, and mentions a recommended bypass strategy. While it does not explicitly state when not to use or compare to siblings, the context of sibling tools (e.g., detect_and_bypass) makes the use case clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_content_patternA
Heuristically detect the most likely repeating container on page.
Useful for scraping job listings, product cards, search results. Returns top-3 candidate CSS selectors ranked by child-similarity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool uses heuristics, returns top-3 candidate selectors ranked by child-similarity, and is intended for scraping. However, it does not explicitly state that it is read-only or describe any side effects. Since no annotations are provided, the description carries the full burden, and it partially achieves transparency.
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 extremely concise: three sentences covering purpose, use cases, and output format. Every sentence adds value, and the key information is front-loaded in the first sentence.
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 no parameters and an output schema exists (though not shown), the description is largely complete. It explains the detection approach, typical uses, and what is returned. It could mention limitations or assumptions (e.g., page must have repeating elements), but the provided information suffices for understanding.
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 tool has no parameters, so the input schema is empty. According to guidelines, 0 parameters yields a baseline score of 4. The description does not need to add parameter semantics as there are none.
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 function: 'Heuristically detect the most likely repeating container on page.' It specifies the resource (page) and the output (CSS selectors). The use cases listed (job listings, product cards, search results) further clarify its purpose. It distinguishes from sibling tools like extract_structured by focusing on detecting repeating containers rather than extracting data.
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 context for when to use it ('Useful for scraping...'), but does not explicitly state when not to use it or mention alternatives among siblings. This implicit guidance is adequate but lacks explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dialog_auto_handleA
⭐ Install a PERSISTENT auto-handler for native browser dialogs. Unlike dialog_handle (one-shot, action baked in at arm time), this one stays armed across many dialogs and reads its config at fire time — call again with new action/types to update without re-arming.
Args:
action: "accept" (Leave / OK) or "dismiss" (Cancel / Stay)
enabled: True to arm, False to disable (config preserved)
types: optional list to scope handling — any of:
["alert", "confirm", "prompt", "beforeunload"]
None (default) = handle all types.
text: prompt response when action="accept" on prompt() dialogs;
also basic-auth "user:pass" for HTTP 401.
Common patterns:
# Form pages with "unsaved changes" guard — auto-leave forever
dialog_auto_handle(action="accept", types=["beforeunload"])
# Pages that spam alert() — auto-OK
dialog_auto_handle(action="accept", types=["alert"])
# Disable when done
dialog_auto_handle(enabled=False)
Native dialogs only (Chrome's own card UI). HTML/CSS modal overlays
are regular DOM — use click_text("Cancel") / click_role for those.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | accept | |
| enabled | No | ||
| types | No | ||
| text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries full burden. Describes persistence across dialogs, config read at fire time, update without re-arming, and limitation to native dialogs. Missing potential side effects, but behavior is well detailed.
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?
Front-loaded with key info, uses bullet points and examples. Slightly long but each sentence adds value. Could be trimmed, but structure is clear.
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 no annotations and 4 params, description covers usage patterns, limitations (native only), and parameter details. Output schema exists but not needed per rules. Provides enough for agent to use 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 coverage is 0% so description must explain all 4 params. It does: action (accept/dismiss), enabled (arm/disable), types (scoping list, default all), text (prompt response or basic auth). Adds meaning beyond schema defaults.
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 it installs a persistent auto-handler for native browser dialogs, using specific verb 'install' and resource 'auto-handler'. It distinguishes from sibling dialog_handle (one-shot vs persistent).
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?
Explicitly contrasts with dialog_handle for one-shot use, provides contextual patterns (form unsaved changes, alert spam) and when to disable via enabled=False. Lists alternatives for HTML overlays.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dialog_handleA
Pre-arm handler for next alert/confirm/prompt. Call BEFORE action that triggers it.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | accept | |
| text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It explains the tool is a pre-arm handler, implying it prepares for a dialog, but does not disclose behaviors like what happens if multiple calls are made, if no dialog appears, or if the action parameter is invalid. The description is adequate but lacks depth.
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 that efficiently conveys the tool's purpose and usage. Every word earns its place with no redundancy.
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 and has an output schema, so return values need not be explained. However, the description omits details about parameter semantics (action values, text usage), which are necessary for correct invocation. It is not fully complete given the lack of parameter documentation.
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%. The description does not explain the meaning or valid values for the 'action' parameter (e.g., accept, dismiss) or the 'text' parameter (for prompt dialogs). It adds minimal value beyond what the schema provides, leaving ambiguity for the agent.
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: a pre-arm handler for the next alert/confirm/prompt dialog, which is a specific verb+resource combination. It distinguishes itself from sibling tools like dialog_auto_handle by explicitly noting the timing (call before action).
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 explicit usage guidance: 'Call BEFORE action that triggers it.' This tells the agent when to invoke the tool. However, it does not mention when not to use it or provide alternatives like dialog_auto_handle, which slightly lowers the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drag_and_dropB
Drag from (start_x, start_y) to (end_x, end_y).
| Name | Required | Description | Default |
|---|---|---|---|
| start_x | Yes | ||
| start_y | Yes | ||
| end_x | Yes | ||
| end_y | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral details. It only states the basic action without mentioning side effects, event triggering, or browser requirements. This is insufficient for an agent to understand the tool's impact.
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 concise and front-loaded, consisting of a single sentence. It could be slightly more detailed without losing conciseness, but it is not verbose.
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 4 parameters and an output schema, the description lacks necessary context such as coordinate interpretation, default behavior, or return value. It is incomplete for an agent to use confidently.
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 description implicitly maps parameters by naming start_x, start_y, end_x, end_y in the text, but it does not explain coordinate system, units, or constraints. Given 0% schema coverage, this adds minimal value 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 clearly states the tool performs a drag action from one point to another, using specific coordinates. This distinguishes it from sibling tools like click, hover, and mouse_move.
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 provided on when to use this tool versus alternatives like mouse_move or drag-and-drop with specific elements. There is no mention of prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emulate_cpuA
Throttle CPU via CDP Emulation.setCPUThrottlingRate.
rate=1 is no throttle; rate=4 makes CPU ~4× slower (matches DevTools default
"4x slowdown"). rate=6 simulates low-end mobile. Pass 1 to reset.
| Name | Required | Description | Default |
|---|---|---|---|
| rate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the behavioral effect of rate values and that setting rate=1 resets the throttle. It does not discuss potential side effects or permissions, but for a simple emulation tool, this is sufficient.
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 two well-structured sentences. The first sentence states the action and mechanism. The second sentence explains rate values. No redundant words; every part adds value.
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's simplicity (single parameter, no required params, output schema exists), the description is complete. It covers all necessary information for an agent to select and invoke the tool 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?
The schema has 0% coverage and only provides type and default. The description adds critical semantics: meaning of rate=1 (no throttle), rate=4 (4x slowdown), rate=6 (low-end mobile), and that 1 resets. This fully compensates for the lack of schema 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 clearly states the tool throttles CPU via CDP Emulation.setCPUThrottlingRate. It provides explicit rate values and their effects, distinguishing it from other emulation tools. The verb 'Throttle' and resource 'CPU' are specific.
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 clear usage context by mapping rate values to real-world scenarios (DevTools default, low-end mobile, reset). It does not explicitly mention when not to use, but the single-parameter nature and lack of sibling CPU tools make usage straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emulate_deviceA
Emulate a device via CDP Emulation.setDeviceMetricsOverride + UA override.
Presets: iphone-15, iphone-se, pixel-8, galaxy-s23, ipad, desktop (reset).
Also sets the matching User-Agent string so UA-sniffing backends respond
with the mobile variant.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | desktop |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the mechanism (CDP Emulation.setDeviceMetricsOverride + UA override), lists presets including desktop reset, and mentions UA-sniffing backend implications. Good behavioral context beyond the schema, though persistence and scope are not addressed.
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 concise sentences front-loading the purpose and mechanism. Every sentence adds value with no redundancy.
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?
Sufficient for a simple tool with one parameter and an output schema. Covers core behavior, presets, and side effect (UA override). Minor gap: no mention of session scope or persistence.
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 0%, but the description compensates by listing possible preset values (iphone-15, pixel-8, etc.) and their effects, including the reset functionality. Adds meaning beyond the bare schema definition.
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?
Clearly states it emulates a device via CDP commands, lists presets. Distinguishes from sibling tools like emulate_cpu and emulate_network by specifying the resource (device) and mechanism.
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?
Implies usage through preset examples but does not explicitly state when to use this tool versus alternatives like emulate_network or emulate_cpu. No when-not or alternative guidance provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emulate_networkA
Throttle network via CDP Network.emulateNetworkConditions.
Presets match Chrome DevTools device mode (offline/slow-3g/3g/slow-4g/4g/wifi).
Pass preset="no-throttle" to reset. Override individual knobs with
latency_ms / download_bps / upload_bps.
| Name | Required | Description | Default |
|---|---|---|---|
| preset | No | 4g | |
| latency_ms | No | ||
| download_bps | No | ||
| upload_bps | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It mentions throttling and CDP source but does not disclose potential side effects like disrupting ongoing requests or persistence of settings. Adequate but not comprehensive.
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?
Three sentences: purpose, preset enumeration, and override/reset instructions. Front-loaded, no redundant information, 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?
With an output schema present, return values need not be described. Tool has 4 parameters, all covered. Lacks mention of whether settings persist across navigations, but overall sufficient for agent 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 coverage is 0%, so description must compensate. It explains preset values and introduces override knobs (latency_ms, download_bps, upload_bps), adding meaning beyond schema titles. All parameters are addressed.
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 throttles network via CDP Network.emulateNetworkConditions, and lists presets matching Chrome DevTools. The name aligns well with the verb 'emulate' and resource 'network', distinct from siblings like emulate_cpu or emulate_device.
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?
It explicitly lists presets (offline/slow-3g/3g/slow-4g/4g/wifi/no-throttle) and explains how to reset with 'no-throttle' or override with individual parameters. It does not explicitly state when not to use or contrast with other network-related tools, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluateC
Execute arbitrary JS expression in page context. Returns stringified result.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states 'Execute arbitrary JS expression' but does not disclose potential side effects, security implications, error handling, or async behavior. Minimal behavioral disclosure.
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, no fluff, front-loaded purpose. 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?
Adequate for the basic function with one parameter and an output schema, but lacks context on side effects, error handling, and frame context differentiation from siblings.
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 does not add meaning beyond the parameter name 'expression'. No format, length limits, or examples are provided.
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 it executes arbitrary JS expressions in page context and returns stringified results. However, it does not distinguish from the sibling tool 'frame_evaluate' which evaluates JS in a frame, lacking differentiation.
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 on when to use this tool versus alternatives (e.g., 'frame_evaluate'). No cautions about executing arbitrary code or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_harC
Export captured network traffic to HAR-like JSON file.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility. It does not disclose side effects (e.g., whether the file is written to disk or returned, if prior captures are cleared, or behavior when filename is null).
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 with no wasted words, but it is too terse and omits important information. It earns its place but could be expanded without losing conciseness.
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 only one optional parameter and an output schema (not shown), the description fails to explain default behavior or return value. The lack of detail on required context (e.g., network capture active) makes it incomplete for a safe 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?
The only parameter 'filename' is not mentioned in the description. With 0% schema description coverage, the description adds no meaning beyond the schema's minimal definition. The agent is left to guess the effect of null versus a string filename.
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 specifies the verb 'Export', the resource 'captured network traffic', and the output format 'HAR-like JSON file'. It uniquely identifies the tool's function among siblings with no other export 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?
No explicit guidance on when to use this tool versus alternatives, nor prerequisites like needing to start network capture first. The context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_structuredB
Extract structured data from repeating containers.
fields: [{name: "title", selector: ".job-title", attribute: "text|href|src|..."}]
Only direct text nodes of element are captured for "text" (prevents child-field mixing).
| Name | Required | Description | Default |
|---|---|---|---|
| container_selector | Yes | ||
| fields | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses one behavioral trait: for attribute 'text', only direct text nodes are captured, preventing child-field mixing. However, it does not describe other behaviors such as handling of missing selectors, return format (though output schema may cover this), or whether the tool is idempotent. The disclosure is partial.
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 extremely concise: two sentences and an inline example. It is front-loaded with the purpose and includes a practical example. Every sentence serves a clear purpose, and there is no redundant or filler content.
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 three parameters (one complex) and no annotations, the description is moderately complete. The fields parameter example and behavioral note are helpful. However, it lacks context on container_selector usage, limit behavior, and return value structure (though output schema may compensate). Overall, it covers the core but leaves gaps for an AI agent to interpret.
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%, so the description is critical. It explains the 'fields' parameter with an example object and clarifies the 'text' attribute behavior. However, it does not explain 'container_selector' (likely a CSS selector, but not stated) or 'limit' (default 100, but no elaboration). The description adds value for the most complex parameter but is incomplete for all three.
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 extracts structured data from repeating containers, which is a specific and distinct purpose. The example with fields and selectors reinforces this. However, it does not explicitly differentiate from similar tools like extract_table or scrape_page, though the context of 'repeating containers' provides some distinction.
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 provided on when to use this tool versus alternatives. The description does not mention scenarios where this tool is preferred or not, nor does it list sibling tools or exclusion criteria. The example implies usage for repeating HTML structures, but explicit usage direction is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_tableB
Extract a as JSON rows with optional header keys.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | table | |
| include_headers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a non-destructive read operation but does not explicitly state it. With no annotations, the description could be more transparent about side effects or error conditions, but it is not misleading.
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 conveys the core functionality. It is front-loaded and efficient, though it could include more detail without becoming verbose.
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 tool with only two parameters and an output schema, the description is mostly complete. However, it omits explanation of the 'selector' parameter and does not clarify that the tool operates on the current page DOM.
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 description mentions 'optional header keys' which adds meaning to the 'include_headers' parameter beyond the schema. However, the 'selector' parameter is not explained, and with 0% schema coverage, the description only partially compensates.
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 'Extract' and the resource '<table> as JSON rows', with the optional header keys feature. It is specific enough to distinguish from siblings like 'extract_structured' or 'scrape_page'.
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 provided on when to use this tool versus alternatives (e.g., 'extract_structured', 'get_text'). There is no mention of prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fillC
Fill input/textarea via set_value (fast, works for standard inputs).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No | ||
| value | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description mentions 'fast' and 'works for standard inputs' but fails to disclose event triggering, compatibility with non-inputs, or any side effects; annotations absent so burden is on 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?
Very concise single sentence, but lacks necessary detail; not all info is earned as it omits parameter explanations.
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 3 parameters, no annotations, and an output schema not explained, the description is insufficient for complete agent comprehension.
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?
Input schema has 0% coverage for parameter descriptions, and the description adds no meaning to ref, selector, or 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 clearly states the tool fills input/textarea via set_value, but does not distinguish it from sibling tools like fill_form or smart_fill.
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 on when to use this tool vs alternatives; only implies it's for standard inputs but lacks explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fill_formB
Fill multiple fields then optionally submit.
fields: [{ref: "e1", value: "..."}, {selector: "#email", value: "..."}]
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | ||
| submit_ref | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It does not mention side effects, waiting behavior, error handling, or what happens upon submission. Only a parameter example is given, which is insufficient for a mutation 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 extremely concise: two sentences and an example. Every part serves a purpose, with no redundancy or unnecessary words.
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 that there is an output schema (unspecified) and the tool involves form interaction with potential errors, the description omits important details like return value, error states, and page interaction guarantees. It is too minimal for the task's complexity.
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%, so the description partially compensates by explaining the structure of 'fields' array with examples of 'ref' and 'selector' keys. However, it does not clarify all possible properties (since additionalProperties is true) and does not elaborate on 'submit_ref' beyond its existence.
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 'Fill multiple fields then optionally submit,' with an example showing field objects, making the verb and resource obvious. It distinguishes from siblings like 'fill' (single field) and 'smart_fill' (AI-assisted) through the explicit mention of multiple fields.
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 provided on when to use this tool vs alternatives such as 'fill', 'type_text', or 'smart_fill'. There is no mention of prerequisites (e.g., form must be visible) or conditions for submission.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_imageA
⭐ Find an image on the current page via OpenCV template matching.
Takes a fresh screenshot, matches against template_path image, returns
(x, y) center of best match. Use for finding visual buttons/icons when
DOM selectors aren't available.
Returns JSON: {"found": true, "x": ..., "y": ..., "score": ..., "template": "..."}
| Name | Required | Description | Default |
|---|---|---|---|
| template_path | Yes | ||
| threshold | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: takes a fresh screenshot, matches against template_path, returns coordinates. It also mentions the threshold parameter and the return JSON structure. It does not detail failure modes (e.g., no match) but the return JSON includes 'found' boolean, covering that.
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 concise (4 lines) with a clear structure: purpose, behavior, return format. It uses an emoji and bullet points for readability. No redundant sentences. Slight improvement could be to group parameter details more explicitly.
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 moderate complexity, output schema included, and good description of parameters and return values, the description is mostly complete. It explains when to use (DOM not available) but does not contrast with sibling tools like click_at_image or vision_locate, which could help.
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 0% (schema only has type and title), so the description must compensate. It explains template_path as the path to the template image and threshold with default 0.85, but does not explicitly define threshold as matching sensitivity or specify path formats. This adds some value but leaves 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 verb 'find' and resource 'image on the current page' with method 'OpenCV template matching'. It distinguishes from DOM-based tools by noting use when DOM selectors aren't available, and from sibling tools like click_at_image by focusing on finding coordinates rather than clicking.
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 explicitly states 'Use for finding visual buttons/icons when DOM selectors aren't available.' This provides clear guidance on when to use. However, it does not explicitly mention when not to use or directly reference sibling tools like click_at_image or vision_locate, which are alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fingerprint_rotateA
Override fingerprint vectors for active tab: user_agent, accept_language, platform (Win32/MacIntel/Linux x86_64), timezone (Asia/Jakarta, etc). Applied via CDP. Persists until next tab creation.
| Name | Required | Description | Default |
|---|---|---|---|
| user_agent | No | ||
| accept_language | No | ||
| platform | No | ||
| timezone | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description reveals that the override is applied via CDP and persists until tab creation. It does not disclose side effects, reversibility, or what happens if no parameters are set. The behavior is partially transparent.
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 two sentences plus a fragment, highly efficient with no extraneous words. It front-loads the key action and then adds implementation details, making it 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?
Although an output schema exists, the description omits important context: whether parameters are optional, default behavior when all are null, error scenarios, and whether the override is additive or replaces all fingerprints. This leaves gaps for a mutation tool.
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 0%, yet the description only lists parameter names with a single example for timezone (Asia/Jakarta). It does not specify formats, allowed values, or constraints for user_agent, accept_language, or platform, leaving the agent to infer from names.
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 overrides fingerprint vectors for the active tab, listing the specific parameters (user_agent, accept_language, platform, timezone). It distinguishes itself from sibling tools by specifying scope and persistence, so purpose is explicit and unique.
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 explains that the override is applied via CDP and persists until next tab creation. However, it does not provide guidance on when to use this tool versus alternatives, nor does it mention prerequisites or typical use cases like anti-detection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
form_introspectA
⭐ Detailed form analysis in a single call. Returns label, framework binding (react/vue/solid_or_svelte/lit), validation state, and constraints (pattern, min/max length, required) per field.
Args:
form_selector: CSS selector for a specific form (default: scan
whole document for visible inputs)
| Name | Required | Description | Default |
|---|---|---|---|
| form_selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses that it scans for visible inputs by default and returns detailed field information. It implies a read-only operation, which is sufficient transparency.
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 concise, front-loaded with a star and purpose, and uses a bullet list for return fields. No unnecessary repetition.
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's complexity and the presence of an output schema, the description covers the key aspects (what it returns, how to specify a form). It lacks details on error handling or non-form elements, but is adequate for decision-making.
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 sole parameter 'form_selector' is clearly explained as a CSS selector with a default behavior of scanning the whole document. Since schema coverage is 0%, the description provides necessary semantics.
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 it performs detailed form analysis, returning label, framework binding, validation state, and constraints per field. This distinguishes it from sibling tools like fill_form or extract_structured.
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 on when to use this tool vs alternatives. The description implicitly suggests it's for analyzing forms, but doesn't mention exclusions or when to use other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frame_evaluateA
Run JS inside an iframe matching URL pattern.
Same-origin frames only: cross-origin iframes (reCAPTCHA bframe, payment
widgets, third-party embeds) block contentWindow.eval and return an error.
| Name | Required | Description | Default |
|---|---|---|---|
| frame_url_pattern | Yes | ||
| expression | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description takes full burden and clearly discloses a key behavioral trait: same-origin only and error on cross-origin. It does not detail other behaviors like return format, but the output schema exists to cover that.
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 waste. First sentence states action, second provides critical constraint. Highly concise and 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?
Given 2 parameters and an output schema, the description covers a key limitation but lacks parameter format details and usage context. It is not fully complete for an AI agent to use without additional inference.
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 adds minimal meaning to parameters. 'matching URL pattern' for frame_url_pattern is vague (no format), and 'JS' for expression is generic. No examples or additional guidance provided.
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 it runs JS inside an iframe matching a URL pattern. It specifies the verb 'Run' and resource 'iframe', distinguishing it from main-page evaluation tools like 'evaluate' among siblings. However, it does not explicitly name alternatives.
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 mentions same-origin restriction and that cross-origin iframes return an error, providing a condition for use. But it does not explicitly compare to sibling tools like 'evaluate' or 'list_frames', leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attributeC
Get attribute value of element.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior. It only states the action without mentioning error handling, return behavior for missing elements, or side effects. The agent gets minimal insight beyond the surface operation.
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 extremely concise at five words, front-loading the core action. However, it may be too brief, sacrificing necessary details for brevity.
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 complex browser automation context and many sibling tools, the description lacks critical details like how to target the element and what happens with multiple matches. The agent would need to infer or experiment, reducing completeness.
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%, requiring the description to explain parameters. The description does not mention any parameter purpose (e.g., how to specify the element via 'ref' or 'selector', or what 'name' refers to). No additional semantics are provided.
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 ('Get') and resource ('attribute value of element'), making the basic purpose clear. However, it does not differentiate from sibling tools like 'get_text' or 'get_html', which have similar targeting mechanisms.
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 provided on when to use this tool versus alternatives, nor are there any prerequisites or exclusions. The description is generic and does not help an agent decide contextually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_htmlA
Return innerHTML (or outerHTML) of element or whole document.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| outer | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden. It does not disclose behavioral traits such as the effect of null selector (returns whole document), error handling, or any side effects. Essential transparency is lacking.
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, front-loaded with the verb, and contains no unnecessary words. It efficiently communicates the core functionality.
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 presence of an output schema (not shown but indicated), the description need not detail return values. However, it lacks behavioral details like error handling or parameter defaults, making it slightly incomplete for a tool with zero schema descriptions.
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%, so the description must compensate. It adds meaning by linking 'innerHTML or outerHTML' to the 'outer' parameter and 'element or whole document' to 'selector.' However, it does not fully detail parameter behavior or return format, leaving 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 verb 'return' and the specific resources 'innerHTML (or outerHTML) of element or whole document.' It effectively distinguishes from sibling tools like get_text or get_attribute by specifying HTML content.
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 (when HTML content is needed) but provides no explicit guidance on when not to use it or alternatives. Given the large number of sibling tools, this lack of differentiation is a notable gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_linksB
List all links on page.
| Name | Required | Description | Default |
|---|---|---|---|
| same_origin | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden. It does not disclose whether the tool retrieves all links including hidden ones, how it handles relative URLs, or if there are limits beyond the 'limit' parameter.
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 with no extraneous information. However, it could be slightly expanded without losing conciseness to improve 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?
Given the tool has an output schema (not shown but present), the description doesn't need to explain return values. However, for a tool with two parameters and no annotations, the description is minimally adequate but lacks context about filtering or page scope.
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 has 0% description coverage. The description adds no explanation for 'same_origin' or 'limit' beyond their names and defaults. An agent would not know what 'same_origin' filters or what the limit applies to.
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 lists all <a> links on a page, which is a specific verb and resource. It is distinct from sibling tools like cookie_list or list_frames, as this focuses on hyperlinks.
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 provided on when to use this tool versus alternatives (e.g., using get_text or extract_structured to find links). The description does not mention exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_page_errorsA
Retrieve JS errors caught on active tab.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must convey behavior. It says 'caught on active tab' but doesn't clarify if it returns all errors since navigation, only current ones, or if it is a snapshot. For a parameterless tool, this is acceptable but minimal.
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?
Single sentence, front-loaded with key information. No wasted words.
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 parameters and an existing output schema (not shown), the description is adequate for a simple retrieval tool. However, it could mention that it returns an array of error objects with details like message and stack.
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?
No parameters exist, so schema coverage is 100% trivially. Description adds no extra meaning beyond 'get errors' but that is sufficient given no params.
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?
Description clearly states the verb 'retrieve' and resource 'JS errors' from the 'active tab'. It distinguishes from sibling tools like console_get which retrieves console logs, and network-related error 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?
No guidance on when to use this tool vs alternatives like console_get or network error tools. The description does not specify context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_textB
Return innerText of element (by selector or ref) or whole document.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| ref | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It only states the basic return value (innerText) but does not disclose behavior for missing elements, error handling, or edge cases like null/empty results. Basic but insufficient for safe invocation.
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?
Single sentence, very concise and front-loaded. However, it is almost too minimal—could benefit from a bit more detail without losing 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?
An output schema exists, so return value explanation is not needed. However, with 0% schema coverage and no annotations, the description lacks completeness on parameter behavior, default actions, and error cases. For a tool with optional parameters, more context is expected.
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%, requiring the description to explain parameters. It mentions 'selector or ref' but gives no format, constraints, or usage hints. The mutual exclusivity of selector and ref is implied but not explicit.
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 returns innerText of an element (by selector or ref) or the whole document. This distinguishes it from siblings like get_html (HTML content) and get_attribute (specific attribute).
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 usage by mentioning 'by selector or ref', but does not provide explicit guidance on when to use selector vs ref, or when to prefer this tool over alternatives like evaluate or get_html. No when-not-to-use or fallback advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_urlA
Return current URL of active tab.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description implies a non-destructive read operation. However, it does not disclose edge cases (e.g., if no active tab exists) or any side effects. Adequate but not detailed.
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?
Single sentence, 7 words, no extraneous information. Perfectly concise.
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's simplicity (0 parameters, output schema present), the description is complete. It clearly defines the tool's action and resource.
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?
No parameters exist, and the description confirms no inputs needed. Schema coverage is 100%, so baseline 4 applies.
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 'Return' and the resource 'current URL of active tab', making it distinct from siblings like 'assert_url_matches' 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?
No guidance on when to use this tool versus alternatives such as 'assert_url_matches' or 'get_text' which might also provide URL info. Missing explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_viewport_sizeA
Return current window dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description alone should disclose behavioral traits. It only states the action without mentioning prerequisites, side effects (none expected), or error conditions. Minimal transparency for a read operation.
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 sentence that is front-loaded and contains no superfluous words. Every word contributes to the meaning.
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 no parameters and an output schema, the description is minimal but sufficient for a trivial getter. However, it lacks any usage context, making it barely adequate.
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?
No parameters exist, and schema coverage is 100%. The description adds nothing beyond the schema, but the baseline of 4 is appropriate given the simplicity.
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 specifies 'Return current window dimensions' with a specific verb and resource. It distinguishes itself from the sibling tool 'set_viewport_size' which sets the viewport.
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 provided on when to use this tool versus alternatives (e.g., after page load, for responsive checks). The description lacks any direction on context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_backA
Go back in history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided and description lacks behavioral details such as whether it reloads the page, preserves scroll position, or fails if history is empty.
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?
Single sentence, no wasted words; appropriately concise for a parameterless tool.
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?
Adequate given zero parameters and existence of output schema, but lacks context about preconditions and side effects like page reload or empty history handling.
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?
No parameters exist, so description adds no param information but baseline is 4 per guidelines; schema coverage is 100%.
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?
Description clearly states the tool performs a 'back' navigation in history, using a specific verb and resource that distinguishes it from siblings like 'go_forward' and '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?
No guidance on when to use or avoid this tool; does not mention alternatives or prerequisites like requiring history to exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
go_forwardA
Go forward in history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. The minimal text 'Go forward in history' does not disclose what happens when there is no forward history, whether the action is non-destructive, or any side effects. This is insufficient for a transparent specification.
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, short sentence with no unnecessary words. It is front-loaded and efficient, conveying the essential information without waste.
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 no parameters and an output schema exists, the description is adequate but minimal. It does not explain the output or handle edge cases (e.g., no forward history). For a simple navigation tool, this may be sufficient, but it lacks completeness in covering potential states.
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?
There are no parameters, so the schema coverage is 100% trivially. While the description does not add parameter-level detail (none needed), it clarifies the tool's action beyond the schema. For zero-parameter tools, the baseline is 4, and the description meets this standard.
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 'Go forward in history' clearly states the verb 'go forward' and the resource 'history'. It distinguishes from sibling tools like 'go_back' (back in history) and 'reload' (refresh current page), making the purpose specific and unambiguous.
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 usage in browser navigation history, but provides no explicit guidance on when to use this tool versus alternatives like 'go_back' or 'reload'. No exclusions or conditions are mentioned, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hoverC
Hover over element.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states 'Hover over element' without disclosing side effects, event triggering, or behavior on failure. Minimal value.
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?
Very concise (three words) but at the expense of necessary information. Conciseness is valued, but not at the cost of 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?
With no annotations and no parameter explanations, the description is severely incomplete for a tool that requires element identification. The output schema is present but not described. Lacks all behavioral and usage context.
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 0% (no parameter descriptions in schema). The description adds zero information about the two parameters (ref, selector) – not even their roles or how to use them.
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 it hovers over an element, a standard UI action. However, it does not differentiate from sibling tools like mouse_move or hover-related actions found in similar 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?
No guidance on when to use hover versus click, mouse_move, or other alternatives. No context about prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_requestA
HTTP request with TLS-perfect browser fingerprint via curl_cffi. Use for API scraping after browser login — same stealth as real Chrome's JA3/JA4.
Args:
url, method: target URL and HTTP verb
impersonate: chrome, chrome124, firefox, safari, edge (default chrome)
use_browser_cookies: auto-inject cookies from active browser tab
headers, params: extra headers/query params
data: raw body string (form-urlencoded or custom)
json_body: JSON body dict (sets Content-Type automatically)
timeout, follow_redirects: usual HTTP options
return_mode: auto (json if parseable else text), json, text, or meta (status+headers only)
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| method | No | GET | |
| impersonate | No | chrome | |
| use_browser_cookies | No | ||
| headers | No | ||
| params | No | ||
| data | No | ||
| json_body | No | ||
| timeout | No | ||
| follow_redirects | No | ||
| return_mode | No | auto |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It explains the stealth fingerprinting and cookie injection behavior but does not disclose error handling, rate limiting, or the stateless nature beyond schema defaults.
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 concise, with a clear purpose statement followed by a well-structured list of arguments. Every sentence adds value without redundancy.
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 complexity of 11 parameters and presence of an output schema, the description thoroughly covers input semantics and purpose, making it complete for an agent to invoke 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?
With 0% schema description coverage, the description explains all 11 parameters in detail, including allowed values for impersonate, behavior of use_browser_cookies, and options for return_mode. This adds significant value 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 clearly states the tool makes HTTP requests with TLS-perfect browser fingerprinting via curl_cffi, explicitly for API scraping after browser login. It distinguishes from sibling tools like http_request_with_session by focusing on stealth and single requests.
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 advises 'Use for API scraping after browser login' but does not explicitly contrast with alternatives or mention when not to use it. Guidance is present but could be more precise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_request_with_sessionA
⭐ Authenticated HTTP request that piggybacks on the BROWSER's session.
Combines:
- cookies from active tab (use_browser_cookies=True in http_request)
- Authorization header — explicit auth_header, OR auto-extracted
from network_index (the most recent same-host request captured
via network_start). Pages that hold bearer tokens in JS memory
only become reachable after navigate / interaction emits a
request — call network_start once at session begin.
Args:
url, method, json_body, data, impersonate, return_mode, timeout:
same as http_request
extra_headers: merged on top of auto-detected ones
auth_header: explicit bearer / basic value, e.g. "Bearer eyJ..."
Returns same shape as http_request.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| method | No | GET | |
| json_body | No | ||
| data | No | ||
| extra_headers | No | ||
| auth_header | No | ||
| impersonate | No | chrome | |
| return_mode | No | auto | |
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool piggybacks on the browser session, combines cookies and authorization headers, and explains how auth extraction works (explicit or from network_index). It mentions the return shape is same as http_request, but does not cover error conditions or rate limits.
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 well-structured with a clear heading, a bullet list of combined features, and a concise parameter breakdown. Every sentence adds necessary information without redundancy, making it easy to scan and understand.
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's complexity (9 parameters, 1 required) and the existence of an output schema, the description covers the core authentication behavior and parameter nuances. It references the output shape and setup requirements (network_start), but could be more thorough on potential failure modes or exact cookie handling.
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 has 0% description coverage, so the description must add meaning. It explains the auth_header and extra_headers parameters in detail, and references that common parameters (url, method, etc.) behave like http_request. This adds significant value beyond the schema, though it defers explanation for shared params.
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 it is an authenticated HTTP request that uses the browser's session, distinguishing it from the sibling tool http_request by adding session-based auth. The verb 'make' is implied, and the resource is HTTP requests with session context.
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 explains when to use this tool (when authentication via browser session is needed) and provides context about combining cookies and auth headers. It hints at alternatives by mentioning 'same as http_request' and the need for network_start, but does not explicitly state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
http_session_cookiesA
⭐ Inspect which browser cookies would be sent with a request to URL.
Helpful to verify session sharing works before making requests.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It indicates a read-only inspection ('inspect'), implying no destructive side effects. However, it could more explicitly confirm that no cookies are modified or requests sent.
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 fluff. The emoji front-loads attention, and every word contributes to clarity. Ideal length for a simple inspection tool.
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 presence of an output schema, the description adequately covers the tool's purpose and usage context. It omits details about error states or edge cases, but for a straightforward inspection, it is sufficient.
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%, so the description should compensate. It only loosely mentions 'URL' without specifying format constraints (e.g., absolute, protocol required), leaving the agent to infer parameter semantics from context.
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 which browser cookies would be sent with a request to URL.' It uses a specific verb (inspect) and resource (cookies), and the mention of verifying session sharing distinguishes it from siblings like cookie_list or http_request.
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 context on when to use the tool: 'Helpful to verify session sharing works before making requests.' It implicitly suggests using it pre-request, but lacks explicit exclusion of alternatives or when-not-to-use scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanize_clickC
⭐ Click with Bezier-curve mouse approach + randomized dwell.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It mentions 'Bezier-curve' and 'randomized dwell' to hint at human-like slow movement, but omits key details like whether it triggers events, works on hidden elements, or has a timeout. This is insufficient for an agent to anticipate side effects.
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 a star emoji, making it concise and front-loaded. However, it sacrifices clarity and completeness for brevity, earning a middle score.
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 that an output schema exists (not shown) and the tool involves a non-trivial humanized click behavior, the description is inadequate. It fails to cover return values, prerequisites, or the distinction from similar tools, leaving the agent underinformed.
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%, so the description should explain the two parameters (ref and selector). It does not mention them at all, leaving the agent to infer their meaning from common patterns or sibling tools. This is a significant gap.
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 'Click with Bezier-curve mouse approach + randomized dwell', which specifies the action (click) and a distinguishing technique (Bezier curve) that sets it apart from a plain click. However, it does not explicitly mention the target resource, such as 'web element' or 'UI component', leaving some ambiguity.
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 provided on when to use this tool versus the many sibling click variants (e.g., click, click_and_wait, click_at_corner). The description lacks any context about preferred scenarios, limitations, or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
humanize_typeC
⭐ Type with Gaussian-distributed keystroke delays.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| mean_delay | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Only mentions Gaussian-distributed delays but lacks details on other behaviors (e.g., keystroke order, special characters, abort behavior). With no annotations, the description fails to fully disclose behavioral traits.
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 very brief, which is efficient but omits necessary details. It is front-loaded with purpose but lacks completeness.
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 simplicity of the tool (2 parameters), the description is too sparse. It fails to explain output, parameter role (mean_delay), and context relative to sibling tools like type_text.
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 0% and description does not explain parameters. The description adds no meaning beyond the schema's field names and types.
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 types text with Gaussian-distributed delays, using a specific verb and resource. It distinguishes from sibling tools like type_text (likely unhumanized) and humanize_click.
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 on when to use humanized typing versus alternatives like type_text. No mention of use cases, prerequisites, or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
indexeddb_deleteB
Delete an IndexedDB database by name (scoped to current origin).
| Name | Required | Description | Default |
|---|---|---|---|
| database_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the destructive nature (Delete) and scoping, but lacks important behavioral details such as irreversibility, error handling (e.g., database not found), and impact on ongoing operations. For a deletion tool, this is insufficient.
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 very concise but overly minimal. It is front-loaded but lacks essential details to earn its place as a complete explanation.
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 simplicity of the tool and presence of an output schema, the description is adequate but could be improved by mentioning prerequisites (e.g., must be on the correct origin) and suggesting how to get database names (e.g., using indexeddb_list).
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 description adds no meaning beyond the schema title 'Database Name'. It does not explain where to obtain the name, whether it includes version, or any constraints. Schema description coverage is 0%, and the description fails to compensate.
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 action (delete), the resource (IndexedDB database), and a key constraint (scoped to current origin). It distinguishes it from siblings like indexeddb_list.
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 usage for databases on the current origin but does not explicitly state when to use this tool vs alternatives like indexeddb_list or other storage deletion tools. No explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
indexeddb_listA
List IndexedDB databases for the current origin.
Reads via CDP IndexedDB.requestDatabaseNames. Use indexeddb_delete(name)
to drop one. Useful for clearing SPA state (many PWAs store auth / drafts
in IndexedDB rather than localStorage).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the burden. It discloses the tool uses CDP IndexedDB.requestDatabaseNames and explains its utility. It implies a read-only operation, which is appropriate.
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?
Three sentences, front-loaded with the primary purpose, efficient and no wasted words.
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 no parameters and likely a simple output (list of database names), the description is complete. It explains what the tool does and why it's useful.
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?
No parameters exist, so baseline 4 is appropriate. The description does not need to add parameter meaning.
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 lists IndexedDB databases for the current origin. It differentiates from the sibling tool indexeddb_delete by mentioning it as an alternative for dropping databases.
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 context for when to use the tool (clearing SPA state, PWAs storing auth/drafts). It does not explicitly state when not to use it, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inject_init_scriptA
Register a script that runs before page scripts on every navigation of the CURRENT tab. Scope is the active tab/target only — it is NOT auto-applied to other open tabs or to tabs opened later; re-run per tab if needed.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses key behavioral traits: scoped to current tab, runs on every navigation, not auto-applied to other tabs. Lacks details on removal or persistence, but sufficient for basic understanding.
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 concise sentences, front-loaded with core action and scope clarification. No redundant information.
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?
Output schema exists, so return details are not needed. Covers core functionality, scope, and limitation. Does not mention unregistration or error handling, which is minor.
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 0%, but description does not elaborate on the 'script' parameter beyond its existence. No format, size limits, or examples provided, adding minimal value over the field name.
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?
Clearly states 'Register a script that runs before page scripts on every navigation' with specific verb and resource. Emphasizes per-tab scope, distinguishing from any sibling that might apply globally.
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?
Explicitly indicates it's for the current tab only, not auto-applied to others, and needs re-run per tab. Provides clear context on when not to use, though no alternative sibling is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_elementC
Return tag, attributes, position, text for an element.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It lists return fields but omits traits like read-only nature, error handling (e.g., element not found), position format, or whether all attributes are returned. The description is too sparse.
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 very concise at one sentence, but this brevity sacrifices necessary detail. It is front-loaded with key information, yet incomplete for effective tool use.
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 complexity of browser element inspection and many sibling tools, the description lacks return format details, optional parameter behavior, and handling of missing elements. It is not complete enough for an agent to use reliably.
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 0%, and the description does not explain the role of 'ref' or 'selector' parameters. It adds no meaning beyond the schema field names, leaving the agent to infer usage.
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 returns tag, attributes, position, and text for an element, which is a specific verb and resource. However, it does not distinguish itself from sibling tools like get_attribute or get_text, which have overlapping purposes.
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 provided on when to use this tool versus alternatives like get_attribute, get_text, or get_html. The description offers no context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_chrome_profilesA
List all Chrome/Chromium/Edge/Brave profiles found on this system.
Reads browser 'Local State' JSON (read-only). Returns profile name, user email, path, whether in-use (Chrome currently running on it), and whether it exists.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses read-only behavior (reads JSON), return fields, and that it checks if profile is in-use. Without annotations, it provides good transparency for a list operation, though could mention potential errors if browser not installed.
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 concise sentences: first defines purpose, second adds technical detail. Front-loaded and no wasted words.
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 zero parameters and existence of output schema, description fully covers what the tool does and what it returns. Provides enough context for an AI agent to use it 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?
No parameters, so baseline 4. Description adds no parameter info needed. Schema coverage is 100% naturally.
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?
Description clearly states it lists browser profiles (Chrome/Chromium/Edge/Brave) from system, specifying the data source ('Local State' JSON) and return fields (name, email, path, in-use, existence). This is specific and distinguishes from sibling tools like list_external_chrome which list instances.
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 on when to use this tool vs alternatives like list_external_chrome or clone_chrome_profile. No mention of prerequisites or exclusions. Context is implied but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_external_chromeA
List Chrome processes running on this machine, with their CDP debugging port if any. Use before attach_to_chrome to find a target. Returns array of {pid, debugging_port, user_data_dir, cmd}. Chromes without a debugging port show port=null and cannot be attached unless restarted with --remote-debugging-port=.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it lists processes, indicates port availability, and notes that chromes without a port cannot be attached without restarting. This covers the key behavioral aspects.
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, front-loaded with the primary action, no unnecessary words, and all information is relevant and useful.
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 lack of parameters and presence of an output schema, the description adequately explains the return format (array of objects with specific fields), covers edge cases (port=null), and provides a complete understanding of the tool's functionality.
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?
No parameters exist, and schema coverage is 100% trivially. The description does not need to add parameter info; baseline score of 4 applies per rules.
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 it lists Chrome processes with CDP debugging ports, specifies the return structure, and mentions its use before attach_to_chrome, effectively distinguishing it from 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?
Explicitly states 'Use before attach_to_chrome to find a target' and explains the port=null case with a restart hint, providing clear guidance on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_framesA
List all iframes and their URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It only states the action without mentioning side effects (e.g., whether it is read-only, if it requires a fully loaded page, or if it works across iframes recursively).
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?
Extremely concise: one short sentence with no superfluous words. Achieves maximum efficiency.
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 zero parameters and an output schema, the description covers the core purpose. However, it could mention that it lists iframes on the current page and whether it includes nested iframes. Missing some operational context.
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?
No parameters exist, so schema coverage is 100%. The description adds marginal value by stating that URLs are listed. Per guidelines, baseline is 4 for zero parameters.
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?
Description clearly states the verb 'List' and the resource 'iframes', specifying that it returns their URLs. It effectively distinguishes this tool from siblings like 'frame_evaluate' which likely evaluates code in a frame rather than listing all iframes.
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 on when to use this tool vs alternatives such as 'frame_evaluate' or when it should not be used (e.g., no frames present). Missing context about prerequisites or state requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_instancesA
⭐ List all browser instances with status + last-active time. Also reports external (non-MCP) Chrome processes that may conflict with custom --user-data-dir launches.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It clearly states that the tool lists instances with status and last-active time, and reports external processes. No mention of side effects or permissions, but as a read-only list, it is sufficiently transparent.
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 unnecessary words. The description is front-loaded with the star emoji which is minor, but overall efficient and well-structured.
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 no parameters and an output schema exists, the description covers the key outputs: status, last-active time, and external processes. It is complete for a list tool, though it could mention that it helps in selecting instances for attachment operations.
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?
There are no parameters, and schema coverage is 100%. The description does not need to add parameter info. Baseline 4 is appropriate as it adds no parameter value but is not required.
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?
Description clearly states the tool lists all browser instances with status and last-active time, and also reports external Chrome processes. This distinguishes it from siblings like list_external_chrome which only lists external processes, and list_chrome_profiles which lists profiles.
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 usage by mentioning conflict detection with external processes, but does not explicitly state when to use this over siblings like list_external_chrome or list_chrome_profiles. No exclusions or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
localstorage_clearA
Clear all localStorage for current origin.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description transparently states it clears all localStorage for the current origin, but without annotations, it lacks details on whether the action is reversible, requires permissions, or affects other origins. Adequate but minimal.
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?
One concise sentence that is front-loaded with the action and scope. No unnecessary words.
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 an output schema exists (per context signals) and no parameters, the description provides sufficient context about the action and scope. May be slightly lacking in elaborating on the effect, but adequate.
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?
No parameters exist, and the schema coverage is 100%. The description does not need to add parameter info. Baseline score of 4 is appropriate for zero-parameter tools.
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 action ('clear') and resource ('all localStorage for current origin'), making it specific and distinguishable from siblings like localstorage_get, localstorage_set, and sessionstorage_clear.
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 provided on when to use this tool vs alternatives, such as when to clear all localStorage versus deleting specific keys. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
localstorage_getA
Get localStorage — all keys or one specific key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the full burden. It does not disclose what happens when a key is missing, error handling, or origin restrictions. The return format may be in the output schema, but the description lacks behavioral context.
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 with no redundant words. It is front-loaded and directly to the point.
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 read tool, the description covers the core functionality. However, it lacks details on side effects, permissions, or error states. The presence of an output schema partially compensates, but behavioral transparency is still incomplete.
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 single parameter 'key' is explained clearly: a null value retrieves all keys, while a string retrieves that specific key. This adds meaning beyond the schema, which only defines the type and default.
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 resource 'localStorage', and specifies two modes: all keys or one specific key. This distinguishes it from sibling tools like localstorage_clear and localstorage_set.
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 usage for reading localStorage but does not explicitly state when to use this tool over alternatives like sessionstorage_get. No conditions or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
localstorage_setC
Set a localStorage entry.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It fails to mention that setting a key overwrites existing values, modifies browser state, or any security implications. The description is insufficient for a write operation.
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 with no fluff. However, it could be slightly expanded without harming conciseness.
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 low complexity, the description is barely adequate. It does not explain that the operation is scoped to the current browser instance, nor does it address the presence of an output schema (likely returning success/failure). Sibling tools imply a need for more context.
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 has 0% description coverage, and the tool description adds no meaning to the parameters. It does not clarify constraints (e.g., value size, format) or that the value is stored as a string.
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 action ('Set') and the resource ('localStorage entry'), which is specific and distinguishes it from sibling tools like localstorage_get and localstorage_clear.
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 provided on when to use this tool versus alternatives such as sessionstorage_set or other storage mechanisms. There is no mention of prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_heap_snapshotA
Capture a V8 heap snapshot (.heapsnapshot) — drag into DevTools Memory panel.
Large pages produce 50-200MB snapshots. Saved to ~/.mcp-stealth/exports/.
Args:
filename: output name (default timestamped)
stable_ms: consider snapshot complete after no new chunks for this many ms
max_wait: hard cap on wait even if chunks keep arriving
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| stable_ms | No | ||
| max_wait | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses important behaviors such as typical file sizes (50-200MB), save directory, and parameter effects (stable_ms, max_wait). Without annotations, this provides good transparency, though could mention performance impact.
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?
Very concise and well-structured: one-liner purpose, then brief context, then parameter explanations. Front-loaded with key information. Every sentence adds value.
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's purpose of capturing a heap snapshot, the description covers the outcome (saved to directory), parameters, and behavior. Even with an output schema, the description is complete for agent understanding.
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?
With 0% schema description coverage, the description fully compensates by explaining each parameter: filename (default timestamped), stable_ms (stability condition), and max_wait (hard cap). This adds significant 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 clearly states the tool captures a V8 heap snapshot, specifying the file format and usage. It distinguishes from siblings as no other tool performs this specific function.
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?
Provides context about snapshot size and save location but lacks explicit guidance on when to use this tool over alternatives or when not to use it. The usage is implied but not clearly delineated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_click_xyC
Click at raw viewport coordinates.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| button | No | left |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only says 'Click' but doesn't explain if mouse moves first, whether events are fired, or if coordinates are absolute. The button parameter suggests multiple buttons but no details.
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?
Extremely concise single sentence with no waste. However, it could include critical details while remaining succinct.
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 3 parameters (2 required), no schema descriptions, and no annotations, the description is insufficient. It omits coordinate system, button options, and output (output schema exists but not mentioned).
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 0%, and the description adds no meaning to parameters. 'x', 'y', 'button' are not explained (e.g., coordinate origin, allowed button values). The default 'left' is in schema but not elaborated.
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 'Click at raw viewport coordinates', specifying the verb (click) and resource (viewport coordinates). It distinguishes from sibling tools like 'click', 'click_at_corner', 'click_at_image', etc., which use selectors or other targeting methods.
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 on when to use coordinate-based clicking vs alternative click tools (e.g., element-based). No context on prerequisites or scenarios where this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_driftA
⭐ Simulate idle mouse wandering to pass behavioral ML.
Random Bezier segments across the viewport — mimics a user thinking. Call BEFORE a critical interaction (form submit, button click) to establish 'human' behavior pattern before the deterministic action.
| Name | Required | Description | Default |
|---|---|---|---|
| duration_seconds | No | ||
| segments | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses use of random Bezier segments and mimics thinking. With no annotations, it partially covers behavior but omits details like whether it's read-only, side effects on mouse position, or if it blocks.
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?
Very concise with three sentences that front-load the core purpose. Every sentence adds value; no fluff.
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 no annotations and an output schema (not shown), the description is adequate for purpose and usage but fails to document parameters, leaving gaps in completeness.
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?
Description has 0% schema coverage and does not explain the two parameters (duration_seconds, segments). Names are somewhat self-explanatory, but missing explicit mapping from parameters to behavior.
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?
Clearly describes simulating idle mouse wandering to pass behavioral ML, using Bezier segments. Distinguishes itself from sibling tools like mouse_click_xy or humanize_click by focusing on idle movement rather than deliberate 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?
Explicitly states to call before critical interactions (form submit, button click) to establish human behavior. Provides clear context but does not compare to alternatives or mention when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_moveB
Move cursor to raw coordinates. humanize=True uses Bezier path.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| humanize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that humanize=True uses a Bezier path, implying instant movement otherwise, but does not specify coordinate system, out-of-bounds behavior, or whether events are triggered. Basic but incomplete.
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 short sentences, front-loaded with the core action. Every word earns its place; no redundancy. Ideal conciseness.
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 mouse movement tool, the description covers the basics but omits key details like coordinate system, instant vs. animated movement (beyond humanize), and any side effects. With no output schema visible, completeness is moderate but adequate for simple cases.
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%, so the description must compensate. It adds meaning by labeling x and y as 'raw coordinates' and explaining humanize's effect (Bezier path). While it does not detail ranges or units, it provides essential context for all three parameters.
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 action ('Move cursor') and the target ('raw coordinates'), with a specific option ('humanize=True uses Bezier path'). It distinguishes from sibling tools like mouse_click_xy by focusing solely on movement, but could be more explicit about coordinate system or behavior.
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 does not provide guidance on when to use this tool versus alternatives like mouse_drift, hover, or mouse_click_xy. There is no mention of context or exclusions, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_recordA
⭐ Record real mouse movements from the page for later replay.
Injects a listener that captures mousemove events during duration. Move
your mouse naturally in the Chrome window while this runs. The recorded
path can then be played back via mouse_replay() — highest-stealth
behavioral pattern (indistinguishable from human).
Returns: JSON array of {t, x, y} events.
| Name | Required | Description | Default |
|---|---|---|---|
| duration_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that it injects a listener, captures mousemove events, and returns a JSON array of {t,x,y}. It also claims 'highest-stealth behavioral pattern (indistinguishable from human),' which adds transparency about its behavioral impact. However, it doesn't mention if the listener is removed after recording or potential side effects on page performance.
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 concise, using only three sentences and a bullet for return format. It front-loads the key purpose with a star rating for emphasis. Every sentence adds useful information without redundancy.
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 low complexity (one optional parameter, simple return type), the description covers the main aspects: what it does, how to use it (move mouse naturally), and what it returns. It could mention whether the recording auto-stops or if the listener is cleaned up, but overall it is sufficient for an agent to understand and invoke the tool.
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 schema coverage is 0%, meaning no parameter description in the schema. The description mentions 'during duration,' which implies the duration_seconds parameter controls recording time. While the parameter name is self-explanatory, the description does not elaborate on format, range, or edge cases. This adds minimal value beyond the parameter name.
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 records real mouse movements for later replay, distinguishing it from siblings like mouse_replay, mouse_move, etc. It specifies the action (record), resource (mouse movements), and purpose (replay via mouse_replay).
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 explains when to use the tool (to record natural mouse movements) and mentions the alternative mouse_replay for playback. It doesn't explicitly state when not to use it, but the context is clear enough for an agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_replayA
⭐ Replay a recorded mouse path (from mouse_record).
Args:
path_json: JSON array of {t, x, y} from mouse_record
speed: 1.0 = original speed, 2.0 = 2x faster, 0.5 = slower
| Name | Required | Description | Default |
|---|---|---|---|
| path_json | Yes | ||
| speed | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It explains the speed parameter but does not specify how the replay executes (e.g., instantaneous or animated), whether clicks are involved, or any side effects. This is insufficient for a tool with no annotations.
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 front-loaded with a star and purpose. Two sentences plus parameter explanations. No wasted words, but could be slightly more structured (e.g., separating behavior from parameters).
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?
While the tool is simple, it lacks mention of return value or behavior when an invalid path is provided. The output schema exists but is not described. For a replay tool, this is adequate but could be more complete.
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 description adds significant meaning beyond the input schema: it explains that path_json is a JSON array of {t, x, y} from mouse_record, and clarifies speed values. Schema description coverage is 0%, so this compensation is excellent.
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 replays a recorded mouse path, with a specific verb 'Replay' and resource 'recorded mouse path'. It distinguishes itself from sibling tools like mouse_record (record) and mouse_move (single move).
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 mentions 'from mouse_record', implying it should be used after recording, but lacks explicit guidance on when not to use it or alternatives. It does not contrast with siblings like mouse_move for single movements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_getA
Retrieve captured network events.
Args:
limit: max entries returned (chronological: oldest first within the last `limit`, newest last)
filter_url: substring filter on URL
include_body: fetch response bodies via CDP Network.getResponseBody
for each matching entry. Bodies are truncated to max_body_bytes.
Requires network_start(capture_bodies=True) (default).
max_body_bytes: cap per-body length (default 10000)
full: if True, return entries with full headers + body fields
from network_index (use this once you've called network_start).
Default False = legacy flat event stream (backward compat).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| filter_url | No | ||
| include_body | No | ||
| max_body_bytes | No | ||
| full | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses ordering, filtering, body fetching with requirements, truncation, and mode behavior. However, it does not mention potential side effects like memory usage or rate limits, which are minor omissions.
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 front-loads the purpose with a single line, then lists parameters with clear explanations. It is efficient but could benefit from more structured formatting (e.g., separate sections) to improve scanability. All sentences are valuable.
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 presence of an output schema, the description covers all parameters, prerequisites, and behaviors. It omits error handling or edge cases, but overall it provides sufficient context for an AI agent to use the tool 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 coverage is 0%, and the description compensates by explaining each parameter in detail: chronological ordering for limit, substring filtering for filter_url, requirement for include_body, truncation cap, and full mode distinction. This adds essential 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 clearly states 'Retrieve captured network events' with a specific verb and resource, distinguishing it from sibling tools like network_start which initiates capture.
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 mentions prerequisites such as calling network_start for full mode and capture_bodies=True for include_body, but lacks explicit when-not-to-use or alternative tools beyond the implied dependency. This provides sufficient context for correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_startA
Begin capturing network requests + responses with full headers.
Args:
capture_bodies: if True (default), also indexes by request_id so
network_get(include_body=True) can fetch response bodies on
demand via CDP Network.getResponseBody.
| Name | Required | Description | Default |
|---|---|---|---|
| capture_bodies | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains that capture_bodies=True indexes by request_id enabling later body retrieval via network_get, and mentions CDP mechanism. However, it fails to mention how to stop capture, memory implications, or whether it auto-stops, which would be useful for an agent.
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 for purpose followed by a clear Args section. No wasted words; every sentence adds value. It is appropriately sized and front-loaded with the core action.
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 output schema exists (not shown), return values need not be described. However, the description does not indicate what the tool returns after starting capture (e.g., a session ID or success status). Also missing is guidance on how to later stop capture. Still, it provides enough context for basic use.
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 schema provides only name, type, and default (0% coverage). The description adds critical context: capture_bodies=True enables indexing and allows later network_get with include_body=True via CDP. This fully compensates for the schema's lack of descriptions.
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 'Begin capturing network requests + responses with full headers,' specifying a concrete action on a specific resource. It distinguishes from siblings like network_get (which retrieves captured data) and export_har (which exports), making the purpose unambiguous.
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 usage before network_get but does not explicitly state when to use this tool versus alternatives like console_start or coverage_start. No exclusions or conditions for use are provided, so guidance is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
paste_textA
⭐ Set field value by simulating a real paste event sequence.
Use when fill / type_text don't register on modern frameworks (SolidJS
runes, Svelte 5 runes, some Qwik forms) that ONLY listen for paste
events or beforeinput with inputType:'insertFromPaste'.
Sequence dispatched (mimics a real Cmd-V):
1. focus
2. ClipboardEvent('paste', {clipboardData: 'text/plain': text})
3. InputEvent('beforeinput', {inputType: 'insertFromPaste', data: text})
4. native value setter (HTMLInputElement / HTMLTextAreaElement)
5. InputEvent('input', {inputType: 'insertFromPaste', data: text})
6. Event('change')
Args:
text: value to paste
ref: data-mcp-ref from browser_snapshot
selector: CSS selector
submit: if True, simulate Enter keypress after paste
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| ref | No | ||
| selector | No | ||
| submit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It details the exact 6-step event sequence dispatched, including event types, clipboardData, inputType, and native value setter. This is highly transparent and exceeds expectations.
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 well-structured with a star emoji, a clear one-line summary, a block explaining usage, a numbered event sequence, and a compact parameter list. Every sentence adds value, no fluff.
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 no annotations and moderate complexity (4 parameters, no nested objects, has output schema), the description covers purpose, usage, event sequence, and parameters. It lacks potential error conditions or limitations (e.g., only works on input/textarea elements), but overall it is sufficient for an agent to use 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 0%, so description must compensate. The Args list provides brief descriptions: 'text: value to paste', 'ref: data-mcp-ref from browser_snapshot', 'selector: CSS selector', 'submit: if True, simulate Enter keypress after paste'. While helpful, it lacks depth (e.g., no format constraints, precedence between ref and selector). Baseline is 3, and it meets minimally.
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 it sets a field value by simulating a real paste event sequence, and explicitly distinguishes itself from fill/type_text by specifying when to use it for frameworks that only listen for paste events or beforeinput with inputType:'insertFromPaste'. This provides a specific verb and resource with clear differentiation from 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?
Explicitly states 'Use when fill / type_text don't register on modern frameworks (SolidJS runes, Svelte 5 runes, some Qwik forms) that ONLY listen for paste events or beforeinput with inputType:'insertFromPaste'.' This gives clear context and alternatives, meeting the highest standard.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_metricsA
Return Chrome's runtime Performance metrics (Nodes, JSHeap, FPS, etc).
Wraps CDP Performance.getMetrics — use it for snapshots during a test run (before/after interaction) to detect regressions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but the description discloses it is a wrapper for CDP Performance.getMetrics and intended for snapshots, implying non-destructive read operation. Adds behavioral context beyond the name and schema.
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 redundancy. First sentence states purpose; second adds context and usage hint. Every word 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?
Fully adequate given zero parameters and presence of output schema. Description covers purpose, context, and usage without needing to detail return structure.
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?
No parameters exist, so baseline is 4 per rules. The description does not need to add parameter info.
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?
Clearly states 'Return Chrome's runtime Performance metrics' with specific examples (Nodes, JSHeap, FPS). The resource and verb are explicit. Distinguishes from siblings by mentioning CDP Performance.getMetrics and snapshot usage, contrasting with timeline/trace 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?
Explicitly recommends using it for snapshots during test runs to detect regressions. While it doesn't name alternatives, the context of before/after interaction is clear. No explicit when-not, but sufficient for a simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_timelineA
Read Navigation/Resource/Paint timing via Performance API.
Returns TTFB, DOMContentLoaded, load, LCP candidate, FCP, resource count, and slowest 5 resources. Fast (no trace capture) — best for smoke tests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool reads data (non-destructive) and is fast with no trace capture. It does not mention potential failure cases, but the behavioral traits are adequately transparent for a read operation.
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 at two sentences. It front-loads the core action ('Read...') and each sentence adds value: purpose, data source, returned metrics, and performance characteristic. No superfluous text.
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 no parameters and an output schema, the description sufficiently covers what the tool returns and its use case. It could mention scenario limitations (e.g., page not loaded), but for a simple read tool it is complete enough.
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?
There are zero parameters, so baseline 4 applies. The description does not need to add parameter details, and the schema coverage is 100%.
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 it reads timing data via the Performance API and lists specific metrics (TTFB, DOMContentLoaded, etc.). It distinguishes itself from siblings like performance_trace_start/stop by noting 'no trace capture' and positioning itself for smoke tests.
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 usage context by stating it is 'best for smoke tests' and implying it is fast. While it doesn't explicitly list when not to use or alternatives, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_trace_startA
Start Chrome DevTools performance trace on the active tab.
Use stop() to save the .json file. Only one trace can be active at a time.
Args:
categories: comma-separated trace categories. Default covers DevTools'
Performance panel view:
"devtools.timeline,v8.execute,disabled-by-default-devtools.timeline,
disabled-by-default-devtools.timeline.frame,loading,latencyInfo,
blink.user_timing"
screenshots: include screenshot frames in trace (bigger file, lets you
scrub through frames in DevTools Performance panel)
| Name | Required | Description | Default |
|---|---|---|---|
| categories | No | ||
| screenshots | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool starts a trace on the active tab and that only one trace can be active. However, it does not mention prerequisites (e.g., whether DevTools must be attached), potential errors if already running, performance overhead, or side effects. This leaves gaps for safe and correct invocation.
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 efficient: a short intro, a usage note, and a clear args list. The default categories string is lengthy but necessary. No wasted sentences.
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 that an output schema exists (not shown), the description correctly omits return values. It covers the tool's action, usage pattern (start/stop), and parameters. Minor gaps: no prerequisites or error handling details, but it is mostly complete for this tool's complexity.
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 0%, so the description must compensate. It explains the categories parameter with a default value and lists the trace categories, and describes the screenshots parameter as a boolean for including frames. This adds meaningful context beyond the schema's type and default, though it could clarify that categories is a comma-separated string.
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 clear verb+resource: 'Start Chrome DevTools performance trace on the active tab.' It distinguishes itself from sibling tools like performance_trace_stop (paired stop function) and performance_metrics (likely a different tool for metrics). The purpose is unambiguous.
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 explicitly states to use stop() to save the trace and notes that only one trace can be active at a time, providing clear usage context. However, it does not explicitly guide when to use this tool versus alternatives like performance_metrics or performance_timeline, though the start/stop pairing implies it for detailed traces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_trace_stopA
Stop the active performance trace and save to ~/.mcp-stealth/exports/.
Output is a JSON array compatible with chrome://tracing and
DevTools Performance panel (drag-drop to import).
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains the output format and save location. It implies a non-destructive stop. No annotations provided, but the description itself is fairly clear about what happens.
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 concise sentences, front-loaded with the core action. No unnecessary words.
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 stop action with one optional parameter and an output schema, the description covers the main behavior. However, it does not explain the filename parameter or potential errors.
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 single optional parameter 'filename' is not explained at all in the description. Schema coverage is 0%, and the description adds no meaning beyond 'filename'.
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 action 'Stop the active performance trace' and specifies the destination 'save to ~/.mcp-stealth/exports/', which distinguishes it from sibling tool performance_trace_start.
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 on when to use this tool or prerequisites (e.g., a trace must be started first). No mention of alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyA
Press a single key (Enter, Escape, Tab, ArrowDown, a, etc).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description accurately describes the action as pressing a single key. No annotations are present, but the description provides enough behavioral context for a simple keyboard operation without misleading side effects.
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, well-structured sentence that immediately conveys the tool's purpose without unnecessary words.
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 tool with one parameter, the description sufficiently covers what the tool does. The output schema exists, so return value explanation is not required per rules.
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 provides only a 'key' string with no description. The description compensates with examples of valid keys (Enter, Escape, Tab, ArrowDown, a, etc.), giving meaningful guidance 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 clearly states 'Press a single key' with concrete examples like Enter, Escape, Tab, ArrowDown, a, etc. It distinguishes itself from siblings like type_text and click through the focus on individual key presses.
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?
While not explicitly stating when not to use, the description implies it is for single key presses, distinguishing it from multi-key or mouse actions. The examples help the agent understand appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_selector_allA
Return count + attrs of all elements matching CSS selector.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It states the tool returns count and attrs but does not disclose whether it waits for elements, handles dynamic content, or any performance implications. It is adequate but not thorough.
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 sentence with no filler. Every word contributes to the meaning. It is front-loaded with the main action and output.
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's simplicity (CSS selector query) and the existence of an output schema, the description is nearly complete. It could mention error conditions or edge cases (e.g., no match) but is sufficient for typical use.
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 0%, yet the description does not explain the parameters ('selector', 'limit') beyond their implied use. The limit parameter has a default but no clarification of its effect. Description adds minimal value over 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 ('Return') and noun ('elements matching CSS selector'), and specifies the output includes count and attrs. This clearly distinguishes it from siblings like get_attribute or extract_structured.
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 does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or limitations. The purpose is clear but lacks contextual usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reloadC
Reload the active tab.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose behavioral traits such as cache clearing, page load waiting, or scroll position preservation. The description carries full burden but fails to provide transparency.
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 very short and front-loaded, but its conciseness comes at the cost of missing necessary context about behavior and usage.
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 simplicity of the tool, the description is minimal and does not cover return values or post-reload behavior. The output schema exists but is not referenced.
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?
No parameters, and schema coverage is 100% (empty). The description does not need to add parameter info. Baseline score of 4 applies.
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 action: reloading the active tab. It distinguishes from sibling tools like navigate and go_back. However, it could be slightly more specific about cache behavior.
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 on when to use this tool versus alternatives like navigate or go_back. The description lacks any usage context or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_pdfC
Save current page as PDF via CDP Page.printToPDF.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| landscape | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must bear the full burden of behavioral disclosure. It only states the action and method, omitting key details: what happens to the PDF (downloaded? returned?), whether it overwrites, or if it requires permissions. This is insufficient for safe operation.
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?
One sentence delivers the core purpose and technical detail with zero waste. Every word is necessary and contributes to understanding.
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?
Despite having an output schema (which could explain return values), the description lacks context about preconditions, default behavior, and side effects. It is too brief to fully equip an AI agent.
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 provides no explanation of the parameters. 'filename' and 'landscape' are undefined (e.g., what does null filename mean? what is the effect of landscape?). The agent must infer from type and default alone, which is inadequate.
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 action: 'Save current page as PDF' and references the specific CDP method 'Page.printToPDF', which distinguishes it from all sibling tools as the only PDF-saving 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?
No guidance on when to use this tool vs alternatives. It does not mention prerequisites (e.g., a page must be loaded) or scenarios where it's appropriate, leaving the agent without context for invocation decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_pageA
Clean readable text extraction — drops nav, footer, scripts, styles.
Smart-truncates at paragraph boundary (not mid-word).
| Name | Required | Description | Default |
|---|---|---|---|
| only_main_content | No | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors (dropping clutter, paragraph-boundary truncation) but lacks details on page readiness, scrolling, or side effects.
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 concise sentences that front-load the purpose and add essential detail without waste, each line earning 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?
An output schema exists, so return values need not be explained. The description covers core functionality but omits operational context like whether it waits for page load or works on current DOM.
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 0%, so the description must compensate; it only indirectly explains max_chars (truncation) and only_main_content (dropping elements), leaving parameter semantics incomplete.
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 'Clean readable text extraction' and specifies what it drops (nav, footer, scripts, styles), distinguishing it from related tools like get_text or extract_structured.
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 use for clean text extraction with smart truncation, but does not explicitly list when to use versus alternatives like get_text or extract_structured.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotA
Screenshot active tab. Saves to ~/.mcp-stealth/screenshots/.
Args:
filename: output name (default timestamped)
full_page: stitch entire page height (slower, larger file)
return_base64: append base64 body to response (useful for vision models)
format: "auto" (from extension, default), "png" (lossless), or "jpeg" (smaller)
quality: JPEG quality 1-100 (default 80) — ignored for PNG
region: clip to {x, y, width, height} — uses CDP Page.captureScreenshot clip
(skips full-viewport paint, 2-5× faster for small crops)
max_dimension: if either width or height exceeds this (px), the image is
resized proportionally via OpenCV INTER_AREA. Default 1920 keeps output
under the 2000 px per-side limit that LLM image tools (Claude/GPT) enforce
— prevents "image exceeds dimension limit" failures on long full_page
captures or hi-DPR device emulation. Pass 0 to disable resizing.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No | ||
| full_page | No | ||
| return_base64 | No | ||
| format | No | auto | |
| quality | No | ||
| region | No | ||
| max_dimension | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains file saving location, parameter behaviors (e.g., full_page slower, region faster, max_dimension prevents LLM errors). Missing edge cases like failure handling (e.g., no active tab) but still strong.
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 well-structured with a summary followed by parameter explanations. It is slightly lengthy but every sentence provides useful information. Could be more concise by removing redundant phrasing.
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 7 parameters and presence of an output schema, the description covers parameter behavior well but misses some context: no mention of prerequisites (e.g., active browser tab), potential failures, or permission requirements. Adequate but not fully comprehensive.
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%, but the description thoroughly explains each parameter with practical details (e.g., default timestamped, JPEG quality impact, OpenCV resizing for max_dimension). Adds significant value beyond the raw 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 clearly states the tool's purpose ('Screenshot active tab') and details parameters. However, it does not distinguish from siblings like 'browser_snapshot' or 'save_pdf', which could cause confusion.
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 on when to use this tool vs alternatives. It is implied for capturing screenshots, but does not specify prerequisites, limitations, or when to choose other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollA
Scroll page via REAL mouseWheel CDP events (not JS scrollBy).
humanize=True (default): variable chunks 50-150px + micro-pauses + 20%
reading-pause chance — bypasses DataDome/PerimeterX behavioral detection.
humanize=False: instant scroll (faster, less stealthy).
Directions: up | down | top | bottom
| Name | Required | Description | Default |
|---|---|---|---|
| direction | No | down | |
| amount | No | ||
| humanize | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It details humanization behavior (varied scroll chunks, micro-pauses, reading pause chance) and the underlying mechanism (CDP events). Missing potential traits like overflow handling or smoothness, but sufficiently transparent.
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 brief, well-structured with bullet points, and front-loaded with the key differentiator (CDP events). Every sentence adds value without repetition.
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?
While the description covers the tool's purpose and stealth feature, it does not detail all parameters (amount missing) or return value (output schema exists but not explained). For a tool with 3 parameters, more completeness is warranted.
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 0%, so description must compensate. It mentions direction and humanize booleans but omits the 'amount' parameter entirely. This partially explains parameters but leaves a gap for the amount field.
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 scrolls a page using real mouse wheel events, distinguishing it from JS-based scrolling. It specifies the resource (page) and verb (scroll), and implicitly differentiates from sibling 'scroll_to' by emphasizing CDP events for stealth.
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 context on when to use humanize (for bypassing detection) vs non-humanized (for speed), and lists directions. However, it lacks explicit guidance on when to avoid this tool or compare with alternatives like 'scroll_to'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_toA
Smooth-scroll a specific element into viewport.
Args:
ref: snapshot ref (e.g. "e7") from browser_snapshot
selector: CSS selector alternative
block: "start" | "center" | "end" | "nearest" — vertical alignment
smooth: CSS smooth scroll (default) vs instant jump
Works even if element is far off-screen (pages of scroll away).
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No | ||
| block | No | center | |
| smooth | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the smooth-scroll behavior, the smooth parameter controlling smooth vs instant, and the capability to scroll large distances. However, it does not detail behavior when ref and selector conflict, or error handling if element not found.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: a one-sentence purpose, a bullet-argument list, and a notable capability note. Every sentence adds value with no redundancy or fluff. It is front-loaded with the core 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?
For a tool with 4 parameters, 0 required, and an output schema (assumed complete), the description covers identification, alignment, smoothness, and a key capability. It misses conflict resolution for ref/selector and error scenarios, but is otherwise adequate.
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 0%, so the description must fully explain parameters. It does so: ref is a snapshot ref from browser_snapshot, selector is a CSS alternative, block lists valid alignment options, and smooth explains the smooth vs instant behavior. This adds critical meaning beyond the schema's type-only definitions.
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: 'Smooth-scroll a specific element into viewport.' It specifies the action (scroll), target (element), and adds a distinguishing capability: works even if element is far off-screen. This sets it apart from sibling tools like 'scroll' which are more generic.
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 (when an element needs to be scrolled into view, especially if far off-screen), but does not explicitly state when not to use or mention alternatives like 'scroll' or 'click'. It lacks guidance on preferring this over other interaction tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_optionC
Select by value or label.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No | ||
| value | No | ||
| label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description lacks behavioral details such as what happens if the option is not found, if both value and label are specified, or if the dropdown is not present.
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?
Extremely short but under-specified; the description is too terse to be helpful, failing to provide necessary context.
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 four parameters and no annotations, the description is insufficient. It lacks details about parameter relationships, behavior, and output (though output schema exists but is not described).
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 0%, and the description does not explain the 'ref' or 'selector' parameters, nor does it provide any meaning beyond 'by value or label'.
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 it selects an option from a dropdown by value or label, but does not differentiate from sibling tools like click or fill that could also interact with options.
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 on when to use this tool versus alternatives (e.g., click, fill) or how to choose between value and label parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusB
Diagnostic info about the server and browser.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not disclose behavioral traits such as side effects, network requests, or data freshness. The agent gains minimal insight into the tool's behavior beyond the basic purpose.
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, but it lacks structure such as a summary upfront or bullet points. While efficient, it could be more informative without being verbose.
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 zero parameters and existence of an output schema, the description is minimally adequate. However, it does not hint at the specific fields or format of the diagnostic info, which might help the agent interpret results. The output schema presumably covers return values, so no major gap.
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 tool has zero parameters, so the baseline is 4. The description adds no parameter information, which is acceptable since there are no parameters to describe. Schema coverage is 100% by default.
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 returns 'Diagnostic info about the server and browser,' which is a specific verb+resource combination. However, it does not differentiate from sibling tools like describe_page or get_page_errors, which also return diagnostic-like info.
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 provided on when to use this tool versus alternatives. The description does not specify prerequisites or contexts where this tool is appropriate, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessionstorage_clearA
Clear all sessionStorage for current origin (parity with localstorage_clear).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It indicates a destructive action ('clear') but does not warn about data loss, irreversibility, or potential impact on other tabs/windows of the same origin. The description lacks transparency beyond the basic operation.
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 sentence of 10 words that efficiently communicates the action, scope, and sibling relationship. No unnecessary words or repetition.
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 'clear' operation with zero parameters and an output schema (implied), the description provides sufficient context: what it does (clear sessionStorage), scope (current origin), and relation to sibling. It does not explain return values but that is likely covered by the output schema. A more complete description might mention that this affects the current session only, but it's adequate.
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 has zero parameters, and schema description coverage is 100% (no params to describe). The description does not explicitly state 'takes no arguments', but baseline for 0-param tools is 4. It adds no parameter info, but none is needed.
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 'Clear all sessionStorage for current origin', providing a specific verb and resource. It distinguishes from the sibling tool 'localstorage_clear' by mentioning parity, making its purpose and scope unambiguous.
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 includes 'parity with localstorage_clear', which implicitly guides the agent to use this tool when sessionStorage needs clearing and to consider the sibling for localStorage. While it does not explicitly state when not to use, it implies the complementary relationship.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessionstorage_getB
Get sessionStorage — all keys or one.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only states the action but does not disclose whether the operation is read-only, requires specific permissions, or details behavior when key is missing or invalid.
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 extremely concise with a single sentence that front-loads the purpose. Every word is necessary, and there is no wasted text.
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 presence of an output schema (not shown), the description may be sufficient for a simple getter. However, it lacks context on error handling and edge cases, and the schema has no parameter descriptions, so the description only partially compensates.
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 description adds meaning to the 'key' parameter by explaining that omitting it retrieves all keys (null default) and a string retrieves a single key. However, it does not elaborate on the format or what the return values look like.
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 gets sessionStorage, with the distinction of retrieving all keys or one key. It effectively conveys the core action and resource, and the name differentiates it from sibling tools like localstorage_get.
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 provided on when to use this tool versus alternatives (e.g., localstorage_get). The description does not mention when-not to use it or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessionstorage_setC
Set a sessionStorage entry.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| value | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose any behavioral traits beyond the bare action. With no annotations present, it fails to mention side effects (e.g., overwriting existing keys), dependency on an open page, or any state changes. A description should compensate for missing annotations.
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 concise (8 words) and front-loaded, but at the cost of valuable information. For a simple tool, it could still include minimal semantics without losing conciseness.
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 presence of an output schema (not shown) and sibling storage tools, the description should clarify that sessionStorage is browser-specific and that setting requires an active page. It also omits any return value explanation.
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 has 0% description coverage, and the tool description adds no meaning to the 'key' and 'value' parameters. It does not specify expected formats, constraints, or examples, leaving the agent without guidance on valid inputs.
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 action ('Set') and resource ('sessionStorage entry'), matching the tool's name. However, it does not differentiate it from similar sibling tools like localstorage_set, which could cause confusion for an AI agent.
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 offers no guidance on when to use this tool versus alternatives such as localstorage_set or sessionstorage_get. No usage context or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_warmupA
Warm up session by navigating naturally before hitting target URL. Anti-bot systems score trust by session history — direct deep-URL hits look suspicious.
Patterns:
- homepage_first: goto origin → wait → goto target
- referer_chain: goto origin → find link to target → click
- natural_browse: homepage → scroll → random click → scroll → target
| Name | Required | Description | Default |
|---|---|---|---|
| target_url | Yes | ||
| pattern | No | homepage_first | |
| dwell_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description bears full burden. It explains the natural navigation patterns and their purpose, but does not disclose potential side effects (e.g., session state changes, timeouts, or error handling). The description adds some behavioral context but is not comprehensive.
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?
Description is well-structured with a clear first sentence followed by a bulleted list of patterns. It is concise yet informative, though the pattern list could reference the enum values in the schema to avoid redundancy.
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 presence of an output schema, description does not need to cover return values. However, it omits prerequisites (e.g., existing browser session) and does not explain how dwell_seconds affects behavior. The description covers the 'why' and 'how' patterns but misses some operational details.
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%, but description provides no parameter explanations. Though the schema defines parameters with enums and defaults, the description should add guidance like 'dwell_seconds controls wait time between steps' or clarify pattern choices. This omission limits agent understanding.
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?
Description clearly states the tool's purpose: warming up a session by navigating naturally before hitting a target URL to avoid anti-bot detection. This verb+resource description differentiates it from direct navigation tools like '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?
Description provides context on when to use this tool (anti-bot systems penalize direct deep-URL hits) and lists three patterns as usage options. It lacks explicit 'when not to use' or alternatives, but the clear context suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_viewport_sizeC
Resize the browser window.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | ||
| height | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states basic action. It does not disclose side effects (e.g., reflow, tab-specific behavior) or requirements.
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?
One sentence is concise but significantly under-specified, lacking crucial information about parameters and behavior.
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?
Despite having an output schema (not shown), the description omits return values, edge cases, and behavioral context, making it inadequate for a tool with two required 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 0% and the description does not mention any parameters, failing to add meaning beyond the schema's type and required fields.
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 'Resize the browser window' clearly states the action (resize) and the target (browser window), distinguishing it from sibling tool 'get_viewport_size' which retrieves size.
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 on when to use this tool versus alternatives, no prerequisites mentioned (e.g., browser must be open), and no exclusion criteria provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smart_fillA
⭐ Fill form fields by label text (fuzzy match). LLM-friendly alt to fill_form which requires DOM refs.
Args:
fields: {"Label": "value", ...} — keys match form field labels
(case-insensitive, fuzzy: exact > prefix > substring > token).
Labels resolved from <label>, aria-label, placeholder, name.
submit_label: optional button text to click after filling
(e.g., "Create", "Sign in"). Fuzzy-matched on action button text.
Behavior:
- Each field: locates input → focus → clear → type value
- Returns per-field result + list of available labels if missing
- On miss: error includes candidates so the LLM can retry with
the correct label name.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | ||
| submit_label | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description fully covers behavior: fuzzy match algorithm (exact > prefix > substring > token), per-field steps, error returns with candidates, available labels on miss.
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?
Efficiently structured with Args and Behavior sections. Every sentence adds value, no redundancy.
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?
Complete for a complex tool: explains algorithm, error handling, return values (via output schema). No gaps given the task.
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 0%, but description thoroughly explains fields parameter (keys match labels, case-insensitive, resolution sources) and submit_label. Adds meaning beyond 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?
Clearly states it fills form fields by label text with fuzzy matching, explicitly distinguishes from fill_form which requires DOM refs. Verb-resource pair is specific.
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?
Describes it as an LLM-friendly alternative to fill_form, implying when to use. Lacks explicit when-not or exclusions, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solve_captchaA
Solve a CAPTCHA via CapSolver HTTP API.
kind: turnstile | recaptcha_v2 | recaptcha_v3 | hcaptcha
Needs CAPSOLVER_KEY env var (or pass api_key). Returns solved token.
If inject_selector given, also injects token into that form field
(e.g. input[name='cf-turnstile-response']).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| website_url | Yes | ||
| website_key | Yes | ||
| api_key | No | ||
| inject_selector | No | ||
| action | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool calls an external API, returns a solved token, and can inject the token into a form field via inject_selector. It does not mention rate limits or failure modes, but provides sufficient behavioral context.
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 very concise at two sentences plus a bullet list. It front-loads the primary purpose and uses a clear structure for enumerating kinds. Every sentence adds value without redundancy.
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 6 parameters and an output schema, the description is somewhat complete but lacks explanations for some parameters. It covers the core functionality and injection behavior, but the parameters website_url and website_key are undocumented. The output schema exists, so return value explanation is not needed.
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%, so the description must compensate. It explains the 'kind' enum and mentions api_key and inject_selector, but does not describe the required parameters website_url and website_key, nor the optional action parameter. This leaves significant 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 it solves a CAPTCHA via CapSolver HTTP API and lists the supported CAPTCHA kinds (turnstile, recaptcha_v2, recaptcha_v3, hcaptcha). It differentiates from siblings like solve_recaptcha_ai by specifying the CapSolver API and detailing injection behavior.
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 explicitly mentions the prerequisite: needing CAPSOLVER_KEY env var or passing api_key. It implies usage for solving CAPTCHAs, but does not explicitly state when not to use or compare to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solve_recaptcha_aiA
Solve reCAPTCHA v2 image challenge using a vision-enabled LLM.
Supports Anthropic (Claude) OR any OpenAI-compatible API (gpt-4o, gpt-5.x,
Groq llama3.2-vision, local Ollama llava, Together.ai, Fireworks, etc).
⚠️ MODEL MUST BE MULTIMODAL (vision-capable) — text-only models fail silently.
✅ Supported: gpt-4o, gpt-5.x, claude-opus-4-7, llava, llama-3.2-90b-vision-preview
❌ NOT: gpt-3.5-turbo, llama3 (non-vision), claude-3-haiku
Env vars (OpenAI SDK standard — priority checked if args omitted):
OPENAI_API_KEY + OPENAI_BASE_URL + OPENAI_MODEL → OpenAI-compat
ANTHROPIC_API_KEY + ANTHROPIC_MODEL → Claude
AI_VISION_* (legacy, DEPRECATED — removed v0.2.0) → backward-compat
Explicit override:
provider="anthropic" | "openai"
base_url="https://your-provider.example.com/v1"
api_key="..."
model="gpt-4o" | "claude-opus-4-7" | ...
Cost: varies by provider (~$0.005-0.03 per solve).
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | No | ||
| max_rounds | No | ||
| wait_between | No | ||
| provider | No | ||
| base_url | No | ||
| model | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries full burden. It discloses that the model must be multimodal, that text-only models fail silently, and gives cost estimates. However, it lacks details on error handling, rate limiting, or what happens on API failure. While informative, it is not fully exhaustive.
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 well-structured and concise. It opens with the main purpose, then uses bullet points for supported APIs, model requirements, environment variables, explicit overrides, and cost. Every sentence adds value, and information 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?
Given the presence of an output schema, the description appropriately omits return value details. It provides necessary input configuration and constraints. However, it lacks insights into retry behavior, error scenarios, and the implications of the 'max_rounds' and 'wait_between' parameters, which are important for an external API tool.
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 schema has 6 parameters with 0% description coverage. The description covers the explicit override parameters (provider, base_url, api_key, model) and mentions environment variables, but does not explain 'max_rounds' or 'wait_between' which likely control retry behavior. Partial compensation but incomplete.
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: solving reCAPTCHA v2 image challenges using a vision-enabled LLM. It specifies the resource (reCAPTCHA v2) and method (vision LLM), distinguishing it from sibling tools like 'solve_captcha' which may handle other captcha types.
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 clear guidance on when to use the tool (for reCAPTCHA v2) and warns that text-only models fail silently. It lists supported and unsupported models, and explains configuration via environment variables or explicit parameters. However, it does not explicitly compare to alternative captcha-solving tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spawn_browserA
Create a new named browser instance running in parallel with main. Each instance has its own profile, cookies, tabs, logs. Use for multi-account scraping or isolated sessions.
Args:
instance_id: unique name (e.g., "scraper_1", "acct_alice")
idle_timeout_seconds: auto-close after idle (0 = never, default 600s)
profile_dir: override profile path (default: ~/.mcp-stealth/profiles/<id>/)
other args: same as browser_launch
Use switch_instance(id) to route subsequent tool calls to this instance.
| Name | Required | Description | Default |
|---|---|---|---|
| instance_id | Yes | ||
| url | No | about:blank | |
| headless | No | ||
| proxy | No | ||
| user_agent | No | ||
| window_width | No | ||
| window_height | No | ||
| persistent | No | ||
| lang | No | en-US | |
| extra_args | No | ||
| storage_state_path | No | ||
| idle_timeout_seconds | No | ||
| profile_dir | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description carries full burden. It discloses that each instance has own profile, cookies, tabs, logs, and mentions idle timeout auto-close. However, it does not explain behavior if instance_id already exists, resource implications, or error handling. Adds some value beyond schema.
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?
Description is extremely concise: two paragraphs, bullet list for parameter details. Each sentence adds value. Front-loaded with purpose and use case. No wasted words.
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 13 parameters, many with defaults, and output schema exists, description covers key aspects: creation, lifecycle, isolation, routing via switch_instance. Minor gaps: does not mention headless default or behavior on duplicate instance_id, but overall complete.
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 0%, so description must add meaning. It explains three key parameters (instance_id, idle_timeout_seconds, profile_dir) with examples and defaults. For remaining parameters, it defers to 'same as browser_launch', which is helpful but not fully independent. Moderate compensation.
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?
Description clearly states verb 'create' and resource 'new named browser instance', explicitly distinguishes from main browser. It provides use case: multi-account scraping or isolated sessions, which differentiates from sibling tools like browser_launch.
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?
Provides explicit context: 'Use for multi-account scraping or isolated sessions.' Also guides subsequent usage with 'Use switch_instance(id) to route subsequent tool calls to this instance.' Does not explicitly state when not to use or compare directly to alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_diffA
⭐ Compare current state vs an earlier storage_snapshot. Returns JSON showing what changed (added/removed/modified per area + url change).
Pattern:
storage_snapshot("before")
<do an action e.g. click login>
storage_diff("before") → returns what the action actually changed
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description covers the comparison behavior and output format. Does not mention side effects, but as a read-only comparison, this is acceptable.
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 short paragraphs; first explains purpose, second gives a clear usage pattern. Front-loaded and efficient.
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?
Tool has an output schema (not shown), so return format is covered. Missing parameter explanation, but overall sufficient for the tool's simplicity and context.
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?
Only one parameter 'name' with schema coverage 0%; description does not explain what the 'name' parameter refers to. The pattern uses 'before' but doesn't clarify parameter purpose.
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?
Description clearly states the tool compares current state vs an earlier storage_snapshot and returns JSON of changes. Uses specific verb 'compare' and resource 'storage_snapshot'.
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?
Provides a usage pattern showing when to use (after snapshot and action), but doesn't explicitly state when not to use or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_snapshotA
⭐ Capture cookies + localStorage + sessionStorage + URL into named slot for later diffing. Use BEFORE an action you want to inspect.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool captures specific storage types and URL, but does not mention potential side effects (e.g., overwriting existing snapshots) or prerequisites like requiring an active page. Since no annotations are provided, the description carries the full burden and is adequate but not thorough.
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 concisely convey the action, rationale, and usage timing. The critical information is front-loaded in the first sentence. No wasted words.
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 pairs well with 'storage_diff' as suggested. It does not address naming conflicts, but given the simplicity and accessible sibling tools, the description is nearly complete for an agent to use 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?
The only parameter 'name' has no description in the schema (0% coverage). The description indirectly explains its purpose ('named slot'), but does not clarify allowed values, default behavior, or uniqueness constraints. The parameter adds minimal 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 clearly states 'Capture cookies + localStorage + sessionStorage + URL into named slot for later diffing.' The verb 'Capture' and resource 'storage state + URL' are explicit, and the sibling tool 'storage_diff' indicates a distinct purpose for snapshotting vs. diffing.
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 instruction 'Use BEFORE an action you want to inspect' provides explicit timing advice. While it doesn't mention when not to use, it effectively distinguishes this from the sibling 'storage_diff' (use after action).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_state_loadA
⭐ Load cookies + localStorage from a saved JSON file.
Call BEFORE navigating to protected site so session is ready.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Describes loading state into browser, implying mutation, but doesn't detail overwrite behavior, error handling, or prerequisite of prior save.
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 concise sentences, front-loaded with an important indicator ('⭐'). No extraneous content.
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 simple tool with one parameter and an output schema, the description covers purpose and usage timing adequately. Minor gap in parameter details.
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 does not explain the file_path parameter (format, expected content). The parameter name is self-evident, but additional context would aid invocation.
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 explicitly states it loads cookies and localStorage from a JSON file, using specific verbs and resource. It distinguishes from sibling storage_state_save.
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?
Provides clear timing guidance: 'Call BEFORE navigating to protected site so session is ready.' No explicit when-not or alternatives, but context is sufficient for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_state_saveC
⭐ Save cookies + localStorage of current origin to JSON.
DIFFERENTIATOR: Per research, session-reuse is THE most reliable way to
bypass Cloudflare Turnstile — it never triggers if session valid.
Login manually once → save state → reuse forever until expiry.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It does not explain what happens when filename is null, whether files are overwritten, or where the JSON file is saved. The focus on the bypass narrative leaves important behavioral details 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 short and front-loaded with the core purpose. The DIFFERENTIATOR section adds length but provides valuable guidance. Overall, it is concise with no wasted words.
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 an output schema present, the description need not explain return values. However, it fails to clarify the behavior of the single parameter (filename) or the file saving mechanism. For a simple tool, this is incomplete.
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%, meaning the schema provides no human-readable explanation for the filename parameter. The description does not compensate; it does not mention the filename at all, leaving the agent unsure of its purpose or default behavior.
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 first sentence clearly states the tool saves cookies and localStorage to JSON (specific verb and resource). However, the description is somewhat distracted by the Cloudflare bypass narrative, and does not explicitly differentiate from sibling tools like storage_snapshot.
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 DIFFERENTIATOR section provides a strong use case (bypassing Cloudflare Turnstile) but does not give explicit guidance on when not to use this tool, nor does it mention alternative tools (e.g., cookie_export, localstorage_get) that might be used for partial state saving.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
switch_instanceA
⭐ Make instance_id the active one for subsequent tool calls.
The previous current instance continues running in the background,
cookies/tabs preserved. Swap back anytime.
| Name | Required | Description | Default |
|---|---|---|---|
| instance_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description discloses that the previous instance continues running and data is preserved, which is essential behavioral context. Missing details on auth or side effects, but adequate for the tool's simplicity.
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, front-loaded with a star emoji, no wasted words. Every sentence contributes meaningful information.
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?
Simple tool with one parameter; description covers switching behavior and persistence. Has an output schema (not shown) but not needed. Complete for agent understanding.
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 has no description for 'instance_id' (0% coverage). The description does not explain what instance_id is or how to obtain it, relying solely on the property name. Does not add 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 clearly states it makes an instance the active one for subsequent calls, specifying the verb 'make' and resource 'instance'. It distinguishes from siblings like 'close_instance' or 'list_instances'.
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 explains that the previous instance continues running in the background with cookies/tabs preserved and can be swapped back. It implies when to use (switch context without losing state) but does not explicitly state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_closeB
Close tab at index (defaults to active).
| Name | Required | Description | Default |
|---|---|---|---|
| index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states the basic operation. It does not disclose behavior for invalid indices, whether the action is destructive, or if there are any side effects like unsaved data warnings.
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 short sentence, very concise. It could include more detail without harming conciseness, but it is appropriately front-loaded and avoids redundancy.
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 no annotations and an output schema that is not visible in the provided data, the description is too minimal. It lacks information about return values, error handling, or prerequisites, making it incomplete for a tool that performs a destructive action.
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?
With 0% schema description coverage, the description adds some meaning by explaining the default behavior ('defaults to active'). However, it does not clarify index semantics (0-based? negative? out-of-bounds handling?). Adequate but not thorough.
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 action (close), the resource (tab), and the optional index parameter with a default to active tab. This distinguishes it from sibling tools like tab_focus, tab_list, or tab_new.
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 on when to use this tool versus alternatives (e.g., when to close a specific tab vs close all or switch). The description is purely declarative without usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_focusA
⭐ Bring the active tab's browser window to the OS foreground.
Programmatic CDP navigation does not raise Chrome to the front, so
on a desktop where the user has their own Chrome already open you
may see only the original window even though MCP successfully
drove a different window/tab. Call this when you want to *see*
what MCP is doing.
Common reasons MCP's window is hidden:
- Per-PID profile fallback: another Chrome already held
~/.mcp-stealth/profile/, so MCP launched into
~/.mcp-stealth/profile-pid<N>/ — that's a SEPARATE Chrome window.
Run server_status to confirm (profile_dir field).
- OAuth popup opened a new tab/window MCP now drives.
- macOS Spaces / minimized window / behind other apps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that the tool brings the window to the foreground and explains why it's needed, including specific reasons for hidden windows. It does not mention side effects or failure cases, but the behavior is straightforward.
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 concise, well-structured with a star emoji, and uses bullet points for common reasons. Every sentence adds value, and the main action 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?
Given no parameters and an output schema, the description fully explains the tool's purpose, usage scenarios, and rationale. It is complete for a simple focus operation.
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 tool has no parameters, so the baseline is 4 as per instructions. The description does not add parameter-specific information, but none is needed. The context about when to use the tool adds value 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 clearly states the tool brings the active tab's browser window to the OS foreground, with a specific verb+resource. It explains the need due to programmatic CDP limitations, distinguishing from other sibling tools like tab switching or navigation.
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 explicitly states when to call ('when you want to *see* what MCP is doing') and lists common scenarios where the window might be hidden. However, it does not explicitly mention when not to use or suggest alternatives, though the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_listA
List all open tabs with index, URL, title.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description clearly indicates a read-only list operation with no side effects. It covers the essential behavior, though additional context like whether it refreshes or caches could be helpful.
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.
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 zero parameters and an output schema available, the description is sufficient for the agent to use the tool 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?
No parameters are defined, so the description does not need to explain them. The schema coverage is 100% trivially.
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 it lists all open tabs with index, URL, and title, distinguishing it from sibling tools that perform actions like closing or focusing tabs.
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 this tool is used to get an overview of open tabs. No explicit guidance on when not to use it, but no alternative listing tool exists among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_newB
Open a new tab and make it active.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | about:blank |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It does not mention side effects (e.g., the previous tab remains open), error conditions, or permissions. The effect of the optional url parameter is left implicit.
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 avoids verbosity. However, it could be slightly more informative (e.g., mentioning the URL parameter) without losing conciseness.
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 simple nature of the tool and the presence of an output schema, the description is minimally adequate. However, it does not clarify how this tool fits among siblings, leaving some contextual 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?
The input schema has one parameter (url with default 'about:blank') and 0% schema description coverage. The description does not explain the parameter's purpose or default behavior, adding no value beyond what the schema's property title 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 'Open a new tab and make it active' clearly states the verb (open) and resource (new tab), and specifies the outcome (make it active). This distinguishes it from sibling tools like tab_list (list tabs) and tab_focus (focus an existing tab).
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 use this tool versus alternatives such as tab_focus or tab_select. It does not mention prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tab_selectA
Switch to tab at given index (from tab_list).
| Name | Required | Description | Default |
|---|---|---|---|
| index | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It only states 'switch to tab' without disclosing behavior when the index is out of range, any side effects, or the return value. This is insufficient for full transparency.
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 directly conveys the tool's purpose without any wasted words. It is front-loaded and efficient.
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's simplicity (one parameter, clear action) and the presence of an output schema (not shown), the description is nearly complete. It could be improved by mentioning the return value or behavior for invalid indices, but it suffices for most use cases.
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?
With 0% schema description coverage, the description adds value by linking the index to 'tab_list', but does not specify the range, zero-based indexing, or error handling. It partially compensates for the schema's lack of 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 clearly states the action ('switch to tab'), the resource ('tab'), and the required parameter ('at given index'). It references the sibling tool 'tab_list' for context, distinguishing it from other tab-related tools like tab_focus or tab_close.
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 proper usage by mentioning 'from tab_list', suggesting the tool should be used after obtaining the tab index. While it doesn't explicitly state when not to use it or provide alternatives, the context is clear for a simple tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textA
Type into focused element (keystroke-by-keystroke). Use humanize for Gaussian delays.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| humanize | No | ||
| mean_delay | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the keystroke-by-keystroke behavior and suggests humanization for delays, but lacks details on prerequisites (e.g., element must be focused), error handling, or whether it clears existing content. Adequate but minimal.
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, no fluff. Every word adds value. Front-loaded with the primary purpose. Ideal conciseness.
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 an output schema (unseen), so return values are covered. The description mentions 'focused element' as a precondition, but does not explain what happens if not focused, or edge cases like content length limits. Given complexity (3 params), it is minimally complete but has gaps in usage context.
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%, so the description must compensate. It adds meaning by explaining 'text' (what to type), 'humanize' (enables Gaussian delays), but does not explain 'mean_delay' or the exact behavior of humanize beyond delays. Partial compensation; baseline is not met fully.
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 action: 'Type into focused element (keystroke-by-keystroke).' This distinguishes it from sibling tools like paste_text or fill which may type in bulk. The verb and resource are specific.
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 some usage context by mentioning 'Use humanize for Gaussian delays,' implying when to enable that parameter. However, it does not explicitly guide when to choose this tool over alternatives like paste_text or humanize_type. No when-not or alternative tool names are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uncheckC
Untick a checkbox.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides minimal behavioral insight. It does not disclose side effects, error handling, or prerequisites. Without annotations, the description should offer more context about what happens when the tool executes.
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?
While the description is very short, it sacrifices completeness. It does not earn its place as it provides only the bare minimum, leaving critical gaps in understanding.
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 complexity of UI automation and the large sibling set, the description is too sparse. It fails to convey important details such as what 'untick' means in practical terms, return values, or error conditions.
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 description contains no parameter information. Schema coverage is 0%, and parameter titles 'Ref' and 'Selector' are vague. The agent is left guessing how to use these fields to locate the checkbox.
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 the action (untick) and target (checkbox) clearly. However, it lacks differentiation from sibling tools like 'check' and doesn't specify the context (e.g., web UI), which could lead to ambiguity in tool selection.
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 provided on when to use this tool vs alternatives. The sibling list includes 'check' and many other UI interaction tools, but the description offers no situational advice or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileC
Upload a file via .
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| ref | No | ||
| selector | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description fails to disclose any behavioral traits like side effects, permissions needed, or return value. It only states the action without context.
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 extremely concise (one sentence) but at the cost of missing essential details. It lacks structure and does not earn its place by providing adequate information.
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 existence of three parameters and an output schema, the description is woefully incomplete. It does not explain how to use parameters, what the tool returns, or any behavioral context.
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 0%, meaning no parameters are explained in the description. The fields file_path, ref, and selector have no semantic guidance provided, leaving the agent to infer their purposes.
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 'upload a file' and the mechanism 'via <input type=file>', which is distinct from sibling tools like fill or click. However, it does not elaborate on the tool's specific role in the context of file uploads.
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, such as fill for text inputs or click for buttons. No prerequisites or context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_cfA
⭐ Use nodriver's built-in Cloudflare challenge verification.
Uses OpenCV template matching to find the Turnstile checkbox on a screenshot
and click it. template_image is a path to a cropped image of the checkbox;
without it, the bundled English default is used.
Works on simple CF interstitials. For managed-mode Turnstile (ChatGPT-level),
combine with storage_state or solve_captcha.
| Name | Required | Description | Default |
|---|---|---|---|
| template_image | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: uses OpenCV template matching to locate and click the checkbox, uses a default image if none provided. It also notes limitations (simple CF only), providing transparency beyond the schema.
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 concise (four sentences), front-loads the main purpose, then details the method, parameter, and usage guidance. No unnecessary information.
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's complexity (CF challenge verification), the description covers the mechanism, parameter, limitations, and companion tools. The presence of an output schema handles return values, so completeness is high.
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 only parameter, template_image, is described in context: it's a path to a cropped image, with the fallback to an English default. This adds value beyond the schema, which has 0% 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 clearly states the tool verifies Cloudflare challenges using nodriver's built-in method, with specific details about template matching and clicking Turnstile. It distinguishes from siblings like click_turnstile by mentioning simple vs managed-mode, making its purpose unambiguous.
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?
Explicitly states when to use (simple CF interstitials) and when not (managed-mode Turnstile), with recommendations to combine with storage_state or solve_captcha for advanced cases. The template_image parameter is also explained.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vision_locateA
⭐ Find an element by natural-language description using a vision LLM.
Uses the same provider as solve_recaptcha_ai (OPENAI_* / ANTHROPIC_* env).
Reuses solve_recaptcha_ai's vision plumbing so any vision-capable model
works (gpt-4o, gpt-5.x, claude, llava, llama-3.2-vision).
Args:
description: NL description, e.g. "the red Create button at bottom right"
click: if True, also dispatches a CDP mouse_click at the located point
api_key/base_url/model/provider: explicit overrides (else from env)
Returns JSON: {"found":true/false, "x":int, "y":int, "confidence":"high|medium|low"}.
Use when CSS selectors are unreliable (visual-only differentiator, dynamic IDs).
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes | ||
| click | No | ||
| api_key | No | ||
| base_url | No | ||
| model | No | ||
| provider | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behavior: it uses vision LLM, can optionally click via CDP, and returns JSON with found, x, y, confidence. It also notes provider dependency.
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 well-structured with emojis, bullet-like argument list, and clear return format. Every sentence is informative and concise.
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 output schema exists (specified as JSON format), the description explains the return. It covers all 6 parameters, the use case, and behavioral details, making it complete.
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 0%, but the description explains each parameter: 'description' as NL, 'click' as boolean, and optional overrides. It adds meaning beyond the schema's titles and types.
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 'Find an element by natural-language description using a vision LLM', specifying the verb, resource, and method. It differentiates from siblings like 'click' and 'find_by_image' by emphasizing NL description and vision LLM.
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 advises using when CSS selectors are unreliable and mentions it reuses solve_recaptcha_ai's plumbing, providing context. However, it lacks explicit when-not-to-use or detailed alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forC
Wait until selector exists or text appears on page.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | ||
| text | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should reveal more behavioral details. It only states the waiting condition but omits what happens on timeout, whether it throws an error, or what the output schema returns.
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 with no wasted words. It could benefit from slight structuring (e.g., listing parameters) to improve scannability.
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 presence of an output schema and three parameters with zero annotation coverage, the description is too sparse. It fails to explain return values, default behavior, or how it differs from similar sibling tools.
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 0%, yet the description adds no semantic value beyond parameter names. It does not explain how 'selector' and 'text' interact (e.g., both required? either one?) or the timeout parameter's unit or behavior.
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 waits for a selector to exist or text to appear, distinguishing it from other wait tools like wait_for_navigation (which waits for navigation). However, it could be more precise about the relationship between selector and text when both are provided.
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 on when to use this tool vs siblings such as wait_for_navigation, wait_for_network_idle, or click_and_wait. Agents lack context for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_network_idleA
Wait until no network request has been in-flight for idle_ms.
More robust than wait_for(selector) for JS-heavy SPAs. Implementation polls
performance.getEntriesByType('resource') + a custom fetch/XHR tracker
injected once per tab.
| Name | Required | Description | Default |
|---|---|---|---|
| idle_ms | No | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It reveals the polling mechanism and injection of a fetch/XHR tracker per tab. However, it does not disclose potential side effects like performance impact or infinite polling scenarios.
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, front-loaded with purpose. Every sentence provides value: the first defines the tool, the second adds implementation detail and usage context. No unnecessary words.
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's simplicity and presence of an output schema, the description covers purpose, usage context, and implementation. However, the lack of parameter explanation leaves a gap in completeness, especially with no schema coverage.
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 0%, and the description fails to explain the parameters. Only 'idle_ms' is mentioned in the description, not its meaning or default, and 'timeout' is completely omitted. The description adds no value over 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 clearly states the tool waits for network idle, with specific verb 'wait' and resource 'network idle'. It distinguishes from sibling 'wait_for' by claiming robustness for JS-heavy SPAs.
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?
It explicitly says this is more robust than wait_for(selector) for JS-heavy SPAs, guiding when to use it. However, it does not specify when not to use it or mention alternatives beyond wait_for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_requestA
⭐ Block until a network request matching url_pattern is observed. Replaces the setTimeout(2000)+poll anti-pattern.
Args:
url_pattern: substring match
method: optional HTTP verb filter (GET/POST/...)
timeout: max seconds to wait
require_response: also wait for the response phase (default True)
Returns JSON of the matching entry (url/method/status/request_headers/
response_headers).
| Name | Required | Description | Default |
|---|---|---|---|
| url_pattern | Yes | ||
| method | No | ||
| timeout | No | ||
| require_response | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses that the tool blocks, waits for a timeout, and optionally requires a response. It explains the return JSON format. However, it does not mention that the tool is non-destructive or clarify behavior on timeout, slightly limiting transparency.
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 efficient: one sentence for purpose, one for anti-pattern replacement, then a clear list of arguments and return format. Every sentence adds value with no fluff.
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's complexity (4 parameters, no annotations) and the presence of an output schema (though not shown), the description adequately explains all parameters and the return structure. It could mention timeout behavior on failure, but overall it is reasonably complete.
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 0%, so the description fully explains each parameter: 'url_pattern: substring match', 'method: optional HTTP verb filter', 'timeout: max seconds to wait', and 'require_response: also wait for the response phase (default True)'. This adds significant 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 clearly states 'Block until a network request matching url_pattern is observed', using a specific verb and resource. It also mentions replacing an anti-pattern, adding context. This distinguishes it from sibling tools like 'wait_for_response' which may wait for any response.
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 says it 'Replaces the setTimeout(2000)+poll anti-pattern', giving usage context, but does not explicitly state when not to use it or compare to similar sibling tools like 'wait_for_navigation' or 'wait_for_url'. The guidance is implied but not comprehensive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_responseB
Wait for a network response whose URL matches regex.
| Name | Required | Description | Default |
|---|---|---|---|
| url_pattern | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, description must disclose behavioral traits. It does not mention blocking nature, timeout handling, what happens on no match, or return value (despite output schema existing). Minimal behavioral context.
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?
Single sentence, no wasted words. Front-loaded with action and key condition.
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 complexity of a conditional wait tool (blocking, timeout, matching logic), the description is too sparse. It omits crucial details like whether it returns the matched response, what happens on timeout, and how regex matching works exactly. Sibling tools suggest many wait variants, but no differentiation is provided.
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 description adds 'URL matches regex' context to url_pattern, which is helpful beyond the bare schema. However, the timeout parameter (with default 15) is completely undocumented, and schema coverage is 0%.
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 action (wait), resource (network response), and condition (URL matches regex). It distinguishes from siblings like wait_for_request (waits for request) and wait_for_navigation.
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 on when to use this tool versus alternatives (e.g., when to wait for request instead). No mention of preconditions, timeout behavior, or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_urlC
Wait until URL matches a regex pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | ||
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states basic behavior. It does not disclose timeout behavior, whether polling occurs, or what happens on failure (e.g., error vs. return value). Key details like matching scope (current page URL) are implied but not explicit.
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, no wasted words. However, it could be slightly expanded to cover key details without becoming verbose.
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 no annotations, 2 parameters, and an output schema, the description is incomplete. It fails to explain the return value, error handling, or provide context for the sibling tools it competes with.
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%, so the description must explain parameters. It only mentions 'URL matches a regex pattern' but does not describe the 'pattern' format or the 'timeout' unit/behavior. Parameter names are somewhat self-explanatory, but the description adds no additional meaning.
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 waits for a URL to match a regex pattern, which is a specific action on a specific resource. It distinguishes from sibling tools like 'assert_url_matches' (assertion) and 'wait_for_navigation' (navigation event), making the purpose unambiguous.
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 provided on when to use this tool versus alternatives like 'wait_for' or 'wait_for_navigation'. The description does not mention prerequisites, typical use cases, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_vitalsA
Collect Core Web Vitals (LCP, CLS, INP, FCP, TTFB) via web-vitals v4.
Injects Google's official web-vitals library from CDN, listens for each
metric, returns after all expected metrics fire or timeout elapses.
Best practice: call after the page has been interacted with (scrolled,
clicked) so INP and CLS have real signal.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that it injects Google's official web-vitals library from CDN, listens for each metric, and returns after all expected metrics fire or timeout. This is transparent for a read-like operation; no annotations exist to contradict.
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?
Three short sentences: purpose, mechanism, best practice. Every sentence adds value with no redundancy.
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's complexity (5 metrics, library injection) and presence of an output schema, the description adequately covers usage and behavior. Could mention output format briefly, but output schema likely handles that.
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 schema has 0% description coverage. The description mentions 'returns after all expected metrics fire or timeout elapses', clarifying the timeout parameter's role. This adds some value but could be more explicit about units or range.
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 it collects Core Web Vitals (LCP, CLS, INP, FCP, TTFB) via web-vitals v4, injecting a library and listening for metrics. This is specific and distinguishes it from sibling tools like performance_metrics which are more general.
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?
Provides a best practice: call after page interaction for INP and CLS signal. This guides usage context, but does not explicitly state when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
workflow_runA
⭐ Execute a list of tool steps sequentially. Resumable — pass start_at=N to skip the first N steps.
Each step: {"tool": "<name>", "args": {...}, "label": "optional"}
Args:
steps: list of step dicts
start_at: index to begin from (for resume after a fix)
stop_on_error: abort on first failure (default True). If False,
continue and collect all results.
Returns JSON:
{
"completed": [
{"index": 0, "tool": "navigate", "ok": true, "result": "..."},
...
],
"failed_at": 3, # index of failure (omitted on success)
"failure_context": {...}, # last step's input + error (for LLM debug)
"resume_with": "workflow_run(steps=..., start_at=4)" # hint
}
Allowed tools (curated for sequencing): navigate, reload, go_back/forward,
click, click_text, click_role, fill, type_text, press_key, select_option,
check, uncheck, wait_for*, screenshot, scroll, scroll_to, smart_fill,
vision_locate, assert_*, storage_*, cookie_import, storage_state_load,
evaluate, mouse_click_xy.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | Yes | ||
| start_at | No | ||
| stop_on_error | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It describes sequential execution, resumability, start_at, stop_on_error behavior, and detailed return format with resume hint. Covers all key behavioral aspects.
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?
Well-structured with emoji, bullet points, and code blocks. Front-loaded with main purpose. Every sentence is informative, no wasted words.
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 complexity and lack of annotations, description is complete: covers input, behavior, allowed tools, return format, and resume hint. Output schema details are provided inline, so no 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 0%, description adds significant value by explaining step format (dictionary with tool, args, label) and clarifying start_at and stop_on_error semantics. Schema already has types and defaults, but description provides needed context.
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?
Description clearly states it executes a list of tool steps sequentially, with resumability. It distinguishes from siblings by listing allowed tools for sequencing.
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?
Explains when to use (sequential execution of allowed tools) and how to resume with start_at. Does not explicitly state when not to use, but allowed tools list provides implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With 138 tools, many have overlapping purposes (e.g., 10+ click tools). Although each has distinct use cases, the sheer volume forces an agent to carefully differentiate similar tools, creating ambiguity.
Most tools use snake_case with a verb_noun pattern, but there are outliers like bare verbs (click, fill, check) and compound names (click_and_wait, click_at_corner). The convention is moderately consistent but not strict.
138 tools is excessive for almost any domain. While the server covers a wide range of stealth browser automation features, many tools are highly specialized and could be consolidated, making the surface feel bloated.
The tool set is exceptionally comprehensive, covering launch, attach, navigation, interaction, forms, network, storage, performance, captcha, accessibility, and workflow orchestration. It's hard to find any missing operations for browser automation.
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.
AI-powered web automation. Navigate websites using AI agents for one page or a thousand
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

ScrapeLab MCPofficial
AlicenseNot gradedqualityDmaintenanceEnables undetectable web scraping and browser automation for AI agents with 84 tools including stealth navigation, element extraction, network interception, and auto cookie consent dismissal. Bypasses anti-bot systems like Cloudflare and DataDome while providing LLM-ready markdown output and full Chrome DevTools Protocol access.MIT- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control browsers with human-like behavior, stealth anti-detection, and 70 tools for navigation, interaction, and monitoring.221MIT
- AlicenseNot gradedqualityDmaintenanceUndetectable browser automation for AI agents that bypasses Cloudflare, antibot systems, and social media blocks using real browser instances with 97 tools across 11 sections.MIT
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/RobithYusuf/mcp-stealth-chrome'
If you have feedback or need assistance with the MCP directory API, please join our Discord server