Skip to main content
Glama

CDPM

한국어 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 and print dialogs triggered by an agent's action are intercepted instead of opening OS windows.

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 except the print guard below.

  • 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() would open print preview and freeze the tab (it cannot be closed over CDP), so the page's print is disabled for the duration of the action only, reported, and restored right after. 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

58 unit and 40 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.

ParametersJSON Schema
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-68d9".
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/5.0
Behavior1/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 delivers nothing: no statement of what happens at the start of history, whether it is a navigation/mutation, what the resulting page state is, or how it interacts with the multi-slot/agent model described in 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.

Conciseness2/5

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

Two words are technically concise, but this is under-specification rather than conciseness — the sentence does not front-load any actionable information and nothing meaningful is conveyed.

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 history-navigation action with no annotations and no output schema, the agent gets no information about behavior, side effects, or edge cases. The rich schema covers parameter mechanics, but the description leaves the actual behavior of "back" unexplained.

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 fully documented in the schema. The description adds no parameter meaning, so the baseline of 3 for high coverage applies.

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

Purpose2/5

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

"Go back" restates the tool name and title (Back) without adding specificity. It does imply browser-history navigation, but it names no resource, no scope, and does not distinguish itself from the sibling browser_forward beyond the obvious opposite direction.

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_forward, browser_navigate, or browser_tab_select, nor any prerequisite such as having history to go back to. The agent must infer the condition entirely.

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.

ParametersJSON Schema
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-68d9".
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 delivers: rules skip the tab cache, rules last only for this session, rules are surfaced to other agents in the header, and matched requests fail. These are non-obvious side effects 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?

Dense but front-loaded: behavior and verbs lead, then pattern syntax, then lifetime/visibility caveats. Every sentence carries operational information, though the pattern-syntax block is lengthy enough to feel compact rather than elegant.

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

Completeness5/5

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

For an 8-parameter mutation tool with no annotations and no output schema, the description covers the essentials: what is blocked, how rules are added/removed/cleared, how patterns are interpreted, session-scoped lifetime, cache side effect, and no-arg read behavior. Nothing critical to correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds pattern-language semantics the schema never states: * and ? wildcards, bare-domain expansion ('ads.example.com' → '*ads.example.com*'), and automatic trailing-star addition for query strings. That materially changes how an agent should write add/remove values.

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 ('Blocks tab network requests matching URL patterns') and immediately clarifies the consequence ('they fail'), which distinguishes it from the read-only browser_network / browser_network_detail siblings. The add/remove/clear verbs are enumerated so the agent knows this single tool covers the whole rule lifecycle.

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

Usage Guidelines4/5

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

It tells the agent how each mode is selected (add adds, remove removes, clear removes all, no args shows current rules), which is genuine usage guidance for a multi-mode tool. It does not explicitly say when to prefer this over browser_network for inspecting traffic, but the operating 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_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.

ParametersJSON Schema
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-68d9".
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.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 full behavioral burden, and it does disclose substantial behavior: real mouse events, occlusion detection (skips and reports the covering element), navigation-triggered loading waits, new-tab reporting, file-picker interception, and non-handling of <select>. However, it says nothing about permission/auth requirements, failure/error reporting beyond occlusion, or whether the action is irreversible. The disclosure is strong but the no-annotation baseline leaves gaps that a 4-5 would require closing.

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 dense sentences, zero filler, front-loaded with the primary action and its occlusion caveat before the secondary routing notes. Each clause conveys a distinct behavioral fact an agent needs.

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, annotation-free action tool, the description covers the highest-risk behaviors (occlusion, navigation waits, file pickers, select dropdowns). It stops short of describing error returns and multi-slot/agent coordination semantics, which are left to the schema, leaving a small but real completeness 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 description coverage is 100% across all 8 parameters (ref, tab, read, slot, agent, double, summary, multiSlot), so the schema already documents everything. The description adds only the implicit meaning of "ref element" (matching the schema's browser_snapshot ref), which does not exceed the structured field. Baseline 3 is correct 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 precise verb+resource ("Clicks a ref element with real mouse events") and immediately bounds the scope against siblings: it does not click <select> dropdowns and routes those to browser_select. An agent can distinguish it from browser_type, browser_fill, browser_select, and browser_upload 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?

Explicit when-not and alternative routing: file inputs/attach buttons are intercepted, so use browser_upload; <select> dropdowns are not handled, so use browser_select. This is exactly the when/when-not/alternatives pattern that lets an agent pick the right tool on the first try.

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.

ParametersJSON Schema
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-68d9".

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 does disclose meaningful behavior: the session and cookies are saved, the profile/logins are preserved, and it reports recent use by another agent. This is genuinely useful state-persistence context, though it omits error cases (closing an already-closed slot) and any permission requirements.

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 with no filler, front-loaded with the action and its primary consequence. Every sentence carries distinct information (what closes, what persists, what is reported).

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 single-slot mutation with no output schema and no annotations, the description covers the key behavioral outcome and even describes the returned signal (recent use by another agent). Only error/edge-case behavior is absent.

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 slot (1-30 mapping rules) and agent are already fully documented in the schema. The description adds no parameter meaning beyond that, 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: "Closes slot Chrome cleanly," which is enough to distinguish it from sibling browser_tab_close (closes a tab, not the slot/browser). It does not name the sibling it is contrasted with, so the differentiation is left to inference rather than stated 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 only implied: an agent infers this is the tool for shutting a browser slot down. No condition is given for when to use this versus browser_tab_close or slot_pause, and no prerequisites (e.g. the slot must be launched) are stated.

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.

ParametersJSON Schema
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-68d9".
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 does well: it discloses the frozen-tab state while a dialog is open, that beforeunload accept loses input while dismiss stays, and that text applies only to prompts. It does not say what happens if no dialog is actually open (error vs. no-op) or whether the call blocks until resolution.

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 accept/dismiss mapping in the first clause, then layers policy and edge cases. Dense but every sentence adds a decision rule; the parenthetical dialog-type list and the beforeunload/prompt sentences are the only slightly compressed spots.

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 dialog-resolution tool with no annotations and no output schema, it covers the dialog types, the ambiguity-resolution policy, and the frozen-tab side effect. It stops short of stating the failure mode when no dialog exists or what the agent will observe after resolution, which is a minor but real gap for an action tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond the schema for two parameters: accept's direction is restated with dialog-type-specific consequences for beforeunload and prompt, and text is scoped to accepting a prompt only. It adds no semantics for slot, tab, read, agent, summary, or multiSlot, which 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 precise verb pair (accept/dismiss) on a specific resource (an open dialog) and enumerates the four dialog types it covers. An agent can immediately distinguish this from browser_click or browser_press_key, which never resolve native dialogs.

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 decision policy: judge from content and handle it yourself, accept if it is part of the requested task, close unneeded notices/ads, and ask the user only for irreversible actions they did not request. It also names concrete alternatives to escalate to (the user) and case-specific rules for beforeunload and prompt.

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.

ParametersJSON Schema
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-68d9".
timeoutNoMax wait in seconds (default 120)

TDQS

A3.8/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 does disclose useful traits: it targets the *most recently started* download, blocks only until completion, and returns the saved path in the user's Chrome download folder. However, it omits what happens on timeout (the schema's 120s default) or on download failure, which are the key risks for a wait-style 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, front-loaded with the core behavior, and "Returns as soon as it finishes" usefully clarifies that it does not block for the full timeout. 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?

