Skip to main content
Glama

Chrome Bridge

License: MIT Node 18+ Chrome 135+ Tests Chrome Web Store

An MCP server that gives Claude Code your real, logged-in Chrome — measured 2.75× fewer turns and 2.28× lower cost than the official "Claude in Chrome" extension on a form-filling task, with ~3× the toolset and no paid plan.

59 web-development tools (navigation, DOM inspection, visual regression, audits, network mocking) over a local WebSocket bridge, plus a headless instance for CI. Self-hosted, local-only.

The same form filled in 6 turns instead of 16.5 — 2.75× fewer turns, 2.28× lower cost

Quickstart

Requires Node.js 18+ and Chrome 135+.

git clone git@github.com:frsorrentino/chrome-bridge.git
cd chrome-bridge && ./install.sh
  1. Open chrome://extensions, enable Developer mode, click Load unpacked, select the extension/ folder.

  2. Restart Claude Code.

Then ask for something like "open localhost:3000, run an accessibility audit and find the Sign Up button": Claude Code calls navigate, audit and find_text. Because navigate already returns element refs, click(ref="n1") follows with no discovery turn in between.

On ChromeOS/Crostini install from the Chrome Web Store instead: an unpacked extension is dropped on every reboot, because the container isn't mounted when Chrome starts.

install.sh registers the MCP server with --scope user. To do it by hand: claude mcp add --scope user chrome-bridge node /path/to/server/index.js. For execute_js, enable Allow user scripts in chrome://extensions → Chrome Bridge → Details (on Chrome 135-137, enable Developer Mode instead).

As a plugin, without a clone: in Claude Code, /plugin marketplace add frsorrentino/chrome-bridge then /plugin install chrome-bridge@chrome-bridge registers the MCP server from npm (all capabilities) together with the recipes skill; clients that read Agent Plugins 1.0 get the same from plugin.json + mcp.json. The extension still comes from the Web Store or extension/. Pick one path: the plugin and install.sh would register the same server twice.

Related MCP server: kilogent-browser

Why Chrome Bridge?

Chrome Bridge

Claude in Chrome

Chrome DevTools MCP

Playwright MCP

ChromeOS / Crostini

Yes (real host)

No

Container only

Container only

Tools

59 (38 core)

22

29 default (56 with flags)

24 core (71 total)

Requires paid plan

No

Yes (Pro+)

No

No

Network mocking

Yes (stub/headers)

No

No

Yes

Visual regression

Yes (screenshot_diff)

No

No

No

Audits (a11y/SEO/sec)

Yes (one call, report on disk)

No

Lighthouse

No

Headless / CI

Yes

No

Yes

Yes

GIF / video

No

Yes

Partial

No

Breakpoints / heap

No

No

Yes

No

Codex for Chrome (OpenAI, May 2026) sits in the Claude in Chrome column: an official extension with the debugger permission, macOS and Windows only, the ChatGPT app required. Claude in Chrome documents Linux desktop since September 2026; ChromeOS and WSL stay out. Competitor figures measured on 2026-09-01 and 2026-09-11 (docs/analisi-2026-09-11-concorrenti.md).

It wins on round trips, not payload size: short element refs instead of the screenshot-and-click loop, fill_form filling N fields in one call, table filtering done server-side. Per single turn it actually costs slightly more.

The full benchmark — method, every raw run including the unfavourable ones, and what the harness can't measure — is in docs/EFFICIENCY.md.

Claude checks its own work: console errors, pixel diffs, network mocking and audits

Using it

The skill in skills/chrome-bridge/SKILL.md is what makes the tools discoverable: recipes with the phrase that triggers each one ("verify the email arrives", "test the checkout with a test card", "which plugin slows the page", "what fires before consent"), the tool sequence, and the zero-token CLI commands the model would otherwise never see. install.sh copies it to ~/.claude/skills/chrome-bridge; do the same by hand for other clients.

Beyond the MCP tools, two lanes keep work away from the model entirely.

Some jobs never touch the model: the CLI lane runs the same tools at zero tokens

CLI — batch operations, piped through grep or jq before anything reaches the context:

chrome-bridge navigate --url https://example.com
chrome-bridge read_console --level error | head -20
chrome-bridge assert --selector "#success" --text "Done"
chrome-bridge replay --file ./recordings/login.jsonl

Launch mode — a dedicated Chromium instance with an ephemeral profile, for isolated sessions or CI:

node server/index.js --launch --headless

Pair it with session_record + replay for smoke tests with no model in the loop. In launch mode execute_js falls back to new Function when the user-script toggle isn't available.

Tools

59 in total, in seven groups. Only core (38 tools) loads by default; the rest are opt-in via --caps.

59 tools in seven groups, from clicking a button to auditing a whole page

Group

N

What's in it

Core & Navigation

13

tabs, windows, navigate, screenshot, tile_windows

Interaction

11

click, fill_form, upload_file, dialogs, clipboard

DOM & Inspection

10

read_page, extract, query_dom, watch_dom

Debugging & Network

8

execute_js, console, network log, mocking, track_events

Visual & Responsive

5

screenshot_diff, viewport and zoom, media emulation

Audits

2

audit (a11y, keyboard, SEO, security, links, vitals, css, resources, cache in one call), cookie_audit

State, Storage & Files

9

storage, fixtures, MHTML, recording, assert

Every tool, with the notes that matter: docs/TOOLS.md.

How it works

It drives the Chrome you are logged into, over a local WebSocket bridge

Claude Code  <--stdio-->  MCP Server  <--WebSocket :8765-->  Chrome Extension
                          (server/)                          (extension/, MV3)

The Node.js server handles the protocol and tool logic; the MV3 extension executes commands through Chrome APIs. User scripts (execute_js) run via chrome.userScripts.execute().

Configuration and security

Environment variables, each with a matching CLI flag:

Variable

Default

Notes

CHROME_BRIDGE_PORT

8765

CHROME_BRIDGE_HOST / --host

127.0.0.1

0.0.0.0 only where the browser lives outside the container (ChromeOS/Crostini port-forward) — and only with a token

CHROME_BRIDGE_TOKEN

unset

Required on both ext_init and relay_init. Strongly recommended whenever the bind isn't loopback

CHROME_BRIDGE_CAPS / --caps

core

core, audits, visual, network, storage, dom, files, all. install.sh uses all

CHROME_BRIDGE_NO_JS / --no-js

unset

No arbitrary JavaScript in the page: execute_js and modify_dom leave the schema, wait_for(condition=function) and javascript:/data: URLs are refused. get_status reports js_evaluation

CHROME_BRIDGE_WRITE_ROOT / --write-root

unset

Every path the model chooses (save_to, output_path, exports) must be under this directory, checked before the browser does any work; the server's own state under ~/.config/chrome-bridge stays writable. The CLI is your shell and is not restricted

The bridge binds loopback, accepts extension connections only from a chrome-extension:// origin, and — when a token is set — requires it on both handshakes. Without one, any local process could act as a relay and reach execute_js inside your authenticated browser session. Secondary MCP instances connect via loopback and are acknowledged with relay_init_ok, so a foreign process holding the port fails fast instead of timing out per command.

What is not protected: page content reaches the model unfiltered, so a hostile page's text is untrusted input. get_storage, session_fixture, HAR exports and screenshots are not redacted and may carry cookies, tokens or personal data. Don't point the automation at pages holding secrets you wouldn't paste into a chat.

Troubleshooting

Symptom

Cause / fix

Chrome extension not connected

Extension disabled, or its port differs from the server's. The error names the actual host/port; check them in the popup (⚙).

Port 8765 already in use

Expected: a second MCP session becomes a relay and shares the one bridge. Set CHROME_BRIDGE_PORT for a separate one.

Port N is held by a process that is not chrome-bridge

Something else owns the port. Free it or change CHROME_BRIDGE_PORT.

execute_js fails

Enable Allow user scripts in chrome://extensions → Chrome Bridge → Details (Chrome 138+; on 135-137 enable Developer Mode).

read_console returns note=Instrumentation not loaded

The page was opened before the extension, "Capture console & metrics" is off, or the page isn't injectable (chrome://). Reload it.

Screenshot times out

On ChromeOS a fully occluded window stops producing frames; captures fail after 10s. Bring the window forward.

Commands work, then stop

The MV3 service worker restarted and in-memory state (network log, diff baselines, HTTP auth) was reset. Re-run the monitoring call.

Extension dropped on every ChromeOS reboot

Install from the Web Store instead of Load unpacked.

Tool missing from the list

It's in an opt-in group. Check get_statuscaps_available, then set CHROME_BRIDGE_CAPS=all.

Documentation

Tests

npm test (Chrome-free, ~22s) · npm run test:e2e (needs Chrome and a connected extension; with a bridge already on 8765: CHROME_BRIDGE_PORT=8799 node test/test-devtools.js --launch, which opens its own Chromium with extension/) · npm run measure (schema cost) · npm run bench:latency (milliseconds per tool, launches its own Chromium, writes docs/PERFORMANCE.md).

License

MIT

Available Tools

59 tools
assertA
Read-onlyIdempotent

Assert a page condition, polling until timeout: element exists/visible (optionally with count or containing text), text on page, tab url/title. Patterns: substring, or "/…/" for regex. Recorded flows replay it as a test.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoTab url pattern
textNoIn the element (with selector) or anywhere on the page
countNoExact match count for selector
stateNoattached means present in the DOM, visible also requires a rendered boxattached
titleNoTab title pattern
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
timeoutNoMax ms to wait for the condition before failing
selectorNoElement the assertion is about; ">>>" pierces shadow DOM

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds behavioral context about polling timeout and pattern syntax, which is valuable beyond annotations.

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

Conciseness5/5

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

Two sentences with no wasted words. The core functionality and pattern syntax are conveyed efficiently.

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

Completeness4/5

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

Given 8 parameters and no output schema, the description covers main conditions, patterns, and replay context. It lacks explicit return behavior but is otherwise sufficient.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are already well-described. The description adds minimal extra meaning, only summarizing condition types and pattern styles. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: to assert page conditions (element existence/visibility, text, URL/title) with polling until timeout. It distinguishes from siblings by focusing on assertion rather than observation or waiting.

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

Usage Guidelines3/5

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

The description implies use for assertions but does not provide explicit guidance on when to use this tool versus alternatives like wait_for or query_dom. No exclusions or comparison with siblings.

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

auditA
Read-onlyIdempotent

One-call page audit, pick the kinds: accessibility, keyboard (tab order and focus issues), SEO, security headers, broken links, Core Web Vitals, unused CSS, resources (which plugin/theme/module/host slows the page), cache (is the CDN serving the new version). A summary line per kind; with save_to the full Markdown report with every finding. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindsNoDefault skips keyboard, css (slow, approximate), resources and cache
scopeNoa11y only: limit to this subtree
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
save_toNoAbsolute path: write the full Markdown report there and return the path instead of the content
max_linksNolinks only: cap on URLs fetched

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive, and the description repeats 'Read-only'. It adds useful behavioral details beyond annotations: the output format ('summary line per kind', 'full Markdown report') and the save_to behavior. No contradictions.

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

Conciseness5/5

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

The description is two sentences, compact and well-structured. It front-loads the core purpose ('One-call page audit'), lists all options efficiently, and includes output details without verbosity.

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

Completeness4/5

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

Given the tool's complexity (5 optional parameters) and the annotations covering safety, the description provides sufficient context: it explains each parameter via schema descriptions and details output behavior. It does not mention edge cases or prerequisites, but the tab_id and scope parameters are self-explanatory from schema descriptions, so nothing critical is missing.

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

Parameters4/5

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

Schema description coverage is 100% and each parameter has a helpful description. The main description further enriches parameter semantics by explaining what each kind refers to (e.g., 'resources' means which plugin/theme/module/host slows the page) and clarifying default behavior for kinds like keyboard and css. This goes beyond the schema's enum list.

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

Purpose5/5

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

The description explicitly states 'One-call page audit' and enumerates the exact audit kinds (accessibility, keyboard, SEO, security headers, broken links, Core Web Vitals, unused CSS, resources, cache). This clearly identifies the verb (audit), the resource (page), and distinguishes it from specialized siblings like cookie_audit.

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

Usage Guidelines4/5

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

The description says to 'pick the kinds' and lists them, so it's clear when to use this tool for any of those audit categories. It does not explicitly name alternatives or state when not to use it, but the coverage is evident from the kind list, making usage largely implied.

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

clickA

Click an element by CSS selector or by a ref (n1, n2…) from get_interactives or navigate. A real pointer sequence: it can submit, open a dialog or navigate — use wait_after. Not idempotent; a native confirm() blocks the bridge: handle_dialogs first.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoFrom get_interactives, e.g. "n3"
countNo2 emits dblclick after the two clicks, which is what selects a word or opens an editor
forceNoClick even if occluded
buttonNoright opens the page context menu instead of activating the elementleft
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
selectorNoCSS selector; ">>>" pierces shadow DOM. Ignored when ref is given
wait_afterNoSettle before returning: navigation waits for a page load, networkidle for quiet trafficnone

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important behavioral details: real pointer actions can trigger navigation, dialogs, or form submission, and native confirm() dialogs can block the bridge. It explicitly states non-idempotence and directs users to handle dialogs, providing valuable context not present in the annotations.

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

Conciseness5/5

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

The description is concise, using three focused sentences that front-load the core purpose and then add necessary caveats. Every sentence contributes meaningful information—no fluff, redundancy, or excessive detail. The structure is efficient and easy to scan.

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

Completeness4/5

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

Given the tool's complexity (8 parameters, no output schema), the description covers purpose, selector/ref resolution, side effects, and interaction with wait_after and handle_dialogs. It does not describe return values, but for an action-oriented click tool this is a minor omission given the rich schema and behavioral notes.

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

Parameters4/5

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

The input schema already provides full descriptions for all 8 parameters, so the baseline is high. The description adds useful semantic context by explaining the relationship between ref and selector (selector ignored when ref given) and that wait_after controls settling behavior. This goes slightly beyond schema descriptions without duplicating them.

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

Purpose5/5

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

The description clearly states the tool's primary function: clicking an element by CSS selector or ref. It distinguishes usage from related tools like hover and press_key by specifying the click action and referencing get_interactives/navigate for obtaining refs. The purpose is immediately understandable.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use the tool and how to handle side effects: it notes that a real pointer sequence can submit, open dialogs, or navigate, and recommends wait_after. It also warns about non-idempotence and advises using handle_dialogs first for native confirm() blocks, making usage conditions clear.

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

clipboardA
Idempotent

Read or write the system clipboard (text). Activates the tab first. write overwrites whatever the user had copied, which is not recoverable.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoFor write
actionYeswrite takes text; read returns the current clipboard contents
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A3.9/5.0
Behavior5/5

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

The description discloses that write overwrites the clipboard and that this is not recoverable, which is critical behavioral information beyond the annotations. It also notes that the tab is activated first, adding transparency 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.

Conciseness5/5

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

The description is exceptionally concise, consisting of two short sentences that pack essential information without anyone. The structure is logical, starting with the core function and then adding the warning.

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

Completeness3/5

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

The description covers the primary function and the critical warning, but lacks guidance on alternative tools or edge cases (e.g., what happens when reading an empty clipboard). Given the absence of an output schema, a bit more context about expected behavior would improve completeness.

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

Parameters3/5

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

The schema descriptions already fully explain all parameters (action, text, tab_id) with 100% coverage. The tool description does not add extra semantic meaning beyond the schema, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reads or writes the system clipboard (text), which is a specific verb and resource. It also clarifies the scope to text, leaving no ambiguity about the tool's function.

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

Usage Guidelines2/5

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

The description does not mention when to use this tool versus alternatives like type_text or read_page. It only mentions 'Activates the tab first' as an operational note, but provides no guidance on appropriate use cases or conditions where another tool would be more suitable.

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

create_tabA

Open a new tab, optionally at a URL, and make it the implicit target of later commands in this session. Each call creates another tab: reuse a tab_id or navigate() to move an existing one instead of piling up tabs.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoWindow y (new_window)
urlNoURL to open (default: new tab page)
leftNoWindow x on the virtual desktop (new_window)
widthNoWindow width px (new_window)
activeNofalse opens the tab in the background, leaving the current one focused
heightNoWindow height px (new_window)
new_windowNoOpen in a fresh window instead of a tab; with left/top it lands on the chosen monitor

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses that the new tab becomes 'the implicit target of later commands in this session' and that each call creates another tab, behaviors not captured by the annotations. This provides critical context about statefulness and side effects beyond the structured hints.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary action and followed by a practical usage tip. Every sentence contributes value with no redundancy.

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

Completeness4/5

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

The description is fully self-contained for a state-changing tool: it explains the action, the session-wide implication, and the fallback to navigate(). It does not explicitly state the return value, but the mention of 'reuse a tab_id' implies a tab identifier is returned, which is sufficient given the tool's simplicity and the comprehensive schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter-specific meaning beyond the schema, merely mentioning the optional URL, which is already documented. It does not introduce new information about parameters.

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

