Skip to main content
Glama

CDPM

npm npm downloads License: MIT CDPM MCP server

한국어 README

CDPM: numbered Chrome slots for Claude Code agents

CDPM is an MCP server that keeps up to 30 Chrome instances ("slots") on fixed debugging ports and lets any number of Claude Code sessions and subagents drive them by number: "open slot 3", "log in on slot 1, then fill the form in slot 2". Each slot is an ordinary Chrome with its own profile, so logins stick between runs and the browser is the same one you would use by hand.

It grew out of running several Claude agents against logged-in web apps at once, where the hard parts were not clicking buttons but sharing browsers between sessions, keeping them alive, and noticing when Chrome itself got in the way.

Demo

Nine subagents on slots 11-19 (headless). Slots 11-18 each read a GitHub repository page and send the numbers to slot 19 with slot_send; slot 19 waits on slot_inbox, writes a comparison table and opens it. Recorded over CDP from a real run: about 45 seconds of wall time, one frame per pass over the nine slots.

Nine slots working in parallel

Related MCP server: opencode-browser-mcp

What is different

  • Shared, numbered browsers. Slot N listens on port 14049 + N and keeps its profile in its own folder. Sessions don't own a browser; they address a slot. Two sessions can work in the same slot on different tabs: commands are queued per tab, so two agents typing into one tab don't interleave. This is covered by an integration test and by a long test where three sessions share one slot for 600 rounds without memory, tab or lock-file growth.

  • Plain Chrome over CDP. No Playwright or Puppeteer. Clicks and keys are sent with Input.dispatch*Event, so pages receive trusted events. Chrome is started without --enable-automation, so navigator.webdriver stays false. CDPM never calls Runtime.enable, and every script it runs to read the page lives in an isolated world the page cannot see; snapshots pierce shadow roots. That removes the usual automation fingerprints. It does not get you past rate limits or IP reputation: nine slots searching Google at the same moment will still get a CAPTCHA.

  • Survives the boring failures. Slots are started detached, so closing VS Code or Claude Code (even with a process-tree kill) leaves them running. After a reboot, CDPM re-attaches to whatever Chrome answers on the slot ports and re-checks its process ID before touching taskbar icons. If Chrome updates itself while a slot is running (on Windows the update swaps chrome.exe, the old browser can no longer start renderers, and new tabs hang blank), CDPM restarts that slot on the new version and reopens its tabs.

  • Agents can coordinate. slot_send / slot_inbox deliver messages addressed by slot and agent name. They are stored on disk, so they survive a Chrome restart, and a waiting agent wakes as soon as one arrives.

  • Browser UI the page can't see. JavaScript dialogs are reported and answered with browser_dialog. On Windows, permission bubbles ("access other apps and services on this device", notifications, location) are detected through UI Automation and answered with browser_permission. File pickers triggered by an agent's action are intercepted instead of opening OS windows; a print dialog the page opens is reported right away (the page itself is never modified).

Quick start

npm install -g cdpm-mcp
cdpm install

Restart Claude Code and ask for a slot, for example: "Open slot 1 with a window and go to github.com."

Compared with other browser MCP servers

CDPM

Playwright MCP

Chrome DevTools MCP

Browsers

up to 30 numbered slots shared by every session

one per server process

one per server process

Several sessions on one browser

yes: per-tab queues, ownership warnings

not a design goal

not a design goal

Logins kept between runs

yes, one profile per slot

yes, one persistent profile (--isolated for a fresh one)

yes, one persistent profile (--isolated for a fresh one)

Driven by

raw CDP

Playwright

Puppeteer

Messages between agents

built in

no

no

Per-slot taskbar icons

Windows taskbar, macOS Dock

no

no

Other browsers

Chrome only

Chromium, Firefox, WebKit

Chrome only

The other two are good tools and the better choice if you need Firefox or WebKit (Playwright) or performance traces and DevTools panels (Chrome DevTools MCP). Their columns reflect their documentation as of October 2026.

Security

Slot ports listen on 127.0.0.1 only, but any process on this machine can connect to them and act with that slot's logged-in sessions. Treat a running slot like an unlocked browser: don't leave sensitive accounts logged in on slots while running software you don't trust. Closed slots keep their profiles on disk (cdpm purge N deletes one).

Details

  • Pure CDP. No Playwright, no Puppeteer, no stealth patches. A normal Chrome with a debugging port, driven with real input events.

  • Numbered slots. Slot N uses CDP port 14049 + N (slot 1 = 14050 … slot 30 = 14079) and its own profile folder. The range avoids the common default 9222; set CDPM_PORT_BASE to move it if something else uses those ports. Ports outside that range are not managed.

  • Starts only when asked. No tool ever starts a closed slot except browser_launch. Without a number, the lowest free slot is used.

  • Slots outlive their caller. Closing CDPM, Claude Code or VS Code (even when it kills its whole process tree) does not close slot Chrome. Slots end only with browser_close / cdpm close or when you close that Chrome yourself.

  • One taskbar button per slot, with a browser-window icon in the slot color and the slot number, pre-corrected so the taskbar shows it pixel-sharp (drawn with the system font via GDI+, so no font files ship in the repo). The window title shows "3번" via Chrome's own window-name feature (pages can't see it).

  • Built for many agents. Every tool takes slot explicitly, records who opened each tab and who touched it last, warns (without blocking) when you act on a tab someone else just used, and serializes concurrent commands on the same tab.

  • Agents can talk with slot_send / slot_inbox; unread messages are also delivered at the top of every result.

  • Status line. cdpm statusline prints live slots as slot-colored numbers; each slot shows the title of the tab last acted on (no agent names; only blank/new tabs left shows just the number): CDPM 1 NAVER 2 Daum. It fits the terminal width (from ccstatusline): titles shrink first, then only numbers, then +N for the rest. A paused slot (slot_pause / cdpm pause) shows its number in dim gray instead of its slot color. A dim CDPM - when none are running. Ending a slot's Chrome yourself (closing its last window on Windows, Cmd+Q on macOS) removes it right away, and titles are read live.

  • English for the AI. Server instructions, tool descriptions and tool results are in English to save tokens; Claude is told to answer in the user's language. CLI output is in Korean.

  • Leaves the user's PC alone. No window, viewport or zoom changes, and actions that would pop up OS windows are refused (see below).

Works on Windows 11 and macOS. Per-slot icons: taskbar on Windows, Dock on macOS (see "macOS" below). Linux is experimental: the code paths exist (Chrome lookup, data folder) but it has not been tested on a Linux machine, and there are no per-slot icons.

Requirements

  • Node.js 22+

  • Google Chrome (found automatically. Windows: registry App Paths, then standard install folders. macOS: /Applications, ~/Applications, then Spotlight. Linux: /usr/bin/google-chrome, google-chrome-stable, /opt/google/chrome/chrome)

Install