There is no output schema, so the description correctly fills that gap by naming the return value (saved file path) and its location. It is nearly complete for a simple wait tool, missing only failure/timeout outcome behavior.

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 slot, agent, and timeout are already fully documented in the schema (including the port-subtraction rule and the 120s default). The description adds no parameter-level meaning, 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 (waits) and resource (most recently started download) and adds the return value (saved file path in Chrome's download folder). It implicitly distinguishes itself from the generic browser_wait sibling, but never names that alternative, so differentiation is left 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 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 a clear triggering context and ordering. It does not state when-not to use it (e.g., vs. browser_wait) or what to do if no download was started, but the positive guidance is unambiguous.

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.

ParametersJSON Schema
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-68d9".
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?

No annotations are provided, so the description must carry the behavioral burden, and it does disclose the underlying mechanism (real mouse press/move/release) plus the important distinction that HTML drag is handled without starting an OS drag. It omits failure modes (e.g. what happens if the drop target isn't reachable) and does not describe the response, though the schema's 'read' parameter covers post-action reading.

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, front-loaded with the verb and mechanism, then targeting options, then the HTML-drag caveat. No filler and each clause carries distinct information.

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 action tool with no annotations and no output schema, the description covers the core behavior, drop-target alternatives, and the HTML-vs-OS drag distinction, while the schema fully documents slot/tab/agent/read/summary. It stops short of stating prerequisites (active tab, element visibility) or what a failed drag looks like.

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 3 is the baseline, but the description adds real meaning by presenting 'to', 'to_text', and 'dx/dy' as the three alternative ways to specify the drop target and clarifying that dx/dy are relative to 'from' — a choice the schema lists but never frames as mutually exclusive options.

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 mechanism ('Drags with the real mouse (press → move in steps → release)') and enumerates concrete use cases (drag and drop, sliders, reordering, drag CAPTCHAs). This clearly separates it from siblings like browser_click and browser_hover without needing to 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 Guidelines4/5

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

The enumerated scenarios (drag and drop, sliders, reordering, CAPTCHAs) give clear context for when this tool applies, and the target-selection sentence tells the agent how to aim the drag. There is no explicit 'when not to use this / use X instead' guidance versus browser_click, which keeps it out of 5 territory.

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.

ParametersJSON Schema
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-68d9".
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.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 does substantial work: it discloses the isolated-world execution model, that DOM can be read and modified, and that page-created globals (window.appVar) are invisible. It leaves out failure modes (CSP blocks, thrown errors) and persistence of DOM mutations, so it falls 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?

Three tight sentences, front-loaded with purpose, then usage constraint, then the critical execution-environment caveat. 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 tool with no annotations and no output schema, the description covers purpose, fallback usage, return format, and the isolated-world semantics that would otherwise surprise an agent. It could say more about error behavior and whether mutations persist, but it is largely complete.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (tab, slot, agent, summary, multiSlot, expression) is already documented in the schema. The description adds no parameter-level syntax or format detail, 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 (evaluates) and resource (a JavaScript expression in the tab) plus the return form (result as JSON). It clearly differentiates itself from the DOM-oriented siblings by positioning itself as the escape hatch rather than a structured action tool.

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?

"Escape hatch only when other tools can't do it" is an explicit when-to-use and when-not-to-use rule. Combined with the sibling list of purpose-built browser_* tools, an agent knows to reach for this only as a fallback.

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.

ParametersJSON Schema
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-68d9".
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.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 does so well: it discloses clearing each field, real key events, value verification, and the stop conditions (page change, dialog, failed field) plus partial-progress reporting. It omits any auth/permission prerequisites and rate-limit behavior.

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

Conciseness5/5

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

Three dense sentences with zero filler; the core behavior is front-loaded and the alternative-tool hint is placed last where it's least disruptive. Every clause carries actionable information.

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-annotation, no-output-schema tool, the description covers ordering, per-field mechanics, stop conditions, and partial failure reporting. It leaves return-shape details ("reports how far it got") and tab/agent parameter behavior to the schema, which is reasonable but not exhaustive.

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 meaning to the submit parameter that the schema lacks — "Enter" presses Enter in the last field and a button ref clicks that button. This clarifies the exact dispatch behavior beyond the schema's terse "Enter or a button ref to click."

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 distinguishes itself from browser_select by routing dropdowns elsewhere. An agent can tell it apart from browser_type (single input) and browser_select from the text alone.

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 names the alternative for dropdowns ("For dropdowns use browser_select") and implies multi-field batching via "several inputs on the same page." It stops short of an explicit when-to-use-this-vs-browser_type statement, so it's clear context without full exclusion guidance.

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).

ParametersJSON Schema
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-68d9".
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, and it discloses almost nothing: it does not say what happens when there is no forward entry, whether it affects only the current tab, or how it interacts with the 'read' parameter that appends page content after 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?

One short, front-loaded sentence with no filler; the action is the first word. It is efficient, though arguably under-specified rather than deliberately lean given the tool's six parameters.

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 six-parameter navigation tool with no annotations and no output schema, the description omits failure conditions, tab/slot targeting behavior, and the side effect of the read parameter. The schema covers parameters, but the behavioral envelope an agent needs is largely absent.

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 including tab targeting, the read enum, slot numbering, and multiSlot semantics. The description adds no parameter meaning beyond that, which is the expected baseline 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.

Purpose4/5

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

States a specific verb+resource (navigate browser history forward) and implicitly distinguishes itself from the sibling browser_back by the parenthetical 'after going back'. An agent can identify the action, though the phrasing is terse rather than explicit about scope (per-tab history vs. slot-level).

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?

'after going back' implies the usage context (undoing a back navigation), which is more than nothing, but it gives no explicit when-not guidance, no note that it fails when there is no forward history, and no named alternatives beyond the implied browser_back.

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.

ParametersJSON Schema
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-68d9".
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?

With no annotations, the description carries the full behavioral burden. It usefully discloses that this is a non-clicking move whose purpose is to open menus/tooltips and hints that hovering changes page state (hence read=changes), but it says nothing about timing, whether the hover must be followed before the menu closes, or any permission/slot prerequisites an agent needs.

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 filler, front-loaded with the action and the click distinction, followed by purpose and the read tip. Everything earns its place.

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

Completeness4/5

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

For a 7-param action tool with no output schema and no annotations, the description covers the core interaction (non-clicking hover) and the read follow-up. It leaves the multi-tab slot/tab routing caveats to the schema, which does document them, so the coverage is nearly complete but the description itself does not reinforce those requirements.

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. The description adds genuine value on top by recommending the specific enum value read=changes for this tool's purpose, and by naming 'ref element' to reinforce the target parameter. It does not add syntax beyond the schema for other params, keeping it just above baseline.

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

Purpose5/5

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

States a specific verb and resource ('Moves the real mouse over a ref element') and immediately disambiguates from sibling browser_click with '(no click)', so an agent can route between hover and click without opening either schema. The use cases (hover menus and tooltips) further pin down the intent.

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?

'For hover menus and tooltips' gives clear context for when to reach for this tool, and 'Use read=changes to see the opened menu' guides the follow-up action. It stops short of 5 because no explicit exclusion or named alternative (e.g. 'if the menu requires a click, use browser_click') is offered.

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.

ParametersJSON Schema
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-68d9".
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.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 meets it: it discloses attach-when-already-running behavior, that starting a closed slot without headless only yields a confirmation request, and that headless/proxy apply only on first launch. It stops short of describing the return payload or failure modes, 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.

Conciseness4/5

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

Front-loaded with the governing rule and organized into discrete decision points, with almost every sentence adding operational content. The headless/closing paragraph is slightly repetitive ("ask first, then call with headless"), a minor structural cost.

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 9-parameter, zero-annotation, no-output-schema tool, the description covers intent, safety gating, and parameter interplay thoroughly. The only shortfall is that, absent an output schema, it could have said more about what a successful launch returns beyond the confirmation-request case.

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 goes beyond by encoding user-intent mapping ("slot 3" → 3, port 14052 → subtract 14049) and cross-parameter interaction rules (slots/urls pairing order, count launch order, proxy first-launch-only). These rules are not derivable from the schema fields alone.

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

Purpose5/5

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

"Starts slot Chrome" gives a specific verb and resource, and the description immediately delimits it against siblings: "other tools never start a closed slot." An agent can distinguish this from browser_tab_new or browser_status without touching 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?

Explicit when-to-use (only when the user explicitly asks), when-not (nothing else starts a closed slot), and how to choose between alternatives (headless vs windowed, slot vs slots vs count, ask first if unstated). It even routes follow-up work to subagents, 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.

browser_navigateNavigateB

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

ParametersJSON Schema
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-68d9".
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?

No annotations are provided, so the description carries the full burden. It does disclose one meaningful trait — that the call blocks until the body loads — but says nothing about timeout behavior, what happens on DNS/HTTP failure, or whether navigation state is preserved. That is useful but incomplete disclosure for a no-annotation 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?

A single front-loaded sentence with zero filler; the verb and the blocking behavior are both stated up front. It is arguably terse given the tool's importance, but no sentence is wasted.

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

Completeness3/5

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

With no annotations and no output schema, the description should cover failure and timing semantics; it mentions loading but not timeouts or error results. The schema fully covers parameters, so the remaining gap is narrow, but the behavioral envelope is only partially described.

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 seven parameters (including the tab/slot disambiguation and the read enum) are thoroughly documented in the schema itself. The description adds no parameter-level meaning beyond what the schema already states, so the baseline 3 applies.

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

Purpose4/5

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

The description pairs a specific verb ("Navigates") with a specific resource ("the tab to a URL") and adds the observable outcome ("waits for the body to load"). It is clearly distinguishable from browser_back/forward/reload by naming navigation-to-URL, but it never explicitly contrasts with those siblings.

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_back, browser_forward, browser_reload, or browser_tab_select, nor any stated prerequisite (e.g. that a slot must be launched and a tab selected first). Usage is only implied by the verb.

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.

ParametersJSON Schema
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-68d9".
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.1/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 burden and does disclose real behavioral traits: a bounded ring buffer of the latest 500 requests and newest-at-bottom ordering. It does not cover permissions, whether recording is always active, or rate/refresh behavior, so it is not fully complete.

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 compact sentences, front-loaded with what the tool returns and its retention limit before moving to filtering and the detail-tool handoff. Every sentence contributes; only the parenthetical type list is mildly expendable.

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 usefully describes the result shape (list, newest at bottom, 500-record cap) and how to drill into a specific entry. Missing only minor operational context such as whether the list refreshes live or requires re-invocation.

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

Parameters3/5

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

Schema description coverage is 100% (filter, type, failed, tab, slot, limit all documented inline), so the baseline is 3. The description's mentions of filter ('URL part'), type categories, and failed ('failures only') largely restate the schema rather than adding new semantics.

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

Purpose5/5

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

States a specific verb and resource ('Tab network request list') plus concrete scope ('latest 500 since CDPM first attached to the tab'). It also explicitly routes the agent to the sibling browser_network_detail for details, so it is distinguishable from its closest neighbor 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?

Explains how to narrow results with filter/type/failed and names the alternative (browser_network_detail) with the condition that selects it ('For details pass the n-number'). It stops short of explicit when-not-to-use guidance, but the routing 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.

ParametersJSON Schema
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-68d9".
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 the full behavioral burden. It does disclose that the response body may be truncated ('start of it, if text'), which is genuine value not derivable from the schema, but it says nothing about permission requirements, binary/non-text payloads, or how multiSlot affects retrieval.

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 tight sentence plus one clarifying clause, with the return content front-loaded and the id provenance appended. No wasted words.

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

Completeness4/5

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

No output schema or annotations exist, so the description must define the result, and it does list the three payload sections plus the truncation caveat. It stops short of covering tab/slot targeting behavior or binary responses, but for a single-request inspection tool this is nearly sufficient.

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

Parameters3/5

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

Schema description coverage is 100% and all six parameters are documented in the schema, so the baseline is 3. The description only adds the cross-tool linkage for 'id'; it says nothing extra about tab, slot, body default, or multiSlot beyond what the schema already states.

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 (shows) and precise resource (one request's headers, sent data, response body), and distinguishes itself from sibling browser_network by explaining that the id comes from that tool. An agent can tell exactly what this returns versus the network list 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?

The clause 'id is the n-number from browser_network' implicitly routes the agent to call browser_network first, which is clear sequencing context. No explicit when-not or alternative for inspecting requests, but the workflow is unambiguous.

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.

ParametersJSON Schema
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-68d9".
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?

With no annotations, the description must carry the behavioral burden; it usefully discloses the default save location (Downloads), the naming convention (page title), and that the screen/window is unaffected. It omits other operationally important behavior: whether a save/download dialog can appear, whether the call waits for completion, and overwrite handling for an existing file.

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, the default-path fallback, and the non-disruptive guarantee. Front-loaded and every sentence carries information an agent needs.

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 save tool with only one required parameter and no output schema, the description covers the essential behavior and the most likely agent question (where did the file go). It stops short of describing the return value or failure modes, a minor gap rather than a blocking one.

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 real value by defining the semantics of an omitted path (fall back to Downloads, name after the page title) — behavior the schema's path description does not state. The tab/agent/multiSlot parameters are left entirely to the schema, which is acceptable given full coverage.

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

Purpose5/5

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

States a specific verb and resource ("Saves the page as a PDF") with concrete examples (receipts, articles) that pin down the artifact type. This cleanly separates it from the image-producing browser_screenshot and the wait-only browser_download_wait sibling without needing 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 Guidelines3/5

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

The description implies when to use it (when you want a durable PDF of the current page) and explains the path-omitted case, but it never explicitly contrasts with browser_screenshot or browser_download_wait, nor states prerequisites. Usage is inferable rather than directed.

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.

ParametersJSON Schema
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-68d9".
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.1/5.0
Behavior4/5

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

No annotations, so the description carries the burden well: discloses that bubbles aren't in snapshot/screenshot, page tools can't click them, page often blocks, header warns when open, and platform limit (Windows, windowed slots). Does not cover return format or error behavior, hence not 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-loaded with purpose, then mode behavior and constraints. Dense but nearly all sentences earn their place; the example button names are slightly verbose but illustrate localization.

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-schema tool, the description is nearly complete: what it does, why page tools fail, when header warns, platform limits. Return value of the list mode is only implied rather than stated.

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

Parameters3/5

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

Schema coverage is 100% and parameter descriptions are already rich (slot parsing, site filtering, button exact name). Description reinforces button semantics but adds little beyond schema baseline.

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

Purpose5/5

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

States specific verbs (lists/answers) and a precise resource (Chrome permission bubbles), with a concrete example of bubble text. Clearly distinguishes from browser_dialog and page-level tools by explaining bubbles are browser UI.

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 both modes (without button = list, with button = press) and notes the page may wait until answered, plus header warning. Lacks explicit exclusion vs browser_dialog, but mode selection is well-defined.

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

browser_press_keyPress keyC

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

ParametersJSON Schema
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-68d9".
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.9/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 discloses that the key goes to the focused element, but says nothing about side effects (form submission, navigation triggers), focus requirements, or failure modes when no element is focused — a meaningful gap for a browser-mutating tool.

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

Conciseness4/5

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

Two short sentences, front-loaded with the action and followed by examples. Every element earns its place, though the example list is somewhat long relative to the small amount of substantive information conveyed.

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 7-parameter tool in a busy multi-slot browser ecosystem with no output schema and no annotations, the description covers only the core action. Slot/tab targeting, the read-after-action behavior, and multi-slot coordination are left entirely to the schema, which is adequate but leaves behavioral context 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 per the baseline this is a 3. The description's key examples largely duplicate what the schema's key field already documents ("Control+A"), adding little beyond the structured fields.

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 (press a key on the focused element) and gives concrete key examples like Enter, Control+A, Shift+Tab, which distinguishes it from text-entry siblings such as browser_type or browser_fill. It does not, however, explicitly name those siblings or state what makes it different.

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 comparison to browser_type/browser_fill, and no statement of prerequisites such as the element needing focus or a tab being active. The examples imply keyboard interaction but don't route the agent among alternatives.

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.

ParametersJSON Schema
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-68d9".
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.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 disclose the two traits that matter most: the destructive side effect ("unsaved user input on the page is lost") and the cache-bypass behavior of ignore_cache. It does not say whether the call waits for the page load to finish, which affects a subsequent snapshot.

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, the core action front-loaded, then the flag, then the risk. Nothing is padded and each sentence contributes.

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 action tool with no annotations and no output schema, the definition covers purpose, the cache flag, and the data-loss risk, with the fully documented schema handling targeting parameters. The one meaningful gap is whether reload blocks until load completes, which an agent needs to know before chaining reads.

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 seven parameters including ignore_cache. The description only restates ignore_cache=true, adding no format, default, or interpretation detail 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.

Purpose4/5

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

"Reloads the page" is a specific verb+resource, and "same as Chrome reload" anchors the semantics against a well-known browser action. It is clearly distinct from browser_navigate/back/forward in intent, though it never names a sibling to route against.

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

Usage Guidelines2/5

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

The description gives no when-to-use or when-not-to-use guidance and names no alternative, so an agent comparing reload against navigate or back has nothing to select on. The destructive caution implies care but is not framed as a usage rule.

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).

ParametersJSON Schema
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-68d9".
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?

No annotations are provided, so the description carries the burden and does so well: it discloses that background tabs are captured without switching, that window size and viewport are never changed, and that full-page capture is impossible. It doesn't mention permissions or error behavior, leaving some gaps.

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

Conciseness5/5

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

Two dense sentences, front-loaded with the core capability and then the constraint and fallbacks. Every clause earns its place with no repetition.

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 screenshot tool with no output schema and full schema coverage, the description is complete enough: it covers what is captured, the background-tab behavior, and the full-page limitation. It could mention the return format (image vs. path) but the schema covers parameters.

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, including tab, slot, agent, and multiSlot. The description adds no parameter-specific meaning beyond the schema, so baseline 3 is correct.

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 (captures) and resource (visible area of the tab as PNG), and implicitly distinguishes itself from browser_pdf and browser_snapshot by naming PNG and the visible viewport. An agent can tell exactly what this produces.

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

Usage Guidelines4/5

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

Explicitly says full-page capture is unsupported and routes to alternatives (scroll then capture, or use snapshot/text), which is clear when-not guidance. It doesn't name browser_pdf as the full-page alternative, so the routing is slightly incomplete.

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.

ParametersJSON Schema
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-68d9".
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.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 does disclose one genuinely useful trait — that the tool reports the actual resulting position (not just the requested delta) — but says nothing about permissions, whether the scroll animates/blocks, or failure behavior when a ref is stale.

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

Conciseness5/5

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

One sentence, front-loaded with the action and the two modes, then the modifiers. No wasted words and nothing important buried.

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 note that it reports the resulting position is important and present. The description adequately covers the tool-specific parameters; it could say a bit more about return shape or ref failure, but for a simple scroll action it is close to complete.

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

Parameters4/5

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

The schema leaves dy and ref entirely undocumented while covering the shared params (slot, tab, agent, summary, read) at ~75%. The description fills exactly that gap by defining dy's sign convention and default and explaining what ref does, which is real value beyond the schema.

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

Purpose5/5

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

States a specific verb ('Scrolls') plus the two resources/modes it operates on: a ref element into view, or by dy pixels. No sibling tool in the list does scrolling, so differentiation is implicit and unambiguous.

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

Usage Guidelines3/5

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

Gives the mechanics of dy (positive = down, negative = up, default 600) but never says when to prefer ref-scrolling over dy-scrolling, or when scroll is needed versus browser_wait/snapshot. Usage is implied rather than guided.

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.

ParametersJSON Schema
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-68d9".
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

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 does well: it discloses the interaction mechanism (focuses the dropdown, drives it with arrow keys on Windows/Linux and first-letter typing on macOS), that real events reach the page, and states the failure behavior ('If nothing matches, lists the available options'). It stops short of runtime traits such as timeouts, waiting behavior, or whether a selection triggers navigation.

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 sentences, front-loaded with the action, then the mechanism, then the failure mode — nothing is padding. The platform-specific keystroke parenthetical is slightly more detail than an agent needs to select the tool, which keeps it just under a 5.

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

Completeness4/5

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

For a tool with 8 parameters, 3 required, and no output schema, the description covers the core action, its side effects on the page, and the error/no-match path. The auxiliary parameters (slot, tab, read, agent, summary, multiSlot) rely entirely on the schema to explain themselves, so the description is adequate rather than fully complete.

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 goes beyond the schema's bare 'Option value or text' by adding 'partial match OK' and clarifying that either the value or the visible text is accepted, which is real semantic value for the required option parameter. The other seven parameters are left entirely to the schema.

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

Purpose4/5

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

States a concrete verb and resource — 'Picks an option in a <select> dropdown' — and even specifies the matching modes (value or visible text, partial match). This is unambiguous on its own, but it never names the sibling it is most confusable with (browser_tab_select) to make the disambiguation explicit.

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 purpose statement (use this to choose a value inside a select element rather than clicking), and the description hints that this is preferable because 'no list popup opens'. However, it never states when NOT to use it (e.g. custom non-native dropdowns) nor names alternatives such as browser_click or browser_fill.

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.

ParametersJSON Schema
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-68d9".
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.1/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 well: it discloses the read model, ref-stability across pages, ref invalidation on page change, and the page-1-only default. It does not discuss auth, rate limits, or failure behavior, but for a read tool that is a minor gap.

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 sentences with no filler, front-loaded with what the tool returns, then the ref/pagination mechanics, then the critical 're-snapshot' warning. Every sentence carries information an agent needs to call it correctly.

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 tool with no output schema and no annotations, the description adequately covers output format, ref lifecycle, and pagination. The ancillary params (slot, agent, multiSlot) are left to the schema, which is reasonable at 100% coverage, but the description could have reiterated the multi-tab warning surfaced there.

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 schema already documents all 8 params, setting a baseline of 3. The description adds real value beyond it by explaining the pagination contract (only page 1 shown, refs stay stable across pages) and the parent-context behavior of find=, which the schema does not fully convey.

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: 'Reads the tab as accessibility-tree text,' with concrete output detail (refs like [e12]). This is clearly distinct from a plain text extractor, but the description never names a sibling tool, so it stops short of explicit 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?

Gives real operational guidance: how to continue long pages (page=2), how to narrow with find= and ref=, and the key rule 're-snapshot before acting' once refs change. It never states when NOT to use this versus browser_text or browser_screenshot, so it lacks explicit alternatives.

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

browser_statusSlot statusA

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

ParametersJSON Schema
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-68d9".

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. "Shows running Chrome slots" implies a non-mutating read and it discloses the returned fields, but it says nothing about truncation, cost, permissions, or whether output scales with running slots. Adequate but thin for a zero-annotation 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?

Two tight sentences, no filler. The scope statement comes first and the optional-narrowing hint follows, so the agent reads the most important information first.

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 status tool with two optional parameters and no output schema, the description covers the return shape reasonably well (tabs, opener, last action, summary). What it lacks is any note on cost or output size when many slots are running, and there are no annotations to fall back on.

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 slot parameter already documents the 1-30 range and the port-subtraction rule. The description adds only the behavioral effect of passing slot (scope narrows to one slot) and says nothing about the agent parameter, so it matches the 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 ("Shows") and resource ("running Chrome slots (1-30)") plus the payload returned: tabs, opener, last action, one-line summary. That inventory partially distinguishes it from browser_tabs and slot_inbox, but no sibling is named explicitly, so the agent must infer the split.

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?

"Pass slot for just that slot" gives a narrowing hint for the optional parameter, which is genuinely useful. However, there is no statement of when to prefer this over browser_tabs, slot_inbox, or browser_network, and no exclusions or prerequisites.

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

browser_tab_closeClose tabC

Closes a tab. tab is required.

ParametersJSON Schema
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-68d9".

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and discloses almost nothing: it does not say whether the slot is released, whether the last remaining tab can be closed, what happens if the tab id is invalid, or whether the user's page state is destroyed. "Closes" implies mutation but no consequences are described.

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 with the action front-loaded and no padding. The second sentence is redundant with the schema's required list, which is the only minor waste.

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?

A destructive 3-parameter tool with no annotations, no output schema, and a one-line description is under-specified. An agent gets no signal about what state is affected after a close or how the slot parameter interacts with it.

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 tab, slot, and agent in detail (including slot/port normalization). The description adds nothing beyond restating that tab is required, which is already in the schema's required list, 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?

"Closes a tab" gives a specific verb and resource, so the agent knows the operation. It does not, however, distinguish this from the sibling browser_close (close the browser) or browser_tab_select, leaving the tab-vs-browser scope 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 description offers no when-to-use or when-not-to-use guidance and names no alternative among the many tab/session siblings. "tab is required" is a parameter restatement, not usage context.

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.

ParametersJSON Schema
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-68d9".
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?

With no annotations, the description carries the full burden and does disclose two useful behaviors: the tool returns the new tab's ID, and tabs are per-agent within a shared slot to avoid interference. It omits whether existing tabs are affected, whether this creates a focused/active tab, and any slot-state assumptions.

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 with the action and return value front-loaded and the multi-agent guidance second. No filler or 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 simple creation tool with full schema coverage and no output schema, the description covers the essentials: what it does, its return, and the shared-slot isolation concern. Minor gaps remain around tab focus/activation semantics and interaction with other tab tools.

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 documented with format hints. The description only references the slot indirectly and adds no syntax or constraint detail beyond the schema, so the 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?

The description names a specific verb+resource ("Opens a new tab") and states the return value (tab ID), which cleanly separates it from siblings like browser_tab_select or browser_launch. It does not explicitly name an alternative, but the action is unambiguous.

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

Usage Guidelines4/5

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

It gives a concrete when-to-use condition: "When agents share a slot, open your own tab and work only by its ID to avoid mixing." That is real usage context, though it stops short of naming sibling tools (browser_tabs, browser_tab_select) or stating when not to open a new tab.

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).