Purpose5/5

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

The description uses a specific verb ('Open') and resource ('new tab'), clearly distinguishing this from navigation tools. It explicitly contrasts with navigate(), stating 'reuse a tab_id or navigate() to move an existing one instead of piling up tabs.'

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: it tells the agent that each call creates a new tab and recommends reusing a tab_id or using navigate() to move an existing tab, preventing tab accumulation. This addresses when to use the tool versus alternatives.

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

dismiss_overlaysA
Idempotent

Dismiss cookie banners/modal overlays: OneTrust, Cookiebot, Usercentrics, then generic heuristic. Idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A4.7/5.0
Behavior5/5

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

Description complements annotations by detailing the specific overlay dismissal approach (vendor-specific plus heuristic). Annotations already mark destructiveHint false and idempotentHint true, and description reinforces idempotency, adding valuable context without contradiction.

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

Conciseness5/5

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

Two sentences pack the essential information: what it does, which overlays it targets, and idempotency. No wasted words.

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

Completeness5/5

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

Given the simple input schema, annotations covering safety and idempotency, and the focused purpose, the description is fully adequate. No output schema needed for this straightforward action.

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

Parameters4/5

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

Schema coverage is 100% with a clear description for tab_id. The tool description adds the non-obvious default behavior: omitted means last tab navigated or active tab, which is helpful beyond the schema.

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

Purpose5/5

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

Description clearly states the tool dismisses cookie banners/modal overlays, listing specific vendor patterns (OneTrust, Cookiebot, Usercentrics) and a generic heuristic. This sets it apart from sibling tools that interact with page elements in other ways.

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

Usage Guidelines4/5

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

Explicitly mentions idempotency, signaling safe repeated use. Implicitly suggests use when overlays block interaction. No explicit when-not-to-use or alternatives, but context is clear given sibling tools.

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

drag_and_dropA

Drag an element onto another. html5 = DragEvent+DataTransfer; pointer = pointer/mouse events (sortable libraries).

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoWhich event family to emit, since libraries listen to different oneshtml5
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
source_selectorYesElement to drag; ">>>" pierces shadow DOM
target_selectorYesDrop target; ">>>" pierces shadow DOM

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate non-destructive behavior. The description adds the event family implementation detail but does not disclose other behavioral traits like timing, side effects (e.g., element reordering), or error scenarios.

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

Conciseness5/5

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

The description is a single, well-structured sentence with no filler. Every word adds meaning, and the semicolon effectively separates the general action from mode specifics.

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

Completeness3/5

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

Given the complexity of drag-and-drop (source, target, modes, frames, tabs) and no output schema, the description is adequate but thin. It does not explain return values, waiting behavior, or what constitutes a successful drop.

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

Parameters4/5

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

All 5 parameters have schema descriptions (100% coverage), so the tool description's role is diminished. However, it adds valuable context for the 'mode' parameter by explaining the difference between html5 and pointer events, which goes beyond the schema's 'which event family to emit'.

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

Purpose5/5

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

Description clearly states the action ('Drag an element onto another') and distinguishes by specifying two event families (html5 vs pointer). This verb+resource structure is specific and distinct from sibling tools like click or hover.

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

Usage Guidelines3/5

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

While the description explains when to use each mode ('html5 = DragEvent+DataTransfer; pointer = pointer/mouse events'), it lacks explicit guidance on when not to use this tool or alternative approaches. No prerequisites or exclusions are mentioned.

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

element_screenshotA
Read-onlyIdempotent

Screenshot cropped to one element or to a viewport region (PNG), optionally enlarged. Read-only. The cheapest image in the set, because it carries only the box you asked for — and with scale the way to read fine print: crop the box, zoom it, verify.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNoEnlargement of the crop, 1-4; output still capped at 1568px
regionNoBox in viewport CSS px (the rect frame of get_interactives/query_dom), instead of selector
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
selectorNoCSS selector; ">>>" pierces shadow DOM. The element is scrolled into view first

TDQS

A4.8/5.0
Behavior5/5

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

The description explicitly says 'Read-only,' matching the readOnlyHint and destructiveHint annotations. It also discloses behavior beyond the annotations, such as optional enlargement, output being capped at 1568px, and the selector parameter noting that 'The element is scrolled into view first.'

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

Conciseness5/5

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

The description is front-loaded with the main purpose and keeps additional explanation compact and purposeful. The cost and scale guidance is phrased efficiently, and no sentence is redundant or filler.

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

Completeness5/5

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

The description, combined with the parameter details, gives an agent enough context to call the tool correctly: what it returns (PNG), how to target an element or region, how scaling behaves, and which tab is used. No output schema is present, but the textual description sufficiently covers the output format and key invocation details.

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

Parameters5/5

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

All four parameters have meaningful descriptions that go beyond the schema types. The scale parameter documents its default and bounds, region explains it is a viewport box in CSS pixels rather than a selector, tab_id explains fallback behavior, and selector explains shadow DOM piercing and pre-scroll behavior.

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

Purpose5/5

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

The description clearly states the tool's function: 'Screenshot cropped to one element or to a viewport region (PNG), optionally enlarged.' It also highlights the differentiating cost benefit, 'The cheapest image in the set, because it carries only the box you asked for,' which helps distinguish it from broader screenshot tools.

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

Usage Guidelines4/5

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

The description gives practical usage context by noting it is the 'cheapest image in the set' and that 'with scale the way to read fine print: crop the box, zoom it, verify.' It does not explicitly name sibling alternatives like screenshot or full_page_screenshot, but the cropping and viewport-region framing make the intended use case reasonably clear.

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

emulate_mediaA
Idempotent

Make the page believe it runs elsewhere, until reset or reload: prefers-color-scheme, prefers-reduced-motion, print mode, navigator.userAgent/platform. user_agent changes only what page JS reads — the request header is network_rules modify_header. Pair with viewport_resize to emulate a device.

ParametersJSON Schema
NameRequiredDescriptionDefault
resetNoRemove all emulations
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
printModeNoMake print media queries match, without opening a print dialog
user_agentNoOverrides navigator.userAgent and appVersion in the page (not the HTTP header)
colorSchemeNoValue reported to prefers-color-scheme queries
reducedMotionNoValue reported to prefers-reduced-motion queries

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already indicate idempotent and non-destructive behavior; the description adds valuable behavioral details such as the temporary nature of emulation, the reset parameter, and the fact that user_agent does not affect the HTTP header. No contradictions with annotations were found.

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

Conciseness5/5

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

The description is concise, well-structured, and avoids unnecessary detail. It packs essential information into a few sentences and clearly separates the tool's purpose, scope, and parameter behavior.

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

Completeness4/5

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

The description is complete for the tool's apparent simple use case: it explains scope, reset behavior, and parameter semantics, and notes how it fits with viewport_resize. Since there is no output schema and the tool likely returns no meaningful data, the absence of return-value details is acceptable.

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

Parameters4/5

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

The schema covers all six parameters with descriptions and enums, and the description reinforces important nuances such as user_agent not being the HTTP header and reset removing all emulations. This adds meaningful context beyond the structured schema.

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

Purpose5/5

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

The description clearly states the tool's purpose: making the page believe it is in a different environment for media queries and user agent. It also distinguishes it from related tools by explicitly noting that user_agent changes only what page JS reads, not the HTTP header, and by recommending pairing with viewport_resize.

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

Usage Guidelines4/5

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

The description provides practical usage guidance, including the reset option, the scope until reset/reload, and the relationship to viewport_resize for device emulation. It does not explicitly say 'use this when...' but the context and parameter details make the intended use clear.

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

execute_jsA
Destructive

Run JavaScript in the page (MAIN world). Requires the extension's "Allow user scripts" toggle; errors explain setup if disabled.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesJS evaluated in the page; the value of the last expression is returned
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
max_lengthNoMax output chars

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructive and non-readonly behavior. The description adds important context about MAIN world execution and the permission toggle, complementing annotations without contradiction.

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

Conciseness5/5

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

Extremely concise two sentences: first sentence states core purpose, second sentence adds essential setup requirement. No wasted words, every sentence earns its place.

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

Completeness4/5

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

Covers core purpose and setup requirement well. Schema already documents that the return value is the last expression result. Could mention async behavior, but overall sufficiently complete given the tool's simplicity.

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

Parameters3/5

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

All parameters are fully documented in the schema with 100% coverage. The description adds no additional semantics beyond what the schema provides, meeting the baseline expectation.

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

Purpose5/5

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

The description clearly states the tool runs JavaScript in the MAIN world of the page, using specific verb 'run' and resource 'JavaScript in the page', distinguishing it from similar sibling tools that may operate in other contexts.

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

Usage Guidelines4/5

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

Provides a clear precondition (requires 'Allow user scripts' toggle) and a helpful note about error messages explaining setup if disabled. However, it does not explicitly compare with alternative tools like query_dom or modify_dom.

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

extractA
Read-onlyIdempotent

Read repeated non-tabular structures — product cards, list items, search results — as one record per item: item_selector matches the repeating block, fields map output names to selectors relative to it. Read-only, deterministic, parsed server-side from the main-document HTML.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesfield name → {selector, attr}
formatNolines is compact; json keeps one object per recordlines
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
save_toNoAbsolute path: write the records as JSON there and return the path instead of the content
max_itemsNoCap on records returned, in document order
max_lengthNoMax output chars
item_selectorYesCSS selector matching each item

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds useful context: deterministic, parsed server-side from main-document HTML. This adds value beyond annotations.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the purpose. Every part adds value with no wasted words.

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

Completeness4/5

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

Given the tool's complexity (7 params, nested object, no output schema), the description covers the core usage and behavioral context. It lacks explicit mention of defaults or output format, but schema descriptions fill that gap.

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

Parameters3/5

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

Schema coverage is 100% with descriptions for all 7 parameters. The description adds a general pattern explanation but does not provide details beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reads repeated non-tabular structures as records per item, with specific examples (product cards, list items, search results). It distinguishes from siblings like extract_table by specifying 'non-tabular'.

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

Usage Guidelines4/5

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

The description implies when to use (non-tabular structures) and hints at alternatives (extract_table for tables), but does not explicitly state when not to use or list alternatives. 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.

extract_tableA
Read-onlyIdempotent

Read a real as JSON: thead cells become keys, each row an object. Read-only. Only for tabular markup — where filters rows server-side, so one matching row out of 1500 costs a few hundred bytes instead of the whole document. row_count is the table total, match_count how many rows passed the filter.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoWhich table to take when the selector matches several, 0-based
whereNo{column: substring} rows must match, case-insensitive contains. Key "any" matches any cell.
offsetNoSkip N rows of the (filtered) set before applying max_rows.
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
columnsNoReturn only these columns per row.
max_rowsNoMax rows returned to you (output cap).
selectorNoThe table to read; ">>>" pierces shadow DOMtable
scan_rowsNoMax rows materialized in-page to scan/filter; raise for very large tables.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false; description reinforces with 'Read-only' and adds details on filtering behavior and row counts, providing extra context beyond annotations.

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

Conciseness5/5

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

Three concise sentences front-load the core purpose, add efficiency context, and describe key filtering behavior with zero wasted words.

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

Completeness4/5

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

With no output schema, the description compensates by mentioning output fields. It covers main usage patterns and performance considerations, though interaction between offset and row limits could be clearer.

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

Parameters4/5

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

Schema covers all parameters with descriptions, but the description adds value by explaining the filtering logic of `where` (case-insensitive contains, 'any' key) and hints at output fields like `row_count` and `match_count` not in schema.

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

Purpose5/5

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

Description clearly states it reads a table as JSON with specific structure, and the scope 'Only for tabular markup' distinguishes it from generic DOM queries or page reading.

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

Usage Guidelines4/5

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

Explicitly says 'Only for tabular markup' and highlights efficiency benefits of server-side filtering, but does not explicitly state when not to use or name alternative tools for non-tabular data.

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

fill_formA

Batch fill form fields with React-compatible events. Handles input, select, checkbox, radio, and textarea. With submit_selector it also submits, so a repeated call submits twice — not safe to retry blindly.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes{selector, value} pairs
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
wait_afterNoSettle before returning: navigation waits for a page load, networkidle for quiet trafficnone
submit_selectorNoSubmit button to click after filling

TDQS

A4.7/5.0
Behavior5/5

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

Explicitly discloses non-idempotent behavior when submit_selector is used, warning that repeated calls submit twice. Also mentions React-compatible events, adding meaningful behavioral detail beyond the annotations.

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

Conciseness5/5

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

Two concise sentences front-load the core purpose and then add the most important caveat. No fluff or redundant detail.

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

Completeness5/5

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

The description covers the tool's main behavior, supported control types, and the critical submission side effect. Remaining parameter details are provided by the schema, so nothing essential is missing.

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

Parameters4/5

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

Schema descriptions already cover all parameters, but the description adds extra meaning for submit_selector (triggers submission, not safe to retry) and clarifies supported field types relevant to the fields parameter.

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

Purpose5/5

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

States a specific action ('batch fill form fields'), lists supported element types (input, select, checkbox, radio, textarea), and notes optional submission via submit_selector. Clearly distinguishable from sibling tools like type_text or click.

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

Usage Guidelines4/5

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

Provides clear context for when to use it (batch filling forms across multiple control types) and warns that using submit_selector causes submission and is not safe to retry. Does not explicitly contrast with type_text, but the use case is apparent.

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

find_settingA
Idempotent

Where is a setting in an unknown admin panel: follows the panel's menu links (same origin) until a page contains the keyword and reports the menu path. Navigates the tab, leaves it on the page found, stops at max_pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
keywordYesWhat you are looking for, e.g. "webp", "cron", "maintenance mode"
max_pagesNoPages visited at most
menu_selectorNoWhere the menu links arenav, aside, [role="navigation"], #adminmenu, .menu, .sidebar, .navbar, .tabs

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses that the tool navigates the tab and leaves it on the found page, which is a side effect not captured by the annotations. It also explains the iterative behavior of following menu links and stopping at max_pages. This goes beyond the annotation hints and provides useful behavioral transparency.

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

Conciseness5/5

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

The description is concise, two sentences, with no redundant content. It front-loads the purpose and then explains the behavior and constraints. Every phrase adds value, and the structure is easy to parse.

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

Completeness3/5

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

The description explains the core mechanism but lacks explicit details about the return format ('reports the menu path' is vague), what happens if the keyword is not found, or how it handles pages that fail to load. Since there is no output schema, these details would be useful for an agent to fully anticipate results.

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

Parameters3/5

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

All four parameters have schema descriptions with 100% coverage, so the baseline is 3. The tool description does not add significant extra semantic detail about the parameters beyond what the schema already provides (e.g., keyword is described as 'What you are looking for' in both places).

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

Purpose5/5

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

The description clearly states the tool's purpose: to locate a setting in an unknown admin panel by clicking through menu links until the keyword is found, then reporting the menu path. This distinguishes it from other search-related tools like find_text or query_dom, which operate on the current page only.

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

Usage Guidelines4/5

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

The phrase 'in an unknown admin panel' and the mechanism of following menu links give clear context for when this tool is appropriate. It also mentions the max_pages limit and the fact that it navigates the tab, which helps agents decide if this tool fits their need. However, it does not explicitly contrast it with alternatives.

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

find_textA
Read-onlyIdempotent

Find text on the page: parent selector, context, visibility, position per match. Attaches nearby interactive elements (with refs for click/type_text/hover) for the first visible match.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesLiteral text to find, not a regex
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
max_resultsNoCap on matches returned, in document order
case_sensitiveNoMatch case exactly

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds behavioral details about attaching nearby interactive elements with refs for interaction. This is valuable context beyond annotations, though it does not cover edge cases like no match found.

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

Conciseness5/5

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

The description is two concise sentences, front-loaded with the core purpose, followed by an important behavioral detail. No wasted words.

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

Completeness4/5

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

Given no output schema, the description adequately explains the return values (parent selector, context, visibility, position, interactive elements). It covers the main aspects but could be more explicit about the list of matches and behavior when no match is found.

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

Parameters3/5

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

Schema coverage is 100%, so parameters are well-described in the schema. The description does not add additional meaning or usage hints for parameters beyond what the schema provides. The mention of 'parent selector, context, visibility, position' refers to output, not parameters.

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

Purpose5/5

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

The description clearly states the tool finds text on a page and specifies what it returns: parent selector, context, visibility, position per match, and attached interactive elements for the first visible match. This is specific and distinguishes it from sibling tools like query_dom or get_interactives.

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

Usage Guidelines3/5

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

The description implies usage for finding text and obtaining interactive elements, but it lacks explicit guidance on when to use this versus alternatives like query_dom. No when-not-to-use conditions 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.

full_page_screenshotA
Read-onlyIdempotent

Full-page capture by scrolling: stitched segments of ~2 viewports (≤1568px), or one image per viewport with stitch=false. Expensive: ~2.7k image tokens per segment, only max_segments returned, the rest via segment_offset. Reading the text you need is cheaper by an order of magnitude — prefer read_page, extract or find_text unless layout is the question.