Asked to install this? (for Claude / AI agents) Do these steps in order.

  1. Check that Node.js 22+ and Google Chrome are installed. If not, tell the user and stop.

  2. Run npm install -g cdpm-mcp@latest (also when already installed: this updates it).

  3. Run cdpm install (if cdpm isn't found: node "$(npm root -g)/cdpm-mcp/dist/cli.js" install). It registers CDPM with Claude Code and sets up the status line, rules, subagent and permissions; an older git-clone registration is switched to the new location.

  4. Do not launch any Chrome slot, ask questions, or explain internals. On success reply with exactly one line in the user's language, e.g. "CDPM installed. Restart Claude Code to use it." (version: cdpm --version). If a step failed, say only which step and why.

npm install -g cdpm-mcp
cdpm install

cdpm install registers CDPM with Claude Code and sets up the status line, the parallel-work rule, the cdpm-browser subagent and the permission allow list in one go. Restart Claude Code afterwards.

Other MCP clients (Cursor, Claude Desktop, ...)

cdpm install only registers with Claude Code. For other clients add it to their mcpServers config (paths from npm root -g):

{
  "mcpServers": {
    "cdpm": {
      "command": "C:\\Program Files\\nodejs\\node.exe",
      "args": ["C:\\Users\\<you>\\AppData\\Roaming\\npm\\node_modules\\cdpm-mcp\\dist\\cli.js"]
    }
  }
}

On macOS: "command": "/opt/homebrew/opt/node/bin/node", "args": ["/opt/homebrew/lib/node_modules/cdpm-mcp/dist/cli.js"].

  • The tools are the same for every client.

  • CDPM picks its instructions from the connecting client's name: only claude-code gets the Claude Code specific guidance (spawning subagents with the Agent tool, cdpm-browser). Other clients get a generic rule: give each slot its own subagent if the client has them, otherwise use a different agent name per slot.

  • The automatic setup (status line, CLAUDE.md rule, cdpm-browser, permissions) changes ~/.claude, so it only runs when Claude Code connects. Starting CDPM from another client never touches Claude Code's settings.

From a clone (development)

git clone https://github.com/IGELHARINE/CDPM.git
cd CDPM
npm install
node dist/cli.js install

Update

npm install -g cdpm-mcp@latest

Then restart Claude Code. From a clone: git fetch origin && git reset --hard origin/main and npm install. The MCP registration and status line setting stay as they are. Check the version with node dist/cli.js --version; changes are listed in CHANGELOG.md.

Or just ask Claude: "update CDPM".

What happens automatically

The first time the MCP server starts, CDPM sets these up once, with no extra steps (original files backed up as .before-cdpm):

  • the slot display in Claude Code's status line (redrawn every 3 s)

  • a rule in the user's CLAUDE.md: when several slots get different jobs, use one subagent per slot in parallel and let each write its own part of the output (Claude follows user instructions more reliably than MCP guidance)

  • a CDPM-only subagent cdpm-browser in ~/.claude/agents/: only CDPM tools plus file writing, no CLAUDE.md, so it starts faster (measured on a 3-slot parallel job: median 28.7 s -> 20.6 s, about 37% less usage); same model and effort as the main agent. It uses whatever name CDPM is registered under.

  • CDPM tools (mcp__cdpm) in Claude Code's permission allow list (permissions.allow in settings.json), so auto mode's classifier doesn't block typing and filling mid-task. Claude then performs CDPM input and clicks (sending mail, posting) without asking each time.

  • subagents run at most 20 at once, so beyond 20 slots Claude is told to launch them in batches (raise with CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS).

Undo with cdpm unsetup; skip it entirely with CDPM_NO_AUTO_SETUP=1. When an update changes the automatic setup it runs once more, item by item: items still present are refreshed, items you removed (including with cdpm unsetup) are not brought back. cdpm setup re-adds everything.

Status line only

cdpm install (and the first server start) already turns it on. To redo only the status line: cdpm statusline-setup. With no status line it adds one to Claude's settings; with ccstatusline it adds a widget; with any other status line it changes nothing and prints the command to append. The original file is backed up as .before-cdpm.

How it behaves

Each result starts with a header: the slot's tabs (> = acted on now, ·앞 = the tab in front in its window), warnings, and new messages (marked as read there).

Tab rules: one tab → that tab; the agent's last-used (or newly opened) tab → that tab; first use → view tools take the front tab, action tools require tab. Tab numbers follow first-seen order; IDs like t7 never change while the tab lives.

Sharing one slot: several agents (even in different Claude sessions) can work in one slot at the same time, each in its own tab. Commands queue per tab, so agent A can type in tab 1 while agent B clicks in tab 2; only commands on the same tab wait for each other, across Claude sessions too (a per-tab lock file), so two sessions typing into one tab never interleave; a lock held by a dead process is released at once, and one held over 2 minutes is reported instead of waited on. Starting and closing a slot also take a per-slot lock, so two sessions starting the same slot at once launch Chrome only once (the other attaches). One slot is one Chrome profile, so a site logged in in one tab is logged in in a new tab too (except sites that authenticate per tab). browser_tab_new opens in the background, so neither the user's view nor another agent's tab changes, and the opener keeps using its own tab. Every session gets its own name (claude-a3f1, subagents use theirs); headers show who opened and last used each tab, and acting on a tab someone else just used is reported, not blocked. One agent drives one slot: acting on a second slot within a minute is refused with advice to start a subagent for it (multiSlot: true for comparisons); reading other slots is always allowed. Refer to slots by number ("slot 3"); a name like "browser B" makes Claude guess.

Background tabs can be read, driven and captured without switching tabs: while acting on a hidden tab, CDPM briefly enables Emulation.setFocusEmulationEnabled so Chrome paints it, then turns it off. The user's view does not change, but during that moment the page sees the tab as focused (document.hasFocus() etc.), so a site could notice.

Long pages: browser_snapshot returns page 1 (~12k chars) with "1/8 · next: page=2". Later pages carry their ancestor context; refs stay the same across pages. find matches lines ignoring whitespace and shows ancestors plus the next two lines; ref shows one subtree. browser_text is shorter for reading content. The same element keeps the same ref until navigation, and new refs are unique per agent across tabs, so a ref from another tab or an old page is always rejected.

Tools

All tools take slot (1–30) and agent (display name). Action tools also take tab, summary and read: read: "text" | "snapshot" | "changes" attaches the page after the action to the same result (no separate read call). changes shows only lines added or removed since the agent's previous snapshot of that page — the shortest way to see what a click did.

Tool

What it does

browser_status

Live slots, tabs, openers, last actions, summaries, dialogs

browser_launch

Start a slot — only when the user asks; no slot = lowest free; slots (list) or count start several at once, lowest first; url / urls open a start page right away. Window or headless is the user's choice: if they didn't say, Claude asks first (without headless, a closed slot is not started). headless: true adds only --headless. proxy / proxies (only when the user asks for a proxy): host:port, http://user:pass@host:port, socks5://..., host:port:user:pass. Without it, no proxy flag is added at all. Proxies with a username and password go through a small per-slot local relay that adds the credentials and exits with that Chrome

browser_close

Close gracefully (profile kept)

browser_tabs / browser_tab_new / browser_tab_close / browser_tab_select

List / open in background (returns ID) / close / bring to front (only when the user wants)

browser_snapshot

Accessibility text with refs; page, find, ref

browser_text

Readable text (main/article first, or one ref), paginated

browser_screenshot

Visible area as PNG, background tabs included; no full-page capture

browser_navigate / browser_back

Waits for load; slow servers are reported as "still loading", not as errors

browser_click

Real mouse click; reports covering elements, new tabs, form-validation failures

browser_type

Real key events per character (clear, submit, fast); verifies the value and does not press Enter for submit if the value differs (the site rejected or reformatted the input); date/time inputs are set after format validation

browser_fill

Fill several inputs on one page in order, then optionally submit ("Enter" or a button ref); stops at the first failure, page change, dialog or a field whose value differs from what was typed (nothing is submitted then)

browser_dialog

Accept or dismiss an open alert/confirm/prompt/beforeunload (text for prompt). Claude decides from the message

browser_permission

List or answer Chrome permission bubbles ("site wants to access other apps and services on this device", notifications, location…) by exact button name. Windows, windowed slots

browser_forward / browser_reload

Forward / reload (Chrome's own reload, ignore_cache)

browser_hover

Real mouse over an element (hover-only menus)

browser_drag

Real mouse drag: drag-and-drop, sliders, reordering. Drop on to (ref), to_text (text) or dx/dy. HTML5 drags are handled without an OS drag; draggable elements get refs

browser_download_wait

Wait for a download to finish and return the saved file path (Chrome's download folder setting is kept)

browser_pdf

Save the page as PDF (default: Downloads folder, named after the title)

browser_upload

Upload files: into a file input by ref, or after clicking an "attach" button (CDPM intercepts the OS file dialog so it never appears) without a ref

browser_select

<select>: focus + keys (arrow keys on Windows, option prefix on macOS; trusted events, no popup)

browser_press_key

Enter, Tab, Control+A (Meta+A on macOS), … (clipboard keys refused)

browser_scroll

To a ref, or exactly dy pixels (reports position A → B)

browser_wait

Text in body or title / gone (text disappears) / url change / enabled (a button or input stops being disabled) / response (a network response whose URL matches finishes; returns its body, e.g. the JSON behind an SPA list — responses that arrived while you clicked are caught too; nothing extra is sent) / network_idle / N seconds

browser_eval

JavaScript in an isolated world (DOM visible, page globals not)

browser_network / browser_network_detail

Requests (last 500, 30 min) / headers, post data, body

browser_block

Block/unblock URL patterns on a tab, including its cross-site iframes (already open or created later, blocked before their first request); while the session lives; visible to other agents

slot_send / slot_inbox

Message an agent (use the receiver's slot number, works across slots) / receive (wait returns within ~0.1 s of a message, up to 600 s). A message also interrupts browser_wait immediately

slot_pause / slot_resume

Pause a slot when the user says so ("stop slot 3"): every action is refused at once, an action already running stops before its next key or mouse event, and waits return. Reading the screen still works. Resume wakes the agents with a message so they re-read the page and continue. Applies to every Claude session

Subagents share their parent's MCP process — give each one its own agent name. When several slots get different jobs ("open 3: Naver, Daum, Google News"), Claude runs them in parallel by default, one subagent per slot, not one after another.

Status line

cdpm statusline exits in ~0.1 s (local registry plus a quick tab check on each live slot port); setup makes Claude Code redraw it every 3 s. Turned on by cdpm install; redo with cdpm statusline-setup. To wire it by hand: for ccstatusline, add a Custom Command widget with "C:\Program Files\nodejs\node.exe" "C:\path\to\CDPM\dist\cli.js" statusline (preserve colors). Otherwise point statusLine.command at the same command.

CLI

cdpm                               run the MCP server (stdio)
cdpm install                       register with Claude Code and run the automatic setup (once after installing)
cdpm setup                         add the status line, CLAUDE.md rule, cdpm-browser subagent and permission allow list, including ones you removed (also done automatically on first server start)
cdpm unsetup                       remove what CDPM added
cdpm --version                     print the version
cdpm launch [slot...]              start slots (ascending order; no number = lowest free)
cdpm launch --headless [slot...]   start without a window
cdpm close <slot...> | --all       close gracefully
cdpm pause <slot...> | --all       pause: stop all agent actions on the slot immediately
cdpm resume <slot...> | --all      resume: wake the waiting agents
cdpm purge <slot>                  delete a closed slot's profile
cdpm status | statusline
cdpm statusline-setup              turn on the slot display in Claude Code's status line (backs up settings)

Data lives in %LOCALAPPDATA%\cdpm\ on Windows ~/Library/Application Support/cdpm/ on macOS and ~/.cdpm/ on Linux (CDPM_HOME overrides): registry.json, messages\<slot>.jsonl (last 500 lines once over 1000) and messages\<slot>.cursors.json (read position per agent, latest 200), locks\ (per-tab and per-slot lock files so Claude sessions never drive one tab, or start/close one slot, at once; removed when the action ends, leftovers of dead processes cleaned every minute), profiles\<slot>\, icons\, auto-setup.json (which setup version ran and which items CDPM added, so removed items are not brought back), optional config.json (chromePath, extraArgs).

macOS

  • Launching, driving, network tools, agent messaging and the status line work the same as on Windows.

  • Each slot's Dock icon is set to the same slot-colored numbered icon as on Windows, through Chrome's own CDP command Browser.setDockTile (no app copying or re-signing). It returns to the normal Chrome icon if Chrome restarts outside CDPM, and is set again the next time CDPM launches or attaches. This code runs only on macOS.

  • Following the Mac convention, closing a slot's window (red button, Cmd+W) keeps the slot; the status line keeps showing the last-used tab title. Quitting Chrome with Cmd+Q ends the slot and removes it. (On Windows, closing the last window ends the slot.)

  • Chrome on macOS doesn't run editing shortcuts from key events alone, so Meta+A (select all), Meta+Z (undo), Meta+←/→, Option+←/→ and similar also send the matching Chrome editing command with the same key event — the same thing a person pressing the key gets.

  • Arrow keys on a <select> open the macOS popup menu, so browser_select types the start of the option text instead. If an earlier option shares that prefix, it sets the value directly and says so.

What CDPM does not do / refuses

  • No user-agent or fingerprint changes, device emulation or Chrome patching, and no page script changes.

  • Things you click yourself open as usual. Only while an agent action runs, CDPM keeps OS windows from appearing:

    • File pickers are intercepted however the action opens them (click, Enter on a file input, form submit), with a hint to use browser_upload.

    • window.print() opens print preview, and the tab stops answering input until it is closed. CDPM does not override the page's print (a page could see that) and does not close the preview. When one opens during an action, the action returns at once with a note, and the header names the tab while it stays open, so the agent can tell the user. browser_wait stops when one appears. Use browser_pdf for a PDF.

    • Date, time and color inputs are not clicked (they open a picker); browser_type sets their value (#ff0000 for colors).

    • Browser shortcuts such as Ctrl+S/Ctrl+O/Ctrl+P sent over CDP do not trigger Chrome's save/open/print windows.

  • Known limits: a button whose JavaScript navigates to an external-program scheme (mailto: etc.) is not caught in advance (links are); HTTP authentication prompts cannot be filled by an agent.

  • Launch flags are only --remote-debugging-port, --user-data-dir, --no-first-run, --no-default-browser-check, --window-name (plus --headless on request, and --proxy-server + --force-webrtc-ip-handling-policy=disable_non_proxied_udp only when the user asks for a proxy; headless Chrome still reports HeadlessChrome).

  • Never changes window size/position/state, viewport, or zoom; if a click makes the page fullscreen, it is exited immediately.

  • No Runtime.enable; helper scripts run in an isolated world.

  • If Chrome updates itself while a slot is running (Windows swaps chrome.exe), the old browser can no longer start renderers, so new tabs hang blank. CDPM compares the running version with the installed one (on attach, and whenever the chrome.exe file changes, checked every 10s from file info only) and restarts that slot on the new version, reopening its tabs in order (logins are kept; proxy slots are only reported).

  • Chrome permission bubbles are browser UI, so they never show up in snapshots or screenshots and page tools can't click them, while the page waits on them. On Windows, CDPM spots them (a small window owned by the slot's Chrome whose title contains a tab's host, so translate or password bubbles are ignored and the Chrome language doesn't matter), warns in the result header, stops browser_wait as soon as one appears, and lets Claude press a button with browser_permission (UI Automation; works while the window is minimized or covered). Claude asks before allowing camera, microphone or location the user didn't ask for.

  • Dialogs (alert/confirm/prompt/beforeunload) are reported, never handled automatically. Claude reads the message and handles it itself with browser_dialog (accept or dismiss); it asks the user only when the dialog would confirm something irreversible the user did not ask for (a payment, a deletion).

  • Refuses: mailto:/tel:/app-scheme links and addresses in click, navigate, launch start pages and new tabs (would launch other programs), clicking <select> (popup), Ctrl+C/X/V/Shift+Insert (user clipboard). Downloads triggered by navigation are reported with the file name.

Verification

62 unit and 42 integration tests (npm test, npm run test:integration, real Chrome on test ports 29222+). Long-running checks (npm run test:long, ~20 min): 4,000 rounds on an SPA that replaces its DOM, with a new agent name every round, kept the CDPM server heap within a fixed band (26–39 MB, no upward trend) and the page at 1,421 DOM nodes / 0.8 MB JS heap; 3 sessions sharing one slot for 600 rounds each (1,800 tabs opened and closed, the slot restarted 3 times) stayed at ~20 MB heap per session with no lock files or tabs left behind. A 15-subagent, 30-slot concurrent run confirmed that all 30 windows' position/size/state and all 52 tabs' viewport (innerWidth×innerHeight) and zoom were unchanged.

License

MIT

Available Tools

36 tools
browser_backBackC

Go back.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

C2.2/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure, and "Go back" discloses nothing: no mention of history exhaustion, whether it waits for load, or whether the page state is preserved. For an action tool with zero annotation coverage this is a serious gap.

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

Conciseness2/5

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

Two words is not conciseness but under-specification; there is no front-loaded statement of effect, scope, or preconditions to compress. Nothing here earns its place because there is essentially nothing here.

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

Completeness2/5

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

With six parameters, a required slot, no annotations, and no output schema, an agent needs at least the effect and failure mode of a history-back action. The description supplies neither, leaving it incomplete for even a simple navigation 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 description coverage is 100%, so the six parameters (slot, tab, read, agent, summary, multiSlot) are already fully documented in the schema; the description adds nothing but is not required to. Baseline 3 applies.

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

Purpose3/5

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

"Go back" states a navigational verb but never names the resource; the agent must infer from the tool name browser_back that this steps back through page history rather than, say, going back a form step or a tab. It is distinguishable from browser_forward by common sense, but the description itself contributes almost nothing beyond the name.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus browser_navigate, browser_forward, browser_reload, or browser_tab_select, nor any note about behavior when no history exists. The agent must guess entirely from the name.

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

browser_blockBlock requestsA

Blocks tab network requests matching URL patterns (they fail). add adds, remove removes, clear removes all rules you set. Patterns: * any chars, ? one char. A bare domain matches every request containing it ("ads.example.com" → "ads.example.com"). A trailing * is added automatically so query strings still match (".png" → ".png*"). The tab skips the cache while rules exist. Rules last only while this Claude session is alive and are shown to other agents in the header. With no args, shows current rules.

NameRequiredDescriptionDefault
addNoURL patterns to block
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
clearNoRemove all rules set by this session
removeNoPatterns to unblock
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it states that matching requests fail, that the tab skips its cache while rules exist, that rules live only for the session, that they surface in the header to other agents, and that there is no-arg readback. These are exactly the behavioral traits an agent cannot infer from structured fields.

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?

Front-loaded with the core action and consequence, then compresses a lot of pattern/lifecycle detail into relatively few sentences. Slightly dense and a couple of clauses ('add adds, remove removes') echo the schema, but nothing is wasted.

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

Completeness4/5

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

For an 8-param, no-output-schema, no-annotation tool, the description covers lifecycle, cache behavior, cross-agent visibility, pattern semantics, and no-arg readback. Slot/tab/agent/multiSlot semantics are left entirely to the schema, which is acceptable at 100% coverage but keeps it short of 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?

Schema coverage is 100% (baseline 3), but the description adds real meaning for the pattern values used by add/remove: wildcard syntax (* and ?), bare-domain expansion, and automatic trailing-wildcard append for query strings. This is genuine semantics beyond the schema descriptions of 'URL patterns to block'.

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?

Specific verb + resource ('Blocks tab network requests matching URL patterns') plus the observable effect ('they fail'), which distinguishes it from the sibling browser_network inspection tools. An agent can tell what this does and what changes in the browser without opening the schema.

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

Usage Guidelines4/5

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

The description explains each action mode (add/remove/clear) and the default behavior ('With no args, shows current rules'), giving clear context for how to invoke it. It stops short of naming alternatives or when-not-to-use (e.g. browser_network vs blocking), so it is not a full 5.

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

browser_clickClickA

Clicks a ref element with real mouse events. If another element covers it, doesn't click and reports it. Waits for loading if the click navigates; reports new tabs. Clicking a file input or "attach" button intercepts the OS file picker (not shown); then use browser_upload. Doesn't click dropdowns (they open a list popup on the user's screen); use browser_select.

NameRequiredDescriptionDefault
refYesref from browser_snapshot (e.g. "e12")
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
doubleNoDouble-click
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden and meets it: it discloses occlusion handling (no click, reports the covering element), navigation wait behavior, new-tab reporting, and OS file-picker interception semantics. These are non-obvious runtime traits that go well beyond a generic 'click' contract.

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?

Five short sentences, each adding a distinct operational fact, with the core action front-loaded ahead of the edge cases. There is no filler, restatement of the title, or redundant phrasing.

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?

No output schema exists, and the description compensates by describing what the click returns/reports (occlusion report, navigation completion, new tab). Combined with a fully documented parameter schema, an agent has everything needed to invoke and interpret this 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 description coverage is 100%, so the baseline is 3. The description only indirectly touches the ref parameter ('ref element') and says nothing about double, tab, read, slot, or agent semantics beyond what the schema already documents.

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

Purpose5/5

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

States a specific verb and resource — clicking a ref-addressed element with real mouse events — and immediately scopes it against sibling actions (browser_upload, browser_select). An agent can distinguish it from browser_type, browser_fill, and browser_hover without opening any schema.

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?

Gives explicit when-not rules with named alternatives: file inputs and 'attach' buttons route to browser_upload, and <select> dropdowns route to browser_select. The conditions that select those alternatives are spelled out, which is exactly what an agent needs to route correctly.

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

browser_closeClose slotA

Closes slot Chrome cleanly (session and cookies saved). The profile (logins) is kept. Reports if another agent used it recently.

NameRequiredDescriptionDefault
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers: it discloses that session and cookies are saved, that the profile/logins are kept, and that the result reports recent use by another agent. It omits error behavior (e.g., closing an already-closed or unknown slot), but the state-preservation semantics are unusually well covered.

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 short sentences, front-loaded with the action and immediately followed by the state-preservation facts. No filler.

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

Completeness4/5

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

For a two-param close tool with full schema coverage and no output schema, the description covers the essential behavioral facts (what is preserved, side-effect reporting). Only the error/edge-case path for an inactive slot is missing, which 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%, including the parsing hint for slot values and the agent display name, so the schema does the heavy lifting. The description adds no parameter detail beyond the slot concept, making 3 the correct 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?

States a specific verb+resource: 'Closes slot Chrome cleanly.' The scope (whole slot, not a tab) is implied by 'slot' versus the sibling browser_tab_close, though the differentiation is left for the agent to infer rather than stated.

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 when-to-use guidance. It never states when to close the slot versus using browser_tab_close, or what conditions precede closing. The implication is that this tears down the slot, but nothing routes the agent explicitly.

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

browser_dialogHandle dialogA

Accepts (accept: true) or dismisses (accept: false) an open dialog (alert/confirm/prompt/beforeunload). The tab is frozen while a dialog is open. Usually judge from its content and handle it yourself (accept if it is part of the requested task; close unneeded notices/ads). Ask the user only when it confirms an irreversible action they didn't request (payment, deletion, etc.). beforeunload: accept = leave page (input lost), dismiss = stay. For prompt, text is the input.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
textNoText for a prompt dialog (used only when accepting)
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
acceptYestrue = OK, false = cancel
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and largely succeeds: it discloses that the tab is frozen while a dialog is open, that beforeunload accept loses input, and that prompt text is only used when accepting. It does not say what happens if no dialog is open (error vs no-op) or whether the call surfaces the dialog message back, which are the remaining behavioral gaps.

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

Conciseness4/5

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

The action and its default policy are front-loaded in the first two sentences, and the beforeunload/prompt edge cases follow. It is dense and uses nested parentheses, but every sentence carries actionable content rather than filler.

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 an 8-parameter mutation tool with no annotations and no output schema, the description covers the behaviorally risky parts (frozen tab, irreversible confirmation escalation, beforeunload tradeoff) while the schema fully documents plumbing parameters like tab, slot, agent, and read. Only the no-dialog-open failure mode is left unspecified.

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%, so the baseline is 3, but the description adds genuine meaning beyond the schema: accept:true/false is tied to OK/cancel semantics and to leave-page-vs-stay for beforeunload, and text is scoped to prompt dialogs when accepting. That is real semantic enrichment on top of the schema's shorter 'true = OK, false = cancel'.

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

Purpose5/5

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

States a specific verb pair (accepts/dismisses) and resource (an open dialog), and enumerates the dialog types it handles (alert/confirm/prompt/beforeunload). No sibling tool touches dialogs, so an agent can uniquely identify this one from name plus description alone.

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?

Gives explicit decision rules: judge from content and handle it yourself by default, ask the user only when the dialog confirms an irreversible action the user didn't request (payment, deletion). It also maps accept/dismiss to concrete outcomes for beforeunload, which is exactly the when-to-choose guidance an agent needs.

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

browser_download_waitWait for downloadA

Waits for the most recently started download to finish and returns the saved file path (user's Chrome download folder). Call after clicking the download button. Returns as soon as it finishes.

NameRequiredDescriptionDefault
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
timeoutNoMax wait in seconds (default 120)

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It usefully notes the return location ('user's Chrome download folder') and that it returns early, but it omits what happens on timeout, if no download is in progress, or whether it blocks other slots – meaningful gaps for a blocking wait tool.

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

Conciseness4/5

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

Three short sentences, front-loaded with the core behavior. 'Returns as soon as it finishes' partially restates the waiting behavior but does clarify it is not a fixed-duration wait, so it 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?

With no output schema, the description correctly explains the return value (saved file path in the Chrome download folder). It is complete on inputs and outputs but leaves the timeout/failure outcome unspecified.

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 slot, agent, and timeout with examples and ranges. The description adds nothing about any parameter, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Waits') and resource ('the most recently started download') plus the return ('saved file path'). It does not name the relevant sibling browser_wait, so an agent must infer the distinction from context, but the scope ('most recently started download', Chrome download folder) 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?

'Call after clicking the download button' gives explicit timing, which is the key usage condition. It stops short of naming an alternative (e.g. browser_wait) or stating when not to use it, so it is clear but not fully routed.

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

browser_dragDragA

Drags with the real mouse (press → move in steps → release): drag and drop, sliders, reordering, drag CAPTCHAs, etc. Target: to (element ref), to_text (text at the drop spot), or dx/dy (pixels from from). HTML drag is handled without starting an OS drag.

NameRequiredDescriptionDefault
dxNoHorizontal pixels (right +)
dyNoVertical pixels (down +)
toNoref of the drop target
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
fromYesref of the element to drag (including ones marked draggable)
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
to_textNoText shown at the drop spot (when it has no ref, e.g. "Drop here")
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and delivers real behavioral value: it discloses the execution mechanism ("real mouse: press → move in steps → release") and a non-obvious implementation detail ("HTML drag is handled without starting an OS drag"). It omits failure semantics, auto-scroll behavior, and any permission/side-effect context, keeping it below a 5.

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 action and mechanism before the target options, with zero filler. The use-case enumeration doubles as routing signal rather than padding.

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 an 11-parameter mutation-style browser action with no annotations and no output schema, the description covers the essentials: what it does, how it does it, target specification, and the HTML-drag special case. Slots, tabs, and the read/summary params are fully documented in the schema, so nothing critical is missing, though side-effect and error behavior are unaddressed.

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%, so the baseline is 3, but the description adds selection-level meaning the schema does not: it groups to / to_text / dx+dy as the three alternative ways to specify the drop location (element ref, visible text, or pixel offset). That framing helps an agent choose among 11 params rather than blindly reading 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?

Names a specific verb+resource ("Drags with the real mouse") and immediately enumerates the distinguishing scenarios: drag and drop, sliders, reordering, drag CAPTCHAs. The contrast with browser_click (drag-and-drop vs. discrete click) is inferable from the use-case list without opening either schema.

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

Usage Guidelines4/5

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

Gives clear context for when to reach for this tool via the enumerated drag scenarios, which implicitly distinguishes it from sibling action tools like browser_click or browser_press_key. It does not name an explicit alternative or state when-not to use it (e.g. single-click targets), so it stops short of full routing guidance.

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

browser_evalRun JSA

Evaluates a JavaScript expression in the tab and returns the result as JSON. Escape hatch only when other tools can't do it. Runs in an isolated world: DOM can be read and modified, but globals created by page scripts (window.appVar, etc.) are not visible.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)
expressionYesJS expression (Promises are awaited)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does real work: it discloses the isolated-world execution model, that DOM read/write is possible, and that page-created globals (window.appVar) are invisible. That last point is exactly the kind of surprise an agent needs warned about. It does not discuss permission needs, mutation side effects, or rate limits.

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

Conciseness5/5

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

Three short sentences, no filler. Purpose and return are front-loaded, then the escape-hatch restriction, then the isolated-world caveat — a well-ordered information hierarchy.

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 exists, and the description does state the return is JSON. Combined with the isolated-world caveat, an agent has what it needs to invoke this correctly. Minor gaps remain around failure modes and whether mutations persist across evaluations.

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% across all 6 parameters, so the schema already documents slot, tab, agent, summary, multiSlot and expression. The description adds only that Promises are awaited and results come back as JSON, which the schema largely covers already. 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?

States a specific verb (evaluates) and resource (a JavaScript expression in the tab) plus the return shape (result as JSON). The 'escape hatch' framing immediately distinguishes it from the dozens of purpose-built browser_* action 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?

Explicitly scopes usage to 'only when other tools can't do it', which is a clear when-to-use rule and a de facto exclusion. It stops short of naming which alternative tool to reach for first, so it is not fully self-routing.

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

browser_fillFill formA

Fills several inputs on the same page in order (each cleared, typed with real key events, value verified). Stops on page change, dialog, or any failed field, and reports how far it got. submit="Enter" presses Enter in the last field; a button ref clicks that button. For dropdowns use browser_select.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
fieldsYesFields to fill (top to bottom)
submitNoAfter filling: "Enter" or a button ref to click
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses clearing behavior, real key events, value verification, non-atomic failure handling (stops on page change, dialog, or failed field), and that it reports partial progress. It does not describe the shape of that report, nor latency or rate considerations, but the mutation and failure semantics are unusually well covered.

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 tight sentences: mechanics first, failure/partial-completion behavior second, submit semantics third, with the sibling pointer last. Every clause earns its place and nothing is repeated from the schema verbatim.

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 an 8-parameter mutation tool with 100% schema coverage and no output schema, the description supplies the behavioral context the schema cannot: ordering, clearing, verification, and stop conditions. It could say more about what the returned progress report looks like or what state the page is left in after a mid-fill failure.

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 all eight parameters are already documented, including submit ("Enter" or a button ref to click) and field ordering. The description restates those semantics and adds the clearing/verification detail for fields, but does not add format or syntax guidance beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (fills several inputs on the same page, in order) and explicitly differentiates itself from the single-value sibling browser_type and the dropdown sibling browser_select. An agent can tell what this does and what it is not for without opening the schema.

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

Usage Guidelines4/5

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

The closing sentence 'For dropdowns use browser_select' names an alternative and the condition that selects it. The multi-field, ordered nature of the tool also implies when it is preferable to repeated browser_type calls, but that comparison is left to inference rather than stated.

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

browser_forwardForwardB

Go forward (after going back).

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It hints that the operation is state-dependent on prior back navigation, but says nothing about what happens if no forward entry exists, whether it errors or silently no-ops, or how it interacts with the tab/slot model.

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

Conciseness4/5

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

A single short sentence with zero padding, and the operative condition is front-loaded in the parenthetical. It is efficient, though its brevity borders on under-specification for a six-parameter tool.

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

Completeness2/5

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

Given no annotations, no output schema, six parameters, and a multi-slot/multi-agent browser context, the description is far too thin. An agent gets no information about the empty-history case, error behavior, or how forward interacts with the slot and tab parameters beyond what the schema already states.

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 all six parameters (slot, tab, read, agent, summary, multiSlot) are already documented in the schema. The description adds nothing about any parameter, so the baseline 3 applies.

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

Purpose4/5

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

States a specific action (go forward) and ties it to the browser history stack, and the parenthetical 'after going back' distinguishes it from the sibling browser_back. It's clear, though it never explicitly names the resource (browser history) or contrasts with other navigation siblings like browser_navigate.

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

Usage Guidelines3/5

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

The phrase 'after going back' implies the condition under which forward navigation is meaningful, and that is the only usage guidance given. There is no statement of what to do when there is no forward history, nor any pointer to alternatives such as browser_navigate for fresh navigation.

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

browser_hoverHoverA

Moves the real mouse over a ref element (no click). For hover menus and tooltips. Use read=changes to see the opened menu.

NameRequiredDescriptionDefault
refYesref of the element to hover
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It usefully discloses that no click occurs and that the opened menu appears via read=changes, but says nothing about hover side effects (e.g. triggering JS hover handlers), timing, or failure when no element matches the ref.

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 short sentences, front-loaded with the action and immediate distinction from clicking. Every sentence adds information; no filler.

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 7-parameter, no-annotation, no-output-schema action tool, the description covers what the action does and how to observe its effect. Remaining gaps (slot/tab prerequisites, hover failure modes) are handled by the schema's own descriptions, so the agent is not left stranded.

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%, so the baseline is 3, and the description adds genuine guidance by explaining that read=changes surfaces the newly opened menu — practical usage meaning beyond the schema's enum listing. It adds nothing for slot/tab/agent, but those are already fully documented.

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?

Specific verb ('moves the real mouse') plus resource ('a ref element') with an explicit negative ('no click') that separates it from browser_click. The added purpose clause ('for hover menus and tooltips') tells the agent exactly what interaction this serves.

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?

Gives a clear when-to-use context (hover menus, tooltips) and directs the agent to read=changes to capture the resulting menu, but never contrasts itself with browser_click or browser_drag, which are the nearest conflicting siblings.

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

browser_launchLaunch slotA

Starts slot Chrome. Call only when the user explicitly asks (other tools never start a closed slot). Without slot, uses the lowest free slot. If already running, just attaches. The user decides windowed (visible) vs headless (hidden): headless: true only if they say "headless/hidden". If unstated, don't guess; ask first, then call with headless. Starting a closed slot without headless only returns a confirmation request. Start several slots at once with slots (list) or count (lowest first). For different jobs per slot, after launching give each slot its own subagent in parallel.

NameRequiredDescriptionDefault
urlNoSame start URL for every launched slot (e.g. "https://mail.google.com"). For per-slot or partial URLs use urls instead. Pass it when the start page is known so subagents need no separate navigation
slotNoOne slot to start (1-30). Omit if the user gave no number → lowest free slot
urlsNoPer-slot start URLs, paired in slots order (count: launch order). "" = blank tab. E.g. slots [1,2], urls ["https://www.wehago.com", "https://test.igel.kr"] → 1 opens wehago, 2 opens test.igel.kr
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
countNoWhen the user gives only a count ("start 3"): starts that many free slots, lowest first
proxyNoOnly when the user asks for a proxy (never otherwise). As given: "1.2.3.4:8080", "http://user:pass@host:port", "socks5://host:port", "host:port:user:pass", etc. Applies to all launched slots, first launch only
slotsNoSlot numbers to start at once (e.g. [1,2,3]), lowest first
proxiesNoPer-slot proxies, paired in slots order (count: launch order)
headlessNofalse = windowed (visible), true = headless (hidden). true only if the user says "headless/hidden/no window", false for "visible/headful". If unstated, omit and ask first (no guessing). Applies only on first launch

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose non-obvious traits: attach-instead-of-relaunch on a running slot, a bare confirmation request when headless is unstated for a closed slot, and that proxy/headless apply only on first launch. It stops short of describing the response shape or failure modes, which is the remaining gap.

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?

Front-loaded with the core action and the critical gating rule, then flows to multi-slot and subagent orchestration. Slightly dense and it duplicates the headless guidance already present in the schema, but every sentence still carries decision-relevant 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?

For a nine-parameter, zero-annotation, no-output-schema tool, the description covers launch semantics, the headless decision, multi-slot batching, and post-launch subagent orchestration. What an agent gets back and how failures surface are left implicit, keeping it just under 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 already documents all nine parameters, including the slot/urls pairing example and the port-minus-14049 rule. The description largely restates headless/count/slots semantics rather than adding new meaning, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ("Starts slot Chrome") and immediately clarifies that an already-running slot is merely attached to, distinguishing launch from close/status/tab operations among the siblings. An agent can tell exactly what activation does without opening the schema.

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

Usage Guidelines5/5

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

Explicitly gates invocation: "Call only when the user explicitly asks (other tools never start a closed slot)", and prescribes the headless decision procedure (true only if user says headless/hidden, otherwise ask before calling). Names the alternatives (slots/count for multi-launch) and the follow-up pattern (per-slot subagents).

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

browser_navigateNavigateB

Navigates the tab to a URL and waits for the body to load.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
urlYesURL to go to
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

B3.2/5.0
Behavior3/5

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

There are no annotations, so the description carries the full burden. It discloses one genuinely useful behavioral trait — that the call blocks until the body loads — which tells the agent no explicit wait is needed. But it says nothing about error behavior on bad URLs, whether it resets page state, or how the 'read' capture interacts with the action.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler. It is arguably under-specified rather than verbose, but nothing in it is wasted text.

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?

No output schema and no annotations, so the description should carry more weight. The schema compensates by documenting all 7 parameters well, but the description omits the multi-tab/slot coordination context and error semantics that make this tool distinct in a 35-tool browser suite.

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% and the parameter docs are unusually rich (tab targeting, slot-to-port arithmetic, read modes, multiSlot semantics). The description adds nothing beyond the URL itself, so the baseline 3 applies.

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

Purpose4/5

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

Clear specific verb+resource: navigates a tab to a URL. An agent knows exactly what happens. However, it does nothing to distinguish itself from siblings like browser_launch, browser_reload, or browser_back, which all move a tab to a different page.

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

Usage Guidelines2/5

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

No guidance on when to use this versus browser_launch (first navigation?), browser_reload, or browser_back/forward. No mention of the slot/agent coordination context that the schema hints is important. Usage must be inferred entirely.

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

browser_networkNetwork requestsA

Tab network request list (newest at bottom). Records the latest 500 since CDPM first attached to the tab. Filter with filter (URL part), type (Document, XHR, Fetch, Script, Image, etc.), failed (failures only). For details pass the n-number to browser_network_detail.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
typeNoRequest type (e.g. XHR, Fetch, Document, Script, Image)
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
limitNoMax count (default 40, newest first)
failedNoFailed requests only
filterNoOnly requests whose URL contains this
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real behavioral traits: ordering ('newest at bottom') and a retention cap ('latest 500 since CDPM first attached'). It does not describe the return shape or how limit/type interact with the 500 cap, but the retention and ordering disclosure is above baseline.

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?

Four tight clauses, front-loaded with the core purpose and ordering, then the retention cap, filter axes, and the escape hatch to the detail tool. No sentence is wasted.

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

Completeness4/5

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

No output schema or annotations exist, so the description must stand alone; it covers purpose, ordering, retention, filters, and the handoff to browser_network_detail, and the 'n-number' reference implies numbered entries. Return format and pagination behavior are still undescribed, keeping it short of a 5.

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 eight parameters. The description restates the filter/type/failed semantics and gives type examples (Document, XHR, Fetch, Script, Image), which roughly mirrors the schema rather than adding new meaning beyond 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?

States a specific verb+resource ('Tab network request list') with an explicit scope note ('newest at bottom'), and explicitly routes detail lookups to the sibling browser_network_detail. An agent can distinguish this from browser_network_detail without opening either schema.

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

Usage Guidelines4/5

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

Names the alternative (browser_network_detail) and the condition for using it ('For details pass the n-number'), and explains the filtering axes. It lacks explicit when-not guidance or a note that this is a read-only view versus the detail tool, but 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.

browser_network_detailNetwork request detailA

Shows one request's headers, sent data and response body (start of it, if text). id is the n-number from browser_network.

NameRequiredDescriptionDefault
idYesRequest number (e.g. "n12")
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
bodyNoInclude response body (default true)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries more burden. It usefully discloses that response bodies are truncated ('start of it, if text') and that body is included by default, but says nothing about read-only nature, size limits, or how non-text responses are handled.

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 zero waste; the core behavior is front-loaded and the id-provenance note follows immediately. Nothing is padded.

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 read-only inspection tool with fully documented parameters and no output schema, the description adequately sketches the return content (headers, sent data, response body) and flags body truncation. Slight gaps remain around non-text responses and pagination/size limits, but the essentials 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?

Schema description coverage is 100%, so the schema already documents all six parameters well, including slot normalization and tab ID guidance. The description adds only the cross-reference that id comes from browser_network and restates body's effect; 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?

Names a specific verb (shows) and resource (one request's headers, sent data, response body), and scopes it to a single request id, which cleanly distinguishes it from the sibling browser_network that lists requests. The truncation note ('start of it, if text') is a precise scope qualifier.

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 'id is the n-number from browser_network' establishes the precondition and effectively routes the agent from the listing tool to this detail tool. It stops short of an explicit when-to-use/when-not statement, but the dependency is clear.

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

browser_pdfSave as PDFA

Saves the page as a PDF (receipts, articles, etc.). Without path, saves to the user's Downloads folder named after the page title. Doesn't change the screen or window.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
pathNoFile path to save (e.g. C:\Users\me\Desktop\receipt.pdf)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose two real behaviors: the default destination (Downloads, named after page title) when path is omitted, and that it 'doesn't change the screen or window'. It omits overwrite semantics, return value, and permission/error behavior, so it is solid but not complete.

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 short sentences, front-loaded with the action, then default behavior, then side-effect note. Every sentence earns its place 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?

For a five-parameter tool with no output schema and no annotations, the description covers purpose, default path behavior, and non-intrusiveness. It leaves gaps around success output, overwrite behavior, and error cases, but the schema's 100% coverage carries the parameter documentation.

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%, so the baseline is 3, but the description genuinely adds meaning by explaining the default behavior of the optional path parameter (saves to Downloads named after page title). It adds no further detail for tab/slot/agent/multiSlot, which the schema already documents.

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

Purpose4/5

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

States a specific verb and resource ('Saves the page as a PDF') with concrete examples (receipts, articles). The PDF output inherently distinguishes it from browser_screenshot, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

The examples 'receipts, articles' imply intended scenarios but the description never states when to choose this over browser_screenshot or browser_download_wait, and gives no exclusions. Usage is only implied.

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

browser_permissionAnswer permission bubbleA

Lists or answers Chrome permission bubbles ("site wants to: access other apps and services on this device / show notifications / know your location…"). They are browser UI: not in snapshot/screenshot, page tools can't click them, and the page often waits until they are answered. The header warns when one is open. Without button: shows the open bubbles with their exact button names. With button: presses that button (exact name as listed, e.g. "허용", "Allow", "Block", "Allow while visiting the site"). Windows, windowed slots only.

NameRequiredDescriptionDefault
siteNoOnly when several bubbles are open: part of the bubble title (e.g. the site host) to pick one
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
buttonNoExact button name to press, as listed in the header or by calling without button
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and delivers real behavioral context: bubbles are browser UI absent from snapshot/screenshot, page tools cannot click them, and the page often blocks until they are answered. It also discloses a platform constraint ('Windows, windowed slots only'). It stops short of describing reversibility or failure modes when a button name doesn't match, keeping it from a 5.

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?

Front-loads what the tool does, then why it exists, then the two modes. Dense but every sentence carries information; the inline examples and Korean sample add real utility rather than padding. Slightly long but not wasteful.

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 no-annotation, no-output-schema tool, it covers the essentials: what appears when no button is passed, how to answer, and the platform limitation. The main missing piece is disambiguation from browser_dialog, which would make it fully self-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?

Schema coverage is already 100%, so baseline is 3, but the description adds genuine value: it defines the two-mode contract for button (list first, then press the exact name as shown) and gives multilingual button-name examples. It reinforces the site selector's purpose in choosing among multiple open bubbles.

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

Purpose4/5

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

States a specific pair of verbs (lists/answers) on a precise resource (Chrome permission bubbles) and clarifies scope with the 'site wants to:' example. It partly distinguishes itself by noting that page tools can't click these, but it never names the closest sibling, browser_dialog, so an agent must infer the split. Clear purpose, incomplete sibling differentiation.

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?

Explains the trigger context ('the header warns when one is open') and the two invocation modes (omit button to enumerate, supply button to press), giving solid when-to-use guidance. It lacks explicit exclusions or routing versus the browser_dialog sibling, which handles adjacent dialog UI.

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

browser_press_keyPress keyB

Presses a key on the focused element. E.g. Enter, Tab, Escape, ArrowDown, PageDown, Control+A, Shift+Tab.

NameRequiredDescriptionDefault
keyYesKey name or combo (e.g. "Control+A")
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose a genuine behavioral trait beyond the schema: the key is sent to the currently focused element, which means focus must be established first. However it says nothing about side effects, whether the browser must be launched, or failure behavior when nothing is focused.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and followed by useful examples; nothing is padded. The example list partially overlaps the schema's example but is still the most useful part of the description.

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

Completeness3/5

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

For a simple action tool with no output schema and no annotations, the description covers the core action but omits prerequisites (browser launched, target element focused, slot/tab context) and any routing against the many sibling action tools. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all seven parameters (key, slot, tab, read, agent, summary, multiSlot) are already documented in the schema, including key-combo syntax. The description's key examples roughly duplicate the schema's own example rather than adding new semantics, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Presses a key on the focused element') and the example keys make the scope unambiguous. It implicitly distinguishes itself from browser_type/browser_fill (text entry) by implying single-key/shortcut presses, though it never names those siblings explicitly.

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 examples (Control+A, Shift+Tab, PageDown) imply the intended use case of keyboard shortcuts and navigation keys, but there is no explicit when-to-use or when-to-prefer-alternatives guidance versus browser_type for text input or browser_click for activating elements.

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

browser_reloadReloadA

Reloads the page (same as Chrome reload). ignore_cache=true bypasses the cache. Careful: unsaved user input on the page is lost.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)
ignore_cacheNoBypass cache (hard reload)

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose the most important behavioral trait: unsaved user input on the page is lost. It also explains the cache-bypass effect of ignore_cache. It omits any auth/permission context or return behavior, but the core destructive consequence is clearly flagged.

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 short sentences, zero waste, with the primary purpose front-loaded and the warning properly positioned last where it is most likely to be read before acting.

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 page-reload tool with one required parameter, full schema coverage, and no output schema, the description covers purpose, the key behavior, and the main side effect. It is essentially complete, with only minor gaps around multi-tab/slot context.

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 seven parameters, including ignore_cache's own description. The description adds little beyond restating that ignore_cache bypasses the cache, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Reloads the page') and clarifies the semantics with the analogy '(same as Chrome reload)'. It is clearly distinguishable from browser_navigate, browser_back and browser_forward, though it never names a sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the reload semantics and the ignore_cache note, giving the agent a sense of when to reach for a hard reload. However, there is no explicit guidance on when to reload rather than re-navigate, and no mention of prerequisites or tab/slot requirements for calling it.

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

browser_screenshotScreenshotA

Captures the visible area of the tab as PNG, even background tabs (without switching). Never changes window size or viewport, so full-page capture is unsupported (scroll then capture, or use snapshot/text).

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and discloses key traits: background tabs work without switching, viewport/window size is never changed, and output is PNG. It does not detail return encoding or error cases, but the core behavioral constraints are well covered.

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 main capability, then the key limitation and alternatives. No wasted text.

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 low-complexity screenshot tool with rich schema coverage and no output schema, the description is nearly complete. It states PNG output, but could clarify how the image is returned (data, path, or tool result).

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 four parameters. The description adds no parameter-specific meaning, which is acceptable at baseline 3 when the schema 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?

States a specific verb and resource ("Captures the visible area of the tab as PNG") and distinguishes scope from siblings by noting full-page capture is unsupported and pointing to snapshot/text.

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 covers when-not to use it (full-page capture unsupported) and names alternatives (scroll then capture, or use snapshot/text). This is clear routing guidance an agent can act on.

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

browser_scrollScrollA

Scrolls a ref element into view, or by dy pixels (positive = down, negative = up, default 600). Reports the actual resulting position.

NameRequiredDescriptionDefault
dyNo
refNo
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses direction semantics and that the resulting position is reported, but says nothing about permissions, multi-slot/tab interaction, or side effects on page state.

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

Conciseness5/5

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

A single dense sentence that front-loads the verb and the two modes, with no wasted words. Direction and default are packed in parenthetically without distraction.

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 an 8-parameter action tool with no output schema, the description covers the core scroll mechanics; remaining parameters (read, slot, agent, summary, multiSlot) are documented in the schema. Reporting the resulting position compensates for the missing output schema, leaving only minor gaps around tab/multi-slot context.

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 75% schema coverage, the baseline is 3, but the description adds real meaning beyond the schema: the dy parameter has no schema description, and the description supplies sign convention (positive=down, negative=up) and the default of 600, plus clarifies that ref targets a ref element.

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

Purpose4/5

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

States a specific verb (scrolls) with two distinct modes: a ref element into view, or by dy pixels. It's clearly distinguishable from siblings like browser_click or browser_wait, though it doesn't explicitly name them.

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

Usage Guidelines3/5

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

Usage is implied by the ref-vs-dy alternative, but the description never states when to prefer scrolling a ref into view versus offset scrolling, nor when scroll is preferable to browser_wait or a snapshot. No explicit exclusions or prerequisites are given.

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

browser_selectSelect optionA

Picks an option in a dropdown (by value or visible text; partial match OK). Focuses the dropdown and moves with keys (arrow keys on Windows/Linux, typing the first letters on macOS), so the page gets real events and no list popup opens. If nothing matches, lists the available options.

NameRequiredDescriptionDefault
refYesref of the dropdown (combobox)
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
optionYesOption value or text
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it discloses the interaction mechanism (focus plus arrow keys on Windows/Linux, first-letter typing on macOS), that the page receives real events, and the fallback behavior when no option matches (lists available options). It does not say whether it scrolls the dropdown into view or what happens if the ref is not a combobox.

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 tightly packed sentences, front-loaded with what the tool does, followed by how it works and the failure behavior. Every sentence carries information an agent needs; nothing is padding or restated from the title.

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 an eight-parameter action tool with no annotations and no output schema, the description covers the operation, its mechanism, and its no-match behavior. The 'read' parameter already governs what page content comes back, so return values need not be explained, but the description is silent on error cases such as a stale or invalid ref.

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%, so the baseline is 3, but the description meaningfully enriches the key domain parameter by explaining that 'option' accepts either value or visible text and permits partial matches - detail the schema's bare 'Option value or text' does not convey. It adds nothing about the other seven parameters, which the schema already documents thoroughly.

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

Purpose5/5

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

States a specific verb (picks) and resource (option in a <select> dropdown), and the mechanism described (keyboard-driven selection rather than clicking) cleanly separates it from siblings like browser_click or browser_fill. An agent can tell exactly what operation this is without opening the schema.

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

Usage Guidelines4/5

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

Usage context is strongly implied: the tool targets native <select> dropdowns and explains that because it moves with keys, 'no list popup opens' - implying it is the correct choice over browser_click for these elements. It also documents a partial-match tolerance, but never explicitly names an alternative tool to use for non-<select> dropdowns.

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

browser_snapshotSnapshotA

Reads the tab as accessibility-tree text. Clickable/typable elements get refs like [e12]. Long pages are split; only page 1 (top) is shown (page=2 to continue; refs stay the same across pages). find="text" shows only matching elements with their parent context; ref="e40" shows only that element's subtree. Refs change when the page changes, so re-snapshot before acting.

NameRequiredDescriptionDefault
refNoOnly this ref element and its subtree
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
findNoOnly lines containing this text, with parent context (ignores case and spaces). If unsure of site language, use | for alternatives, e.g. "제목|subject"
pageNoPage number for long output (default 1)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)
interactiveNoOnly actionable elements (lines with refs): inputs, buttons, links. Use first to find inputs on big pages like Gmail

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: refs are assigned as [e12], long pages are paginated with refs stable across pages, find and ref narrowing behavior are described, and critically it warns 'Refs change when the page changes, so re-snapshot before acting' — a non-obvious, action-relevant behavioral trait.

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?

Front-loaded with the core purpose, then dense behavioral facts, ending on the most important operational warning. Every sentence conveys distinct, actionable information with no filler.

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 an 8-param, no-output-schema tool, the description explains the return shape (a11y tree with refs), pagination, and ref lifecycle well. Slot/tab/agent/multiSlot semantics are left entirely to the schema, which is acceptable given their 100% coverage, but the description adds nothing about them.

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%, so the baseline is 3, but the description adds meaning beyond the schema: it documents cross-page ref stability (schema says only 'page=2 to continue') and gives concrete usage examples for find ("text") and ref ("e40") subtree 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?

States a specific verb and resource: 'Reads the tab as accessibility-tree text.' This immediately separates it from siblings like browser_text (raw text) and browser_screenshot (image) by naming the distinct output format and the ref-annotated tree structure.

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?

Gives clear workflow context: 're-snapshot before acting' establishes that this must precede action tools, and the find/ref guidance explains situational usage. It stops short of explicitly naming when to prefer this over browser_text or browser_screenshot, so no exclusions are stated.

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

browser_statusSlot statusB

Shows running Chrome slots (1-30) with their tabs, opener, last action and one-line summary. Pass slot for just that slot.

NameRequiredDescriptionDefault
slotNoBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It discloses the read-only nature implicitly ("Shows running") and describes the information returned, which is genuinely useful, but omits what happens when no slots are running, ordering, and any cost or rate considerations.

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

Conciseness4/5

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

Two tight sentences with the resource and returned fields front-loaded. The second sentence is short and useful for a multi-slot vs single-slot decision, though it is partly restating schema behavior, which keeps it from a clean 5.

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

Completeness3/5

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

For a 2-parameter, annotation-free tool with no output schema, the description does well by enumerating the returned fields in place of a schema. It is still incomplete on lifecycle context (must a slot be launched first?) and empty-state behavior, which an agent needs to call and interpret 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?

Schema description coverage is 100%, so the schema already fully documents both slot and agent, including the port-to-slot conversion. The description's only addition is confirming that omitting slot returns all slots and supplying it narrows to one, which is a minor clarification rather than new semantics. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Shows running Chrome slots (1-30)") and enumerates the returned contents (tabs, opener, last action, one-line summary), which differentiates it from generic siblings like browser_tabs or browser_snapshot. It stops short of naming a sibling explicitly, so an agent must still infer which of the 30+ browser_* tools to prefer.

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?

"Pass slot for just that slot" is calling mechanics, not when-to-use guidance. Nothing says when an agent should call browser_status versus browser_tabs, browser_snapshot, or slot_inbox, nor does it state prerequisites such as whether a slot must already be running.

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

browser_tab_closeClose tabC

Closes a tab. tab is required.

NameRequiredDescriptionDefault
tabYesTab to close: number or ID ("t7")
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure, and it says almost nothing. It does not reveal what happens to unsaved state, whether closing the last tab closes the browser, how the active-tab pointer behaves, or whether the call errors on a stale tab id.

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

Conciseness3/5

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

The description is short and front-loaded, which is appropriate for a simple tool. The second sentence ('tab is required') is pure redundancy with the schema's required list and does not earn its place.

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

Completeness2/5

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

For a mutation tool with no annotations and no output schema, the description is too thin. It never mentions the slot parameter that must accompany the close, nor the agent identity parameter, and it omits any error/edge-case behavior an agent would need to call 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?

Schema description coverage is 100%, so the baseline is 3 – the schema already documents tab formats ('t7' or number), slot 1-30, and the agent display name. The description's 'tab is required' adds no meaning beyond the schema's required array.

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

Purpose4/5

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

States a specific verb and resource ('Closes a tab'), which is enough to distinguish it from siblings like browser_tab_new or browser_tab_select at a glance. However, it offers no differentiation from browser_close (closing the whole browser) vs. closing a single tab, leaving the boundary to inference.

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 only guidance is 'tab is required,' which restates the schema's required list rather than explaining when to use this tool. There is no mention of alternatives such as browser_close when no tabs remain, or prerequisites for calling it.

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

browser_tab_newNew tabA

Opens a new tab in the slot and returns its ID. When agents share a slot, open your own tab and work only by its ID to avoid mixing.

NameRequiredDescriptionDefault
urlNoURL to open (omit for blank tab)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It usefully states that the call returns the tab ID and warns about cross-agent tab mixing, but says nothing about whether the new tab becomes the active/focused tab, its interaction with the slot's current state, or any permission requirements. Some behavioral value added, clear gaps remain.

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 tight sentences, zero filler. The core action and return value are front-loaded, and the multi-agent caution follows as supporting context.

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 helpfully notes the returned ID, and the 100% schema coverage handles parameter detail. It is nearly complete for a small connector tool, only missing behavioral detail such as whether the new tab takes focus.

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 all four parameters (url, slot, agent, summary) are already richly documented, including slot parsing rules and the agent display-name default. The description adds no format or meaning 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.

Purpose4/5

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

States a specific verb and resource ('Opens a new tab in the slot') and adds the useful side effect that it returns the tab's ID. It is naturally distinguishable from browser_tabs, browser_tab_close, and browser_tab_select by operation, though it never names those siblings explicitly.

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 use: 'When agents share a slot, open your own tab and work only by its ID to avoid mixing.' This tells the agent a concrete scenario and the behavioral convention to follow. However, it gives no exclusions or explicit alternatives (e.g. when to re-use an existing tab instead of opening a new one).

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

browser_tabsList tabsB

Slot tab list: number, ID, title, URL, opener, last action, per-tab summary (updated only by actions with summary). "·front" marks the tab currently in front in its window (one per window).

NameRequiredDescriptionDefault
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".

TDQS

B3.2/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does disclose real behavioral detail: the '·front' marker semantics (one per window) and that per-tab summaries are refreshed only by actions carrying a summary. It says nothing about whether the call is read-only or what side effects/permissions are involved, though listing is inherently low-risk.

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

Conciseness4/5

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

A single dense sentence, front-loaded with what the tool yields, with the field list following. It is efficient, though the parenthetical about summaries and the quoted '·front' marker make it slightly harder 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?

There is no output schema, and the description usefully compensates by enumerating returned columns and explaining the '·front' marker, which is genuinely helpful. However it omits usage context relative to sibling tools and any note on whether the list is filtered or paginated.

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% and both parameters (slot, agent) are fully documented in the schema, including the slot range and port conversion rule. The description adds only an incidental mention of 'slot' with no syntax detail beyond the schema, so baseline 3 applies.

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

Purpose4/5

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

The description states the tool produces a tab list for a browser slot and enumerates the returned fields, so the resource and result are clear. It does not explicitly name the verb 'list open tabs' nor differentiate itself from the near-sibling browser_status, which also reports browser state.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as browser_status or browser_snapshot. The agent must infer that this is the way to enumerate tabs.

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

browser_tab_selectBring tab to frontA

Brings a tab to the front of its Chrome window. Changes what the user sees, so use only when the user wants it. (Background tabs can be read, operated and captured; no need to bring them forward to work.)

NameRequiredDescriptionDefault
tabYesTab to bring forward: number or ID
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and it does disclose the key side effect: it changes what the user sees, and it clarifies that tab visibility is not required for read/operate/capture operations. It omits failure/edge behavior (tab already active, unknown tab or slot), so it is strong but 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.

Conciseness5/5

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

Two compact sentences plus a parenthetical; the action is front-loaded and the parenthetical earns its place by preventing an unnecessary tab switch. No filler.

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 no-output, no-annotation tool this covers purpose, user-visible effect, and when to avoid it, with parameters fully handled by the schema. Only minor gaps remain (error/edge cases, whether the previous tab is affected).

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% and the schema already documents slot (with port math), tab, and agent semantics richly. The description adds no parameter-level information, so the baseline 3 applies.

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

Purpose5/5

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

Specific verb ('brings to the front') and resource ('a tab of its Chrome window'), with an implicit scope that separates it from browser_tabs (listing) and browser_tab_new/close. An agent can identify the operation and its effect on visible state without opening the schema.

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

Usage Guidelines5/5

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

Gives an explicit when ('use only when the user wants it') and a when-not ('background tabs can be read, operated and captured; no need to bring them forward to work'), effectively steering the agent away from unnecessary calls. This is exactly the kind of routing guidance the dimension rewards.

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

browser_textRead textA

Reads the page body text (main/article if present). With ref, only that element's text. Shorter and easier than a snapshot for articles/documents. Use page for long text.

NameRequiredDescriptionDefault
refNoOnly this element's text
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
pageNoPage number for long output (default 1)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A3.9/5.0
Behavior3/5

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

There are no annotations, so the description carries the full behavioral burden. It usefully discloses the main/article extraction fallback, the ref-narrowing behavior, and that output can be paged, but it does not describe truncation limits, the return shape, or read-only guarantees, leaving meaningful gaps for a tool with zero annotation coverage.

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?

Three tight sentences with the core behavior front-loaded and no filler. The final clause 'Use page for long text' is slightly cryptic but still earns its place as an operational hint.

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 read-only extraction tool with no output schema or annotations, the description covers purpose, the key fallback behavior, narrowing via ref, and pagination guidance. It is nearly complete; only return-format and truncation details are absent, which the missing output schema makes somewhat more noticeable.

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 six parameters, making 3 the baseline. The description adds minor value by tying ref to element-only text and page to long output, but introduces no syntax or format detail 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?

States a specific verb (reads) and resource (page body text), plus the main/article fallback logic. It explicitly contrasts itself with a named sibling (snapshot) as 'shorter and easier... for articles/documents', so an agent can distinguish it without opening either schema.

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

Usage Guidelines4/5

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

Names the competing tool (browser_snapshot) and the condition that favors this one (articles/documents), and directs long output to the page parameter. It gives clear positive context but no explicit when-not-to-use or edge cases, so it falls short of a 5.

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

browser_typeTypeA

Types text into a ref element, sending real key events (keydown/keypress/input/keyup) per character like a human. clear=true clears existing content; submit=true presses Enter after. Verifies the resulting value and reports a mismatch. fast=true inserts very long text at once without key events. Date/time inputs get the value set directly in their format (time "19:30", date "2026-10-08"; change event then has isTrusted=false).

NameRequiredDescriptionDefault
refYesref of the element to type into
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
fastNoVery long text: insert at once without key events
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
textYesText to type
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
clearNoClear existing content
submitNoPress Enter after
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.3/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it discloses per-character key events, value verification with mismatch reporting, fast-mode bypass of key events, and the notable quirk that date/time inputs are set directly with isTrusted=false. These are non-obvious behaviors an agent could not infer from the schema.

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

Conciseness4/5

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

Front-loaded with the core operation, then the option flags, then the date/time edge case. Dense but every sentence adds operational detail; no filler.

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 exists, and the description compensates for this by explaining that the resulting value is verified and mismatches reported. Combined with the mode semantics, an agent has enough to call the tool correctly; only sibling-differentiation is thin.

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 baseline is 3. The description largely restates the schema's own parameter documentation (clear, submit, fast) rather than adding meaning beyond 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?

States a specific verb and resource ('Types text into a ref element') and immediately distinguishes itself by disclosing real per-character key events, which separates it from value-setting siblings like browser_fill. An agent can identify the tool's operation without opening the schema.

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

Usage Guidelines4/5

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

Gives clear conditional guidance — clear=true to wipe existing content, submit=true to press Enter, fast=true for very long text — which tells the agent which mode to pick. It does not explicitly contrast with browser_fill or browser_press_key, so selection against siblings is left partly to inference.

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

browser_uploadUpload fileA

Puts files into a file input (no OS file picker shown to the user). Give ref of the file input ( or its label), or for a site's custom "attach" button, click it first with browser_click (CDPM intercepts the picker) and call without ref. The site gets the same events as a human file pick.

NameRequiredDescriptionDefault
refNoFile input ref. Omit to use the file picker just opened by a click
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
readNoAppend the page after the action (no separate read needed): text=body text, snapshot=snapshot page 1 (with refs), changes=only lines added/removed since your last snapshot (shortest; full page if the page changed)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
filesYesFile paths on this PC (absolute recommended)
summaryNoOne-line note of what you are doing (e.g. "comparing laptop prices"). Shown in browser_status (not the status line). Omit to keep the previous one.
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)

TDQS

A4.6/5.0
Behavior4/5

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

No annotations exist, so the description carries the burden, and it does disclose real behavior: no OS file picker surfaces to the user, the CDPM layer intercepts the native picker, and the site receives the same events as a human file pick. It stops short of error/permission behavior (unsupported inputs, failed uploads, size limits).

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 tight sentences: what it does first, then the two ways to target an input, then the fidelity guarantee. No filler and the critical scoping detail leads.

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 an 8-parameter, no-output-schema action tool, the description fully covers the request-specific semantics an agent needs to call it correctly, while generic parameters (slot, agent, summary, read, tab) are adequately handled by the schema. Only failure/edge-case behavior is omitted.

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%, so the baseline is 3, but the description adds genuine meaning to 'ref' by explaining the two operating modes (native input vs. just-opened picker) that the schema's one-line property description only hints at. It also implies the local file-path nature of 'files'.

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

Purpose5/5

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

States a specific verb and resource ('Puts files into a file input') and immediately clarifies the non-obvious mechanism ('no OS file picker shown'). An agent can distinguish this from browser_click and browser_fill without opening the schema.

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

Usage Guidelines5/5

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

Gives two explicit invocation modes with the deciding condition: pass ref for a native input, or click the site's custom attach button first with browser_click and call without ref because CDPM intercepts the picker. It names the alternative tool and when to pair it.

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

browser_waitWaitA

Waits until text appears; gone: that text disappears; url: the URL changes; enabled: that button/input becomes enabled; response: a network response for that URL completes (returns its body); network_idle: the network goes quiet; otherwise for seconds. For SPAs (search results, lists, etc.), instead of reading the page, getting the data response (JSON) with response="/api/search" after a click is faster and more accurate (it searches from this agent's last action on that tab, so responses that arrived during the click are caught). Only reads, never touches the page, so the user's input is not lost (use it to detect login: url, gone="Password" or text="Inbox"). Returns as soon as the condition is met or another agent's message arrives. Keep waits minimal: long waits only for humans (login, etc.); to wait for other agents use slot_inbox wait.

NameRequiredDescriptionDefault
tabNoTarget tab: number (1, 2…) or ID ("t7"). Use the stable ID when agents share a slot. Required for action tools when there are multiple tabs.
urlNoUntil the URL contains this (e.g. "mail.google.com/mail"). "" = until it differs from the current URL
goneNoUntil this text disappears from the page (e.g. login form's "Password" gone = logged in)
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
textNoText to wait for
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
enabledNoUntil this ref element (button/input) becomes enabled
secondsNoPlain wait in seconds. Avoid: wait on a condition (text/gone/url) or slot_inbox wait instead
timeoutNoMax wait in seconds for text/gone/url/enabled/response/network_idle. 300-600 when waiting for a human login, etc.
responseNoUntil a network response whose URL contains this completes (e.g. "/api/search"). * ? wildcards work (matched against the full URL, e.g. "*api.example.com/v1/items*"). Returns the response body
multiSlotNotrue only when one agent must handle several slots together (e.g. comparing). Normally omit (one agent = one slot; use subagents for the rest)
network_idleNoUntil no network requests for 0.5s (before capture/read)

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so: it declares the tool "Only reads, never touches the page, so the user's input is not lost," states it returns as soon as the condition is met or a message arrives, and explains the response mode returns the body and searches from the agent's last action. This is rich behavioral disclosure beyond what the schema states.

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 key information — the mode list — is front-loaded effectively, and each subsequent sentence (SPA shortcut, read-only safety, minimal waits) earns its place. However the first sentence is a dense semicolon run-on, which slightly hurts scannability.

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

Completeness4/5

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

For a 12-parameter tool with no annotations and no output schema, the description is nearly complete: it covers modes, timing, safety, and return-body for response. It does not state what a text/gone/url wait returns or what happens on timeout expiry, leaving a couple of gaps.

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%, so the baseline is 3, but the description adds real value by explaining mode precedence ("otherwise for seconds") and the semantics of response wildcards and returned bodies that tie the parameters together. It stops short of fully documenting timeout-failure behavior, so it is above baseline but not exhaustive.

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 names a concrete verb ("Waits until") and exhaustively enumerates the condition modes — text, gone, url, enabled, response, network_idle, seconds — so an agent knows exactly what the tool does. It also names the sibling it is not ("to wait for other agents use slot_inbox wait"), distinguishing it from the other wait-style tools.

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 gives explicit when-to-use guidance per mode and an alternative: for SPAs use response="/api/search" "instead of reading the page," and it routes agent-message waiting to slot_inbox wait. It also constrains duration ("Keep waits minimal: long waits only for humans"), leaving little to inference.

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

slot_inboxCheck messagesA

Shows your unread messages. With wait (seconds), waits up to that long for a new message (for real-time conversation). Messages already delivered in another tool's header are not unread; when there are no new ones, recently received ones are noted for reference.

NameRequiredDescriptionDefault
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
waitNoMax seconds to wait for a new message; returns as soon as one arrives (use this instead of repeatedly checking the page while waiting for another agent)
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does disclose several non-obvious behaviors: blocking semantics for wait, the unread-message definition (header-delivered messages excluded), and what happens when nothing new exists (recently received ones are 'noted for reference'). It leaves unclear whether fetching marks messages as read, and does not describe message shape or size limits, which matters for a receive tool.

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

Conciseness5/5

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

Three short sentences, purpose front-loaded, then wait behavior, then the unread edge case. No restatement of the name, no filler, and each sentence conveys something an agent could act on.

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 no annotations, the description supplies the return semantics an agent needs (unread-only, fallback of recent messages, blocking behavior). Remaining gaps — whether reads are consumed, and what a message looks like — are modest for a simple polling endpoint but would be worth one clause.

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% and all three parameters are well documented in the schema itself (including the wait-vs-polling hint and the slot port arithmetic). The description adds only the conversational framing of wait ('for real-time conversation'), so the baseline 3 applies — the schema, not the description, does the parameter work.

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

Purpose4/5

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

States a specific verb and resource: 'Shows your unread messages.' It also clarifies a non-obvious boundary (messages delivered in another tool's header are not unread), which lets an agent reason about what it will get back. It does not name a sibling alternative (slot_send) or reference slot_pause/slot_resume, so differentiation comes mostly from the distinctive 'inbox' concept rather than explicit routing.

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 explains the polling mode ('with wait, waits up to that long for a new message (for real-time conversation)'), which is real guidance, but usage conditions are only implied — there is no explicit 'use this when X, use slot_send when Y' statement or statement of when not to call it. The agent must infer that this is the receive half of a send/receive pair.

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

slot_pausePause slotA

Use only when the user says to pause (e.g. "pause 3"); agents never call it on their own. All action tools on the slot are refused and any browser_wait in progress stops at once. An action already sent to Chrome finishes. Reading still works. Applies immediately to agents in other Claude sessions too. all=true pauses every running slot.

NameRequiredDescriptionDefault
allNoAll running slots
slotNoBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
slotsNoMultiple slots (e.g. [1,2,3])

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations provided, the description carries the full behavioral burden and does so richly: it discloses what is blocked (all action tools), what is interrupted (browser_wait in progress), what survives (an action already sent to Chrome finishes; reading still works), the cross-session reach, and the all=true scope. This is far more than a restatement of the name.

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 most important constraint (only call on explicit user request) is front-loaded, and nearly every sentence is terse and load-bearing. A couple of clauses, such as the note about other Claude sessions, are useful but slightly tangential for a pause tool.

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 mutation-style control tool with no annotations and no output schema, the description covers effect scope, timing, and cross-session behavior well. It does not state what the call returns or confirm whether an ack is produced, which is a minor gap given the absence of an output schema.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all four parameters, making a baseline of 3 correct. The description adds the meaning of all=true ('pauses every running slot') beyond the schema's terse 'All running slots', but gives no guidance on choosing between slot, slots, and all.

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 gives a specific verb+resource (pause a browser slot) and immediately distinguishes it from its counterpart siblings by stating it is only for user-requested pauses, with slot_resume implied as the inverse. It also scopes the effect precisely ('All action tools on the slot are refused', 'all=true pauses every running slot'), so an agent can separate it from other slot tools without opening a schema.

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?

Explicit when-to-use ('Use only when the user says to pause, e.g. "pause 3"') and explicit when-not ('agents never call it on their own') are both stated, which is exactly the exclusion guidance an autonomous agent needs. Nothing is left to inference.

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

slot_resumeResume slotA

Use only when the user says to resume (e.g. "continue 3"); the agent owning a paused slot never calls it on its own. Unpauses and messages every agent on the slot to wake it (agents re-read the page and continue). all=true resumes every paused slot.

NameRequiredDescriptionDefault
allNoAll paused slots
slotNoBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".
slotsNoMultiple slots (e.g. [1,2,3])

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the side effect (messaging every agent on the slot) and the wake semantics (agents re-read the page and continue). It does not cover failure cases (e.g. what happens if the slot is not paused) or permission requirements, keeping it short of a 5.

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?

Front-loads the critical usage constraint before describing behavior, and every clause earns its place with no filler. Two tight sentences cover usage, mechanism, and the all-flag.

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 mutation tool with no annotations and no output schema, the description covers when to call it, what it does, and the wake side effect. It omits edge-case behavior (unpausing a non-paused slot) and error/return expectations, but is otherwise complete enough to call 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 coverage is 100%, so the baseline is 3; the description adds real meaning by explaining the effect of the flag — 'all=true resumes every paused slot' — which is more than the schema's terse 'All paused slots'. The slot/slots/agent params are left entirely to 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?

States a specific verb and resource — 'Unpauses and messages every agent on the slot to wake it' — and describes the concrete consequence (agents re-read the page and continue). An agent can distinguish this from slot_pause and slot_send without opening any schema.

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 scopes invocation to 'only when the user says to resume (e.g. "continue 3")' and adds a hard when-not rule: 'the agent owning a paused slot never calls it on its own.' This is exactly the routing guidance an agent needs.

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

slot_sendSend messageA

Sends a message to other agents (real-time collaboration). slot = the slot the recipient owns (to reach another slot's agent, use that slot number). Omit to to send to everyone on that slot. Recipients get it instantly if waiting in slot_inbox wait, otherwise in their next tool result header (a running browser_wait stops at once). When you finish a step, notify waiting agents right away.

NameRequiredDescriptionDefault
toNoRecipient agent name
slotYesBrowser slot 1-30. "3", "slot 3", "browser 3" → 3. If the user gives a port like 14052, subtract 14049.
textYes
agentNoYour display name, shown to other agents. Subagents must always set it. Default "claude-1e1b".

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the disclosure burden, and it does so well: it explains delivery timing (instant if the recipient is waiting in slot_inbox wait), fallback delivery (next tool result header), and side effects (a running browser_wait stops at once). It omits rate limits or ordering guarantees, but the key behavioral mechanics are present.

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?

Front-loads the core action, then layers scoping, delivery, and timing notes in dense sentences. The parenthetical '(real-time collaboration)' is mild filler and the slot explanation is repeated twice, but overall it is efficient.

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 4-parameter tool with no annotations and no output schema, the description covers the essential semantics: recipient selection, broadcast behavior, and delivery timing. Return values are the delivered message on the other side, which the description implies; nothing critical is missing for correct invocation.

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

Parameters4/5

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

Schema coverage is 75%, and the description adds real meaning beyond it: it explains what 'slot' means from the recipient's perspective and what omitting 'to' does (broadcast to the slot). It does not address the optional 'agent' display-name parameter, but the schema's own description covers that.

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

Purpose5/5

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

States a specific verb+resource ('Sends a message to other agents') and distinguishes itself from siblings like slot_inbox by describing the send direction. An agent can tell immediately this is not a browser-control tool.

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?

Gives clear usage context ('When you finish a step, notify waiting agents right away') and routing guidance ('Omit to to send to everyone on that slot'). It does not explicitly name when to prefer slot_inbox or slot_pause over this, but the trigger condition is concrete.

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. 36 tool updatesv0.1.10
    • Changedbrowser_back1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_block1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_click1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_close1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_dialog1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_download_wait1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_drag1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_eval1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_fill1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_forward1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_hover1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_launch1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_navigate1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_network1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_network_detail1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_pdf1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_permission1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_press_key1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_reload1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_screenshot1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_scroll1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_select1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_snapshot1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_status1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_tab_close1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_tab_new1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_tab_select1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_tabs1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_text1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_type1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_upload1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedbrowser_wait1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedslot_inbox1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedslot_pause1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedslot_resume1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
    • Changedslot_send1 field changed
      • changedInput schema / properties / agent / description
        Previous value: -"Your display name, shown to other agents. Subagents must always set it. Default \"claude-68d9\"."New value: +"Your display name, shown to other agents. Subagents must always set it. Default \"claude-1e1b\"."
  2. 36 tool updatesv0.1.0
    • First observedbrowser_back
    • First observedbrowser_block
    • First observedbrowser_click
    • First observedbrowser_close
    • First observedbrowser_dialog
    • First observedbrowser_download_wait
    • First observedbrowser_drag
    • First observedbrowser_eval
    • First observedbrowser_fill
    • First observedbrowser_forward
    • First observedbrowser_hover
    • First observedbrowser_launch
    • First observedbrowser_navigate
    • First observedbrowser_network
    • First observedbrowser_network_detail
    • First observedbrowser_pdf
    • First observedbrowser_permission
    • First observedbrowser_press_key
    • First observedbrowser_reload
    • First observedbrowser_screenshot
    • First observedbrowser_scroll
    • First observedbrowser_select
    • First observedbrowser_snapshot
    • First observedbrowser_status
    • First observedbrowser_tab_close
    • First observedbrowser_tab_new
    • First observedbrowser_tab_select
    • First observedbrowser_tabs
    • First observedbrowser_text
    • First observedbrowser_type
    • First observedbrowser_upload
    • First observedbrowser_wait
    • First observedslot_inbox
    • First observedslot_pause
    • First observedslot_resume
    • First observedslot_send

TDQS

B3.4/5.0

Scored across 36 tools

Disambiguation4/5

Most tools have clearly distinct purposes, and descriptions actively distinguish similar pairs such as browser_snapshot vs browser_text, browser_type vs browser_fill, and browser_dialog vs browser_permission. Some overlap remains around read/wait modalities (browser_wait vs slot_inbox wait) and the large surface increases the chance of misselection, but boundaries are generally well documented.

Naming Consistency5/5

All tool names use a consistent snake_case convention with clear prefixes: browser_* for browser operations and slot_* for multi-agent/control operations. The pattern is predictable and readable throughout the set.

Tool Count2/5

36 tools exceeds the 25+ threshold for a heavy surface and likely burdens agent tool selection, even though many are specialized for browser automation. The domain is complex, so this is over-provisioned rather than an extreme 50+ mismatch, but consolidation could improve usability.

Completeness4/5

The surface covers the browser automation lifecycle well: launch/close, tabs, reading/capture, interactions, dialogs, permissions, downloads, uploads, network inspection/blocking, and multi-agent coordination. Minor gaps include explicit cookie/localStorage management and console log capture, though browser_eval and network tools provide workarounds.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A multi-agent orchestrator that enables multiple AI agents to share a single Chrome browser instance with tab isolation and shared state. It preserves local browser data like cookies and logins while allowing concurrent agent sessions through the official Playwright MCP.
    10
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Browser automation for OpenCode using Chrome DevTools and a shared Chromium profile, with per-session tab isolation so concurrent agents don't interfere. Enables browser agents to use existing signed-in sessions with shared cookies and extensions.
    0
    1
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables multiple AI agents to each run Google's full Chrome DevTools toolset in an isolated Chrome instance with saved logins, origin allowlists, reconnect recovery, and process cleanup. It also provides visibility into running browsers so stale sessions can be inspected or reaped.
    38
    187 npm
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Exposes a local MCP endpoint that lets AI agents and human operators drive isolated Chromium profiles — each with its own cookies, fingerprint, and proxy — through tools for navigation, clicking, typing, extraction, screenshots, JS evaluation, tabs, and cookie management. Persistent per-profile session state keeps logins and context alive across launches and across AI sessions, so agents can complete real authenticated workflows.
    -