ParametersJSON Schema
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-68d9".

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It adds real value by disclosing the return roster, the meaning of the '·front' marker, and the rule that per-tab summaries are only refreshed by summary-bearing actions — but it never states the tool is read-only/non-mutating or whether it requires an active browser session.

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 return-field roster and kept to two terse sentences with no filler. The '·front' clarification is embedded rather than given its own sentence, which is efficient though slightly dense.

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, this description effectively serves as the return-value documentation by naming every field, including the non-obvious '·front' marker. It is complete enough for a read-only listing call, with the only gap being the absent read-only/statefulness disclosure that annotations would normally cover.

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 slot description already explains the 1-30 range, the string-coercion cases, and the port-offset trick, so the schema does the heavy lifting. The description's mention of 'Slot tab list' confirms slot scoping but adds nothing the schema lacks; 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 enumerates exactly what the tool returns (number, ID, title, URL, opener, last action, per-tab summary) and is scoped to a 'slot tab list', so an agent can tell it apart from browser_tab_select, browser_tab_new, and browser_tab_close, which are mutation/selection siblings. It never states the verb 'lists' outright, but the noun phrase 'tab list' plus the field roster makes the read purpose unambiguous.

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

Usage 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 and no routing to alternatives; the agent must infer that this is the discovery step before tab_select or tab_close. The clause about the per-tab summary being 'updated only by actions with summary' is behavioral context, not usage guidance.

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.)