ParametersJSON Schema
NameRequiredDescriptionDefault
delayNoms between captures (min 500, Chrome quota)
stitchNofalse = one image per viewport
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
max_scrollsNoCap on scroll steps: a taller page is captured only up to here
max_segmentsNoImages returned from the top (≈2.7k image tokens each); segment_offset for the rest
segment_offsetNoSkip the first N segments

TDQS

A4.8/5.0
Behavior5/5

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

Describes scroll behavior, segment stitching, token costs, and limits (max_scrolls, max_segments, offset). Consistent with readOnlyHint and idempotentHint; no contradiction, and the cost information adds transparency.

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

Conciseness5/5

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

The description is well-structured, front-loading the core purpose, then cost, then usage guidance. It is concise and contains no filler or redundancy, with all sentences contributing to clarity.

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

Completeness4/5

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

The description covers the capture process, cost, when to use, and limits. It does not specify the exact return format (e.g., image URLs), but given the absence of an output schema, the provided information is reasonably complete for an agent to invoke it correctly.

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

Parameters4/5

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

Schema descriptions are already thorough (100% coverage) and meaningfully explain each parameter. The description adds context about cost per segment, which enhances the understanding of max_segments, though not all parameters are further elaborated in the description itself.

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

Purpose5/5

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

The description clearly states the tool's function: full-page capture by scrolling, with stitching or separate viewport images. It distinguishes from other screenshot tools by mentioning the stitching behavior and segment limits.

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

Usage Guidelines5/5

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

Explicitly advises when to prefer text-based tools (read_page, extract, find_text) over this screenshot tool, and provides cost trade-offs. This gives clear guidance on when to use it versus alternatives.

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

get_framesA
Read-onlyIdempotent

List frames (main + iframes) with frameId, parent, URL — for the frame_id parameter of DOM tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds that the tool lists frames with specific fields, which is consistent with annotations and not contradictory.

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

Conciseness5/5

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

The description is a single 16-word sentence that is front-loaded with the verb 'List' and resource. Every word adds value; no fluff.

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

Completeness5/5

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

For a simple listing tool with one optional parameter and no output schema, the description covers the purpose, output structure, and usage context. It is complete enough for an agent to understand and use the tool correctly.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter tab_id, and the description does not add any additional semantics or details about the parameter beyond what the schema already provides. Baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'List frames (main + iframes) with frameId, parent, URL', specifying the verb (List), resource (frames), and output fields. It distinguishes from siblings like get_tabs by targeting frame IDs for DOM tools.

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

Usage Guidelines4/5

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

The description explicitly says 'for the frame_id parameter of DOM tools', indicating when to use this tool (to get frame IDs for DOM operations). It does not mention when not to use or list alternatives, but the usage context is clear.

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

get_interactivesA
Read-onlyIdempotent

List actionable elements (buttons, links, inputs, [role], [onclick]) with ready-to-use CSS selector, label, position, flags. Prefer this over dumping HTML to discover selectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax elements returned; raise it on a dense page
scopeNoLimit search (CSS selector)
formatNolines is compact; json adds full attributes per elementlines
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
visible_onlyNofalse also lists elements hidden or scrolled out of view

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint. The description adds behavioral context by detailing what elements are considered actionable (buttons, links, inputs, roles, onclick) and that it returns selectors, labels, positions, and flags. No contradiction with annotations.

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

Conciseness5/5

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

Only two sentences, both front-loaded with the tool's purpose and key benefit. No wasted words.

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

Completeness4/5

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

With full schema coverage, no output schema, and annotations, the description provides sufficient context about what the tool returns and when to use it. It could mention return format (lines/json) but the schema already covers that.

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

Parameters3/5

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

Schema coverage is 100% with all parameters described. The description does not add parameter-specific meaning beyond the schema, but the overall usage context helps. Baseline 3 is appropriate.

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

Purpose5/5

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

Description clearly states it lists actionable elements (buttons, links, etc.) with ready-to-use CSS selectors, labels, positions, and flags. It distinguishes itself from sibling tools by recommending preference over dumping HTML.

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

Usage Guidelines4/5

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

Explicitly advises to prefer this tool over dumping HTML to discover selectors, providing clear usage guidance. Could be strengthened by mentioning conditions where alternatives are better, but it's still helpful.

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

get_page_infoA
Read-onlyIdempotent

Get page metadata: meta tags, scripts, stylesheets, links, and forms

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety and idempotency are clear. Description adds specific metadata types, but no additional behavioral context (e.g., network requests, 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.

Conciseness5/5

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

Single sentence with no wasted words, clearly front-loading the purpose. Highly concise.

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

Completeness4/5

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

Description lists the output components (meta tags, scripts, etc.), providing sufficient context for an agent to understand what will be returned, even without an output schema. Could mention return format but not critical.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for both parameters. The description does not add extra parameter information beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states verb and resource: 'Get page metadata' and lists specific items (meta tags, scripts, stylesheets, links, forms). Distinguishes from siblings like query_dom (broader) and get_interactives (interactive elements).

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. Among many sibling tools, no context is provided for selection.

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

get_statusA
Read-onlyIdempotent

Check bridge status: extension connection, server mode (primary/relay), port, version

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds minimal extra context beyond listing fields.

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

Conciseness5/5

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

Single sentence, no waste, front-loaded with purpose.

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

Completeness4/5

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

For a zero-parameter status check, the description adequately lists key fields. Could elaborate on field meanings or possible values.

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

Parameters4/5

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

No parameters in schema (100% coverage). Description lists output fields, adding value beyond empty schema.

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

Purpose5/5

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

The description clearly states 'Check bridge status' and lists specific fields (extension connection, server mode, port, version). This distinguishes it from sibling browser automation tools.

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

Usage Guidelines3/5

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

Implies usage for checking bridge status, but no explicit when-to-use or when-not-to-use compared to sibling tools.

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

get_storageA
Read-onlyIdempotent

Read localStorage, sessionStorage or cookies of the current origin (type=all for every one). Read-only. Cookies come with domain, path, expiry and the httpOnly/secure flags, so this also answers whether a session cookie is present — write them back with set_storage, or snapshot a logged-in state with session_fixture.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoall returns the three togetherall
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, etc. Description adds specifics about cookie details (domain, path, expiry, flags) and confirms read-only nature. Consistent and adds value.

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

Conciseness5/5

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

Two sentences, front-loaded with verb and resource. No wasted words; each sentence contributes purpose and detail.

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

Completeness4/5

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

No output schema, but description mentions cookie structure. For a simple read tool, it sufficiently covers behavior and output shape. Adequate given the tool's simplicity.

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

Parameters4/5

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

Schema has 100% description coverage. Description adds context for 'type' (all returns three together) and 'tab_id' default behavior, complementing the schema well.

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

Purpose5/5

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

Description clearly states the tool reads localStorage, sessionStorage, or cookies of the current origin. It differentiates from siblings set_storage and session_fixture by mentioning write and snapshot operations.

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

Usage Guidelines4/5

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

Provides context on when to use, e.g., checking for session cookies, and hints at alternatives. Lacks explicit when-not-to-use but offers good guidance overall.

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

get_tabsA
Read-onlyIdempotent

List every open tab with id, url, title, active flag and mine (created by this session). Read-only. Find a tab_id when the implicit target is not the one you mean. include_windows adds position, size, state and type of each window — needed before moving or tiling.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_windowsNoAlso return the windows with bounds, state, type and tab count

TDQS

A4.4/5.0
Behavior4/5

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

The description states 'Read-only' and explains the 'mine' filter (tabs created by this session), which adds behavioral nuance beyond the annotations. It does not mention side effects, but the read-only nature is unambiguous and reinforced by annotations.

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

Conciseness5/5

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

The description is a single, efficient sentence that packs all essential information—purpose, fields, read-only nature, and parameter rationale—without any redundant wording.

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

Completeness4/5

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

Given there is no output schema, the description adequately enumerates the returned fields for both tabs and windows. It also explains the 'mine' filter and the parameter's purpose. Minor omissions like sorting or pagination are not critical for this simple listing tool.

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

Parameters4/5

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

The single parameter include_windows is explained in the description: it adds window details (position, size, state, type) and is needed before moving or tiling. This adds practical context beyond the schema's dry listing of fields.

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

Purpose5/5

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

The description clearly states the tool lists all open tabs with specific fields (id, url, title, active, mine) and optionally windows. It also explains a key use case—finding a tab_id when the implicit target is ambiguous—which distinguishes it from similar tools.

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

Usage Guidelines4/5

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

It explicitly notes the tool is read-only and guides when to use it (to find a tab_id for other operations). While it doesn't name sibling tools like tab_action or create_tab, the context is clear enough for an agent to select this tool for listing tabs.

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

handle_dialogsA
Idempotent

Auto-accept/dismiss future JS dialogs (alert/confirm/prompt), logging them. reset restores native dialogs and returns the log.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoaccept/dismiss auto-answer future dialogs; reset restores native behaviouraccept
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
prompt_textNoReturned by window.prompt on accept

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide idempotentHint=true, and the description adds logging behavior and the reset functionality. It discloses that dialogs are auto-handled and logged, but does not detail the log format or potential side effects like interference with user interaction.

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

Conciseness5/5

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

The description is two sentences, concise, and front-loaded with the primary action. Every sentence adds value.

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

Completeness5/5

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

For a simple tool with clear schema and annotations, the description and schema together fully explain the tool's capabilities. The log return is mentioned, and optional parameters are covered.

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

Parameters3/5

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

All three parameters have descriptions in the schema (100% coverage), so the description adds minimal extra value beyond what the schema already provides. The description mentions logging and reset but not parameter-specific details.

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

Purpose5/5

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

The description clearly specifies the tool auto-accepts or dismisses future JS dialogs (alert/confirm/prompt) and logging them, with a reset option. It uniquely identifies the resource and action among sibling tools.

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

Usage Guidelines3/5

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

The description implies usage for dialog handling but does not explicitly state when to use this tool vs alternatives or when not to use it. No context on prerequisites or exclusions.

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

handoffA
Idempotent

Hand the browser to the user for what only a person can do — 2FA, CAPTCHA, login, a choice — and wait: a banner in the page shows your message with Done/Cancel, the call returns on click or timeout, redirects included. pick_element: the user clicks an element and you get its selector. Never type credentials yourself.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
messageYesWhat the user should do, one line
timeoutNoms to wait for the click, default 5 min
pick_elementNoAsk the user to click an element; returns its selector, text and box

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the blocking/waiting behavior, the banner UI, and that the call returns on click or timeout, including redirects. It does not fully describe the Cancel path or side effects if the user navigates away, but the core interactive behavior is transparent.

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

Conciseness4/5

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

The description is compact and front-loads the main behavior while adding necessary usage guidance. It is slightly dense with punctuation and clauses, but every sentence contributes useful information.

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

Completeness3/5

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

The description explains when to use the tool and what happens for pick_element, but it does not fully specify the return value for the normal handoff case. It says the call returns on click or timeout, but not what data or status the agent should expect, and Cancel behavior is ambiguous.

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

Parameters4/5

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

Schema descriptions already cover all parameters, and the tool description adds helpful context for message, timeout, and pick_element. It does not add additional meaning for tab_id beyond the schema, but overall the parameters are well understood.

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

Purpose5/5

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

The description clearly states a specific action—handing the browser to the user—and scopes it to tasks only a person can perform, such as 2FA, CAPTCHA, login, or a choice. It also distinguishes the optional pick_element mode, making the tool's purpose unmistakable.

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

Usage Guidelines5/5

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

It explicitly says when to use the tool ('for what only a person can do') and includes a strong directive ('Never type credentials yourself') that guides an agent away from attempting those tasks with other tools. The pick_element sub-behavior is also clearly explained.

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

hoverA
Idempotent

Hover over an element (mouseenter/mouseover), by CSS selector or ref.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoFrom get_interactives
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
selectorNoCSS selector; ">>>" pierces shadow DOM. Triggers CSS and JS hover handlers

TDQS

A3.8/5.0
Behavior4/5

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

The description adds value beyond annotations by stating that hover triggers CSS and JS hover handlers. Annotations already provide idempotentHint=true and destructiveHint=false, so this context is useful.

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

Conciseness5/5

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

Single sentence, front-loaded with the verb and resource, no wasted words. Highly concise.

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

Completeness4/5

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

For a simple hover action with no output schema, the description adequately covers the tool's behavior. It mentions the triggered events, which is sufficient. No major gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents parameters. The description adds minor context ('by CSS selector or ref' and events triggered), but not significant beyond the schema.

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

Purpose5/5

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

The description clearly states the action (hover) and the resource (element by CSS selector or ref), and it distinguishes from sibling tools like click and type_text.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool over alternatives, such as click or type_text. The description does not mention conditions or prerequisites.

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

http_authA
Idempotent

Set/clear credentials for HTTP Basic/Digest auth dialogs (browser-wide, in-memory only).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesset installs credentials for HTTP auth prompts; clear removes them
passwordNoRequired for action=set; kept in memory, never written to disk
usernameNoRequired for action=set

TDQS

A4.2/5.0
Behavior4/5

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

Annotations provide basic hints (readOnlyHint=false, destructiveHint=false, idempotentHint=true). The description adds valuable context: credentials are stored in-memory only, browser-wide. This is consistent with annotations and improves understanding beyond them.

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

Conciseness5/5

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

A single sentence that captures verb, resource, scope, and key constraints. No wasted words, front-loaded with the core action.

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

Completeness4/5

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

Given no output schema, the description adequately covers purpose, scope, and parameter dependencies. It could mention that credentials apply to all requests (global) or note potential security considerations, but for a simple set/clear tool, it is largely complete.

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

Parameters3/5

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

Schema coverage is 100% with clear descriptions for all three parameters. The description reinforces the action enum and indicates username/password are required for action=set. This adds marginal clarity, but the schema already does the heavy lifting.

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

Purpose5/5

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

The description clearly states the action (set/clear), the resource (credentials for HTTP Basic/Digest auth dialogs), and the scope (browser-wide, in-memory only). It is specific and distinct from sibling tools, which are unrelated to auth.

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

Usage Guidelines4/5

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

The description implies usage context ('for HTTP Basic/Digest auth dialogs'), providing clear context. It does not explicitly mention when not to use or alternatives, but the context is sufficiently narrow given the diverse sibling list.

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

http_requestA
Destructive

HTTP request sent from the browser, with the logged-in user's cookies: fetches what a server-side request gets a login page for (invoices, authenticated JSON, exports). Text bodies inline (capped by max_length); save_to writes the bytes — the way to read a PDF, since read_page returns nothing on a PDF tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesAbsolute URL. Cookies are sent for its origin
bodyNoRequest body (POST/PUT/PATCH)
methodNoHEAD fetches headers only, without the bodyGET
headersNoExtra request headers
save_toNoAbsolute path: write the response bytes here instead of returning them (PDF, images, archives)
max_lengthNoMax chars of body returned inline

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=true, so the description does not need to fully disclose side effects. The description does mention sending cookies and writing bytes to a file, which are important behaviors. However, it does not warn that POST/PUT/DELETE methods can modify or destroy remote resources, which is relevant given the destructiveHint annotation.

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

Conciseness4/5

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

The description is compact at two sentences and conveys the core purpose, key parameters, and a specific fallback use case. The phrasing 'fetches what a server-side request gets a login page for' is slightly awkward, but it does not add unnecessary length or repetition.

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

Completeness3/5

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

The description explains the return behavior (inline text up to max_length, or bytes written via save_to) but lacks details about response status codes, headers, or error conditions. Since there is no output schema, a bit more information about the response format would improve completeness, though the description is sufficient for basic usage.

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

Parameters3/5

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

Schema coverage is 100%, with each parameter having a description. The description adds useful context for save_to and max_length (e.g., writing bytes for PDFs and capping inline text). It does not go beyond the schema to clarify headers or method semantics, but the schema already covers these adequately, so a baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies the tool as an HTTP request from the browser with the user's cookies, meant to fetch authenticated content such as invoices, JSON, or exports. It also distinguishes the PDF-reading use case from read_page, giving a specific purpose. It could be more direct in naming the action 'perform an HTTP request', but the intent is clear.

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

Usage Guidelines4/5

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

The description explains when to use the tool: when a server-side request would get a login page, for authenticated data, and for PDFs where read_page fails. It also hints at not using read_page for PDFs. It does not explicitly enumerate all alternative tools, but the guidance is concrete and actionable.

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

inject_cssA
Idempotent

Inject a CSS rule into the page. Stays until the next navigation or reload, and re-injecting the same id replaces it rather than stacking. Affects only what is rendered — the stylesheet of the site is untouched.

ParametersJSON Schema
NameRequiredDescriptionDefault
cssYesOne or more CSS rules, as they would appear in a stylesheet
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A4.5/5.0
Behavior5/5

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

The description adds significant behavioral context beyond annotations: lifetime (until navigation/reload), idempotency (re-inject replaces), and non-destructive nature (stylesheets untouched). Annotations already indicate idempotent=true and destructive=false, but description enriches with concrete details.

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

Conciseness5/5

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

Three concise, front-loaded sentences with no redundancy. Each sentence adds essential information: purpose, behavioral details, and scope. Excellent efficiency.

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

Completeness5/5

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

Given the tool's simplicity and the presence of detailed parameter schema, the description covers all necessary aspects: what it does, how it behaves (lifetime, idempotency), and its non-destructive nature. No missing essentials.

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

Parameters3/5

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

Schema coverage is 100% with adequate descriptions for both parameters. The description does not add new parameter-level information beyond what's in the schema. The mention of 'same id' in the description implies an identifier not present in the parameters, which could cause confusion but does not directly affect parameter semantics.

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

Purpose5/5

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

The description clearly states the verb 'inject' and the resource 'CSS rule into the page'. It distinguishes this tool from siblings like modify_dom or execute_js by focusing specifically on CSS injection.

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

Usage Guidelines4/5

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

The description explains persistence ('stays until next navigation') and idempotency ('re-injecting the same id replaces it'). It also clarifies it only affects rendered content, not the site's stylesheet. However, it does not explicitly state when not to use it or mention alternatives.

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

manage_downloadsA

List downloads, start one, or wait for the newest to finish. Files land in the browser Downloads folder, not on the server. download reports the real state: with Chrome set to ask where to save, it comes back waiting_for_user — bytes fetched, nothing moves until someone picks a destination.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoWhat to download (action=download); sent with the session cookies of its origin
limitNoMax download entries returned, newest first
actionYesdownload fetches with the browser cookies and reports the real state; wait_for_complete blocks until the newest finishes
timeoutNoMax ms (wait_for_complete)
filenameNoRelative path inside the Downloads folder (action=download)

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses important side effects and real-world behavior: downloads are saved to the browser's Downloads folder, the tool reports the actual state, and a download may return waiting_for_user if Chrome asks for a destination. This goes beyond the minimal annotations and gives the agent useful runtime expectations.

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

Conciseness5/5

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

The description is concise and front-loaded, leading with the three primary operations. It avoids unnecessary detail and each sentence contributes meaningful information about behavior or side effects.

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

Completeness4/5

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

The description covers the tool's core actions, storage location, and state-reporting behavior, which is enough for basic use. It does not explicitly describe the return values for list or wait_for_complete, but given the simple schema and annotations, this is a minor gap rather than a critical omission.

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

Parameters3/5

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

The JSON schema already provides 100% coverage of all parameters with descriptions. The tool description mostly restates the action enum behavior and adds little new meaning about the parameters themselves, so it provides only marginal additional value beyond the schema.

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

Purpose5/5

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

The description clearly identifies the tool's purpose: list downloads, start one, or wait for completion. It distinguishes this from server-side file operations by explicitly stating files land in the browser Downloads folder, and it conveys the download-state reporting behavior.

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

Usage Guidelines4/5

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

The description explains the practical context of use, including where files are stored and what happens when the browser is configured to ask for a save location. It does not explicitly name alternative sibling tools, but the 'not on the server' note helps an agent choose this over server-side file operations.

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

measure_spacingA
Read-onlyIdempotent

Measure the gap, overlap and distance in CSS pixels between two elements, with their margins and paddings. Read-only. Values come from the current layout, so zoom and viewport size change them: viewport_resize({zoom:1}) and a fixed viewport_resize make results comparable across runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
selector1YesFirst element; distances are measured from its box
selector2YesSecond element; ">>>" pierces shadow DOM

TDQS

A4.4/5.0
Behavior4/5

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

The description states 'Read-only' and explains that values depend on the current layout, zoom, and viewport size, which is important behavioral context. The annotations (readOnlyHint, destructiveHint false) align perfectly. It does not mention potential errors or edge cases, but the most critical behavioral traits are disclosed.

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

Conciseness4/5

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

The description is slightly longer than strictly necessary, containing about 40 words, but every sentence contributes valuable information: metrics, units, read‑only nature, layout dependence, and normalization advice. The structure is clear and front‑loaded with the core purpose.

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

Completeness4/5

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

Without an output schema, the description implies that the tool returns numeric values for gap, overlap, and distance, but it does not explicitly describe the return format or whether additional data (e.g., margins) is included. Given the tool's simplicity, the essential context is present, though a brief note about the exact return shape would make it fully complete.

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

Parameters5/5

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

Every parameter has a meaningful description: `tab_id` explains its fallback behavior, `selector1` and `selector2` both clarify how distances are measured from their boxes and that `>>>` pierces shadow DOM. This adds semantic depth beyond simple name/type information and covers 100% of the parameters.

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

Purpose5/5

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

The description clearly states a specific action (measure), a specific resource (two elements), and the exact metrics (gap, overlap, distance) along with units (CSS pixels). It also includes the relevant scope (margins and paddings) and notes about layout dependence. This leaves no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

The description provides practical guidance for obtaining consistent results by recommending `viewport_resize({zoom:1})` for comparability across runs. While it does not explicitly contrast with alternatives (none of the siblings perform measurements), it effectively communicates how to use the tool correctly in a layout‑dependent context.

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

modify_domA
Idempotent

Change an element in the live DOM: setAttribute, removeAttribute, addClass, removeClass, setStyle, setTextContent. Nothing is persisted — the next reload restores the page as the server sends it. For styling many elements at once inject_css is one call instead of N.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoAttribute name
valueNoAttribute value, style declaration, or text, per action
actionYessetStyle takes a CSS declaration in value; addClass/removeClass take className
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
selectorYesCSS selector; ">>>" pierces shadow DOM. Only the first match is changed
classNameNoClass to add or remove (addClass/removeClass)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate idempotent and non-destructive. Description adds transparency that changes are not persisted across reloads and that only the first match is modified. No contradictions with annotations.

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

Conciseness5/5

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

Two concise sentences plus a one-sentence alternative recommendation. No redundant information; every sentence adds value.

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

Completeness4/5

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

Given the 7 parameters fully described in the schema, no output schema, and annotations providing safety profile, the description adequately covers core functionality and persistence behavior. Could enhance by contrasting with query_dom for read-only access.

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

Parameters3/5

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

Schema coverage is 100% with descriptive parameter names and descriptions. The description does not add additional context beyond the schema, so baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool changes an element in the live DOM, enumerates specific actions (setAttribute, removeAttribute, etc.), and contrasts with inject_css for bulk styling. It differentiates itself from sibling tools like inject_css.

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

Usage Guidelines4/5

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

Explicitly states when to use inject_css instead for many elements, providing clear guidance. Does not explicitly exclude other scenarios, but the contrast is sufficient for most use cases.

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

monitor_networkA
Read-onlyIdempotent

Monitor network requests. source=page: XHR/fetch hook (installed on first call); source=browser: all requests incl. static assets; source=websocket: connections and messages. format=har exports HAR 1.2.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoClear buffer after read
limitNoMost recent; buffer 1000
formatNohar exports HAR 1.2 for external toolinglines
sourceNopage: XHR/fetch only; browser: static assets too; websocket: connections and messagespage
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, openWorld, idempotent, and not destructive. The description adds transparency by noting that the page source installs a hook on first call, which is a subtle side effect not fully covered by the annotations. This extra detail improves 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.

Conciseness5/5

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

The description is compact yet informative, using semicolons to separate key points. It avoids unnecessary fluff and conveys all essential details in a structured manner, making it easy to parse and understand.

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

Completeness4/5

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

The description covers the tool's core behavior, source options, and output format. It lacks a detailed explanation of the return structure (no output schema), but the limit parameter mentions a buffer, giving some context. Overall, it is sufficiently complete for typical usage.

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

Parameters5/5

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

The schema descriptions already cover all parameters, but the description adds semantic clarity for the enum values (e.g., 'page: XHR/fetch only' and 'har exports HAR 1.2') and explains buffer limits. This enriches the parameter meaning beyond the schema alone.

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

Purpose5/5

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

The description clearly states the tool's purpose as 'Monitor network requests' and specifies the different sources (page, browser, websocket) and output format (har). This gives a precise understanding of what the tool does and distinguishes it from potential sibling tools like network_rules.

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

Usage Guidelines3/5

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

The description provides guidance on selecting source types and explains the format export, but it does not explicitly mention when to use this tool over alternatives (e.g., network_rules or track_events). The guidance is implicit through parameter descriptions rather than direct usage scenarios.

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

move_tabA
Idempotent

Move an existing tab into another window (chrome.tabs.move), keeping id, history and page state; works on chrome-untrusted:// tabs too. The destination must be a normal window: out of an app/popup window is fine, into one is refused. A ChromeOS Terminal tab can be pulled out (new_window, window_type popup) but never merged back: extensions cannot create app windows.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoNew window y (new_window)
leftNoNew window x (new_window)
indexNoPosition in the destination window; -1 appends at the end
widthNoNew window width px (new_window)
heightNoNew window height px (new_window)
tab_idYesTab to move; get it from get_tabs
window_idNoDestination window; get_tabs reports windowId for every tab
new_windowNoExtract the tab into a fresh window instead of an existing one
window_typeNonew_window only: popup has no tab strip nor omnibox, the terminal-window looknormal

TDQS

A4.4/5.0
Behavior5/5

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

The description goes beyond the annotations by detailing side effects and edge cases: it preserves id/history/state, works on chrome-untrusted:// tabs, only allows moving into normal windows, and clarifies that ChromeOS Terminal tabs can be pulled out but not merged back. This is extensive 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.

Conciseness5/5

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

The description is concise yet information-dense, packing all necessary constraints and nuances into two sentences without redundancy or filler. It is well-structured and easy to parse.

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

Completeness4/5

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

Given the complexity of the tool (edge cases, constraints, parameter interactions), the description covers the essential usage rules comprehensively. It does not describe the return value or error behavior, but since there is no output schema and the primary usage context is clear, this is a minor gap.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already has descriptive text in the schema. The main description does not add meaning beyond what the schema provides; it merely references get_tabs for tab_id and window_id, which is already in the schema descriptions. Thus baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (move an existing tab) and the target resource (into another window), while also providing key constraints (destination must be normal, etc.). It distinguishes itself from sibling tools like get_tabs or create_tab by focusing specifically on moving tabs.

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

Usage Guidelines4/5

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

The description gives concrete usage guidance: it explains where to get the tab_id (from get_tabs) and notes special cases like chrome-untrusted:// and ChromeOS Terminal tabs. However, it does not explicitly contrast with alternative tools (e.g., tab_action) or state when not to use this tool.

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

network_rulesA
Idempotent

Network interception, browser-wide, survives reloads until cleared: block, redirect, set/remove headers, stub a synthetic body, or record real API responses and replay them with forced errors/latency (local helper; from HTTPS pages the stub host must be trusted).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNoResponse body (action=stub)
nameNoFixture name for record/replay
actionYesrecord saves the page's API responses (url_filter) as a fixture, replay serves them with overrides; list/clear
headerNoHeader name for action=modify_header, e.g. "User-Agent"
statusNoaction=stub
overridesNoreplay: force a status, body or delay on matching URLs — error states a real backend will not produce
url_filterNodeclarativeNetRequest urlFilter, e.g. "||example.com/api/*"
content_typeNoaction=stubapplication/json
header_valueNoOmit to remove header
redirect_urlNoDestination for action=redirect
header_targetNoresponse = strip content-security-policy / x-frame-options, inject CORSrequest
resource_typesNoLimit the rule to these request types; omitted = all of them

TDQS

A3.5/5.0
Behavior4/5

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

The description discloses that rules persist across reloads until cleared and that it is a local helper, with an HTTPS-specific limitation. Combined with annotations indicating non-read-only, idempotent behavior, this gives a solid picture of 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.

Conciseness4/5

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

The description is compact and dense, packing many capabilities into a single readable paragraph. It avoids fluff, though the long colon-separated list requires careful parsing.

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

Completeness3/5

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

It covers core behavior and constraints, but does not explain return values, rule precedence, how to clear a single rule versus all rules, or how overlapping rules are resolved. For a tool with this many actions and optional parameters, that is a notable gap.

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

Parameters4/5

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

The JSON schema already documents all parameters with descriptions, and the narrative description adds useful semantics such as header_target behavior for stripping CSP and injecting CORS, and overrides being useful for error states a real backend will not produce.

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

Purpose4/5

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

The description clearly identifies the tool as browser-wide network interception that can block, redirect, set/remove headers, stub, record, and replay. It is distinct from monitoring tools like monitor_network, though it does not use an explicit verb phrase like 'Manage network rules'.

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

Usage Guidelines2/5

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

The description explains what the tool can do but gives no guidance on when to use it versus alternatives such as monitor_network or http_request. The HTTPS host trust caveat is useful but does not provide selection criteria.

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

press_keyA

Send a key to the focused element (or to selector, focusing it first) as a real keydown/keypress/keyup sequence, so framework handlers fire. For typing a value use type_text; this is for Enter, Tab, Escape, arrows and shortcuts. Not idempotent: two calls send the key twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
altNoHold Alt
keyYese.g. "Enter", "Escape", "Tab", "ArrowDown"
ctrlNoHold Control
metaNoHold Meta (Command/Windows)
shiftNoHold Shift
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
selectorNoTarget (default: activeElement)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate non-idempotent (idempotentHint=false) and non-destructive. Description adds that it simulates a real key sequence and focuses the element if a selector is provided. Does not contradict annotations.

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

Conciseness5/5

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

Two sentences, each serving a clear purpose: first explains the action and effect, second provides usage guidance and idempotency warning. No redundant words.

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

Completeness4/5

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

Covers key aspects: what the tool does, key sequence, focusing behavior, example keys, and idempotency. No output schema, so return values are not needed. Sufficient for an 8-parameter tool.

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

Parameters3/5

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

Schema covers all 8 parameters with descriptions (100% coverage). Description only adds context about focusing when a selector is used, which is already implied. Little additional value beyond schema.

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

Purpose5/5

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

The description clearly states the action ('Send a key to the focused element') and specifies the key sequence (keydown/keypress/keyup). It distinguishes from type_text for typing values and gives examples like Enter, Tab, Escape, arrows, and shortcuts.

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

Usage Guidelines5/5

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

Explicitly tells when to use (Enter, Tab, Escape, arrows, shortcuts) and when not ('For typing a value use type_text'). Also warns about non-idempotency: 'Not idempotent: two calls send the key twice'.

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

query_domA
Read-onlyIdempotent

Query DOM elements by CSS selector, returning structure, attributes, bounding rect, and computed styles.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax elements returned, from the top of the match list
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
selectorYesCSS selector; ">>>" pierces shadow DOM. Matches all, not just the first
propertiesNoComputed styles to include, e.g. ["color"]

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds value by stating what is returned (structure, attributes, bounding rect, computed styles), and the schema covers the limit and selector details. No contradictions.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded with the action and key details. No unnecessary words; highly concise.

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

Completeness4/5

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

Given no output schema, the description adequately hints at the return format (structure, attributes, bounding rect, computed styles). It could mention that results are an array or ordered by DOM order, but it is sufficient for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add extra meaning beyond the schema; it only mentions the selector in the tool description but not the other parameters.

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

Purpose5/5

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

The description clearly states the action (Query DOM elements by CSS selector) and the return data (structure, attributes, bounding rect, computed styles). It is specific and distinguishes from siblings like get_interactives or modify_dom.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus others. It implies usage for general DOM querying but does not mention alternatives or exclusions. Given many sibling tools, more context would help.

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

read_consoleA
Destructive

Read console messages captured since page load, incl. uncaught errors and unhandled rejections.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoClear buffer after read
levelNoall merges every level in one chronological listall
limitNoMost recent; buffer 1000
formatNolines is compact; json keeps timestamps and stack traceslines
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
sourcemapNoResolve bundle.js:line:col frames to source files through their source maps

TDQS

A3.8/5.0
Behavior3/5

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

The description does not disclose potential side effects such as clearing the buffer if the 'clear' parameter is set, but the annotation destructiveHint=true already signals possible destructive behavior. The description does not contradict the annotation, and the parameter schema covers the clearing detail, so transparency is adequate without being explicit.

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

Conciseness5/5

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

The description is a single, concise sentence that conveys the core functionality without unnecessary detail. It is well-structured and easy to parse.

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

Completeness4/5

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

The description mentions what is included (uncaught errors, unhandled rejections) giving some context. Since there is no output schema, it doesn't need to describe return values. However, it could have clarified the scope (e.g., browser console only) slightly more, but overall it is complete for typical use.

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

Parameters3/5

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

Schema coverage is 100% with each parameter having a description. The description does not add further meaning beyond the schema; it only restates the tool's purpose. The baseline of 3 applies because the schema already fully documents parameters.

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

Purpose5/5

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

The description clearly states the tool reads console messages captured since page load, including uncaught errors and unhandled rejections. It specifies the resource (console messages) and the action (read), and is distinct from sibling tools that read page content or DOM.

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

Usage Guidelines3/5

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

The description implies when to use (when needing console output) but does not explicitly mention alternatives or when not to use. It does not reference sibling tools like read_page or get_page_info, leaving the choice to the agent's inference.

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

read_formA
Read-onlyIdempotent

Read a form as the user filled it — label, type, value, checked/selected, required-but-empty, browser validity — to check it against the project's documents before an irreversible Submit. Password and card values come back [redacted]. Read-only, on request.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
selectorNoThe form or container; omitted = every visible control on the page

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description explicitly states 'Read-only' and discloses that password and card values are redacted, which is valuable behavioral information not covered by annotations.

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

Conciseness5/5

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

The description is succinct and well-structured, conveying all necessary information in two sentences without redundancy or fluff.

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

Completeness5/5

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

The description fully covers what the tool does, when to use it, and important constraints. Given the tool's simplicity and lack of output schema, it provides complete context for an agent to use it correctly.

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

Parameters3/5

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

The input schema already provides clear descriptions for both parameters (tab_id, selector). The tool description does not add extra meaning to these parameters, so it meets but does not exceed the baseline for parameter semantics.

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

Purpose5/5

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

The description clearly states the tool's purpose: reading a form as filled by the user, listing specific attributes (label, type, value, etc.) and its intended use case (checking against project documents before submit). It distinguishes itself from generic read tools by focusing on forms.

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

Usage Guidelines4/5

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

It provides usage context ('before an irreversible Submit') and essential caveats (sensitive values redacted, read-only). While it doesn't explicitly name alternative tools, the guidance is sufficient for an agent to decide when to invoke it.

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

read_pageA
Read-onlyIdempotent

Read the page as text (default), markdown, raw HTML, or accessibility tree. Read-only. markdown keeps headings, links and tables at a fraction of the HTML cost. Expensive on big pages: HTML on a large table costs tens of thousands of tokens for data you filter anyway — prefer extract_table/extract for repeated content, get_interactives for click targets.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNotext strips markup; markdown keeps headings/links/tables far cheaper than html; accessibility = a11y treetext
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
save_toNoAbsolute path: write the page there and return the path instead of the content
frame_idNoTarget iframe id from get_frames; omitted = main frame
max_lengthNoMax output chars

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses that the operation is read-only and that HTML mode can be token-expensive, adding useful behavioral context about resource usage.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the purpose, but includes some redundancy around HTML cost and repeated mentions of the same idea, so it is slightly less concise than ideal.

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

Completeness4/5

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

Provides sufficient context for selecting and using the tool, including cost implications and alternatives, though it does not cover potential output variations or errors beyond what the schema implies.

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

Parameters3/5

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

The schema already provides 100% parameter description coverage with clear details for each param, so the tool description adds no extra parameter semantics; baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool reads a page in multiple modes (text, markdown, HTML, accessibility tree) and distinguishes it from siblings by advising when to use extract_table or get_interactives instead.

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

Usage Guidelines5/5

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

Provides explicit usage guidance: warns about high token costs on big pages and recommends alternative tools for repeated content or click targets, making the when-to-use decision clear.

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

save_pageA
DestructiveIdempotent

Save the full page (DOM, styles, images) as an MHTML archive file on the server filesystem.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
output_pathYesAbsolute file path to write (e.g. /tmp/page.mhtml)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds that the tool writes an MHTML archive to the server filesystem, which elaborates on the destructive nature but does not detail side effects 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.

Conciseness5/5

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

The description is a single sentence that conveys all essential information without redundancy or unnecessary details. It is efficiently front-loaded.

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

Completeness4/5

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

Given the tool's simplicity, the description adequately covers the operation. However, it omits potential edge cases, such as errors from invalid paths or overwrite behavior, which could be important for proper use.

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

Parameters3/5

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

Input schema coverage is 100%, so the schema already describes both parameters. The description adds no extra semantics beyond the schema, such as the meaning of 'last tab navigated' for tab_id. Therefore, it provides minimal added value.

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

Purpose5/5

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

The description clearly states the action (save), the resource (full page), and the output format (MHTML archive file). It distinguishes from sibling tools like screenshot (image capture) and read_page (content extraction) by specifying the archive format and filesystem destination.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, such as when to prefer save_page over screenshot or get_page_info. No context about prerequisites or exclusions is given.

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

screenshotA
Read-onlyIdempotent

Screenshot of the visible viewport only (PNG), at the current scroll position, or one per viewport preset with presets. Read-only. Activates the tab in the background without stealing window focus, then restores the previous tab. Downscaled to ≤1568px: for fine print, element_screenshot with scale.

ParametersJSON Schema
NameRequiredDescriptionDefault
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
presetsNoOne capture per preset, window restored; save_to = directory, one file each
save_toNoAbsolute path: write the PNG there and return the path instead of the content

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the read-only, idempotent, and non-destructive annotations, the description discloses a side effect (background tab activation and restoration) and a limitation (downscaling to ≤1568px). These details are not present in the annotations and materially affect how an agent should reason about the call.

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

Conciseness5/5

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

Two sentences, zero filler. The core purpose is front-loaded, followed by behavioral notes and an alternative. Every sentence earns its place.

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

Completeness4/5

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

The description covers the main behavior, presets, save_to implication, side effects, and the key downscaling limitation with a concrete alternative. It relies on the schema for tab_id and save_to details, which is acceptable given the schema coverage. Minor gap: it doesn't mention what happens when no tab_id is provided, but that is already in the schema.

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

Parameters3/5

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

The schema already documents all three parameters with 100% coverage. The description adds minimal new parameter-level meaning, only echoing the preset behavior. Given the high schema coverage, a baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool captures a PNG of the visible viewport only, at the current scroll position or per preset. It explicitly contrasts with element_screenshot and full_page_screenshot, making its scope unambiguous.

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

Usage Guidelines4/5

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

It specifies when to use an alternative (for fine print, use element_screenshot with scale) and implies not for full-page captures by saying 'visible viewport only'. However, it does not enumerate all sibling alternatives or explicitly state when to prefer full_page_screenshot.

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

screenshot_diffA
Idempotent

Visual regression: save a named baseline (viewport, element, or a PNG such as the design mockup) and compare later — changed-pixel % and a red-highlighted diff; or compare_urls: production vs staging in this tab, pixels plus text diff, logged-in pages included. Baselines are in-memory (lost on service worker restart).

ParametersJSON Schema
NameRequiredDescriptionDefault
maskNocompare_urls: selectors hidden on both pages (dates, carousels, ads)
nameNoBaseline id: reuse the same one to compare across runsdefault
url_aNocompare_urls: reference page, e.g. production
url_bNocompare_urls: page under test, e.g. staging or a PR preview
actionYesbaseline stores, compare measures against it, compare_urls diffs url_a vs url_b here, clear drops baselines
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
selectorNoCapture one element (default viewport)
from_fileNoaction=baseline: take it from this PNG (design mockup) instead of capturing
thresholdNoPer-channel tolerance 0-255

TDQS

A4.3/5.0
Behavior4/5

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

The description explicitly notes that baselines are in-memory and lost on service worker restart, which is important stateful behavior. It also mentions that 'clear drops baselines' in the action parameter. It does not fully detail navigation side effects for compare_urls, but the provided context exceeds the annotations alone.

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

Conciseness4/5

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

The description is dense but efficient, packing the core workflow into two sentences. The em-dash list and semicolon structure keep related ideas together, though there is slight redundancy between 'changed-pixel %' and 'pixels plus text diff'.

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

Completeness4/5

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

Given the complexity of multiple actions and parameters, the description covers the essential workflow, output characteristics (changed-pixel percentage and diff highlight), and the in-memory limitation. It does not specify the exact return format, but the parameter-level descriptions and action enum cover most operational details.

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

Parameters4/5

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

All 9 parameters have descriptions in the schema, and the main description adds meaningful context such as using from_file for design mockups and threshold as per-channel tolerance. The descriptions clarify the distinction between compare and compare_urls, so an agent can infer parameter usage without external documentation.

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

Purpose5/5

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

The description opens with 'Visual regression:' and clearly defines the tool's purpose: saving named baselines and comparing later, with support for viewport, element, or PNG baselines. It also distinguishes compare_urls for production-vs-staging diffs, making the intended use obvious.

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

Usage Guidelines4/5

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

The description explains when to use the tool for visual regression and specifically calls out compare_urls for production-vs-staging comparisons. It does not explicitly contrast it with sibling screenshot tools, but the regression-focused wording is enough to imply the alternative use cases.

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

scrollA

Scroll. action=to: once to element/coordinates; action=until: repeatedly until element visible, network idle, or no new content (infinite scroll).

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoAbsolute horizontal position in px (action=to, without selector)
yNoAbsolute vertical position in px (action=to, without selector)
untilNono_new_content stops when the page height stops growingno_new_content
actionNoto jumps to a position or element; until scrolls repeatedly to load moreto
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
step_pxNopx per step, default viewport height
behaviorNoinstant avoids waiting for smooth-scroll animationsauto
frame_idNoTarget iframe id from get_frames; omitted = main frame
offset_yNopx offset for fixed headers (to)
selectorNoTarget (to) or stop element (until=element)
settle_msNoPause ms after each step
max_scrollsNoCap on scroll steps, so an infinite feed terminates

TDQS

A3.6/5.0
Behavior3/5

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

The description adds behavioral context beyond annotations by differentiating the two scroll modes and mentioning conditions like 'network idle' and 'infinite scroll.' However, it does not disclose potential side effects such as triggering lazy loading or the impact of parameters like settle_ms and step_px. Annotations are minimal, so the description carries some burden but is not fully transparent.

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

Conciseness4/5

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

The description is concise with two sentences, front-loading the key information about the two actions. The redundant 'Scroll.' at the start is minor. It is well-structured for quick reading, though it could be slightly more informative without sacrificing conciseness.

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

Completeness3/5

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

Given the complexity (12 parameters, no output schema), the description provides a minimal overview of the two main modes but lacks details on how to use parameters like 'selector', 'offset_y', 'step_px', etc. It is enough for basic understanding but incomplete for advanced usage. The schema descriptions help, but the tool description could be more comprehensive.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are already documented. The description provides a high-level overview of the 'action' and 'until' parameters, but does not add significant meaning to other parameters like 'x', 'y', 'selector', or 'offset_y'. It clarifies the purpose of the two modes, which is useful, but overall adds limited value beyond the schema.

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

Purpose4/5

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

The description clearly states the tool scrolls the page and defines the two distinct actions ('to' and 'until') with specific behaviors. However, it could be more explicit about the overall function (e.g., 'Scroll the current page') rather than just 'Scroll.' Distinguishes between modes but not from sibling tools, which are mostly unrelated.

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

Usage Guidelines4/5

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

The description explains when to use each action: 'to' for one-time scroll to element/coordinates, 'until' for repeated scrolling until a condition. This provides clear context but does not include explicit when-not or alternatives, though none are obviously needed for a scroll tool.

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

session_fixtureA
DestructiveIdempotent

Snapshot localStorage, sessionStorage and cookies of the current origin into a named fixture (a logged-in state, usually), restore one, or list them. save overwrites silently; restore writes on top without clearing and refuses on a different origin — cookies would attach to the wrong site.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRequired for save/restore
actionYessave snapshots the current origin; restore writes it back
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A4.1/5.0
Behavior5/5

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

The description is highly transparent about side effects: 'save overwrites silently' and 'restore writes on top without clearing' explicitly warn about destructive behavior, and the origin restriction is explained. This aligns with the destructiveHint annotation and adds specific detail beyond it.

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

Conciseness5/5

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

The description is concise, using two well-structured sentences. It packs all necessary information without redundancy or filler, making it easy to parse quickly.

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

Completeness4/5

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

The description covers core functionality and safety caveats, but does not mention any return values or error cases beyond the origin refusal. Since there is no output schema, the agent might not know what 'list' returns. Still, for a simple tool, the given context is mostly sufficient.

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

Parameters4/5

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

The parameter descriptions add meaningful context: 'name' is explained as required for save/restore (though optional in schema), 'action' describes save and restore semantics, and 'tab_id' is clear. However, the 'list' action is not explicitly described, and the conditional requirement for 'name' could be clearer. Since schema coverage is 100%, this is above baseline.

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

Purpose4/5

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

The description clearly states the tool's three actions (snapshot, restore, list) and specifies it targets localStorage, sessionStorage, and cookies for the current origin into a named fixture. However, it doesn't explicitly differentiate itself from similar sibling tools like get_storage or set_storage, which might cause some ambiguity.

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

Usage Guidelines3/5

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

It provides useful behavioral context (e.g., 'restore refuses on a different origin') but does not explicitly state when to use this tool over alternatives like session_record or get_storage/set_storage. The condition 'logged-in state' gives some guidance, but a clearer comparison to siblings would improve the score.

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

session_recordA

Record the commands of this session as a replayable jsonl (chrome-bridge replay --file ); observe what the user does in a tab ("watch how I do it") into the same format plus a readable procedure, never recording sensitive values; export a recording as a Playwright test for CI. Replays target the tab they navigate.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoRequired for start, observe and export (recording name, or a .jsonl path)
actionYesstart records this session; observe records what the USER does; stop writes the file; export makes a Playwright test
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
valuesNoobserve: record values of non-sensitive fields instead of {{field}} placeholders
save_toNoAbsolute path: write the exported .spec.ts there and return the path instead of the content

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses key behaviors: it records to a jsonl format, never records sensitive values, and replays target the tab navigated. These are valuable behavioral details beyond the annotations, which are all false. However, it doesn't mention side effects like file creation (beyond the replay command), whether stop is required, or how the export writes files. Given the false annotations, the description carries the burden and does a solid job, though not exhaustive.

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

Conciseness4/5

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

The description is a single run-on sentence with semicolons, but it's dense with information and front-loads the core purpose. It avoids redundant wording and each clause adds distinct value. While not perfectly structured, it is efficient and does not waste words, earning a 4.

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

Completeness4/5

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

For a tool with five parameters and six actions, the description covers the high-level workflow well: recording, observing, exporting, and the replay target. The schema details the actions, so the description doesn't need to repeat them. It misses some nuance like what 'list' or 'status' do, but those are covered by the schema. The lack of an output schema is partially mitigated by the description's mention of 'return the path' in the save_to parameter, so overall it's fairly complete.

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

Parameters3/5

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

The input schema already describes all parameters with 100% coverage, including the action enum and their purposes. The description adds minimal parameter-specific meaning—it mentions the replay file path and observe mode, but these are already implied in the schema. Since the schema is comprehensive, a baseline of 3 is appropriate; the description doesn't significantly enhance parameter understanding.

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

Purpose5/5

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

The description clearly identifies the tool as a session recorder with three distinct capabilities: recording commands, observing user actions, and exporting to Playwright tests. It uses specific verbs and resources, and the three modes are explicitly differentiated, which distinguishes it from generic tools. Though it doesn't name a sibling, the description makes the tool's unique purpose unambiguous.

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

Usage Guidelines3/5

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

The description provides contextual hints like 'for CI' and the replay command, but it doesn't explicitly state when to use this tool over alternatives or when to avoid it. There's no mention of prerequisites (e.g., needing an active session) or exclusions. The guidance is implicit rather than explicit, leaving some inference to the agent.

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

set_geolocationA
Idempotent

Override navigator.geolocation with fixed coordinates (page-level patch). reset restores native.

ParametersJSON Schema
NameRequiredDescriptionDefault
resetNoRestore the real position and stop overriding
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
accuracyNoMeters
latitudeNoDecimal degrees, -90 to 90
longitudeNoDecimal degrees, -180 to 180

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate idempotentHint=true and readOnlyHint=false, which the description does not contradict. The description adds that it is a page-level patch and that reset restores native behavior, but does not elaborate on persistence or scope beyond the page.

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

Conciseness4/5

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

The description is very concise (two sentences) and front-loaded with the main action. It is efficient but could be slightly more structured with separation of setting and resetting.

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

Completeness3/5

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

With 5 parameters and no output schema, the description is adequate but does not explain the interaction between reset and coordinates, or the temporary/durable nature of the override. It lacks guidance for typical testing scenarios.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters. The description adds minimal extra meaning beyond the schema (e.g., 'reset restores native' is implicit in the reset parameter description).

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

Purpose5/5

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

The description clearly states the action: override navigator.geolocation with fixed coordinates. It also mentions the reset capability. This distinguishes it from sibling tools, as no other tool handles geolocation.

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

Usage Guidelines3/5

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

The description implies usage (setting coordinates for testing), but does not explicitly state when to use this tool versus alternatives, nor does it provide exclusion criteria or prerequisites.

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

set_storageA
DestructiveIdempotent

Write, delete or clear a localStorage/sessionStorage key, or a cookie with its path, domain and expiry. action=clear wipes every entry of that type for the origin and cannot be undone — on a site the user is logged into, clearing cookies logs them out. Read the current values first with get_storage.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyNoRequired for set/delete
pathNoCookie path (default /)
typeYescookie writes a real cookie, not a storage key
valueNoRequired for action=set
actionYesclear ignores key and wipes every entry of that type
domainNoCookie domain
secureNoCookie sent over HTTPS only
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
expiresNoUTC date string (cookie)
sameSiteNoNone requires secure=true
http_onlyNoCookie hidden from page JS

TDQS

A4.6/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true, idempotentHint=true), the description adds that clearing cookies logs the user out and cannot be undone, giving critical behavioral context for agent decision-making.

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