ParametersJSON Schema
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-68d9".

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 transparency burden and discloses the key behavioral trait: it 'changes what the user sees,' and that background tabs remain read/operable/capturable without it. It does not cover failure modes (e.g., invalid tab) or that state is otherwise unaffected, so it falls 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?

Two short sentences, front-loaded with the action and immediately followed by the usage constraint and the reason behind it. Every clause earns its place; 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 simple UI-visibility operation with no output schema and fully documented parameters, the description is nearly complete. The main omission is any note about behavior on an invalid/missing tab, which would round it out.

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 slot, tab, and agent are already fully documented (including the port arithmetic and subagent naming rule). The description adds no parameter-level meaning, 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+resource ('Brings a tab to the front of its Chrome window') with the scope (its window) made explicit. The parenthetical distinguishes it from read/operate tools like browser_snapshot or browser_text, so an agent can tell when this visibility-only action is warranted versus those siblings.

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 states when to use ('only when the user wants it') and when not ('no need to bring them forward to work'). This is a rare case of clear when/when-not guidance that prevents an agent from pointlessly stealing user focus.

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.

ParametersJSON Schema
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-68d9".
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?

No annotations are provided, so the description carries the burden. It implies a read-only operation and discloses extraction behavior (main/article preference, ref narrowing) and long-output handling, but says nothing about failure modes, auth, or performance characteristics.

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 front-loaded sentences with no filler; the core purpose leads and routing hints follow. Telegraphed style costs it a point on readability but wastes nothing.

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 does describe what comes back (body text, main/article) and mentions pagination for long output. For a single-required-parameter read tool with fully documented schema, this covers what an agent needs.

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 modestly adds value: 'With ref, only that element's text' restates the schema, while 'Use page for long text' gives the rationale for the page parameter.

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