Conciseness5/5

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

Two concise sentences with front-loaded core functionality and a critical warning. No wasted words; every sentence adds value.

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

Completeness4/5

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

Given 11 parameters with full schema coverage and no output schema, the description covers the main behavior, destructive consequences, and prerequisite (read first). Could mention error conditions or parameter interactions, but sufficient for selection.

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

Parameters4/5

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

With 100% schema coverage, baseline is 3. The description adds meaning by explaining action=clear wipes all entries of that type and that reading first is advisable, which goes beyond schema descriptions.

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

Purpose5/5

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

The description clearly states the tool writes, deletes, or clears localStorage, sessionStorage, or cookies. It specifies the action, storage type, and parameters like path, domain, and expiry, making it distinct from siblings like get_storage.

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

Usage Guidelines4/5

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

The description advises reading current values first with get_storage, providing clear context for safe usage. It does not explicitly list when not to use, but the destructive hint and warning about logout imply caution.

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

tab_actionA
Destructive

Tab lifecycle: close, activate, reload, back, forward, discard, mute, duplicate, close_session (only tabs this session created). close drops unsaved work and cannot be undone — it may be the user's tab. reload drops injected CSS, emulations and hooks. duplicate works where create_tab is forbidden (chrome-untrusted://) and lands in the source window, app windows included. discard replaces the tab id.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesclose cannot be undone; discard frees memory (reloads on focus); reload drops injected CSS and hooks
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
bypass_cacheNoreload only