Purpose5/5

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

States a specific verb and resource ('Reads the page body text') with a scoping qualifier (main/article if present) and a ref-based narrowing. It is clearly distinguished from the sibling browser_snapshot, which it explicitly names as the heavier alternative.

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 (snapshot) and the condition that selects this tool ('articles/documents'), plus a follow-up routing hint for long output ('Use page'). Lacks explicit when-not-to-use guidance, but the context is clear enough to choose correctly.

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).

ParametersJSON Schema
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-68d9".
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

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 does substantial work: it discloses that real key events are dispatched per character, that the resulting value is verified with mismatch reporting, that fast mode skips key events, and that date/time inputs bypass events entirely with isTrusted=false on the change event. It stops short of covering permissions, failure modes, or what a mismatch report looks like.

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

Conciseness4/5

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

A single dense paragraph that front-loads the core behavior and then attaches the flag semantics in order of likely importance. Every clause conveys information; the date/time aside is the only slightly tangential piece and it earns its place by flagging the isTrusted caveat.

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

Completeness4/5

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

For an 11-parameter mutation tool with no annotations and no output schema, the description covers the action-defining flags and states that the value is verified afterward, which partially substitutes for a missing output schema. It omits the shared session parameters (slot, tab, agent, read, multiSlot), though those are documented in the schema and shared across siblings.

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 a baseline of 3 applies, but the description adds real meaning beyond the one-line schema entries for clear ('clears existing content'), submit ('presses Enter after'), and fast ('inserts very long text at once without key events'). The remaining parameters (slot, tab, agent, read, summary, multiSlot) get no description-level treatment, which caps this below 5.

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 ('Types text into a ref element') and goes further by describing the mechanism (real key events per character). However, it never distinguishes itself from the sibling browser_fill, which likely also writes text into an element, leaving the agent to infer the difference.

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 through flag semantics (fast=true for very long text, date/time inputs get direct value setting), but there is no explicit when-to-use guidance or any statement of when to prefer browser_fill, browser_press_key, or browser_select instead. The agent must infer selection criteria.

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.