TDQS

A4.4/5.0
Behavior5/5

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

The description discloses significant side effects beyond the annotations, such as close dropping unsaved work, reload dropping injections, and discard replacing the tab id. This goes well beyond the destructiveHint and idempotentHint flags, giving the agent clear expectations of consequences.

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

Conciseness5/5

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

The description is compact and information-dense, listing actions and consequences in a single readable paragraph. Every sentence contributes to understanding the tool's behavior and constraints, with no redundant or extraneous content.

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

Completeness4/5

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

The description covers the main actions, side effects, and parameter semantics. It does not mention return values or error cases, but given the absence of an output schema and the operational nature of the tool, the context is adequately complete for most usage scenarios.

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

Parameters3/5

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

The schema already provides descriptions for all parameters, including the enum meanings and the omission rule for tab_id. The tool description adds little extra semantic value beyond what is in the schema, so it meets the baseline for parameter coverage.

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

Purpose5/5

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

The description clearly identifies the tool as performing tab lifecycle actions, listing all supported operations explicitly. It distinguishes from similar tools by noting that duplicate works where create_tab is forbidden, helping disambiguate from sibling tools like create_tab or move_tab.

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

Usage Guidelines4/5

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

It gives specific guidance on when to use certain actions, such as duplicate being available in restricted contexts and close_session applying only to tabs created in this session. It does not explicitly compare all actions to sibling tools, but the provided constraints are useful for agent decision-making.

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

tile_windowsA
Idempotent