ParametersJSON Schema
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-68d9".
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.4/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 full burden, and it discharges much of it: it discloses that no OS picker appears, that CDPM intercepts the picker, and that the site receives the same events as a human file pick. It does not cover failure modes (e.g. invalid path, hidden input, upload rejection), 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.

Conciseness5/5

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

Three sentences, zero filler, and the core behavior is front-loaded before the ref guidance. The final sentence about event fidelity is short and earns its place by explaining the observable effect of the call.

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 one genuinely non-obvious flow (click-then-upload-without-ref) and sets expectations about user-visible behavior. It leaves error handling and any preconditions about the target input unaddressed, but the schema already documents the remaining parameters.

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 each parameter is documented in-schema, so the baseline is 3. The description reinforces the ref/no-ref distinction, but the schema already states 'Omit to use the file picker just opened by a click', so it adds little beyond structured data.

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 ('Puts files into a file input') and immediately clarifies the mechanism ('no OS file picker shown to the user'), which separates it from browser_click and browser_fill. An agent can tell exactly what this tool 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?

Gives the two explicit invocation paths: pass ref for a real <input type=file> or its label, or click a custom 'attach' button with browser_click first and then call without ref. This is a complete when/how decision tree with the alternative tool named.

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.

ParametersJSON Schema
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-68d9".
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.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 does well: it discloses read-only behavior ('Only reads, never touches the page, so the user's input is not lost'), that it returns as soon as the condition is met or a message arrives, and that response mode returns the body. It doesn't detail failure/timeout behavior beyond the schema, 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.

Conciseness4/5

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

Front-loads the mode enumeration, then usage guidance, then constraints; every clause adds value. However the sentences are long and dense, cramming several ideas (SPA advice, login detection, message interruption) into run-ons, slightly reducing 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 complex 12-param tool with no output schema, the description covers behavior, mode semantics, and safety adequately. Return-value detail is partial (fully described only for response mode), but the guidance an agent needs to call it correctly is largely present.

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 schema already documents all 12 params and baseline is 3. The description adds interpretation beyond the schema: the response-mode timing nuance ('searches from this agent's last action on that tab, so responses that arrived during the click are caught') and concrete login-detection examples, which raise it above baseline.

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

Purpose5/5

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

States a specific verb (waits) and enumerates every condition mode (text/gone/url/enabled/response/network_idle/seconds) that the tool handles. It explicitly routes to a sibling ('to wait for other agents use slot_inbox wait'), so an agent can distinguish it from other browser 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?

Gives concrete when-to-use per mode plus the SPA recommendation to use response="/api/search" after a click instead of reading the page, and the login-detection pattern (url, gone="Password"). It also states when NOT to use plain seconds and points to the alternative. Exclusions and alternatives are explicit.

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.

ParametersJSON Schema
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-68d9".

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations and no output schema, the description carries the full burden and does add real behavioral detail: the deduplication rule ('messages already delivered in another tool's header are not unread') and the fallback when nothing is new ('recently received ones are noted for reference'). It stops short of describing return shape or auth/identity implications of the agent parameter.

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 sentences, front-loaded with what the tool returns before the wait semantics and the unread-definition caveat. Dense but each sentence carries information; minor awkwardness in the final clause.

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 3-parameter messaging tool with no annotations and no output schema, the description covers the unread/wait semantics but never says what the returned messages actually look like or who sent them. It is adequate to invoke correctly but leaves the response shape to be discovered.

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, wait, and agent in detail — including the wait anti-polling rationale. The description's mention of wait largely restates the schema, adding no syntax or format beyond it; 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 your unread messages'), making it immediately clear this is the receive side of the inter-agent messaging pair with slot_send. It does not explicitly name slot_send as the counterpart, so sibling differentiation relies on inference from the resource noun.

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 the distinguishing parameter: use wait for real-time conversation, letting the agent block instead of polling. There are no explicit exclusions or named alternatives, but no alternative receive tool exists in the sibling list, so the missing 'when not to use' costs little.

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.

ParametersJSON Schema
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-68d9".
slotsNoMultiple slots (e.g. [1,2,3])

TDQS

A4.4/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: action tools are refused, an in-progress browser_wait stops immediately, an action already dispatched to Chrome completes, reading still works, and the effect propagates to agents in other Claude sessions. This is exactly the async/concurrency behavior an agent needs before calling.

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 carrying distinct information (trigger, scope of refusal, in-flight behavior, read access, cross-session effect, all flag). The usage constraint is front-loaded with zero 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 annotations and no output schema, yet the description covers the mutation's blast radius, concurrency semantics, and cross-session scope thoroughly. It could state what the tool returns or how to confirm the slot is paused, but nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds real meaning for one parameter ("all=true pauses every running slot"), but says nothing about slot, slots, or agent 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 (pause a browser slot) and makes the inverse relation to the sibling slot_resume obvious. An agent can distinguish it from every browser_* action tool and from slot_resume 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 Guidelines4/5

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

Gives an explicit trigger condition with a concrete example ("pause 3") and a strong when-not rule ("agents never call it on their own"). It does not name the complementary tool (slot_resume) as the alternative, so it stops just 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.

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.

ParametersJSON Schema
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-68d9".
slotsNoMultiple slots (e.g. [1,2,3])

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 does disclose meaningful behavior: unpausing, messaging every agent on the slot, and that agents re-read the page and continue. It stops short of covering state preconditions (e.g. error when the slot isn't paused) or permissions, 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?

Three tight sentences with zero waste, and the critical usage constraint is front-loaded ahead of the behavioral and bulk-mode details.

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

Completeness4/5

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

For a 4-param, all-optional tool with no annotations and no output schema, the description supplies the usage rule, the observable effect, and the bulk-mode behavior. It omits only edge-case behavior (resuming an already-active slot, failure modes), 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 description coverage is 100%, so slot/slots/agent are already fully documented in the schema (including the port-subtraction hint). The description only adds a semantic gloss for 'all=true resumes every paused slot,' which is close to restating the schema's 'All paused slots.' Baseline 3 applies 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: 'Unpauses and messages every agent on the slot to wake it.' It clearly contrasts with the sibling slot_pause by describing the inverse operation and the wake-up effect, 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 Guidelines5/5

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

Explicitly names the trigger ('only when the user says to resume, e.g. continue 3') and an exclusion ('the agent owning a paused slot never calls it on its own'). It also routes the bulk case via 'all=true resumes every paused slot.' Both when-to-use and when-not-to-use are covered.

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.

ParametersJSON Schema
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-68d9".

TDQS

A4/5.0
Behavior4/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 it does so well for a messaging tool: it discloses that recipients get messages instantly if waiting in slot_inbox, otherwise via their next tool-result header, and that a running browser_wait is interrupted immediately. It omits error/failure behavior and any rate or size limits, but the core delivery semantics are unusually well specified.

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 purpose is front-loaded in the first sentence, and the remaining clauses each carry distinct information (targeting, broadcast, delivery timing, usage trigger). It is a dense single paragraph with no filler, though the parenthetical interruptions make it slightly harder to scan than a clean bulleted structure would be.

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 annotations and no output schema, the description must stand alone, and it covers purpose, targeting, delivery timing, and a usage trigger. Missing pieces are minor: what happens on an invalid slot, whether text is persisted or echoed, and confirmation of successful send.

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

Parameters4/5

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

Schema coverage is 75% and the description adds genuine meaning beyond it: 'slot = the slot the recipient owns (to reach another slot's agent, use that slot number)' and 'Omit to to send to everyone on that slot' clarify the slot and to parameters respectively. The agent parameter is left to the schema, which already documents it as the sender's display name.

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 opening sentence states a specific verb and resource: 'Sends a message to other agents (real-time collaboration).' The follow-up clarifies the routing model (slot targeting vs. broadcast). It references slot_inbox only indirectly via delivery behavior, so it does not fully contrast the send/receive sibling pair, but the purpose is unambiguous.

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

Usage Guidelines4/5

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

'When you finish a step, notify waiting agents right away' gives a concrete usage trigger, and 'Omit to to send to everyone on that slot' clarifies the broadcast case. However, there is no explicit when-not-to-use guidance or a named alternative for reading messages (slot_inbox is mentioned only in passing as a delivery target).

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.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.3/5.0

Scored across 36 tools

Disambiguation4/5

Most tools target clearly distinct browser actions, and descriptions carefully differentiate overlapping areas like snapshot/text/screenshot and type/fill/press_key. Minor overlap exists between browser_status and browser_tabs, and the many input/interaction tools require careful reading, but misselection risk is low.

Naming Consistency5/5

All tools use consistent snake_case with clear browser_ and slot_ domain prefixes. Although some names are noun-first (browser_snapshot, browser_tabs) and others verb-first, the naming is highly predictable and no chaotic mixing is present.

Tool Count2/5

36 tools is very heavy for a single MCP server and exceeds the typical well-scoped range. While many tools map to distinct browser capabilities, the surface could be consolidated (e.g., input actions, network detail, tab status) to reduce selection overhead.

Completeness4/5

The set covers browser lifecycle, navigation, reading, interaction, network inspection, dialogs, permissions, downloads, PDF, eval, and multi-agent coordination well. Minor gaps remain around console logs, cookie/storage management, frame handling, and device emulation, but agents can often work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    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
    -
  • 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.
    209 npm
    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.
    36
    39 npm
    MIT