Tile Chrome windows over one monitor in equal parts with no gap. Only Chrome windows. The monitor is the one of a window already on it, whose work area is read from a page there: at least one target needs a scriptable tab (not chrome://). Maximized windows are restored first, since maximized ignores bounds.

ParametersJSON Schema
NameRequiredDescriptionDefault
areaNoMonitor area to fill, when no target window has a scriptable tab to read it from
layoutNocolumns splits left to right, rows top to bottom, grid keeps tiles as square as it cangrid
paddingNoPx of empty margin kept inside the work area
window_idsNoWindows to tile; omitted = every normal window on the reference monitor
include_typesNoWindow types to include; omitted = normal only
reference_window_idNoWindow whose monitor is used; omitted = the focused one

TDQS

A3.8/5.0
Behavior4/5

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

The description discloses important behavioral nuances beyond the annotations, such as 'Maximized windows are restored first, since maximized ignores bounds' and the prerequisite that at least one target must have a scriptable tab. These details inform the agent about side effects and conditions, complementing the annotations (readOnlyHint false, idempotentHint true) without contradicting them.

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

Conciseness5/5

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

The description is concise, using two sentences to convey purpose, scope, and behavioral details. It is front-loaded with the core action ('Tile Chrome windows over one monitor in equal parts with no gap') and then efficiently covers constraints and edge cases. Every sentence adds value without redundancy or fluff.

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

Completeness4/5

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

Given the complexity (6 parameters, nested object, enums) and the rich schema descriptions, the description is largely complete. It covers the main purpose, scope, prerequisites, and a key behavioral quirk. It does not mention return values or error handling, but those are not expected from the schema's lack of an output schema. The description fills the context gap well for an agent to decide and invoke the tool.

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

Parameters3/5

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

The input schema already provides descriptions for all six parameters, and these descriptions are specific and informative (e.g., layout 'columns splits left to right', padding 'Px of empty margin kept inside the work area'). The tool description adds little beyond what the schema says; it reinforces the overall behavior but does not materially enhance parameter understanding. With 100% schema coverage, a baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Tile Chrome windows over one monitor in equal parts with no gap.' It specifies the resource (Chrome windows), the action (tile), and the scope (one monitor, equal parts, no gap). The additional clarification 'Only Chrome windows' further narrows the scope, leaving no ambiguity about what the tool does.

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

Usage Guidelines2/5

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

The description provides implicit constraints (e.g., 'at least one target needs a scriptable tab') but does not explicitly state when to use this tool over alternatives. There is no comparison with sibling tools like 'window_layout' or 'move_tab', and no conditions like 'use this when...'. It lacks direct usage guidance for an agent choosing among similar window management tools.

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

track_eventsA
Read-onlyIdempotent

Decode the tracking beacons the page fired (GA4, Meta Pixel, Google Ads, TikTok, LinkedIn, Pinterest, Microsoft Ads, GTM, Hotjar, Clarity) from the browser network log: one line per event with its key params. Read-only; POST-body params are flagged, not decoded.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNoClear the browser log first — call it right before the action you want to observe
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
wait_msNoTime to wait before reading, for beacons sent after the action

TDQS

A4.4/5.0
Behavior5/5

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

The description explicitly states 'Read-only' and 'POST-body params are flagged, not decoded', which adds behavioral detail beyond the annotations. It also indicates output format (one line per event). No contradiction with annotations (readOnlyHint=true, etc.) and the additional limitation on POST-body is valuable.

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

Conciseness5/5

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

The description is concise, two sentences, front-loaded with the main purpose and the tracker list, and includes the read-only note and POST-body limitation. Every sentence adds value with no waste.

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

Completeness4/5

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

For a specialized decoding tool, the description explains what it does, which sources it covers, output format (one line per event), and read-only nature. It lacks a detailed output schema description, but the given summary is sufficient for an agent to understand the expected result. Given the tool's complexity, this is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all three parameters (clear, tab_id, wait_ms). The tool description does not add any parameter-specific semantics beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the tool's purpose: decoding tracking beacons (GA4, Meta Pixel, etc.) from the browser network log, with output as one line per event. It is specific about the resource and lists the major tracker types, and it distinguishes itself from generic network tools like monitor_network.

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

Usage Guidelines4/5

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

The description gives clear context: it is for tracking beacons specifically, not all network traffic. However, it does not explicitly mention when not to use it or name alternatives, so it lacks explicit exclusions but provides enough context for an agent to infer appropriate use.

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

type_textA
Idempotent

Put text into an input, textarea or contenteditable, by selector or ref. Replaces the whole value through the native setter (React/Vue controlled inputs register it) and fires input and change. mode=keys emits keydown/input/keyup per character for autocomplete and masked fields: slower, use it only when mode=set leaves the field empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoFrom get_interactives, e.g. "n3"
modeNoset = assign value; keys = per-char events (autocomplete/masked)set
textYesValue to type; empty string clears the field
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
frame_idNoTarget iframe id from get_frames; omitted = main frame
selectorNoCSS selector; ">>>" pierces shadow DOM. Ignored when ref is given
wait_afterNoSettle before returning: navigation waits for a page load, networkidle for quiet trafficnone

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses key behavioral details beyond the annotations: it replaces the whole value, fires input and change events, and for 'keys' mode emits per-character events. It also notes that selector is ignored when ref is given, and explains the wait_after options. This gives an agent a thorough understanding of side effects and execution behavior.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary action, and includes no redundant wording. It efficiently covers the core functionality, mode selection, and settle behavior without unnecessary elaboration.

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

Completeness4/5

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

Given the tool's complexity (7 parameters, enums, and multiple modes) and the absence of an output schema, the description provides sufficient high-level context. It explains the event firing, mode differences, and wait_after semantics, but does not delve into error handling or edge cases; however, the schema covers parameter details adequately, so the overall context is complete for an 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.

Parameters4/5

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

The schema already provides high coverage (100%) with descriptions for every parameter, so the baseline is 3. The tool description adds meaningful context by explaining the overall behavior (e.g., React/Vue controlled inputs) and clarifying the relationship between mode and ref/selector, which enhances understanding beyond the schema's individual parameter descriptions.

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

Purpose5/5

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

The description clearly states the tool's function: 'Put text into an input, textarea or contenteditable, by selector or ref.' It specifies the target element types and the mechanism (native setter, firing events), making the purpose unambiguous and distinct from sibling tools like click or fill_form.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to use each mode ('set' vs 'keys') and even notes that 'keys' is slower and should only be used when 'set' leaves the field empty. However, it does not explicitly contrast type_text with sibling tools like fill_form, so cross-tool selection guidance is implicit rather than explicit.

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

upload_fileA

Set a file on input[type=file] from the server filesystem via DataTransfer (max 10MB).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path on the server machine
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
selectorYesThe file input to fill; ">>>" pierces shadow DOM
mime_typeNoDefault: inferred from extension

TDQS

A3.8/5.0
Behavior3/5

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

Annotations are mostly false, so description carries burden. It discloses the DataTransfer mechanism and a 10MB limit, but omits behavior on size exceedance, path errors, or whether it clears existing files. Adequate but not rich.

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

Conciseness5/5

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

One concise sentence with no wasted words. Front-loaded with the action and key details.

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

Completeness4/5

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

With no output schema and 4 params fully described in schema, the description adds the 10MB limit and mechanism. Missing error behavior or return value, but complete enough for a straightforward file upload tool.

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

Parameters3/5

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

Schema covers 100% of parameters with descriptions. The description adds only the 10MB limit, which is not per-parameter. Baseline 3 achieved; no additional meaning beyond schema.

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

Purpose5/5

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

The description clearly states the tool uploads a file from the server filesystem to an input[type=file] via DataTransfer, with a 10MB limit. This is specific and distinct from sibling tools like fill_form or type_text.

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

Usage Guidelines3/5

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

The description implies usage for file inputs but does not explicitly state when to use vs alternatives or any exclusions. No 'when not to use' or alternatives mentioned.

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

viewport_resizeA
Idempotent

Resize the Chrome window to a preset (mobile 375x812, tablet 768x1024, desktop 1440x900) or explicit dimensions; the viewport is smaller by the browser chrome, action=get reports the real one. width/height override half a preset. A maximized window on ChromeOS ignores the request.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoWindow y on the virtual desktop
leftNoWindow x on the virtual desktop; on multi-monitor this is what picks the screen
zoomNoPage zoom for this origin, 1 = 100%; applied after the resize
stateNoApplied before bounds: a maximized window accepts left/top/width/height and ignores them
widthNoOverrides preset
actionNoget reports the current viewport without resizing anythingset
heightNoOverrides preset
presetNo375x812, 768x1024, 1440x900
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description clarifies that the viewport is smaller by browser chrome, that action=get reports the real viewport without resizing, and that a maximized window on ChromeOS ignores the request. These are useful behavioral details not covered by annotations.

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

Conciseness5/5

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

The description is a tight three-sentence paragraph with no fluff. The main purpose is front-loaded, and every sentence adds relevant detail (presets, override behavior, viewport vs window, ChromeOS caveat).

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

Completeness4/5

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

For a tool with 9 parameters and no output schema, the description covers the core behaviors: resizing, presets, explicit dimensions, the get action, and the ChromeOS caveat. Parameters like top/left/tab_id are fully documented in the schema, so the description does not need to repeat them. The description is sufficient for an agent to invoke the tool correctly.

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

Parameters4/5

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

With 100% schema coverage, the baseline is 3, but the description adds semantics: width/height override a preset, and action=get reports without resizing. These enrich understanding beyond the schema definitions.

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

Purpose5/5

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

The description states a specific verb (resize) and resource (Chrome window), defines preset dimensions, and distinguishes the viewport from the window. It implicitly differentiates from sibling layout tools like window_layout by focusing on viewport sizing, so an agent can tell it apart.

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

Usage Guidelines3/5

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

The description gives usage conditions such as the maximized-window-on-ChromeOS caveat and the action=get behavior, but it does not explicitly compare to alternatives like window_layout or tile_windows. An agent must infer when to prefer this tool over those siblings.

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

wait_forA
Read-onlyIdempotent

Block until a condition holds: element, text, function (JS expression; needs the "Allow user scripts" toggle), navigation (mode=spa for client-side routes), network_idle. Polls until timeout (10s element/function, 15s the rest) then returns found: false with a reason instead of raising: check it, or a failed wait reads as success. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNospa = pushState/popstate/hashchangeload
textNoLiteral text to wait for (condition=text), matched case-insensitively
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
idle_msNoQuiet period ms (network_idle)
timeoutNoMax ms (default 10000; 15000 navigation/network_idle)
visibleNoElement must also be visible
frame_idNoTarget iframe id from get_frames; omitted = main frame
intervalNoPoll ms, min 50
selectorNocondition=element; with condition=text it narrows the search to that subtree
conditionYeselement and text need selector or text; function needs expression
expressionNoJS expression (condition=function)

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses key behavioral details: it blocks execution, returns 'found: false' with a reason instead of raising an error on timeout, and mentions the 'Allow user scripts' toggle dependency for function conditions. This provides practical information about how the tool behaves in edge cases.

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

Conciseness5/5

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

The description is a single, well-structured paragraph that efficiently lists the condition types, relevant parameters, timeouts, and return behavior without extraneous detail. It is easy to parse and directly addresses the core functionality.

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

Completeness4/5

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

Given the tool's complexity (11 parameters, 5 condition types, enums), the description provides a solid high-level overview but does not explicitly cover every combination or edge case (e.g., interaction between selector and condition=navigation). However, the schema fills these gaps, so the description is sufficiently complete for most usage scenarios.

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

Parameters4/5

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

The input schema already provides comprehensive descriptions for all 11 parameters (100% coverage). The description text adds extra value by clarifying the relationship between selector and text (narrowing search) and by noting the toggle requirement, though these are minor increments over the schema's own explanations.

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

Purpose5/5

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

The description clearly specifies that the tool blocks until a condition holds and enumerates the supported condition types (element, text, function, navigation, network_idle). It distinguishes itself from sibling tools like read_page or get_page_info by focusing exclusively on waiting for state changes, 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.

Usage Guidelines4/5

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

The description provides implicit usage guidance by explaining each condition type and the associated requirements (e.g., needing the 'Allow user scripts' toggle for function). It does not explicitly compare against alternatives, but the context is sufficient for an agent to decide when to invoke this tool for waiting on asynchronous conditions.

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

watchA
Idempotent

Keep watching a page in the background — "tell me when the pipeline is green / the Approve button appears / this number changes" — checked every interval_s by the extension. Events are collected, not pushed: action=poll, or a script blocking on "chrome-bridge watch --wait ". Survives extension idling, not a browser restart.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoWatch id
textNoText that appears / disappears
sinceNopoll: events after this ms timestamp
untilNoDefault: change with value_of, else match
actionNopoll = events since a timestampadd
reloadNoReload before each check, for pages that do not update live
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
selectorNoElement that appears (until=match) or disappears (until=gone)
value_ofNoElement whose text changing fires (until=change)
interval_sNoBetween checks, min 30
expires_minNoGive up after

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and non-destructive, so the description doesn't repeat those. It adds valuable context beyond annotations: 'Survives extension idling, not a browser restart' clarifies persistence scope, and 'Events are collected, not pushed' explains the event delivery model. These details help an agent understand lifecycle and consumption without contradicting the annotations.

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

Conciseness4/5

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

The description is compact, front-loaded with the core purpose, and includes illustrative examples. It packs multiple behavioral notes (polling, event collection, persistence) into three sentences without redundancy. Slightly dense but efficient; no wasted words.

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

Completeness3/5

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

For an 11-parameter tool with no output schema, the description explains the watch mechanism and lifecycle but does not describe what the tool returns (e.g., event structure or format). Since parameters are fully documented in the schema, the main gap is the output contract. An agent might need additional clues to interpret the result, especially for the poll action.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is individually documented. The tool description does not add additional meaning to the parameters beyond what the schema provides; it only references interval_s in context. This meets the baseline for fully covered schemas, but does not elevate it.

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

Purpose5/5

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

The description clearly states the tool's purpose: to keep watching a page in the background for conditions like text appearing, disappearing, or changing. It provides concrete examples (pipeline green, Approve button appears) and explicitly distinguishes the polling mechanism ('events are collected, not pushed'). This differentiates it from siblings like watch_dom or wait_for by emphasizing the background, interval-based monitoring.

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

Usage Guidelines3/5

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

The description gives usage context (polling with action=poll, blocking script with --wait) but does not explicitly state when to choose this tool over alternatives like watch_dom or wait_for. It implies usage for long-running background checks but lacks exclusions or alternative routing, leaving the decision partially to inference.

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

watch_domA
Read-onlyIdempotent

Watch DOM mutations (MutationObserver). First call installs the watcher; later calls read accumulated mutations.

ParametersJSON Schema
NameRequiredDescriptionDefault
stopNoDisconnect observer
clearNoClear buffer after read
limitNoMost recent mutations; buffer 1000
tab_idNoTarget tab; omitted = last tab navigated in this session, else the active one
subtreeNoObserve descendants too, not just the matched node
selectorNoSubtree to observe; ">>>" pierces shadow DOMbody
childListNoReport added and removed children
attributesNoReport attribute changes
characterDataNoReport text content changes

TDQS

A3.5/5.0
Behavior2/5

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

The description adds stateful behavior (install watcher on first call) which contradicts the 'idempotentHint: true' annotation. While it discloses more about usage pattern than annotations alone, the contradiction reduces reliability. Missing details on side effects like buffer limits or callback behavior.

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

Conciseness5/5

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

The description is extremely concise with two sentences covering the core functionality and phase behavior. No redundant words; essential information is front-loaded.

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

Completeness3/5

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

While parameter details are fully covered by the schema, the description lacks information about return format, how mutations are structured, and the lifecycle of the watcher. For a tool with 9 parameters, more behavioral context (e.g., how to stop/clear) would improve completeness.

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

Parameters3/5

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

Schema description coverage is 100%, so the description adds no additional meaning beyond the schema. Each parameter's purpose is already clear from the schema, so no extra value from the tool description.

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

Purpose5/5

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

The description clearly states the tool watches DOM mutations via MutationObserver and explains the two-phase behavior (install then read). It distinguishes itself from siblings like 'query_dom' or 'modify_dom' by specifying the observation pattern.

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

Usage Guidelines3/5

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

The description implies the tool is for tracking DOM changes over time but does not explicitly state when to use it versus alternatives like 'get_interactives' or 'execute_js'. No exclusions or prerequisite conditions are provided.

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

window_layoutA
DestructiveIdempotent

Save the current window arrangement under a name, restore, list or delete. save overwrites silently. Window ids do not survive a browser restart: restore matches windows by the overlap of their tab URLs and reports the ones it cannot recognise instead of guessing.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoLayout name, required except for list
actionYessave snapshots every window; restore repositions the recognised ones

TDQS

A4.3/5.0
Behavior5/5

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

The description discloses key side effects and behaviors: save overwrites silently, and restore matches by tab URL overlap while reporting unrecognized windows. This goes beyond the annotations and gives the agent concrete expectations for action outcomes.

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

Conciseness5/5

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

The description is two concise sentences, front-loading the primary purpose and then adding essential behavioral details. There is no redundancy or extraneous information.

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

Completeness5/5

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

Given the tool's moderate complexity and absence of an output schema, the description covers the core functionality, key side effects, and the matching strategy for restore. It provides enough context for an agent to use the tool correctly without further documentation.

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

Parameters3/5

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

The schema description covers 100% of parameters (action and name), so the baseline is 3. The tool description does not add further semantic details beyond what the schema already provides, so it remains at baseline.

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

Purpose5/5

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

The description clearly states the tool's purpose with specific verbs (save, restore, list, delete) and the resource (window arrangement under a name). It distinguishes itself from related window tools by focusing on named layouts rather than individual window actions.

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

Usage Guidelines3/5

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

The description provides important behavioral notes (silent overwrite, URL-based matching) but does not explicitly state when to use this tool versus alternatives like tile_windows or move_tab. It implies usage through its functionality but lacks direct comparison.

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

Tool Schema Changelog

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

  1. 31 tool updatesv1.16.1
    • Removedaccessibility_audit
    • Addedaudit
    • Removedcheck_links
    • Addedcookie_audit
    • Changedelement_screenshot3 fields changed
      • addedInput schema / properties / region
        Added value: +{
        +  "description": "Box in viewport CSS px (the rect frame of get_interactives/query_dom), instead of selector",
        +  "properties": {
        +    "height": {
        +      "type": "number"
        +    },
        +    "width": {
        +      "type": "number"
        +    },
        +    "x": {
        +      "type": "number"
        +    },
        +    "y": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "x",
        +    "y",
        +    "width",
        +    "height"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / scale
        Added value: +{
        +  "default": 1,
        +  "description": "Enlargement of the crop, 1-4; output still capped at 1568px",
        +  "maximum": 4,
        +  "minimum": 1,
        +  "type": "number"
        +}
      • removedInput schema / required
        Removed value: -[
        -  "selector"
        -]
    • Addedfind_setting
    • Changedfull_page_screenshot1 field changed
      • changedInput schema / properties / max_segments / description
        Previous value: -"Images returned, from the top (each ≈2.7k image tokens); raise or use segment_offset for the rest"New value: +"Images returned from the top (≈2.7k image tokens each); segment_offset for the rest"
    • Removedget_performance
    • Addedhandoff
    • Removedhighlight_elements
    • Removedlist_event_listeners
    • Changedmanage_downloads1 field changed
      • changedInput schema / properties / action / description
        Previous value: -"download fetches with the browser cookie jar and reports the real state; wait_for_complete blocks until the newest finishes"New value: +"download fetches with the browser cookies and reports the real state; wait_for_complete blocks until the newest finishes"
    • Changedmonitor_network2 fields changed
      • changedInput schema / properties / source / description
        Previous value: -"page sees XHR/fetch only; browser also sees static assets"New value: +"page: XHR/fetch only; browser: static assets too; websocket: connections and messages"
      • changedInput schema / properties / source / enum
        Previous value: -[
        -  "page",
        -  "browser"
        -]New value: +[
        +  "page",
        +  "browser",
        +  "websocket"
        +]
    • Removedmonitor_websocket
    • Changedmove_tab2 fields changed
      • changedInput schema / properties / new_window / description
        Previous value: -"Extract the tab into a fresh window instead — tabs.move needs an existing window, this does not"New value: +"Extract the tab into a fresh window instead of an existing one"
      • changedInput schema / properties / window_type / description
        Previous value: -"new_window only: popup has no tab strip and no omnibox — the terminal-window look for detached chrome-untrusted://terminal tabs"New value: +"new_window only: popup has no tab strip nor omnibox, the terminal-window look"
    • Changednetwork_rules4 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"list and clear inspect and drop the rules already installed"New value: +"record saves the page's API responses (url_filter) as a fixture, replay serves them with overrides; list/clear"
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "block",
        -  "redirect",
        -  "modify_header",
        -  "stub",
        -  "list",
        -  "clear"
        -]New value: +[
        +  "block",
        +  "redirect",
        +  "modify_header",
        +  "stub",
        +  "record",
        +  "replay",
        +  "list",
        +  "clear"
        +]
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Fixture name for record/replay",
        +  "type": "string"
        +}
      • addedInput schema / properties / overrides
        Added value: +{
        +  "description": "replay: force a status, body or delay on matching URLs — error states a real backend will not produce",
        +  "items": {
        +    "properties": {
        +      "body": {
        +        "type": "string"
        +      },
        +      "latency_ms": {
        +        "type": "number"
        +      },
        +      "status": {
        +        "type": "number"
        +      },
        +      "url_contains": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url_contains"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedread_console1 field changed
      • addedInput schema / properties / sourcemap
        Added value: +{
        +  "default": false,
        +  "description": "Resolve bundle.js:line:col frames to source files through their source maps",
        +  "type": "boolean"
        +}
    • Addedread_form
    • Changedread_page1 field changed
      • changedInput schema / properties / mode / description
        Previous value: -"text strips markup, markdown keeps headings/links/tables far cheaper than html, accessibility returns the a11y tree"New value: +"text strips markup; markdown keeps headings/links/tables far cheaper than html; accessibility = a11y tree"
    • Changedscreenshot1 field changed
      • addedInput schema / properties / presets
        Added value: +{
        +  "description": "One capture per preset, window restored; save_to = directory, one file each",
        +  "items": {
        +    "enum": [
        +      "mobile",
        +      "tablet",
        +      "desktop"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedscreenshot_diff6 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"baseline stores, compare measures against it, clear drops baselines"New value: +"baseline stores, compare measures against it, compare_urls diffs url_a vs url_b here, clear drops baselines"
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "baseline",
        -  "compare",
        -  "list",
        -  "clear"
        -]New value: +[
        +  "baseline",
        +  "compare",
        +  "compare_urls",
        +  "list",
        +  "clear"
        +]
      • addedInput schema / properties / from_file
        Added value: +{
        +  "description": "action=baseline: take it from this PNG (design mockup) instead of capturing",
        +  "type": "string"
        +}
      • addedInput schema / properties / mask
        Added value: +{
        +  "description": "compare_urls: selectors hidden on both pages (dates, carousels, ads)",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / url_a
        Added value: +{
        +  "description": "compare_urls: reference page, e.g. production",
        +  "type": "string"
        +}
      • addedInput schema / properties / url_b
        Added value: +{
        +  "description": "compare_urls: page under test, e.g. staging or a PR preview",
        +  "type": "string"
        +}
    • Removedsecurity_headers
    • Removedseo_audit
    • Changedsession_record6 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"start begins recording, stop writes the file and returns its path"New value: +"start records this session; observe records what the USER does; stop writes the file; export makes a Playwright test"
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "start",
        -  "stop",
        -  "status",
        -  "list"
        -]New value: +[
        +  "start",
        +  "stop",
        +  "status",
        +  "list",
        +  "export",
        +  "observe"
        +]
      • changedInput schema / properties / name / description
        Previous value: -"Required for start"New value: +"Required for start, observe and export (recording name, or a .jsonl path)"
      • addedInput schema / properties / save_to
        Added value: +{
        +  "description": "Absolute path: write the exported .spec.ts there and return the path instead of the content",
        +  "type": "string"
        +}
      • addedInput schema / properties / tab_id
        Added value: +{
        +  "description": "Target tab; omitted = last tab navigated in this session, else the active one",
        +  "type": "number"
        +}
      • addedInput schema / properties / values
        Added value: +{
        +  "default": false,
        +  "description": "observe: record values of non-sensitive fields instead of {{field}} placeholders",
        +  "type": "boolean"
        +}
    • Removedset_zoom
    • Changedtab_action2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"close cannot be undone; discard frees memory, the tab reloads on focus; reload drops injected CSS and hooks"New value: +"close cannot be undone; discard frees memory (reloads on focus); reload drops injected CSS and hooks"
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "close",
        -  "activate",
        -  "reload",
        -  "back",
        -  "forward",
        -  "discard",
        -  "mute",
        -  "unmute",
        -  "duplicate"
        -]New value: +[
        +  "close",
        +  "activate",
        +  "reload",
        +  "back",
        +  "forward",
        +  "discard",
        +  "mute",
        +  "unmute",
        +  "duplicate",
        +  "close_session"
        +]
    • Addedtrack_events
    • Removedunused_css
    • Changedviewport_resize1 field changed
      • addedInput schema / properties / zoom
        Added value: +{
        +  "description": "Page zoom for this origin, 1 = 100%; applied after the resize",
        +  "type": "number"
        +}
    • Addedwatch
    • Removedweb_vitals
  2. 8 tool updatesv1.15.0
    • Changedcreate_tab5 fields changed
      • addedInput schema / properties / height
        Added value: +{
        +  "description": "Window height px (new_window)",
        +  "type": "number"
        +}
      • addedInput schema / properties / left
        Added value: +{
        +  "description": "Window x on the virtual desktop (new_window)",
        +  "type": "number"
        +}
      • addedInput schema / properties / new_window
        Added value: +{
        +  "default": false,
        +  "description": "Open in a fresh window instead of a tab; with left/top it lands on the chosen monitor",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / top
        Added value: +{
        +  "description": "Window y (new_window)",
        +  "type": "number"
        +}
      • addedInput schema / properties / width
        Added value: +{
        +  "description": "Window width px (new_window)",
        +  "type": "number"
        +}
    • Changedget_tabs1 field changed
      • addedInput schema / properties / include_windows
        Added value: +{
        +  "default": false,
        +  "description": "Also return the windows with bounds, state, type and tab count",
        +  "type": "boolean"
        +}
    • Changedmanage_downloads4 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"wait_for_complete blocks until the newest download finishes or times out"New value: +"download fetches with the browser cookie jar and reports the real state; wait_for_complete blocks until the newest finishes"
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "list",
        -  "wait_for_complete"
        -]New value: +[
        +  "list",
        +  "wait_for_complete",
        +  "download"
        +]
      • addedInput schema / properties / filename
        Added value: +{
        +  "description": "Relative path inside the Downloads folder (action=download)",
        +  "type": "string"
        +}
      • addedInput schema / properties / url
        Added value: +{
        +  "description": "What to download (action=download); sent with the session cookies of its origin",
        +  "type": "string"
        +}
    • Changedmove_tab7 fields changed
      • addedInput schema / properties / height
        Added value: +{
        +  "description": "New window height px (new_window)",
        +  "type": "number"
        +}
      • addedInput schema / properties / left
        Added value: +{
        +  "description": "New window x (new_window)",
        +  "type": "number"
        +}
      • addedInput schema / properties / new_window
        Added value: +{
        +  "default": false,
        +  "description": "Extract the tab into a fresh window instead — tabs.move needs an existing window, this does not",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / top
        Added value: +{
        +  "description": "New window y (new_window)",
        +  "type": "number"
        +}
      • addedInput schema / properties / width
        Added value: +{
        +  "description": "New window width px (new_window)",
        +  "type": "number"
        +}
      • addedInput schema / properties / window_type
        Added value: +{
        +  "default": "normal",
        +  "description": "new_window only: popup has no tab strip and no omnibox — the terminal-window look for detached chrome-untrusted://terminal tabs",
        +  "enum": [
        +    "normal",
        +    "popup"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "tab_id",
        -  "window_id"
        -]New value: +[
        +  "tab_id"
        +]
    • Changedtab_action2 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"close cannot be undone; reload drops injected CSS and page hooks"New value: +"close cannot be undone; discard frees memory, the tab reloads on focus; reload drops injected CSS and hooks"
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "close",
        -  "activate",
        -  "reload",
        -  "back",
        -  "forward"
        -]New value: +[
        +  "close",
        +  "activate",
        +  "reload",
        +  "back",
        +  "forward",
        +  "discard",
        +  "mute",
        +  "unmute",
        +  "duplicate"
        +]
    • Addedtile_windows
    • Changedviewport_resize3 fields changed
      • addedInput schema / properties / left
        Added value: +{
        +  "description": "Window x on the virtual desktop; on multi-monitor this is what picks the screen",
        +  "type": "number"
        +}
      • addedInput schema / properties / state
        Added value: +{
        +  "description": "Applied before bounds: a maximized window accepts left/top/width/height and ignores them",
        +  "enum": [
        +    "normal",
        +    "maximized",
        +    "fullscreen",
        +    "minimized"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / top
        Added value: +{
        +  "description": "Window y on the virtual desktop",
        +  "type": "number"
        +}
    • Addedwindow_layout
  3. 1 tool updatev1.12.0
    • Addedmove_tab
  4. 6 tool updatesv1.11.0
    • Changedclick2 fields changed
      • addedInput schema / properties / button
        Added value: +{
        +  "default": "left",
        +  "description": "right opens the page context menu instead of activating the element",
        +  "enum": [
        +    "left",
        +    "right"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / count
        Added value: +{
        +  "default": 1,
        +  "description": "2 emits dblclick after the two clicks, which is what selects a word or opens an editor",
        +  "type": "number"
        +}
    • Changedextract1 field changed
      • addedInput schema / properties / save_to
        Added value: +{
        +  "description": "Absolute path: write the records as JSON there and return the path instead of the content",
        +  "type": "string"
        +}
    • Changedread_page3 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"text strips markup, html keeps it (costly), accessibility returns the a11y tree"New value: +"text strips markup, markdown keeps headings/links/tables far cheaper than html, accessibility returns the a11y tree"
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "text",
        -  "html",
        -  "accessibility"
        -]New value: +[
        +  "text",
        +  "markdown",
        +  "html",
        +  "accessibility"
        +]
      • addedInput schema / properties / save_to
        Added value: +{
        +  "description": "Absolute path: write the page there and return the path instead of the content",
        +  "type": "string"
        +}
    • Changedscreenshot1 field changed
      • addedInput schema / properties / save_to
        Added value: +{
        +  "description": "Absolute path: write the PNG there and return the path instead of the content",
        +  "type": "string"
        +}
    • Changedviewport_resize1 field changed
      • addedInput schema / properties / action
        Added value: +{
        +  "default": "set",
        +  "description": "get reports the current viewport without resizing anything",
        +  "enum": [
        +    "set",
        +    "get"
        +  ],
        +  "type": "string"
        +}
    • Changedwait_for4 fields changed
      • changedInput schema / properties / condition / description
        Previous value: -"function needs expression; element needs selector"New value: +"element and text need selector or text; function needs expression"
      • changedInput schema / properties / condition / enum
        Previous value: -[
        -  "element",
        -  "function",
        -  "navigation",
        -  "network_idle"
        -]New value: +[
        +  "element",
        +  "text",
        +  "function",
        +  "navigation",
        +  "network_idle"
        +]
      • changedInput schema / properties / selector / description
        Previous value: -"condition=element"New value: +"condition=element; with condition=text it narrows the search to that subtree"
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "Literal text to wait for (condition=text), matched case-insensitively",
        +  "type": "string"
        +}
  5. 58 tool updatesv1.10.0
    • Changedaccessibility_audit2 fields changed
      • addedInput schema / properties / checks / description
        Added value: +"Subset to run; fewer checks means a shorter answer"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedassert4 fields changed
      • addedInput schema / properties / selector / description
        Added value: +"Element the assertion is about; \">>>\" pierces shadow DOM"
      • addedInput schema / properties / state / description
        Added value: +"attached means present in the DOM, visible also requires a rendered box"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / timeout / description
        Added value: +"Max ms to wait for the condition before failing"
    • Changedcheck_links5 fields changed
      • addedInput schema / properties / format / description
        Added value: +"lines is compact; json keeps per-link status and timing"
      • addedInput schema / properties / max_links / description
        Added value: +"Cap on links fetched: each one is a real HTTP request"
      • addedInput schema / properties / scope / description
        Added value: +"same-origin skips third-party links, which are the slow ones"
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. Restricts which links are collected"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedclick4 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. Ignored when ref is given"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / wait_after / description
        Added value: +"Settle before returning: navigation waits for a page load, networkidle for quiet traffic"
    • Changedclipboard2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"write takes text; read returns the current clipboard contents"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedcreate_tab1 field changed
      • addedInput schema / properties / active / description
        Added value: +"false opens the tab in the background, leaving the current one focused"
    • Changeddismiss_overlays1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changeddrag_and_drop5 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / mode / description
        Added value: +"Which event family to emit, since libraries listen to different ones"
      • addedInput schema / properties / source_selector / description
        Added value: +"Element to drag; \">>>\" pierces shadow DOM"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / target_selector / description
        Added value: +"Drop target; \">>>\" pierces shadow DOM"
    • Changedelement_screenshot2 fields changed
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. The element is scrolled into view first"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedemulate_media4 fields changed
      • addedInput schema / properties / colorScheme / description
        Added value: +"Value reported to prefers-color-scheme queries"
      • addedInput schema / properties / printMode / description
        Added value: +"Make print media queries match, without opening a print dialog"
      • addedInput schema / properties / reducedMotion / description
        Added value: +"Value reported to prefers-reduced-motion queries"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedexecute_js3 fields changed
      • addedInput schema / properties / code / description
        Added value: +"JS evaluated in the page; the value of the last expression is returned"
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedextract3 fields changed
      • addedInput schema / properties / format / description
        Added value: +"lines is compact; json keeps one object per record"
      • addedInput schema / properties / max_items / description
        Added value: +"Cap on records returned, in document order"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedextract_table4 fields changed
      • addedInput schema / properties / index / description
        Added value: +"Which table to take when the selector matches several, 0-based"
      • addedInput schema / properties / selector / description
        Added value: +"The table to read; \">>>\" pierces shadow DOM"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • changedInput schema / properties / where / description
        Previous value: -"Keep only rows where each {column: substring} matches (case-insensitive contains). Use key \"any\" (or when the table has no headers) to match against any cell."New value: +"{column: substring} rows must match, case-insensitive contains. Key \"any\" matches any cell."
    • Changedfill_form3 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / wait_after / description
        Added value: +"Settle before returning: navigation waits for a page load, networkidle for quiet traffic"
    • Changedfind_text4 fields changed
      • addedInput schema / properties / case_sensitive / description
        Added value: +"Match case exactly"
      • addedInput schema / properties / max_results / description
        Added value: +"Cap on matches returned, in document order"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / text / description
        Added value: +"Literal text to find, not a regex"
    • Changedfull_page_screenshot2 fields changed
      • addedInput schema / properties / max_scrolls / description
        Added value: +"Cap on scroll steps: a taller page is captured only up to here"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedget_frames1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedget_interactives5 fields changed
      • addedInput schema / properties / format / description
        Added value: +"lines is compact; json adds full attributes per element"
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / limit / description
        Added value: +"Max elements returned; raise it on a dense page"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / visible_only / description
        Added value: +"false also lists elements hidden or scrolled out of view"
    • Changedget_page_info2 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedget_performance1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedget_storage2 fields changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / type / description
        Added value: +"all returns the three together"
    • Changedhandle_dialogs2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"accept/dismiss auto-answer future dialogs; reset restores native behaviour"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedhighlight_elements5 fields changed
      • addedInput schema / properties / border / description
        Added value: +"CSS border shorthand, e.g. \"2px solid red\""
      • addedInput schema / properties / color / description
        Added value: +"Any CSS color for the overlay label"
      • addedInput schema / properties / remove / description
        Added value: +"Remove previously injected highlights instead of adding"
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. Every match is outlined"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedhover3 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. Triggers CSS and JS hover handlers"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedhttp_auth3 fields changed
      • addedInput schema / properties / action / description
        Added value: +"set installs credentials for HTTP auth prompts; clear removes them"
      • addedInput schema / properties / password / description
        Added value: +"Required for action=set; kept in memory, never written to disk"
      • addedInput schema / properties / username / description
        Added value: +"Required for action=set"
    • Changedhttp_request1 field changed
      • addedInput schema / properties / method / description
        Added value: +"HEAD fetches headers only, without the body"
    • Changedinject_css2 fields changed
      • addedInput schema / properties / css / description
        Added value: +"One or more CSS rules, as they would appear in a stylesheet"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedlist_event_listeners2 fields changed
      • addedInput schema / properties / limit / description
        Added value: +"Max listeners returned, from the top of the match list"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedmanage_downloads2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"wait_for_complete blocks until the newest download finishes or times out"
      • addedInput schema / properties / limit / description
        Added value: +"Max download entries returned, newest first"
    • Changedmeasure_spacing3 fields changed
      • addedInput schema / properties / selector1 / description
        Added value: +"First element; distances are measured from its box"
      • addedInput schema / properties / selector2 / description
        Added value: +"Second element; \">>>\" pierces shadow DOM"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedmodify_dom6 fields changed
      • addedInput schema / properties / action / description
        Added value: +"setStyle takes a CSS declaration in value; addClass/removeClass take className"
      • addedInput schema / properties / className / description
        Added value: +"Class to add or remove (addClass/removeClass)"
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. Only the first match is changed"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / value / description
        Added value: +"Attribute value, style declaration, or text, per action"
    • Changedmonitor_network3 fields changed
      • addedInput schema / properties / format / description
        Added value: +"har exports HAR 1.2 for external tooling"
      • addedInput schema / properties / source / description
        Added value: +"page sees XHR/fetch only; browser also sees static assets"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedmonitor_websocket1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changednavigate2 fields changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / url / description
        Added value: +"Absolute URL, or a path resolved against the current page"
    • Changednetwork_rules4 fields changed
      • addedInput schema / properties / action / description
        Added value: +"list and clear inspect and drop the rules already installed"
      • addedInput schema / properties / header / description
        Added value: +"Header name for action=modify_header, e.g. \"User-Agent\""
      • addedInput schema / properties / redirect_url / description
        Added value: +"Destination for action=redirect"
      • addedInput schema / properties / resource_types / description
        Added value: +"Limit the rule to these request types; omitted = all of them"
    • Changedpress_key6 fields changed
      • addedInput schema / properties / alt / description
        Added value: +"Hold Alt"
      • addedInput schema / properties / ctrl / description
        Added value: +"Hold Control"
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / meta / description
        Added value: +"Hold Meta (Command/Windows)"
      • addedInput schema / properties / shift / description
        Added value: +"Hold Shift"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedquery_dom4 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / limit / description
        Added value: +"Max elements returned, from the top of the match list"
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. Matches all, not just the first"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedread_console3 fields changed
      • addedInput schema / properties / format / description
        Added value: +"lines is compact; json keeps timestamps and stack traces"
      • addedInput schema / properties / level / description
        Added value: +"all merges every level in one chronological list"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedread_page3 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / mode / description
        Added value: +"text strips markup, html keeps it (costly), accessibility returns the a11y tree"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedsave_page1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedscreenshot1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedscreenshot_diff3 fields changed
      • addedInput schema / properties / action / description
        Added value: +"baseline stores, compare measures against it, clear drops baselines"
      • addedInput schema / properties / name / description
        Added value: +"Baseline id: reuse the same one to compare across runs"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedscroll8 fields changed
      • addedInput schema / properties / action / description
        Added value: +"to jumps to a position or element; until scrolls repeatedly to load more"
      • addedInput schema / properties / behavior / description
        Added value: +"instant avoids waiting for smooth-scroll animations"
      • changedInput schema / properties / frame_id / description
        Previous value: -"action=to only"New value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / max_scrolls / description
        Added value: +"Cap on scroll steps, so an infinite feed terminates"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / until / description
        Added value: +"no_new_content stops when the page height stops growing"
      • addedInput schema / properties / x / description
        Added value: +"Absolute horizontal position in px (action=to, without selector)"
      • addedInput schema / properties / y / description
        Added value: +"Absolute vertical position in px (action=to, without selector)"
    • Changedsecurity_headers1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedseo_audit1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedsession_fixture2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"save snapshots the current origin; restore writes it back"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedsession_record1 field changed
      • addedInput schema / properties / action / description
        Added value: +"start begins recording, stop writes the file and returns its path"
    • Changedset_geolocation4 fields changed
      • addedInput schema / properties / latitude / description
        Added value: +"Decimal degrees, -90 to 90"
      • addedInput schema / properties / longitude / description
        Added value: +"Decimal degrees, -180 to 180"
      • addedInput schema / properties / reset / description
        Added value: +"Restore the real position and stop overriding"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedset_storage7 fields changed
      • addedInput schema / properties / action / description
        Added value: +"clear ignores key and wipes every entry of that type"
      • addedInput schema / properties / http_only / description
        Added value: +"Cookie hidden from page JS"
      • addedInput schema / properties / sameSite / description
        Added value: +"None requires secure=true"
      • addedInput schema / properties / secure / description
        Added value: +"Cookie sent over HTTPS only"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / type / description
        Added value: +"cookie writes a real cookie, not a storage key"
      • addedInput schema / properties / value / description
        Added value: +"Required for action=set"
    • Changedset_zoom2 fields changed
      • addedInput schema / properties / reset / description
        Added value: +"Restore the default zoom for this origin"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedtab_action2 fields changed
      • addedInput schema / properties / action / description
        Added value: +"close cannot be undone; reload drops injected CSS and page hooks"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedtype_text5 fields changed
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / selector / description
        Added value: +"CSS selector; \">>>\" pierces shadow DOM. Ignored when ref is given"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
      • addedInput schema / properties / text / description
        Added value: +"Value to type; empty string clears the field"
      • addedInput schema / properties / wait_after / description
        Added value: +"Settle before returning: navigation waits for a page load, networkidle for quiet traffic"
    • Changedunused_css2 fields changed
      • addedInput schema / properties / max_selectors / description
        Added value: +"Cap on unused selectors reported: a large stylesheet has thousands"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedupload_file2 fields changed
      • addedInput schema / properties / selector / description
        Added value: +"The file input to fill; \">>>\" pierces shadow DOM"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedviewport_resize1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedwait_for3 fields changed
      • addedInput schema / properties / condition / description
        Added value: +"function needs expression; element needs selector"
      • addedInput schema / properties / frame_id / description
        Added value: +"Target iframe id from get_frames; omitted = main frame"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedwatch_dom6 fields changed
      • addedInput schema / properties / attributes / description
        Added value: +"Report attribute changes"
      • addedInput schema / properties / characterData / description
        Added value: +"Report text content changes"
      • addedInput schema / properties / childList / description
        Added value: +"Report added and removed children"
      • addedInput schema / properties / selector / description
        Added value: +"Subtree to observe; \">>>\" pierces shadow DOM"
      • addedInput schema / properties / subtree / description
        Added value: +"Observe descendants too, not just the matched node"
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
    • Changedweb_vitals1 field changed
      • addedInput schema / properties / tab_id / description
        Added value: +"Target tab; omitted = last tab navigated in this session, else the active one"
  6. 2 tool updatesv1.9.0
    • Changedemulate_media1 field changed
      • addedInput schema / properties / user_agent
        Added value: +{
        +  "description": "Overrides navigator.userAgent and appVersion in the page (not the HTTP header)",
        +  "type": "string"
        +}
    • Addedhttp_request
  7. 59 tool updatesv1.8.0
    • First observedaccessibility_audit
    • First observedassert
    • First observedcheck_links
    • First observedclick
    • First observedclipboard
    • First observedcreate_tab
    • First observeddismiss_overlays
    • First observeddrag_and_drop
    • First observedelement_screenshot
    • First observedemulate_media
    • First observedexecute_js
    • First observedextract
    • First observedextract_table
    • First observedfill_form
    • First observedfind_text
    • First observedfull_page_screenshot
    • First observedget_frames
    • First observedget_interactives
    • First observedget_page_info
    • First observedget_performance
    • First observedget_status
    • First observedget_storage
    • First observedget_tabs
    • First observedhandle_dialogs
    • First observedhighlight_elements
    • First observedhover
    • First observedhttp_auth
    • First observedinject_css
    • First observedlist_event_listeners
    • First observedmanage_downloads
    • First observedmeasure_spacing
    • First observedmodify_dom
    • First observedmonitor_network
    • First observedmonitor_websocket
    • First observednavigate
    • First observednetwork_rules
    • First observedpress_key
    • First observedquery_dom
    • First observedread_console
    • First observedread_page
    • First observedsave_page
    • First observedscreenshot
    • First observedscreenshot_diff
    • First observedscroll
    • First observedsecurity_headers
    • First observedseo_audit
    • First observedsession_fixture
    • First observedsession_record
    • First observedset_geolocation
    • First observedset_storage
    • First observedset_zoom
    • First observedtab_action
    • First observedtype_text
    • First observedunused_css
    • First observedupload_file
    • First observedviewport_resize
    • First observedwait_for
    • First observedwatch_dom
    • First observedweb_vitals

TDQS

A3.9/5.0

Scored across 59 tools

Disambiguation4/5

Most tools have clear, distinct purposes. Overlap exists among reading tools (read_page, extract, extract_table, find_text, query_dom) but each targets a different structure or use case, so ambiguity is limited. A few similar-sounding pairs (watch vs watch_dom, screenshot vs element_screenshot) are still distinct enough.

Naming Consistency3/5

The naming convention is mostly verb_noun (e.g., navigate, get_page_info, type_text, extract_table), but there are many variations: bare verbs (click, scroll, hover, watch), noun-style names (cookie_audit, session_fixture, handoff), and mixed prefixes (get_, set_, find_, read_, create_, manage_). This inconsistency makes the API slightly less predictable.

Tool Count3/5

With 59 tools, the count is well above the typical MCP range (3–15) and feels heavy for a single server. While the breadth covers many browser automation features, several tools could be consolidated (e.g., get_page_info/query_dom/read_page), suggesting the set is larger than necessary.

Completeness5/5

The surface is exceptionally comprehensive, covering navigation, DOM interaction, forms, screenshots, file handling, dialogs, storage, cookies, performance/accessibility audits, session recording, network interception, and even human handoff. No significant gaps for a browser automation use case.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    single-binary MCP server that gives AI agents a browser. 66 tools for navigation, form filling, data extraction, screenshots, and DOM diffing — built on pure Chrome DevTools Protocol.
    13
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    MCP server that lets agents drive your real Chrome browser with existing logins and sessions via an outbound-only WebSocket extension. It exposes Playwright-compatible browser tools for navigation, clicking, typing, and snapshots.
    1
    Apache 2.0
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that drives your real Chrome/Edge/Opera browser through a Chrome extension and DevTools Protocol, preserving logins and session state, and can also perform OS-level mouse and keyboard input behind approval.
    51
    203 PyPI
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A native MCP server that gives AI assistants full Chrome control via the DevTools Protocol and an unpacked extension, including semantic element refs, real input, screenshots, and browser/tab/window management. It exposes 43 callable tools with a visible control overlay and an optional read-only security profile.
    1
    MIT