agent-browser-mcp
Allows automation of the Opera browser via a Chrome extension and CDP, enabling real browser session control, tab management, page reading, JavaScript execution, and physical input.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agent-browser-mcpOpen my GitHub and check pull requests"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
browsertap-mcp
English | 中文文档
Usage guide · Troubleshooting · Security · Contributing · Changelog
A Model Context Protocol (MCP) server that drives the real Chrome you are already using, through a Chrome extension and the Chrome DevTools Protocol. Your agent works inside your existing browser session, so logins, cookies, and open tabs are all already there — no separate sandbox browser to authenticate again.
Current release: unified Python package, bridge, and unpacked Chrome extension 0.4.12.
It also reaches past the page: five direct tools provide real mouse and keyboard input at the OS level when page-level input is not enough. resolve_leave_dialog is one additional, narrowly scoped path that can send Enter after two protocol attempts fail. safe asks before physical input, while the default lab profile runs without elicitation and still enforces the cross-process lock, quiet-input gate, target activation, and on-screen confirmation.
Start in 60 seconds
Three steps. Each one is spelled out in full under Getting started below, with the Windows PowerShell paths and the config for every supported client.
# 1. Install from source. There is no PyPI release yet.
git clone https://github.com/LinVireo/browsertap-mcp.git && cd browsertap-mcp
python -m venv .venv && ./.venv/bin/python -m pip install -e ".[desktop]"
./.venv/bin/browsertap extension-path # prints the directory step 2 needs
# 3. Point your MCP client at that same executable (Claude Code shown).
claude mcp add browsertap -- "$PWD/.venv/bin/browsertap"On Windows the same three commands use .\.venv\Scripts\python.exe and
.\.venv\Scripts\browsertap.exe.
Step 2 is manual, and it is the slow one. There is no Chrome Web Store
listing yet, so the extension is loaded by hand: open chrome://extensions, turn
on Developer mode, click Load unpacked, and pick the directory
extension-path printed. Then open an ordinary http:// or https:// page --
about:blank runs no content script, so no session is established.
Then ask your agent what tabs do I have open? If the list comes back empty, run
browsertap doctor: it names one cause and the one matching advice.
Related MCP server: chrome-mcp
Key features
Real browser, real session — attaches to your running Chrome/Edge/Opera. Logged-in sites, cookies, and page context are preserved.
Background by default — a selected tab is not a foreground tab.
switch_tabretargets without raising anything, and page work runs in the tab you named while you keep using the screen.Page reading — scan any page into simplified HTML or text, sized for a model's context. Long links are shortened to
#r1refs and the real URLs come back alongside, so a results page stays both small and navigable.JavaScript execution — run arbitrary JS in the page.
Background page input —
page_click,page_type,page_press, andpage_dragdispatch trusted CDP input events at viewport coordinates inside one named tab, without moving your cursor or changing which tab is visible.Waiting and scrolling — wait for a selector, text, URL, or JS condition; scroll and re-scan long pages.
scan_pagereports how much it left outside the viewport instead of dropping it silently.Explicit dialog policies —
alert,confirm,prompt, andbeforeunloadeach get a per-calldismiss/accept/manualpolicy and are reported truthfully;handle_dialogresolves one that is left open.Temporary site permissions — grant notifications, geolocation, camera, or microphone to one origin for 60–600 seconds; the prior setting is restored automatically.
Native CDP access — single commands or batches. Addressable by tab, extension id, or target id.
Authenticated native downloads — download attachments through Chrome's download manager with the active browser profile's cookies, wait for completion, and receive the verified local path.
Tab-less operation — extension management, CDP target listing, and tab listing/closing go straight to the extension's service worker, so they work even with zero tabs open.
Page screenshots — page capture via CDP is returned as MCP image content and can also be saved to disk; full desktop capture is available for physical-input checks. A model without image support must use
scan_page, page APIs, or OCR to inspect content.Guarded real physical input — OS-level mouse move/click/drag, typing, and hotkeys are the last-resort path.
labcan run without elicitation;safeprompts per call. Both profiles keep the lock, quiet-input gate, ownership checks, target activation, and on-screen confirmation.Multi-browser — Chrome, Edge, and Opera can all connect to one bridge at the same time without clobbering each other's sessions.
Requirements
Python 3.10+
Chrome, Edge, or Opera
Linux, macOS, or Windows. OS-level input on Linux requires an X11 desktop.
A desktop session, not a container. There is no Docker image on purpose: the server attaches to the Chrome you are signed into, through an extension a human loads once, so an isolated container has no browser to drive.
Claude Code, or any other MCP client
Getting started
1. Install
Clone the repository, create a virtual environment, and install the recommended desktop feature set:
Windows PowerShell
git clone https://github.com/LinVireo/browsertap-mcp.git
Set-Location browsertap-mcp
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[desktop]"
.\.venv\Scripts\browsertap.exe extension-pathLinux or macOS
git clone https://github.com/LinVireo/browsertap-mcp.git
cd browsertap-mcp
python -m venv .venv
./.venv/bin/python -m pip install -e ".[desktop]"
./.venv/bin/browsertap extension-pathThe core install (pip install -e .) omits OS-level mouse/keyboard and desktop
capture dependencies. Use it only when those tools are intentionally disabled.
After the first PyPI release, pip install "browsertap-mcp[desktop]" will be
the non-editable install path; until then, the source install above is the
supported path.
2. Load the Chrome extension
This project ships an unpacked extension that has to be loaded once by hand.
browsertap extension-pathOpen chrome://extensions, turn on Developer mode, click Load unpacked, and pick the directory that command printed.
The loaded extension is listed as BrowserTap Bridge.
If you also use Edge or Opera, repeat the same steps at edge://extensions or opera://extensions with the same directory. The bridge tells the browsers apart automatically.
Then open a normal http:// or https:// page. A blank tab is not enough — content scripts cannot run on about:blank, so no session is established.
Connection status badge
The extension may show a small BTAP: checking, BTAP: connected, or
BTAP: disconnected badge on pages. The badge is presentation-only: it reports
the bridge connection state and does not display page content, cookies, tokens,
or URLs. Open the extension popup and clear Show connection status on pages
to hide it. Hiding the badge does not stop the bridge, keepalive, or automatic
reconnect behavior.
3. Add the server to your client
Standard config works in most tools:
{
"mcpServers": {
"browsertap": {
"type": "stdio",
"command": "browsertap"
}
}
}If you installed into a virtualenv, point command at the executable's absolute path instead — relying on PATH is the most common reason a client fails to start the server.
claude mcp add browsertap -- browsertapAdd --scope user to make it available across all projects. For a virtualenv install:
claude mcp add browsertap -- /absolute/path/to/.venv/bin/browsertapOn Windows PowerShell, use the absolute path to
.venv\Scripts\browsertap.exe instead.
Verify with /mcp.
Follow the MCP install guide and use the standard config above. An example file is included at examples/claude-desktop-config.json.
Put the standard config in .cursor/mcp.json for one project, or ~/.cursor/mcp.json globally. An example file is included at examples/cursor-mcp.json.
code --add-mcp '{"name":"browsertap-mcp","command":"browsertap"}'Or write it into .vscode/mcp.json by hand — note that VS Code's key is servers, not mcpServers.
Add to ~/.hermes/config.yaml:
mcp_servers:
browsertap:
command: browsertap
timeout: 120
connect_timeout: 60browsertap print-hermes-config prints this snippet. An example file is included at examples/hermes-config.yaml. Verify with hermes mcp list.
Any MCP client that speaks stdio will work. Follow its own install guide and use the standard config above.
Your first prompt
Once the extension is loaded and a normal page is open, try:
What tabs do I have open? Read the current page and summarise it.
If tabs come back empty, run browsertap doctor.
For the least disruptive workflow, start with docs/USAGE.md: it explains which operations stay in a background tab, when a desktop screenshot really means the monitor, and when an image-capable model is useful.
Configuration
Environment variables
Variable | Default | Purpose |
|
| Bridge bind address. |
|
| WebSocket port. HTTP uses |
| unset | Set to |
| enabled | Set to |
|
| Override the shared token file location. Editors do not need individual token configuration. |
| unset | Legacy one-time migration source. If the token file does not exist, BTAP imports this value once; the file wins thereafter. |
| unset |
|
|
|
|
| enabled | Lab skips elicitation by default. Set this to |
|
| In lab, ordinary |
| unset | Comma-separated exact extra origins allowed to open the bridge WebSocket. Extension origins are allowed automatically; do not add broad or untrusted origins. |
| unset | Set to |
CLI
browsertap # run the MCP server (stdio)
browsertap extension-path # print the unpacked extension directory
browsertap skill-path # print the directory holding the shipped agent skills
browsertap doctor # diagnose the local setup, as JSON
browsertap bridge # run the bridge in the foreground
browsertap print-hermes-config # print a Hermes config snippetdoctor reports the extension path, port state, and connected tab count. It also
returns a structured verdict: cause is one of healthy,
ext_never_registered, sw_slept_or_dropped, registering, or
bridge_unreachable, and advice is the matching one-line fix. registering
means the extension is connected but no normal http(s) content tab is ready.
BTAP creates ~/.browsertap/bridge-token on first use and every bridge/MCP
process reads that same file. Closing browsers or editors does not rotate it. Removing
the browser extension or reinstalling the Python package deliberately leaves the token
file in place, so a reinstall continues to work. A full user-data purge may delete the
whole ~/.browsertap directory only after all BTAP bridge processes have stopped;
the next start then creates a new token.
Agent skills (optional)
BTAP ships two skills that tell a calling agent how to drive it. They are ordinary
Markdown and completely optional — every tool works without them. What they add is
the judgement the tool descriptions cannot carry: which tool to reach for first,
when session_id is mandatory, and which tabs belong to you and must be left
alone.
browsertap skill-path # e.g. .../site-packages/browsertap_mcp/skillsThat directory contains:
Skill | What it is for |
| The calling contract: pick a target before acting, open your own tab for anything that mutates a page, close it in cleanup, and how to react to |
| Recovery when the transport itself is down: which of the three components is stale, and the one restart or reload that fixes it. |
Point your client's skill manager at that directory rather than copying the
files. A copy looks correct for as long as the contents happen to agree, then
silently stops receiving updates when you upgrade the package. If you keep copies
anyway, python -m scripts.check_tool_docs --check-installed-skills --skill-mirror DIR compares them against the shipped originals and names whichever one drifted.
Upgrade
An upgrade is three steps, not one: the three parts do not become current at the same moment, and step 3 fails silently if you skip it.
Update the package —
pip install -U browsertap-mcponce it is on PyPI, orgit pullin a source checkout. A new MCP session picks this up immediately.browsertap bridge --restart. The daemon is long-lived and outlives every MCP session, so until it restarts it keeps serving the old code.Open
chrome://extensionsand press Reload on the extension. Its files were replaced on disk, but Chrome keeps running the build it already loaded, and no command can make it re-read them.
browsertap doctor reports which part is stale and names the one action
that fixes it: reload_extension, restart_bridge, or restart_mcp_session.
The other two will not help, so read the field rather than doing all three.
Uninstall
Stop the managed daemon with
browsertap bridge --stop.Open
chrome://extensions(or the equivalent page in Edge/Opera) and remove the unpacked BrowserTap Bridge extension.Remove the
browsertapentry from each MCP client's configuration.Run
pip uninstall browsertap-mcpin the environment where it was installed. If you created a dedicated virtual environment, remove that specific environment after deactivating it.Optional full cleanup: after confirming every BTAP bridge is stopped, remove
~/.browsertap. This deletes the persistent bridge token and logs; the data is retained by default so reinstalling continues to work without reconfiguration.
How it works
Three layers:
Chrome extension (MV3) — injected into real pages, reaches
tabs,cookies,debugger, andmanagementthrough Chrome APIs.BrowserBridge — a local daemon on
127.0.0.1:18765(WebSocket) and:18766(HTTP). It owns the extension connections, tracks sessions, and relays results. It runs detached from any MCP instance, and the MCP server starts it on demand with no console window. Sessions are keyedclientId:tabId, so several browsers and profiles coexist.MCP server — exposes the whole thing as MCP tools.
Two channels reach the browser: a per-tab session channel, and a direct channel to the extension's service worker. The second one is why some tools keep working when every tab is closed.
Behaviour you should know before driving it
Selecting a tab does not raise it. switch_tab defaults to activate=false: it only changes which tab later calls target. Nothing moves on screen until you call activate_tab, pass switch_tab(activate=true), or approve a physical-input action. Page reading, JS, and the page_* input tools all work on a background tab.
Two kinds of coordinates, two kinds of authority. page_click/page_drag take viewport coordinates inside one tab and are dispatched through CDP — no cursor movement, no window focus, foreground_changed: false in the reply. mouse_move/mouse_click/mouse_drag take desktop screen coordinates and drive your real cursor. The two are not interchangeable, and a viewport coordinate pasted into mouse_click will land somewhere else entirely.
Three pixel units, and screenshots do not use the one you click with. Viewport coordinates are CSS pixels — the space getBoundingClientRect reports. Desktop coordinates are physical screen pixels. A page screenshot comes back in device pixels, which is CSS × devicePixelRatio, so at 125% display scaling a point read off the picture is 25% too large for page_click; capture_page_screenshot reports image_width/image_height and pixel_space: "device" so the factor is visible instead of assumed. A desktop screenshot is not resized, so pixel_space: "physical" and its pixels are already mouse_click's coordinates. Reading a point off a picture is the one path with no hit test — prefer a scan_page selector, which is checked against the page before anything is dispatched.
Automation profiles. With BROWSERTAP_MODE unset, BTAP defaults to lab with BROWSERTAP_LAB_NO_ELICIT=1 semantics: physical input and site allow proceed without elicitation. safe prompts for every action. Both profiles keep the cross-process lock, quiet-input gate, target activation, ownership protection, and on_screen check, so higher authority never means stale or misdirected input. The quiet gate's reach is bounded by what the OS exposes rather than by the profile; input_quiet.enforced in the result says whether it could observe this machine at all.
Dialogs are explicit. execute_js(dialog_policy=...), open_url(beforeunload=...), and handle_dialog(action=...) take dismiss (default), accept, or manual. The global default still preserves the page; only an explicit accept or lab's configured shell/IDE host heuristic leaves automatically. handle_dialog answers within three seconds or reports no_dialog/an explicit error. resolve_leave_dialog tries protocol accept twice and uses physical Enter only as a final, lab-approved fallback.
Permissions are leases, not grants. set_site_permission covers one origin for 60–600 seconds, records the prior setting, and restores it on expiry/reset/service-worker restart. safe prompts for every allow; default lab applies it without elicitation. Browser capabilities that cannot be restored return unsupported or requires_user_action.
Challenges stay in your browser. A Cloudflare Turnstile or similar widget is handled in the same connected tab, by page_click, with a bounded number of attempts. When the challenge has not moved, the result is challenge_stalled and BTAP stops so you can finish it yourself in that same tab. BTAP never launches Playwright, a headless browser, or a separate automation profile as a fallback — the whole point is your real, logged-in session.
Changed tools need a reload. Tool schemas and descriptions are read once when your client starts the MCP server; after upgrading, restart the MCP session or your client, or you will keep calling the old signatures. Extension changes need a manual reload at chrome://extensions — chrome.runtime.reload() restarts the service worker without re-reading the files from disk.
Tab ownership in concurrent tasks
Classify every tab before using it. A U (user) tab existed in the first list_tabs snapshot; do not close it or navigate it by default. An A (agent) tab is created by this task's open_new_tab; save its session_id, generation, and owner_id, pass that explicit session to every operation, and call close_tabs(..., owner_id=...) in cleanup. A B (borrowed) tab is a temporarily used U tab; record its original_url, restore that URL when the tab still exists, and never close it.
Decision order: run list_tabs; borrow an existing match only for read-only/light work; open an A tab for navigation, forms, or other state changes; open an A tab when no match exists; finally close only A tabs. Never register the initial tab snapshot as owned, close a U/B tab, depend on the shared default session, reuse an old native tab id, omit generation-aware cleanup, or leak an A tab. Separate concurrent tasks should use separate A tabs instead of competing for the same U tab.
Structured statuses and recovery fields
Expected interruptions come back as a status field, not an exception:
| Meaning |
| Completed and verified as far as the protocol allows. |
| Navigation landed on a different URL than requested (login wall, SSO, canonical rewrite). |
| An |
| A JavaScript dialog is open and waiting for |
| Navigation was cancelled to keep the page; re-issue with |
| A dialog was seen but answering it failed; the tab may still be blocked. |
|
|
|
|
| Approval was declined, cancelled, or unavailable — nothing was done. |
| Another BTAP process holds the physical-input lock, or the tab already has a pending manual execution. Returned immediately, never queued. |
| You used the mouse or keyboard during the post-approval quiet window, so no physical input was sent. |
| The target tab could not be confirmed on screen, so no physical input was sent. |
| The browser or extension API cannot provide this (e.g. clipboard permission leases). |
| A browser challenge made no progress within the attempt bound; hand the tab back to the user. |
| The script did not reach the tab or timed out — do not blindly retry anything with side effects. |
| The selector matched nothing; no input was dispatched. |
| A bridge call failed. It may appear as |
| Supplemental field indicating that only an implicit dead default was replaced with another live tab. Verify the new target before continuing; explicitly directed dead sessions are never substituted. |
Disclaimers
This server drives your real browser and your real desktop. Anything it can do, you can do — and it inherits every session you are logged into.
Mouse moves, clicks, typing, and hotkeys are real OS-level input, not synthetic page events.
safeprompts per call;labcan reuse or disable prompts. Once allowed, it drives your actual desktop.Page content is untrusted input. A page your agent reads can attempt prompt injection, and the tools available make that consequential.
This is not a security boundary. See MCP Security Best Practices.
Avoid pointing it at sensitive accounts you would not want an MCP client to see, and prefer not to run it on shared or production machines.
The extension requests broad permissions because the feature set requires them:
cookies, tabs, debugger, scripting, alarms, storage,
contentSettings, declarativeNetRequest, management, bookmarks,
downloads, and <all_urls>. declarativeNetRequest temporarily removes CSP
response headers only from the tab executing an eval-based command. The rule is
session-scoped, reference-counted, and removed in cleanup; it is not a
browser-wide persistent CSP override. See Security for the full
permission and loopback threat model.
Tools
Most tools accept an optional session_id to target one specific tab; omitting it uses the current target. Pass it explicitly for anything that changes state — the shared default is a single value every task on this bridge sees, and another task retargeting it is exactly how a click lands on the wrong page. Session ids look like chrome_a1b2c3:456; pass them verbatim and never split them. Tools marked no tab needed talk to the extension's service worker and work with zero tabs open.
get_setup_status — report
package_version,bridge_version,extension_version,protocol_version, connection state, ports, tabs, and the required recovery action. A missing bridge listener is started automatically when spawning is enabled;restart_bridge_required=truemeans a bridge that is still running must be replaced withbrowsertap bridge --restart.reload_extension_required=trueidentifies the unpacked-extension platform limit and requires a manual Reload.restart_mcp_session_required=trueis the opposite direction: a component is newer than the running server, so the stale build is this process and only restarting the MCP session or client clears it — the other two flags stay false, because a restart or reload would report the same mismatch again. No parameters.get_automation_profile — inspect whether the current MCP process uses
laborsafe.set_automation_profile — switch the current MCP process between
lab|safe; the override is not persisted and does not reload the extension.mode(string):laborsafe
list_tabs — list connected tabs. Each carries a
browserfield. No parameters.list_all_tabs — (no tab needed) list every open tab, including
chrome-extension://pages thatlist_tabshides. Those never become sessions, so they have no session id; drive them withcdp_command(tab_id=...).session_id(string, optional): which browser to ask.
switch_tab — set the target tab for later calls. A
url_patternmust match exactly one tab; if several match, select one with its fullsession_id. It does not raise the tab or focus the browser:activatedefaults tofalse, so retargeting never disturbs what you are looking at. Passactivate=true, or callactivate_tab, when you actually need the tab in front.session_id(string, optional),url_pattern(string, optional): substring match,browser(string, optional):chrome,edge, oropera,activate(boolean, optional): defaultfalse.
activate_tab — bring a tab to the foreground and focus its window. This is the explicit way to raise a tab, and the only one that does not involve approving physical input. Check
on_screenin the reply: BTAP first asks Windows to restore a minimised browser, buton_screen=falsemeans visibility still could not be confirmed and screen-coordinate input must not be sent.session_id(string, optional)
open_url — navigate the current tab. Global behavior remains
dismiss; lab automatically accepts beforeunload on configured shell/IDE hosts. If the extension'snavigateroute is unavailable on a heavy SPA, BTAP falls back toPage.navigate. A CDP result withisDownload=truereturns{type:"download",status:"triggered"}instead of onlynavigation_failed; the accompanyingERR_ABORTEDis normal for that download navigation.url(string),session_id(string, optional),timeout(number, optional): default15,beforeunload(string, optional): defaultdismiss,intent_leave(boolean, optional):falseforces page preservation
download_file — download an HTTP(S) URL through Chrome's native download manager, using that browser profile's cookies and authenticated session. It waits by default and returns
status="completed"plus a verified absolutepath; interrupted downloads returnfailed, while a timeout orwait=falsereturnsin_progresswithdownload_id. An explicitsession_idmust still be live and is never replaced with another profile. Use this for attachments instead of pagefetch.url(string),filename(string, optional): relative download name,directory(string, optional): arbitrary absolute destination directory; creates parents,wait(boolean, optional): defaulttrue;directoryrequirestrue,timeout(number, optional): default 60 seconds, maximum 1800,session_id(string, optional): selects the browser profile,overwrite(boolean, optional): defaultfalse; an existing final destination raises an error unless explicitlytrue. If a directory download times out,directory_applied=false: the move is no longer tracked and Chrome may finish into its default download directory.
open_new_tab — open a background tab by default with a unique
operation_idand wait a bounded time for exact session/generation registration; passactive=trueonly when foreground work is genuinely required. Returns{operation_id,tab_id,session_id,generation,ready,owned,opener,owner_id,load_status}. The extension deduplicates repeated requests with the same operation id. Ownership is registered only from a completed record containing the exactclient_id+tab_id+generation, even whenready=false;readyonly says whether session-scoped tools can be used immediately. A pre-create registry uncertainty returnsstatus="unknown",may_have_created=false,retry_safe=true; after create dispatch, an unresolved ACK/reconciliation returnsstatus="unknown",may_have_created=true,retry_safe=false. Keep its randomowner_idcapability and use it only for that task's cleanup. For an unresolved dispatched create, do not callopen_new_tabagain for the same request; retainoperation_idas diagnostic/support evidence.url(string),timeout(number, optional): default15,active(boolean, optional): defaultfalse,session_id(optional browser/profile selector),owner_id(optional capability to group several tabs under one task owner)
close_tabs — (no tab needed) accept native numeric tab ids or full
client:tabIdsession ids, includingchrome-extension://tabs. The defaultonly_if_agent_owned=truerequires theowner_idreturned byopen_new_taband verifies the current lifecycle generation before closing, so pre-existing user tabs and another agent's tabs are refused. If the user already closed an owned tab, cleanup returnsstatus=already_gone, closed_by=userwithout reusing its native id. An actual owned close returnsclosed_by=agent; an explicit unowned/operator override returnsclosed_by=noneso it is not counted as task-owned cleanup. Setonly_if_agent_owned=falseonly when the operator explicitly asked to close an unowned/user tab.tab_id,session_id(optional browser constraint),owner_id(required by the safe default),only_if_agent_owned(boolean, defaulttrue)
scan_page — read the page as simplified HTML or text. Returns
linksmapping each#rNref in the content to its absolute URL, andoffscreen+hintwhen content was left outside the viewport.session_id(string, optional),text_only(boolean, optional): defaultfalse,cutlist(boolean, optional): defaulttrue; collapse repetitive lists,maxchars(integer, optional): default35000,instruction(string, optional),extra_js(string, optional),timeout(number, optional): default15
wait_for — wait until a condition holds, then return. Use this instead of polling
scan_page, which re-serializes the whole DOM each time. Polling happens inside the page, so a 30s wait still costs one bridge roundtrip. Exactly one condition is required.selectoraccepts legacy CSS or the structured locator object described under background page input.selector(string/object, optional): CSS or structured locator,text(string, optional): substring of body text,url_pattern(string, optional): regex on the URL,js(string, optional): expression to become truthy,gone(boolean, optional): wait for the condition to stop holding; defaultfalse,timeout(number, optional): default15,session_id(string, optional)
wait_for_url — wait for navigation to settle: blocks until the tab URL matches
url_pattern(regex, or plain substring — both are tried) and, unlesswait_ready=false,document.readyStateiscomplete; then returns finalurl,titleandready_state. Use after a click oropen_urlthat navigates;wait_for(url_pattern=...)only checks the URL and can return while the new document is still blank. Polls in-page across navigation chunks, so a long wait is still cheap.url_pattern(string): regex or substring to match against the URL,timeout(number, optional): default 15,wait_ready(boolean, optional): requirereadyState === 'complete', defaulttrue,session_id(string, optional)
scroll_page — scroll and report the new position, so a long page can be read in passes.
to(string, optional): defaultbottom; also acceptstop, a pixel offset, or a CSS selector to bring into view,session_id(string, optional),timeout(number, optional): default15
execute_js — run JavaScript in the page and return the result.
timeoutis one end-to-end deadline covering dialog-policy setup, monitor snapshots, delivery/retry, navigation inspection, and cleanup; an explicitsession_idis forwarded through every one of those roundtrips instead of relying on the shared default. When a script navigates the page,statusisnavigated(notsuccess) withlanded_url; the script's return value is genuinely lost in that case and is reported as such rather than substituted.dialog_policydecides what happens if the script opensalert/confirm/prompt:dismiss(default) andacceptanswer it and report it underdialogs, whilemanualpauses the script with the native dialog still open and returnsblocked_by_dialog— callhandle_dialogto release it. A tab already holding a manual pause returnsbusyimmediately. Usewait_for/wait_for_urlinstead of delayedsetTimeoutor sleep Promises;no_responsereportsdelivery_stateandretry_safe, and BTAP never replays an acknowledged script whose side effects may already have run.script(string),session_id(string, optional),no_monitor(boolean, optional): defaultfalse,timeout(number, optional): default15,dialog_policy(string, optional):dismiss(default),accept, ormanual
handle_dialog — inspect or answer a dialog left open on a tab.
action="manual"reports it without choosing (blocked_by_dialog, orno_dialogif nothing is open);accept/dismissanswer it and release any pausedexecute_jsoropen_url.prompt_textsupplies the text for an acceptedprompt.action(string),prompt_text(string, optional),session_id(string, optional),timeout(number, optional): default3, capped at three seconds
resolve_leave_dialog — for an already-open shell/ttyd/IDE leave prompt: two protocol accepts, then physical Enter only when lab permits it.
session_id(string, optional)
upload_files — set files on a file input, which JavaScript cannot do (
input.filesis read-only). Runs as one CDP batch so the DOM node ids stay valid across the sequence.selector(string): the<input type=file>,paths(string or array of strings): absolute local paths,session_id(string, optional),timeout(number, optional): default30
get_cookies — read cookies for a page.
session_id(string, optional),tab_id(integer, optional)
set_cookies — write cookies into the real browser profile. Takes one cookie object or a list (JSON text is accepted):
nameis required, plus optionalvalue/url/domain/path/expires(Unix seconds)/httpOnly/secure/sameSite. Uses CDPNetwork.setCookie, so HttpOnly and cross-path cookies work; falls back todocument.cookieonly when CDP is unavailable, and then reports which cookies could not carry HttpOnly. Cookies with neitherurlnordomainare scoped to the current page.cookies(string or list or dict),session_id(string, optional),tab_id(integer, optional),timeout(number, optional): default20
delete_cookies — delete a cookie by name. Uses CDP
Network.deleteCookies, falling back to expiring it viadocument.cookie. Scope withdomain/path, orurlto target one site.name(string),domain(string, optional),path(string, optional),url(string, optional),session_id(string, optional),tab_id(integer, optional),timeout(number, optional): default20
storage_get — read localStorage or sessionStorage. Omit
keyto page withoffset/max_items/max_bytes; returnsnext_offsetandtruncated. The default timeout is 30s and a failed call does not close the MCP session.key(string, optional),area(string, optional):local(default) orsession,session_id(string, optional),timeout(number, optional): default30,offset(integer, optional),max_items(integer, optional),max_bytes(integer, optional)
storage_set — write one localStorage/sessionStorage value (non-string values are JSON-encoded first). Verifies by read-back, so a quota-full or privacy-mode failure is reported instead of silently lost.
key(string),value(string),area(string, optional):local(default) orsession,session_id(string, optional),timeout(number, optional): default30
Trusted CDP input events delivered to one named tab. They do not activate the tab, focus its window, or move the desktop cursor — every reply carries foreground_changed: false and input_mode: "cdp". All coordinates are viewport CSS pixels (relative to the top-left of the page area, the space getBoundingClientRect reports), never desktop pixels and never the device pixels capture_page_screenshot returns.
Pass session_id explicitly: the call binds the driver to that tab for its duration and restores the shared default afterwards, so a directed call cannot leave another task's target moved. A session_id naming a dead tab is refused rather than redirected to a live one.
selector remains backward-compatible with CSS strings and also accepts a locator object with exactly one primary key: css, role (optional name), text, or label. exact applies to role/name or text matching; frame walks one or more same-origin iframe locators; shadow walks open Shadow DOM hosts. Zero matches return not_found, multiple matches return ambiguous, and cross-origin or closed roots are reported without dispatching input.
page_click — click a CSS/structured
selectoror viewport coordinates. Exactly one targeting mode: eitherselector, or bothxandy. With a selector, each omitted offset axis uses the element centre; a suppliedoffset_xoroffset_yis measured from the element's top-left corner on that axis. Missing, ambiguous, non-interactable, cross-origin-frame, and closed-shadow targets return structured status without input dispatch. In selector mode the point is also hit-tested in the page before dispatch: a target below the fold is scrolled into view (scrolled_into_view), one whose pixel belongs to something else returnsobscuredwithoccluded_bynaming the overlay, and one still off screen returnsoutside_viewport— in both cases nothing is clicked, because a dispatched click would have landed on the other element and reported success. A verified click carrieshit_verified: true. Coordinate mode is not hit-tested: coordinates name a pixel, not an element — and a pixel read offcapture_page_screenshotis a device pixel, so it needs dividing bydevicePixelRatiofirst. Challenge replies keep the boundedchallenge_detected/attempts/challenge_stalledbehavior.selector(string/object, optional),x(number, optional),y(number, optional),offset_x(number, optional),offset_y(number, optional),button(string, optional): defaultleft,clicks(integer, optional): default1,session_id(string, optional),timeout(number, optional): default15
page_type — insert text into a CSS/structured-locator field, or into whatever already has focus when
selectoris omitted. Xterm.js containers/descendants retarget to.xterm-helper-textarea. Missing, ambiguous, read-only, or otherwise unusable targets return a structured status without dispatching text or keys.clear=trueselects the existing value first;submit_keysends one key afterwards.text(string),selector(string/object, optional),clear(boolean, optional): defaultfalse,submit_key(string, optional),session_id(string, optional),timeout(number, optional): default15
page_press — press a key or a comma-separated modifier chord in the tab, e.g.
enterorctrl,shift,k.keys_csv(string),session_id(string, optional),timeout(number, optional): default15
page_drag — drag between two viewport points as one uninterrupted event sequence.
x1(number),y1(number),x2(number),y2(number),duration(number, optional): default0.3,button(string, optional): defaultleft,session_id(string, optional),timeout(number, optional): default15
Temporary, origin-scoped permission leases backed by chrome.contentSettings. Every lease records the prior setting and restores it — on expiry, on explicit reset, and after a service-worker restart or browser restart.
set_site_permission — set one permission for one origin, for 60–600 seconds. Supported:
notifications,geolocation(orlocation),camera,microphone.settingisallow,block, orask. Insafe, everyallowrequires approval; defaultlabapplies it without elicitation (BROWSERTAP_LAB_NO_ELICIT=1semantics). Declining returnsrequires_user_actionand changes nothing.clipboardreturnsunsupported, because its exact prior state cannot be restored. Omitoriginto use the target tab's current origin; onlyhttp/httpsorigins are accepted.permission(string),setting(string):allow,block, orask,origin(string, optional): defaults to the tab's origin,duration_seconds(integer, optional): 60–600, default300,session_id(string, optional)
reset_site_permissions — restore matching leases now instead of waiting for expiry. Omit both
originandpermissionto restore every lease on that browser.origin(string, optional),permission(string, optional),session_id(string, optional)
cdp_command — send one CDP command.
method(string): e.g.Page.navigate,params_json(string, optional): JSON object as text,session_id(string, optional),tab_id(integer/string, optional),extension_id(string, optional),target_id(string, optional),timeout(number, optional): default20
cdp_batch — send a batch;
batch_jsonmust be a JSON object withcmd: "batch".batch_json(string),session_id(string, optional)
debugger_targets — (no tab needed) list every CDP-attachable target, including service workers and extension background pages that
list_tabsnever shows.session_id(string, optional)
save_pdf — bounded
Page.printToPDF; validates PDF bytes and atomically writessave_path. A timeout forcibly releases its debugger lease.save_path(string),session_id(string, optional),landscape(boolean, optional): defaultfalse,print_background(boolean, optional): defaulttrue,prefer_css_page_size(boolean, optional): defaulttrue,scale(number, optional): default1.0, range0.1–2.0,page_ranges(string, optional),timeout(number, optional): default30
On driving other extensions: Chrome refuses cross-extension debugging at attach time, and all three addressing forms (
tab_id,extension_id,target_id) are rejected alike unless Chrome was started with--silent-debugger-extension-api. These parameters are for this extension's own targets and for diagnosis.
extension_path — absolute path of the unpacked extension, for manual install. No parameters.
list_extensions — (no tab needed) installed extensions with id, name, enabled state, type, and version.
session_id(string, optional)
set_extension_enabled — (no tab needed) enable or disable an installed extension. Chrome exposes no API to install one, so this only toggles what is already there.
extension_id(string),enabled(boolean),session_id(string, optional)
uninstall_extension — (no tab needed) uninstall another extension. Confirmation defaults on; set it off only for an explicitly selected disposable/test extension. BTAP cannot uninstall itself through its active response channel.
extension_id(string),show_confirm_dialog(boolean, optional): defaulttrue,session_id(string, optional)
get_bookmarks — (no tab needed) read the bookmark tree.
session_id(string, optional)
create_bookmark — (no tab needed) create a bookmark or folder.
title(string),url(string, optional): omit to create a folder,parent_id(string, optional),session_id(string, optional)
remove_bookmark — (no tab needed) remove a bookmark or folder subtree.
bookmark_id(string),recursive(boolean, optional): defaultfalse,session_id(string, optional)
call_extension — (no tab needed) send JSON to another enabled extension; the target must allow BTAP via
externally_connectable.extension_id(string),message_json(string): JSON payload as text,session_id(string, optional)
network_capture_start — start collecting bounded request/response records and optional bodies. Defaults: 500-entry ring and 256 KiB per body.
session_id(string, optional),include_bodies(boolean, optional): defaulttrue,max_entries(integer, optional): default500, range 10–2000,max_body_bytes(integer, optional): default262144, range 1024–2097152,body_timeout(number, optional): default5, range 0.1–10 seconds,timeout(number, optional): default10
network_capture_stop — return the current capture and release its debugger lease; always call it in cleanup. Returned records can be filtered without changing capture bounds or cleanup.
url_patternis compiled by the browser as a JavaScriptRegExp; invalid patterns return a structured error and leave the capture running for retry.session_id(string, optional),url_pattern(string, optional): JavaScriptRegExp,resource_type(string, optional),status_min/status_max(integer, optional): 100–599,include_response_bodies(boolean, optional): defaulttrue,timeout(number, optional): default10
console_capture_start — start collecting
console.*and uncaught exceptions.session_id(string, optional),max_entries(integer, optional): default500, range 10–5000,timeout(number, optional): default10
get_console_messages — page through or clear the current console buffer.
filter='user'retains page MAIN/default-context output and excludes isolated extension/content-script contexts; empty/allpreserves the complete buffer.session_id(string, optional),offset(integer, optional): default0,max_items(integer, optional): default200,clear(boolean, optional): defaultfalse,filter(string, optional):userorall,timeout(number, optional): default10
console_capture_stop — return the remaining console messages and release its debugger lease.
session_id(string, optional),timeout(number, optional): default10
capture_page_screenshot — page capture via CDP with viewport,
full_page, or explicitclipmodes. PNG, JPEG, and WebP are supported;qualityis valid only for JPEG/WebP. Returns text metadata plus attached MCP image content;save_pathonly adds a disk copy. Base64 is omitted unless explicitly requested. The metadata names its own units:image_width/image_heightparsed from the returned bytes andpixel_space: "device"(CSS ×devicePixelRatio), so a point read off the picture is not fed straight topage_click. A header it cannot parse reportsnulldimensions plus adimensions_noterather than a guess —sizeis the byte count, not a dimension.session_id(string, optional),tab_id(integer, optional),format(string, optional): defaultpng,full_page(boolean, optional): defaultfalse,clip(object, optional):x,y,width,height, optionalscale,quality(integer, optional): 0–100 for JPEG/WebP,save_path(string, optional),return_base64(boolean, optional): defaultfalse,timeout(number, optional): default20
capture_desktop_screenshot — captures the currently visible OS virtual desktop across all displays and returns metadata plus MCP image content. This is not a selected/background-tab capture; it may include other applications.
save_pathonly adds a disk copy.width/height/left/topand the image itself are physical screen pixels (pixel_space: "physical"), unscaled, so they are the same spacemouse_clicktakes.save_path(string, optional),return_base64(boolean, optional): defaultfalse
Real OS-level input at desktop screen coordinates, in physical pixels on the virtual desktop (not CSS pixels, not device pixels). It moves your actual cursor and types into whatever has focus. Prefer the page_* tools: they are precise, do not interrupt you, and work on a background tab. Reach for these only when page input genuinely cannot work — browser chrome, native file pickers, extension popups, OS dialogs.
In safe, each of these five direct tools asks through MCP elicitation. Default lab uses BROWSERTAP_LAB_NO_ELICIT=1 semantics and does not prompt; setting it false restores session-level lab approval. Decline, cancel, or unavailable elicitation returns requires_user_action; every profile still enforces the lock, quiet window, ownership, activation, and foreground check. resolve_leave_dialog is a sixth physical-input path, limited to a final Enter fallback after two protocol-level attempts and subject to the same gate.
After approval the sequence is fixed: take the cross-process lock (contended → busy, returned immediately, never queued), check the coordinates against the real display geometry, wait out a short quiet window (you touched the mouse or keyboard → input_activity_detected, nothing sent), then raise the target tab, then act. What that window can actually detect depends on the OS: only Windows exposes a last-input timestamp, and the pointer position is unavailable under Wayland, in a headless container, and on macOS without the accessibility permission. With no signal at all the window still elapses but has nothing to compare, so every result carries an input_quiet block naming the markers it sampled, with enforced: false when there were none — on such a machine read a pass as unverified rather than as an idle desktop. All five direct tools take session_id — the same one you pass every other tool — and raise that tab; without one they fall back to the shared global target, which another task may have changed. Use activate_session="none" only for intentional input to the already-visible desktop or native UI. If the tab cannot be confirmed on screen the result is activation_failed and no input is sent, so a minimised window produces an error rather than a click into the wrong place.
A point on no display at all is refused with coordinates_off_screen, before the tab is raised and before anything is dispatched: SetCursorPos silently clamps an out-of-range point and reports success, so (2400, 1300) on a 1920×1080 panel becomes a click at (1919, 1079) — the hot corner that can minimise every window — and nothing in the reply would have said so. The rectangle it checks against is the virtual desktop across all displays, reported as screen_bounds on every physical result and by pointer_info. Where the geometry cannot be read the call proceeds with screen_bounds.enforced: false and a note, the same way the quiet gate reports a vacuous pass rather than taking physical input away from a machine where it works.
mouse_move —
x(integer),y(integer),duration(number, optional): glide time in seconds, default0(jumps straight to the point),session_id(string, optional): tab to raise,activate_session(string, optional): defaultcurrent(raise the target tab first), a session id to raise a different tab, ornonemouse_click —
x(integer, optional),y(integer, optional): omit both to click wherever the cursor already is,button(string, optional): defaultleft, alsorightormiddle,clicks(integer, optional): default1,interval(number, optional): seconds between clicks, default0.1,session_id(string, optional): the tab to raise, and what you should normally pass,activate_session(string, optional): defaultcurrent, a session id, ornonemouse_drag —
x1(integer),y1(integer),x2(integer),y2(integer),duration(number, optional): seconds spent moving with the button held, default0.3,button(string, optional): defaultleft,session_id(string, optional): tab to raise,activate_session(string, optional): defaultcurrent, a session id, ornonetype_text —
text(string),interval(number, optional): seconds per keystroke, default0.01,click_x(integer, optional),click_y(integer, optional): click there first to focus the field,session_id(string, optional): the tab to raise, and what you should normally pass,activate_session(string, optional): defaultcurrent, a session id, ornonehotkey —
keys_csv(string): comma-separated, e.g.ctrl,c,session_id(string, optional): tab to raise,activate_session(string, optional): defaultcurrent, a session id, ornonepointer_info — current cursor position, primary-display size, and the
screen_boundsrectangle spanning every display (with the probe that answered insource, ornullwhen the geometry cannot be read). Read-only, no approval needed. No parameters.
Troubleshooting
Run browsertap doctor first. For connection, version, dialog,
permission, and physical-input recovery procedures, see the dedicated
troubleshooting guide.
Credits
BTAP is maintained by LinVireo. The MIT copyright notice in
LICENSE is retained
unchanged (zhea); maintenance and copyright attribution are distinct roles. The
canonical public repository for this distribution is LinVireo/browsertap-mcp.
The browser layer here began as GenericAgent's, and part of it still is. Thanks to that project and its author for the original implementation.
Originally from GenericAgent:
simphtml.py-- still substantially upstream's file, extended hereTMWebDriver.py(now maintained asbrowser_bridge.py)the
tmwd_cdp_bridgeChrome extension resources
GenericAgent is MIT-licensed, so its copyright notice has to reach anyone who receives a copy of this. It is reproduced in full, with a line-for-line measurement of how much of each file is still upstream's, in THIRD-PARTY-NOTICES.md -- which ships inside both the wheel and the sdist, not only in this repository. Everything else in this distribution -- the MCP tool surface, the bridge and its token authentication, the release evidence pipeline, the test suite, and both READMEs -- was written here.
If you fork or redistribute this, keep both notices: LICENSE and that file.
License
MIT
Available Tools
55 toolsactivate_tabA
Bring a tab to the foreground and focus its window. Use this explicitly after switch_tab when foreground work is required, or to re-raise a tab the user has since clicked away from.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 clearly discloses the effect: bringing the tab to the foreground and focusing its window, including the re-raise scenario. It does not discuss error cases or prerequisites, but for this simple focus operation the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary behavior is front-loaded, followed immediately by actionable usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the description covers purpose and usage well, but it omits the meaning of the optional session_id parameter and any behavior when no session is provided. Since there are no annotations, this missing parameter context is a real gap, though the overall definition is still quite usable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention session_id at all. Although the parameter name and title give some hint, the description fails to explain how session_id identifies the tab or what passing null/default means, so the agent is left to infer this from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Bring a tab to the foreground and focus its window.' It also differentiates the tool from switch_tab by explaining that activation is for foreground work or re-raising a tab the user clicked away from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool: after switch_tab when foreground work is required, or to re-raise a tab. This gives an agent a clear decision rule and implicitly identifies switch_tab as the alternative for non-foreground tab changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
call_extensionA
Send a JSON message from the BTAP extension service worker to another installed extension. The target must be enabled and list this BTAP extension in externally_connectable. Works with no tabs open.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| extension_id | Yes | ||
| message_json | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses prerequisites (target enabled and externally_connectable) and the no-tabs-open behavior. However, it does not explain what happens on failure, whether a response from the target is returned, or whether the message is fire-and-forget, which are important behavioral traits for an agent invoking this tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The main action is front-loaded, followed by necessary target prerequisites and a useful operational note about tabs. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only three parameters and an output schema, the description covers the core invocation context: the source, the target requirements, and the fact that no tab context is needed. The main gap is the lack of explicit failure/response semantics, which prevents a perfect score, but the essential information for a correct call is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It implicitly maps extension_id to the target extension and message_json to the JSON message payload, but it leaves session_id entirely unexplained and does not clarify the expected JSON string format or any encoding requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Send a JSON message') with a precise resource ('from the BTAP extension service worker to another installed extension'). This clearly distinguishes call_extension from sibling tools such as list_extensions or set_extension_enabled, which manage extensions rather than message them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context: the target must be enabled and must declare the BTAP extension in externally_connectable, and the tool works without any tabs open. It does not name explicit alternatives, but there is no closely competing sibling tool for sending extension-to-extension messages, so the practical usage boundary is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_desktop_screenshotA
Capture the complete visible virtual desktop across all displays and return text metadata plus MCP image content; this is not a background-tab screenshot, save_path only adds a disk copy, and return_base64 is opt-in. width/height/left/top are PHYSICAL screen pixels and are exactly the range mouse_click accepts, unscaled.
| Name | Required | Description | Default |
|---|---|---|---|
| save_path | No | ||
| return_base64 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and delivers well: it details the return as text metadata plus MCP image content, clarifies save_path only adds a disk copy, explains return_base64 is opt-in, and specifies that width/height/left/top are physical screen pixels matching mouse_click's coordinate range unscaled. This is substantive behavioral context beyond a one-line summary.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence adds value: the primary behavior, the non-page-screenshot distinction, parameter side effects, and the critical coordinate-system note for pixel mapping. It is dense but efficient, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description explaining the returned metadata and MCP image content is essential and provided. It also covers save behavior, base64 opt-in, and coordinate semantics, making the tool fully usable by an agent without external assumptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies save_path's side effect ('only adds a disk copy') and return_base64's opt-in nature. These add meaning beyond the raw schema. The description does not fully elaborate return_base64's output format, but for two simple optional params this is adequate compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource: capture the complete visible virtual desktop across all displays and return text metadata plus MCP image content. It also explicitly distinguishes itself from a background-tab screenshot, which separates it clearly from capture_page_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the scope explicit ('complete visible virtual desktop across all displays') and provides an exclusion ('this is not a background-tab screenshot'), which tells the agent when not to use this tool. It does not name an alternative tool directly, but the intended usage is clear enough from the scope and the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_page_screenshotA
Capture a viewport, full-page, or clipped screenshot of a page/tab via CDP with optional JPEG/WebP quality. Returns text metadata plus an attached MCP image even when save_path is set; save_path only controls disk output. image_width/image_height are DEVICE pixels (CSS x devicePixelRatio), not the CSS pixels page_click takes, and size is the byte count. If the current model cannot consume images, it has not seen the pixels and must use scan_page, execute_js, a page-specific API, or OCR instead. Base64 is included only when return_base64=true.
| Name | Required | Description | Default |
|---|---|---|---|
| clip | No | ||
| format | No | png | |
| tab_id | No | ||
| quality | No | ||
| timeout | No | ||
| full_page | No | ||
| save_path | No | ||
| session_id | No | ||
| return_base64 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and succeeds exceptionally. It discloses that the MCP image is attached even when save_path is set, that width/height are device pixels rather than CSS pixels, that `size` is the byte count, that base64 appears only when return_base64=true, and that the model may not have actually seen the pixels if it cannot consume images. These are exactly the non-obvious behaviors that would cause agent misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five dense sentences, each earning its place: purpose, return behavior, unit warning, fallback routing, and base64 condition. The core action is front-loaded, and there is zero filler. The length is justified given 9 undocumented parameters and no annotations; every clause prevents a distinct misunderstanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (9 optional params, 0% schema coverage, no annotations, no output schema), the description covers the critical operational facts: return shape, save_path semantics, pixel-unit trap, conditional output, and image-consumption fallback. Remaining gaps are minor — it does not clarify how tab_id/session_id select the target when omitted, nor valid format/quality value ranges — but these are largely inferred from names and defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does for the most error-prone parameters: save_path (controls only disk output), return_base64 (the sole switch for base64), format/quality (optional JPEG/WebP), full_page and clip (scoping modes), and the unit semantics of image dimensions. It does not address tab_id, session_id, or timeout behavior, but the critical traps are covered, which justifies a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The lead sentence states a specific verb and resource: 'Capture a viewport, full-page, or clipped screenshot of a page/tab via CDP'. This distinguishes it from capture_desktop_screenshot (desktop vs page/tab), save_pdf (document vs image output), and scan_page (which is explicitly named as an alternative, not a screenshot tool). The scope, method, and format options are all identifiable without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-not-to-use guidance with named alternatives: 'If the current model cannot consume images, it has not seen the pixels and must use scan_page, execute_js, a page-specific API, or OCR instead.' This is a clear exclusion with concrete fallback tools. It does not explicitly contrast capture_desktop_screenshot or state positive selection criteria ('use this when you need page pixels'), though the first sentence implies it, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdp_batchC
Run a CDP bridge batch command; pass the full JSON command object as text.
| Name | Required | Description | Default |
|---|---|---|---|
| batch_json | Yes | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It says the tool 'runs' a command but does not mention side effects, safety risks, session requirements, or what happens on execution. For a raw CDP command execution tool, this is a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the core instruction is front-loaded. It earns its place, though it is terse to the point of under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool that executes CDP bridge commands, the description is incomplete. It lacks usage context, behavioral caveats, and parameter detail. The output schema reduces the need to document return values, but the remaining gaps are material, especially with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does clarify that batch_json is a full JSON command object passed as text, but it gives no structure or example, and it entirely ignores session_id. This is only minimal compensation for a required parameter with no other documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Run' and resource 'CDP bridge batch command' identify the basic action, and the word 'batch' loosely distinguishes it from the sibling cdp_command. However, 'CDP bridge batch command' is jargon and is not explained, so an agent cannot reliably infer what a batch command actually contains or how it differs from the single-command sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus cdp_command or any other sibling. The phrase 'CDP bridge batch command' vaguely implies a batch context, but there is no explicit when-to-use/when-not-to-use guidance or mention of alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cdp_commandB
Call one Chrome DevTools Protocol command. session_id accepts client:tabId; tab_id accepts either a native number or the same composite session string.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | ||
| tab_id | No | ||
| timeout | No | ||
| target_id | No | ||
| session_id | No | ||
| params_json | No | {} | |
| extension_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It only states that the tool makes a single CDP call and describes two ID parameter formats; it does not mention side effects, error behavior, permissions, or whether the call mutates browser state. This is a significant gap for a generic command executor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with the main action front-loaded. The second sentence adds relevant parameter format details, and there is no verbosity or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although an output schema exists, the tool has 7 parameters, no annotations, and no schema descriptions. The description lacks guidance on which targeting parameter to use (session_id vs tab_id vs target_id), what timeout semantics are, and when to use this tool versus cdp_batch. These gaps make it insufficient for a complex command-invocation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that session_id accepts a 'client:tabId' composite and tab_id accepts a native number or that same composite string. However, it leaves method, params_json, timeout, target_id, and extension_id without any semantic explanation, so coverage is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Call') on a specific resource ('one Chrome DevTools Protocol command'), clearly distinguishing it from the sibling cdp_batch (batch execution). The purpose is unambiguous and immediately recognizable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to prefer this tool over alternatives such as cdp_batch or debugger_targets. There is no mention of prerequisites, use cases, or exclusions, leaving the agent to infer suitability from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_tabsA
Close one or more tabs by native tab id or composite session_id. Accepts a single identifier or a list; identifiers in one call must belong to the same browser. By default it closes only tabs created by this MCP task and requires the owner_id returned by open_new_tab; lifecycle generations are checked before removal. Set only_if_agent_owned=false only for an explicit operator request to close a user tab.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | Yes | ||
| owner_id | No | ||
| session_id | No | ||
| only_if_agent_owned | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does so thoroughly: it warns that identifiers must belong to the same browser, that lifecycle generations are checked before removal, and that the ownership bypass flag is reserved for explicit operator requests. These are non-obvious behaviors that substantially affect call success and safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences cover purpose, multi-tab constraints, ownership rules, and the special flag condition with zero filler. The most important action and identifier forms are front-loaded, and each sentence contributes new, necessary information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (multiple parameter combinations, ownership nuance) and the presence of an output schema, the description covers all decision-relevant aspects: what identifiers are accepted, the same-browser constraint, the default ownership guard, and the escape hatch for operator-requested closures. Nothing an agent needs to know before calling is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters on its own. It clarifies that tab_id can be a single identifier or a list, that session_id is an alternative composite identifier, that owner_id is required by default, and that only_if_agent_owned controls whether user tabs may be closed. This adds meaning far beyond the raw schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Close one or more tabs by native tab id or composite session_id.' It precisely defines what the tool acts on and the two accepted identifier forms, making its purpose unmistakable even before reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains the default ownership restriction ('closes only tabs created by this MCP task'), the requirement for owner_id, and the exact condition for using only_if_agent_owned=false ('only for an explicit operator request'). This tells the agent when it is safe to use the tool and when not to, without needing to infer policy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_capture_startA
Start a bounded Runtime console and exception capture on a real-browser tab without foregrounding it. Use get_console_messages while running and console_capture_stop when done.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| session_id | No | ||
| max_entries | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does disclose meaningful traits: the capture is bounded, it runs on a real-browser tab, and it does not foreground the tab. However, it does not explain what 'bounded' means in terms of timeout/max_entries, whether capture starts fresh, or any side effects on the tab.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The key behavior is front-loaded, and the follow-up tools are named immediately. Every part of the description earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The start/read/stop lifecycle is covered, and an output schema exists so return-value details are not strictly required. However, with no annotations and zero parameter documentation, the description leaves the meanings of timeout, session_id, and max_entries underspecified, which is a real gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It does not mention timeout, session_id, or max_entries at all. The phrase 'bounded' hints at timeout/max_entries, but no concrete parameter meaning is provided, leaving the agent to rely on parameter names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Start a bounded Runtime console and exception capture on a real-browser tab.' It clearly distinguishes this start action from sibling tools like get_console_messages and console_capture_stop by naming the capture lifecycle phase.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit process guidance: use get_console_messages while running and console_capture_stop when done. It does not explicitly list alternatives or when-not-to-use cases, but the workflow context is clear enough for an agent to understand the tool's place in the lifecycle.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
console_capture_stopB
Stop console capture on a real-browser tab, return the remaining bounded message buffer, and release its debugger lease.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It does disclose meaningful side effects: stopping capture, returning the buffer, and releasing a debugger lease. However, it does not explain what happens when no capture is active, whether the operation is idempotent, or what releasing the debugger lease implies for other debugging activity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise sentence front-loads the action and states the main effects in order. There is no filler, and every phrase adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core purpose and major side effect are clear, and the presence of an output schema reduces the need to describe return values. Still, the description is incomplete because it omits clarification of the two parameters and provides no explicit guidance for selecting this tool over related capture/debugger tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention either timeout or session_id. The agent receives no guidance on what session_id refers to, why it can be null, or what the timeout controls, so it cannot reliably decide how to set these parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Stop console capture on a real-browser tab'. It also lists the concrete effects—returning the remaining bounded message buffer and releasing the debugger lease—which clearly distinguishes it from sibling tools like console_capture_start and network_capture_stop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is the stop counterpart to console_capture_start, but does not explicitly state when to use it, what conditions require a session_id, or how it differs from get_console_messages for retrieving captured messages. Usage context is present only by implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_bookmarkA
Create a bookmark or folder. Supply url for a bookmark; omit url to create a folder. parent_id is optional and uses Chrome's default bookmark location when omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| title | Yes | ||
| parent_id | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It transparently explains the dual behavior (bookmark vs folder), the optional parent behavior, and the default-location fallback. It does not mention duplicate behavior or permission requirements, but the core mutation semantics are clear and non-contradictory.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and key conditional rule are front-loaded, and every phrase adds behavioral or parameter value. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations, the description covers the main call-shaping decisions: required title, url conditionality, and parent default. The only clear gap is session_id, whose purpose is left unexplained, and the output schema presumably covers return values. Overall it is nearly complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains url (presence determines bookmark vs folder) and parent_id (default Chrome location), but it does not explain session_id at all, and title's role as the bookmark/folder name is only implicit. The description adds meaningful semantics for some parameters but leaves a notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Create a bookmark or folder') on a clear resource, and immediately disambiguates the two modes using the presence/absence of url. This distinguishes it from siblings like get_bookmarks and remove_bookmark without needing to inspect their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear conditional usage guidance: supply url for a bookmark, omit url for a folder, and omit parent_id to use Chrome's default location. It does not explicitly discuss alternatives or when-not-to-use, but the conditions are specific enough for an agent to select and invoke the tool correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debugger_targetsA
List every CDP-attachable target, including service workers and extension background pages that list_tabs never shows. Works with no tabs open.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It does so by clarifying the operation is a read-only listing, the scope includes hidden CDP targets, and the tool works even with zero tabs open. It does not explain session_id effects, but output schema existence reduces the need to describe return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, with the core verb and resource front-loaded. Every phrase earns its place: the target scope, the excluded alternative, and the no-tabs capability are all conveyed without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity listing tool with an output schema, the description covers the main behavior and a key edge case. However, it leaves the optional session_id parameter unexplained and does not clarify how this relates to the sibling list_all_tabs tool, which creates a meaningful gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description adds nothing about the optional session_id parameter. The parameter name and title give some hint, but the description does not compensate for the missing schema documentation, leaving an agent to guess what session_id means and when to provide it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('every CDP-attachable target'), and goes further by naming examples (service workers, extension background pages). It also explicitly distinguishes itself from list_tabs, so an agent can immediately understand what unique capability this tool provides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is valuable: when targets like service workers and extension background pages are needed, and when no tabs are open. It names list_tabs as the alternative that misses these targets, though it does not explicitly discuss exclusions or compare against list_all_tabs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_cookiesA
Delete a cookie by name from the real browser profile. Scope defaults to the current page (url), or pass domain/path/url to target another scope. Uses CDP Network.deleteCookies, falling back to expiring it via document.cookie.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| name | Yes | ||
| path | No | ||
| domain | No | ||
| tab_id | No | ||
| timeout | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it reveals the operation targets the persistent 'real browser profile' rather than ephemeral state, and discloses the mechanism — CDP Network.deleteCookies with a document.cookie expiration fallback. This gives the agent meaningful expectations about side effects and reliability that the schema cannot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all load-bearing: purpose, scope behavior, and mechanism/fallback. The core action is front-loaded and there is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema relieves the description of explaining return values, and core delete behavior plus scope targeting are covered. But for a tool with 7 parameters, no annotations, and 0% schema parameter coverage, leaving tab_id, timeout, and session_id unexplained is a noticeable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real meaning for the scope parameters (url/domain/path and the current-page default), but tab_id, timeout, and session_id are never mentioned, leaving their semantics entirely undocumented. This is only partial compensation for a 7-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource — 'Delete a cookie by name from the real browser profile' — and adds scope semantics (defaults to current page, or pass domain/path/url). This inherently distinguishes it from cookie siblings like get_cookies and set_cookies, whose actions are clearly different.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scoping sentence gives actionable context ('pass domain/path/url to target another scope'), so an agent understands how to direct the deletion. However, there is no explicit when-to-use guidance or exclusion — nothing names alternatives or warns against using this when the document.cookie fallback would be ineffective, such as with httpOnly cookies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_fileA
Download an http(s) URL through the real browser's native download manager, so the current browser profile's cookies and authenticated session are used. Waits for completion by default and returns the final absolute local path. directory may be any absolute local directory; completed files are moved there without replacing an existing file unless overwrite=true. A directory timeout reports directory_applied=false because Chrome may finish in its default download directory. An explicit session_id must still be live and is never replaced with another profile. Use this for attachments instead of page fetch.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| wait | No | ||
| timeout | No | ||
| filename | No | ||
| directory | No | ||
| overwrite | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden and succeeds. It reveals session/cookie usage, default waiting behavior, file move semantics, no-replacement unless overwrite=true, timeout fallback behavior, and session_id constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five dense sentences with the core purpose front-loaded. Every sentence adds new behavioral or parameter information, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters, no annotations, and no per-parameter schema descriptions, the description covers most invocation-relevant behavior, including timeout edge cases and session requirements. It is slightly incomplete only on filename semantics and what happens when wait=false, but the presence of an output schema reduces the need to document return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description adds meaning for most parameters: directory, overwrite, wait, timeout, session_id, and url. However, filename's role is not explained, leaving a gap in an otherwise strong parameter-semantics pass.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action—'Download an http(s) URL through the real browser's native download manager'—and clearly identifies the expected result: the final absolute local path. It also distinguishes the tool from a plain fetch by emphasizing that the browser profile's cookies and authenticated session are used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this for attachments instead of page fetch,' giving a concrete when-to-use rule and naming an alternative. It also communicates an important usage constraint: an explicit session_id must still be live and is never replaced with another profile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_jsA
Execute arbitrary JS in the requested real-browser tab under one total deadline. BTAP pins every monitor/retry/result roundtrip to an explicit session, uses the service-worker/page route first, and falls back to directed Runtime.evaluate on SPA/CSP bridge failures without retargeting. Use wait_for/wait_for_url instead of setTimeout or sleep Promises; BTAP retries only proven-undelivered work, never an acknowledged script whose side effects may already have run.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | ||
| timeout | No | ||
| no_monitor | No | ||
| session_id | No | ||
| dialog_policy | No | dismiss |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden and meets it richly: it discloses the single total deadline, per-session pinning of all roundtrips, the route-first-then-fallback execution path, no retargeting on fallback, and precise retry semantics ('retries only proven-undelivered work, never an acknowledged script whose side effects may already have run'). These are non-obvious behaviors an agent needs to anticipate how the tool acts at runtime.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose+deadline, execution mechanism+fallback, and usage guidance+retry semantics. The core action is front-loaded in sentence one, and there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity plus an output schema that documents return values and zero annotations, the description covers the essential behavioral surface: deadline, routing, fallback, and retry semantics. The gaps are no_monitor and dialog_policy semantics (especially relevant since arbitrary JS can trigger browser dialogs), which an agent would need to infer from parameter names alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add meaning to some params: 'one total deadline' clarifies timeout semantics, 'pins every monitor/retry/result roundtrip to an explicit session' clarifies session_id, and the wait guidance shapes how script should be written. However, no_monitor and dialog_policy receive no explanatory text, leaving their behavior to inference from names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'Execute arbitrary JS in the requested real-browser tab under one total deadline' names a specific verb, resource, and scope constraint. The fallback detail ('falls back to directed Runtime.evaluate') further differentiates it from raw CDP siblings like cdp_command/cdp_batch, so an agent can disambiguate without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative with a when-not: 'Use wait_for/wait_for_url instead of setTimeout or sleep Promises', which prevents agents from embedding naive waits in scripts. The retry-semantics sentence also guides expectations about side effects. However, it never directly addresses when to prefer execute_js over sibling tools like cdp_command for JS evaluation, leaving some decision-making implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extension_pathA
Get absolute path to the unpacked Chrome extension directory for manual installation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly implies a read-only filesystem lookup returning a path, with no side effects. It doesn't elaborate on failure modes or prerequisites, but the simple nature of the operation makes the description adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the action and resource. Every word contributes: 'Get absolute path', 'unpacked Chrome extension directory', and 'for manual installation' all add necessary information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter helper that returns a filesystem path, the description is complete. An agent can correctly invoke it without further details, especially since the output format is covered by an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so there is nothing for the description to clarify about parameters. Following the baseline guidance for zero-parameter tools, a score of 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), a precise resource ('absolute path to the unpacked Chrome extension directory'), and an explicit purpose ('for manual installation'). This clearly distinguishes it from extension-management siblings like list_extensions, set_extension_enabled, and uninstall_extension.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for manual installation' gives clear context for when this tool is useful. It does not explicitly state alternatives or exclusions, but for a zero-parameter path-lookup tool the situational cue is sufficient. A 5 would require explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_automation_profileA
Return the active safe/lab automation profile. Lab is the default and skips elicitation unless BROWSERTAP_LAB_NO_ELICIT is explicitly disabled; safe requires approval for every physical action and permission allow.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explains the meaning of the two returned profile states and their operational differences (elicitation skipping, approval requirements). It does not fully define terms like 'elicitation' or 'permission allow,' but it provides meaningful transparency for a zero-parameter getter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the primary purpose front-loaded and no filler. The first sentence states exactly what is returned; the second packs the essential safe/lab semantics without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with no parameters and an output schema present, the description is complete: it states what is returned, the default mode, and the behavioral distinction between safe and lab. Nothing needed to invoke the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema confirms an empty argument object, so there is no parameter behavior to describe. Per the zero-parameter baseline, the description earns a 4 by adding profile context rather than needing to explain inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Return the active safe/lab automation profile.' It clearly identifies the tool as a getter for the current automation profile and distinguishes it from set_automation_profile via 'return active' versus setting. It also defines the two profile modes, removing ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool matters: lab is default and skips elicitation, while safe requires approval for physical actions. It implies the tool is used to read the current profile before deciding behavior, though it does not explicitly name alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bookmarksB
Return the browser bookmark tree. Works with no tabs open.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears the full burden of disclosing behavior. It mentions one useful property (works with no tabs open) but does not explicitly state that this is a read-only operation with no side effects, nor does it describe behavior around the optional session_id or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, dense sentences with no filler. The core purpose is front-loaded, and the extra tab-context sentence earns its place by clarifying availability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema, the description is minimally viable: it states the return object and an availability condition. However, it omits any clarification of session_id semantics and does not explicitly state the tool is read-only, leaving minor but real gaps for an agent to resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the session_id parameter at all. The name 'session_id' is somewhat self-explanatory, but the description adds no meaning about whether it is required, what it selects, or how it affects the returned bookmark tree.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Return') and resource ('the browser bookmark tree'). This is easily distinguished from sibling tools like create_bookmark and remove_bookmark, which mutate bookmarks rather than read them. The additional note about working with no tabs open reinforces the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Works with no tabs open' implies the tool can be used independently of tab state, which provides some usage context. However, it does not explicitly state when to prefer this tool over alternatives, nor does it mention any exclusions or prerequisites beyond the tab note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_console_messagesA
Read a page of captured console messages and exceptions from a real-browser tab. Set clear=true to clear the full buffer after reading. Set filter='user' to exclude extension service-worker / content-script logs and keep only the page's own main-world console output.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| filter | No | ||
| offset | No | ||
| timeout | No | ||
| max_items | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It transparently states that clear=true clears the full buffer after reading, and that filter='user' excludes extension service-worker/content-script logs. This goes beyond the schema and reveals meaningful side effects and filtering behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and free of fluff. It front-loads the core purpose and then packs high-value parameter guidance into the remaining sentence. Every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core behavior and the two most behaviorally significant parameters, and an output schema exists, so return values need not be detailed. Still, for a six-parameter tool with no annotations, key execution details like session_id, offset, max_items, and timeout are not explained, leaving an agent to guess how pagination or multi-tab selection works.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds real meaning to clear and filter, which is valuable given the schema provides no descriptions. However, offset, timeout, max_items, and session_id are left entirely unexplained, and with 0% schema description coverage these parameters remain ambiguous. The description compensates for only a subset of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Read a page of captured console messages and exceptions from a real-browser tab.' It clearly identifies the tool as a read/retrieval operation and distinguishes it from sibling capture controls like console_capture_start and console_capture_stop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context for when to use the tool: it reads previously captured console messages. It also provides actionable guidance for the clear and filter options, explaining exactly what each does. It does not explicitly name alternatives or when not to use it, but the 'captured' wording implies it is intended after capture has been started.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cookiesC
Get cookies for the current page or specified tab via the Chrome extension bridge.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that cookies are fetched; it does not mention whether any browser permissions are required, whether the extension bridge session needs to be active, whether the call is read-only, or what happens when no cookies exist. 'Get' implies a read operation, but key behavioral context is missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no filler. The core action and scope are front-loaded, and the mention of 'via the Chrome extension bridge' adds relevant context. It is concise, though it sacrifices some helpful detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple getter with an output schema available, the description provides enough to understand the primary purpose. However, it lacks guidance on session_id, usage boundaries relative to cookie-modifying tools, and behavioral details. It is adequate but has clear gaps; it is not fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning for tab_id by distinguishing 'current page' from 'specified tab', but it never explains session_id, which remains entirely undocumented. The description only partially clarifies the parameter space.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a clear action ('Get') and resource ('cookies') with a specific scope: current page or specified tab. It does not explicitly contrast with sibling tools like set_cookies or delete_cookies, but the read/write distinction is inferable from the verb, so it is not misleading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this tool over alternatives or when not to use it. Sibling tools include set_cookies and delete_cookies, but the description never names them or explains the boundary between reading and modifying cookies. The implied usage is clear only from the verb 'get'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_setup_statusA
Return component versions, stale-build actions, extension path, bridge ports, and connection status for setup/diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden; 'Return...' clearly marks this as a read-only diagnostic operation, and it discloses what is included. It does not mention side effects or error behavior, but the output categories and read-only framing are sufficient for safe selection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence front-loads the action and packs the essential output categories into a compact, scannable list. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters and an output schema available, the description covers the essential selection information: what the tool does and what data it returns. The only modest gap is explicit differentiation from sibling status/diagnostic tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4; no parameter-level documentation is needed. The description correctly focuses on output semantics instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action ('Return') and identifies the resource ('setup status') while enumerating five specific data categories: component versions, stale-build actions, extension path, bridge ports, and connection status. This goes well beyond a tautology and separates it from narrower sibling tools like extension_path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for setup/diagnostics' gives a contextual signal of when to use the tool. However, it does not explicitly state when not to use it or name sibling alternatives for diagnostics-related status checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
handle_dialogB
Inspect or handle a JavaScript dialog on the requested real-browser tab. action is dismiss, accept, or manual; manual reports the dialog without choosing.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| timeout | No | ||
| session_id | No | ||
| prompt_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add some value by defining dismiss, accept, and manual, including that manual 'reports the dialog without choosing.' However, it does not disclose timeout behavior, what happens if no dialog is present, whether the call blocks, or how prompt_text is used. That leaves significant behavioral gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with the main verb-resource statement first and the action list second. Every sentence adds information, and the clarification of manual behavior is compact and useful. There is no filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the tool has four parameters and zero annotations, so the description must supply practical invocation context. It omits how the target tab is identified, what prompt_text is for, timeout semantics, and the content of a manual report beyond 'reports the dialog.' This is insufficient for correct invocation in edge cases such as prompt dialogs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only clarifies the required action parameter's possible values. The timeout, session_id, and prompt_text parameters are left entirely to their names and defaults, which is insufficient for an agent to know how to fill them correctly. The partial clarification of action is not enough coverage for four parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's job with a specific verb and resource: it inspects or handles a JavaScript dialog on a tab. It also enumerates the action modes, making the purpose unambiguous. It doesn't explicitly position itself against the sibling resolve_leave_dialog, so it loses a point, but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance and does not mention alternative dialog-related tools. The action semantics imply it is for dismissing, accepting, or reporting dialogs, but an agent is left to infer when to select this over something like resolve_leave_dialog. This is below the clear-context bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hotkeyA
Send a hotkey chord like 'command,l' or 'ctrl,shift,p' via the real keyboard. Safe mode requires one-action approval; lab skips prompting by default and uses session approval only when BROWSERTAP_LAB_NO_ELICIT is explicitly disabled. By default BTAP foregrounds and verifies the selected browser tab after the quiet-input check; prefer an explicit session_id for browser input. activate_session='none' is only for intentional input to the already-visible desktop or native UI.
| Name | Required | Description | Default |
|---|---|---|---|
| keys_csv | Yes | ||
| session_id | No | ||
| activate_session | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the real-keyboard nature, approval behavior in safe mode, lab-mode prompting behavior, default browser tab foregrounding and verification, and the special desktop/native-UI case for activate_session='none'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused paragraph that front-loads the core purpose, then adds mode, focus, and session guidance. It is efficient, though the environment-variable detail (BROWSERTAP_LAB_NO_ELICIT) adds some verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description is nearly complete: it explains the key format, session targeting, focus behavior, approval modes, and the special desktop/native case. It could be slightly more explicit about what happens when no session_id is provided or what output an agent should expect, but the output schema likely covers the return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaningful semantics: plural key examples for keys_csv, an explicit recommendation for session_id when targeting browser input, and a clear constraint for activate_session='none'. It does not explain all possible session_id formats or the full range of activate_session values, but it covers the important guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Send a hotkey chord ... via the real keyboard.' It includes concrete examples ('command,l', 'ctrl,shift,p') and clearly distinguishes this from mouse or text-input tools by emphasizing real-keyboard delivery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool, including safe-mode vs lab behavior and the advice to prefer an explicit session_id for browser input. It also gives an explicit exclusion for activate_session='none', but it does not name alternative sibling tools or state when not to use hotkey in favor of another input method.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_tabsA
List every open tab, including chrome-extension:// pages that list_tabs hides. Those never become sessions (content scripts can't run there), so they have no session id — drive them with cdp_command(tab_id=...) instead. Works with no tabs open.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explains that chrome-extension:// pages never become sessions because content scripts cannot run there, that those tabs have no session id, and that the tool works even with no tabs open. These are meaningful behavioral details beyond a simple 'list' operation, though it does not discuss return structure, which is partially covered by the output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and every sentence earns its place. It states the main action, then adds the critical exception and the alternative tool, and closes with an edge-case guarantee. There is no redundant or filler language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with an output schema, the description covers the important edge cases: extension pages are included, they lack session ids, and cdp_command is the correct driver for them. It also handles the empty-tabs case. The main completeness gap is the unexplained session_id parameter, but the tool has no required parameters and a default null, so the core invocation path remains clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one optional parameter, session_id, with 0% schema description coverage, so the description should explain it. The description mentions the concept of session ids but never explains what the session_id input parameter does or how it affects the call. An agent gets no parameter guidance beyond the schema's bare type/default information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List every open tab', and immediately distinguishes itself from the sibling tool list_tabs by noting it includes chrome-extension:// pages that list_tabs hides. This makes the tool's scope unmistakable and differentiates it from its closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names list_tabs as the sibling that hides extension pages, making it clear when list_all_tabs is the more comprehensive choice. It also gives a concrete alternative for extension pages that have no session id: drive them with cdp_command(tab_id=...) instead. This is explicit when/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_extensionsA
List installed browser extensions (id, name, enabled, type, version). Works with no tabs open.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses a useful non-obvious trait (works with no tabs open) and the exact output fields, confirming it is a non-mutating listing operation. It stops short of stating session-related behavior or error conditions, but for a simple list tool this covers the essentials.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Every clause ('List installed browser extensions', '(id, name, ...)', 'Works with no tabs open') adds distinct value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple enumeration tool with an output schema, the description covers the key purpose and a critical runtime precondition. The only missing contextual element is the meaning of session_id, which is already penalized under parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single parameter, and the description does not mention session_id at all. Since session_id is optional with a default, the gap is minor, but the description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('installed browser extensions'), enumerating the returned fields (id, name, enabled, type, version). Clearly differentiated from siblings like set_extension_enabled and uninstall_extension by naming a read-only enumeration operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational context ('Works with no tabs open') that tells the agent when it can be invoked. Does not explicitly name alternatives or exclusion conditions, but the purpose is unambiguous enough that the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tabsA
List connected tabs across all connected browsers; each tab has a browser field (chrome/edge/opera) and a session id to pass verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clearly signals a read-only listing operation, scopes the behavior to 'all connected browsers,' and adds valuable downstream context by saying the session id should be 'passed verbatim.' It does not discuss auth or edge cases, but the core behavior is transparent for a simple list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence front-loads the action and scope, then provides the two most operationally important output details: the browser field and the session id usage. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list operation with an output schema, the description is essentially complete: it names scope and follow-up usage. The only notable gap is the unresolved ambiguity with list_all_tabs, but the tool call itself is fully specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter meanings for the description to clarify. The description still adds useful context about the output fields, exceeding the baseline required for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('List') and resource ('connected tabs across all connected browsers'), and describes key output fields. However, it does not differentiate this tool from the similarly named sibling list_all_tabs, so it stops short of full sibling clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: the tool is for listing tabs and obtaining session IDs to pass verbatim to other tools. There is no explicit when-to-use or when-not-to-use guidance, and no comparison with the alternative list_all_tabs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_clickA
Click on the real desktop at absolute virtual-desktop coordinates in PHYSICAL screen pixels — the space pointer_info and capture_desktop_screenshot report, NOT the viewport CSS pixels page_click takes; on a scaled display the two differ by devicePixelRatio. A point on no display is refused with coordinates_off_screen rather than clamped to a screen edge. Pass session_id — the same one you pass every other tool (preferred) — and that tab is raised after the quiet check so the click lands on it. Without one the current global target is raised, which another task may have changed. Approval may foreground the selected browser tab. activate_session='none' clicks the desktop as-is.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| button | No | left | |
| clicks | No | ||
| interval | No | ||
| session_id | No | ||
| activate_session | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations, the description carries the full burden and delivers richly: the scaled-display pitfall, refusal via coordinates_off_screen instead of clamping to an edge, tab-raising behavior with and without session_id, the approval foregrounding side effect, and the activate_session='none' special case. This is unusually thorough behavioral disclosure for a pointer tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place and the most critical fact (coordinate space) is front-loaded. However, five distinct topics are packed into a single unbroken paragraph, which slightly hurts scannability for an agent parsing the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no description. The genuinely complex facets — coordinate space, off-screen error behavior, session targeting, activation modes — are all covered. Small gaps remain: what null x/y means (both default to null) and what 'the quiet check' refers to, but neither blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it largely does: x/y get their physical-pixel semantics, session_id gets its tab-raising role, and activate_session gets its special 'none' value. Button, clicks, and interval are left to their self-explanatory names and defaults, which is a minor gap given the zero-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: clicking on the real desktop at absolute virtual-desktop coordinates. Explicitly distinguishes itself from page_click by naming the coordinate-space difference (physical screen pixels vs viewport CSS pixels), so an agent can tell the two apart 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names page_click as the alternative and the axis of differentiation (coordinate space, with devicePixelRatio scaling), giving an explicit when-not-to-use signal. Also provides concrete invocation guidance: pass the preferred session_id so the right tab is raised after the quiet check, and use activate_session='none' to click the desktop as-is.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_dragA
Drag the real mouse from one point to another, both in absolute virtual-desktop PHYSICAL screen pixels (see mouse_click for how that differs from page_drag's CSS pixels). Either endpoint on no display is refused with coordinates_off_screen. Safe mode requires one-action approval; lab skips prompting by default and uses session approval only when BROWSERTAP_LAB_NO_ELICIT is explicitly disabled. By default BTAP foregrounds and verifies the selected browser tab after the quiet-input check; prefer an explicit session_id for browser input. activate_session='none' is only for intentional input to the already-visible desktop or native UI.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| button | No | left | |
| duration | No | ||
| session_id | No | ||
| activate_session | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and delivers: it discloses off-screen coordinate refusal, safe-mode approval behavior, lab session-approval conditions, quiet-input check, foregrounding/verification of the browser tab, and restrictions on activate_session. This is unusually transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but efficient; the action and coordinate system are front-loaded, followed by validation and session behavior. Some sentences are long and packed with conditional details, making it slightly harder to scan, but every sentence adds operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the critical invocation details for a physical-desktop drag: coordinate space, off-screen validation, approval behavior, and browser-session activation. The main gap is optional parameter semantics such as button and duration, but defaults and the presence of an output schema reduce the impact.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the coordinate parameters meaningfully and adds session-related semantics, but button and duration are left with only schema defaults and no description-level guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: "Drag the real mouse from one point to another" in absolute physical screen pixels. It also distinguishes itself from page_drag's CSS-pixel coordinate space, making its purpose clear relative to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when this tool is appropriate: physical screen pixels rather than CSS pixels, and it references page_drag as the differing alternative. It also gives concrete session guidance: prefer an explicit session_id for browser input and reserve activate_session='none' for desktop or native UI targets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mouse_moveA
Move the real mouse cursor to absolute virtual-desktop coordinates in PHYSICAL screen pixels (the space pointer_info and capture_desktop_screenshot report, not the CSS pixels page_click takes). A point on no display is refused with coordinates_off_screen rather than clamped to a screen edge. Safe mode requires one-action approval; lab skips prompting by default and uses session approval only when BROWSERTAP_LAB_NO_ELICIT is explicitly disabled. By default BTAP foregrounds and verifies the selected browser tab after the quiet-input check; prefer an explicit session_id for browser input. activate_session='none' is only for intentional input to the already-visible desktop or native UI.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| duration | No | ||
| session_id | No | ||
| activate_session | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it delivers: it explains off-screen coordinates are refused rather than clamped, safe-mode vs. lab approval behavior, and default browser-tab foregrounding/verification after the quiet-input check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence contributes distinct information, with the most important coordinate-system distinction front-loaded. There is no filler or repetition of structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and an output schema present, the description covers coordinate space, error handling, approval flow, session activation, and browser-tab behavior. Nothing critical for selecting and invoking the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It richly explains x/y physical-pixel semantics and the session_id/activate_session behaviors. However, the duration parameter is left entirely to inference, and its units are not specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb and resource: 'Move the real mouse cursor to absolute virtual-desktop coordinates in PHYSICAL screen pixels.' It clearly differentiates this from related tools by stating the coordinate space differs from page_click and is shared with pointer_info and capture_desktop_screenshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: it names page_click as the CSS-pixel alternative, advises preferring an explicit session_id for browser input, and restricts activate_session='none' to intentional desktop/native-UI input. This tells an agent when and how to use the tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_capture_startA
Start bounded CDP Network capture on a real-browser tab. Captures requests, responses, and optionally response bodies without foregrounding the tab. Call network_capture_stop to return the buffer and release the debugger lease.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| session_id | No | ||
| max_entries | No | ||
| body_timeout | No | ||
| include_bodies | No | ||
| max_body_bytes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does this well by noting the capture is 'bounded', that the tab is not foregrounded, and that a debugger lease is released on stop. It could be more explicit about failure modes or what happens if a capture is already active, but the key side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the main action and capture scope, then gives the essential lifecycle instruction in the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description clearly covers the core workflow and there is an output schema to describe return values, but with 6 optional parameters and zero schema descriptions, an agent still lacks guidance on how to tune the capture. The 'bounded' framing is vague about which limits apply, and no failure semantics are mentioned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the 6 undocumented parameters. It only hints at one parameter group, 'optionally response bodies' for include_bodies, and 'bounded' loosely suggests timeout/max_entries, but timeout, session_id, body_timeout, max_body_bytes, and max_entries are left unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Start bounded CDP Network capture on a real-browser tab.' It also clarifies what is captured ('requests, responses, and optionally response bodies') and explicitly contrasts with the sibling stop tool by naming network_capture_stop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is appropriate: capturing network traffic on a real-browser tab, and it explains the necessary follow-up call to network_capture_stop to retrieve the buffer and release the debugger lease. It does not explicitly discuss exclusions or compare against alternatives like console_capture_start or cdp_command, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
network_capture_stopA
Stop Network capture on a real-browser tab, optionally filter returned records by URL, resource type, HTTP status range, or response-body inclusion, and release its debugger lease. url_pattern uses the browser's JavaScript RegExp syntax and invalid patterns return a structured error.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| session_id | No | ||
| status_max | No | ||
| status_min | No | ||
| url_pattern | No | ||
| resource_type | No | ||
| include_response_bodies | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It clearly discloses that the debugger lease is released, that returned records can be filtered, that url_pattern follows JavaScript RegExp syntax, and that invalid patterns produce a structured error. This is meaningful behavioral context beyond the schema, though it does not cover every edge case such as behavior when no capture is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the main action comes first, followed by optional filtering behavior and a key syntax detail. Every sentence contributes useful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers filtering semantics and error behavior, but for a 7-parameter tool with no annotations it omits crucial context around session_id and timeout. An agent would not know that session_id likely connects to a prior network_capture_start call or what passing null means. The presence of an output schema reduces the need to explain return values, but the invocation context remains incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It successfully adds semantics for url_pattern, resource_type, status_min/status_max, and include_response_bodies by grouping them as filtering options. However, it does not explain session_id or timeout, which are less obvious and important for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Stop Network capture on a real-browser tab.' It also clarifies the related action of releasing the debugger lease, which distinguishes this tool from capture-start or console-capture tools. The mention of returned-record filtering makes the tool's scope unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The stop action implies it is used after a network capture has been started, but the description never explicitly says 'use after network_capture_start' or contrasts it with console_capture_stop. The use-case context is inferable rather than stated, so it does not fully meet the explicit guidance bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_new_tabA
Open one real-browser tab in the background by default with an operation_id-backed exactly-once create. Pass active=true only when foreground work is genuinely required. If the create ACK is lost, the same operation_id is reconciled within one total deadline; a completed result is registered only with its exact client_id, tab_id, and generation. Before create is dispatched, an unresolved probe returns status=unknown, may_have_created=false, retry_safe=true; after dispatch, an unresolved operation returns status=unknown, may_have_created=true, retry_safe=false and the operation_id. Never use a URL-based guess or an unmarked create retry.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| active | No | ||
| timeout | No | ||
| owner_id | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does this well. It explains exactly-once creation, operation_id reconciliation after lost ACKs, the single-total-deadline guarantee, and the precise status/retry semantics before and after dispatch. This is unusually transparent for a tool description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded with the core purpose, followed by the most important semantic guarantees. While long, each sentence adds information; there is no filler. The repeated status tokens are slightly redundant but serve to make the retry contract explicit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complex exactly-once and retry semantics, the description is nearly complete and covers the key edge cases an agent would worry about. It is missing explanations for several parameters, but an output schema exists, so return-value documentation is not required here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate by explaining parameters. It meaningfully elaborates only the active parameter (foreground vs background). The url, timeout, owner_id, and session_id parameters are not explained, and the description references an operation_id that does not appear in the input schema at all, which may confuse an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific operation: opening one real-browser tab, with a background-by-default behavior and exactly-once creation semantics. It does not explicitly distinguish itself from sibling tools like open_url, but the verb-plus-resource statement is otherwise precise and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical usage guidance: use active=true only when foreground work is genuinely required, and avoid URL-based guesses or unmarked create retries. It lacks an explicit comparison to alternative sibling tools, so it does not fully close the selection question, but the guidance given is concrete and operational.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_urlA
Navigate the current real-browser tab through CDP without raising its window. beforeunload defaults to dismiss, except lab mode auto-accepts configured shell/IDE hosts. Use accept to leave explicitly, manual to inspect, or intent_leave=false to force the conservative dismiss behavior even on a lab auto host.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| timeout | No | ||
| session_id | No | ||
| beforeunload | No | dismiss | |
| intent_leave | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains that navigation happens through CDP, the window is not raised, and beforeunload handling defaults to dismiss with a lab-mode exception. It also exposes the escape hatches for controlling that behavior, which is valuable beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose is stated first, followed by the important behavioral caveat and the available control options. Every clause adds information, and there is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required. The description covers the main action, the unusual no-window-raise behavior, and the nuanced beforeunload handling. It could be more complete by explicitly routing to alternatives like open_new_tab and clarifying session_id, but overall it provides enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does meaningfully explain beforeunload and intent_leave, which are the most semantically tricky parameters. However, url, timeout, and session_id receive no explanation, leaving a partial gap for a five-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: navigate the current real-browser tab via CDP, without raising its window. It uses a specific verb and resource, and the phrase 'current real-browser tab' distinguishes it from sibling tools like open_new_tab or switch_tab.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool operates on the existing current tab, which suggests it is for navigation rather than opening new tabs. However, it never explicitly contrasts it with open_new_tab or states when to choose this tool over alternatives. The 'use accept/manual/intent_leave' guidance concerns parameter behavior, not tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_clickA
Click a CSS/structured locator or viewport coordinates in a specific real browser tab using background CDP input. Coordinates are viewport-relative CSS pixels (the space getBoundingClientRect reports), NOT the physical screen pixels mouse_click takes and NOT the device pixels capture_page_screenshot returns -- on a scaled display divide a screenshot pixel by devicePixelRatio first. Ambiguous or unreachable targets dispatch nothing; the tab is not activated and the desktop cursor does not move. Selector offsets are measured from the element's top-left corner; an omitted axis uses the element centre. In selector mode the point is hit-tested before anything is dispatched: an element below the fold is scrolled into view, and a point owned by another element returns status 'obscured' (with occluded_by) or 'outside_viewport' having clicked nothing. Coordinate mode is not hit-tested -- coordinates name a pixel, not an element.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| button | No | left | |
| clicks | No | ||
| timeout | No | ||
| offset_x | No | ||
| offset_y | No | ||
| selector | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly. It discloses that the tab is not activated, the desktop cursor does not move, ambiguous or unreachable targets dispatch nothing, selector mode is hit-tested with auto-scroll, and coordinate mode is not hit-tested. It also reveals the 'obscured', 'occluded_by', and 'outside_viewport' result semantics. There is no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but logically organized: action first, then coordinate-space caveats, then behavioral guarantees. Every sentence carries a distinct operational fact and there is no filler. The long sentence structure could be easier to parse with bullets, but the information density justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and no annotations are present, the description covers the critical call semantics: target selection, coordinate systems, offsets, hit-testing, scrolling, and side effects. The only real gaps are generic parameter details like timeout units, button values, and the precise role of session_id in tab selection. For a complex 9-parameter tool with zero schema descriptions, this is close to complete but not entirely exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It does for the most confusing parameters: x/y are viewport-relative CSS pixels, offsets are measured from the element's top-left corner, an omitted offset axis uses the center, and selector accepts CSS or structured locators. Less critical parameters such as button, clicks, timeout, and session_id are left to their names and defaults, making the compensation strong but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: click a CSS/structured locator or viewport coordinates in a specific real browser tab. It also distinguishes itself from siblings by contrasting background CDP input with the physical screen pixels used by mouse_click and the device pixels used by capture_page_screenshot. The purpose is immediately recognizable and hard to confuse with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong usage context: this is for in-page, viewport-relative clicking without activating the tab or moving the desktop cursor. It explicitly warns that mouse_click uses physical screen pixels and capture_page_screenshot uses device pixels, which tells the agent which coordinate spaces not to feed it. However, it does not provide a formal when-to-use/when-not-to-use decision rule beyond these coordinate caveats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_dragA
Drag between viewport coordinates in a specific tab using one background CDP input sequence, without activating the tab or moving the desktop cursor. Both endpoints are viewport-relative CSS pixels, like page_click's coordinate mode and unlike mouse_drag's physical screen pixels, and neither is hit-tested.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | ||
| x2 | Yes | ||
| y1 | Yes | ||
| y2 | Yes | ||
| button | No | left | |
| timeout | No | ||
| duration | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It reveals that the drag uses one background CDP input sequence, does not activate the tab, does not move the desktop cursor, uses viewport-relative CSS pixels, and is not hit-tested. This is unusually rich behavioral detail beyond what the name or schema could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences with no filler. The main action is front-loaded, and every additional clause adds useful clarification about coordinate space, background execution, tab activation, cursor movement, and hit-testing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core behavior and coordinate semantics are well covered, and the output schema reduces the need to explain return values. However, the description says 'in a specific tab' but never connects that tab selection to the session_id parameter, and optional parameters like button, timeout, and duration lack the detail needed to invoke non-default behavior correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies x1, y1, x2, and y2 as viewport-relative CSS pixels, but it leaves button, timeout, duration, and session_id semantically unexplained. The description does not define units for timeout/duration, allowed values for button, or how session_id selects the 'specific tab' mentioned in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Drag between viewport coordinates in a specific tab.' It actively distinguishes itself from mouse_drag by coordinate system and from page_click's coordinate mode, so an agent can tell exactly what this tool does without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool works in a background tab, does not activate the tab, and does not move the desktop cursor. It also contrasts with mouse_drag's physical screen pixels, giving an explicit alternative for choosing the right tool. It does not list formal when-to-use/when-not-to-use conditions beyond that, but the guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_pressA
Press a key or comma-delimited modifier chord in a specific tab using background CDP input, without activating the tab.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| keys_csv | Yes | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that input is sent via background CDP and that the tab is not activated, which are meaningful behavioral facts beyond the schema. It could add more about timing, failures, or whether modifiers are released, but the core behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The entire description is one tightly worded sentence that front-loads the action and embeds the key constraints. There is no filler, and every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's core behavior and there is an output schema, so return values need not be explained. However, without annotations, it lacks explicit guidance on when to choose this over sibling tools like hotkey or page_click, and it leaves two parameters semantically under-specified. It is minimally adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three parameters. It clarifies keys_csv by mentioning 'comma-delimited modifier chord', but timeout and session_id are not explained at all. The parameter names are self-descriptive, but the description adds only partial value for one of three parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('press') and resource ('a specific tab'), and clearly distinguishes this tool from siblings by specifying 'background CDP input' and 'without activating the tab'. This makes its purpose unambiguous and differentiates it from hotkey or page_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when a key or modifier chord must be sent to a specific tab without bringing it to the foreground. It does not explicitly name alternative tools or list exclusions, but the 'without activating the tab' qualifier provides clear contextual selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
page_typeA
Insert text into the focused element or a CSS/structured-locator field in a specific tab using background CDP input; xterm containers automatically retarget their helper textarea. Optionally clear and submit a key. Missing, ambiguous, or unusable targets dispatch nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| clear | No | ||
| timeout | No | ||
| selector | No | ||
| session_id | No | ||
| submit_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the CDP-based input path, automatic xterm textarea retargeting, optional clear/submit behavior, and a no-op guarantee for missing, ambiguous, or unusable targets. This is substantial and goes well beyond the input schema, though it does not cover timeout behavior or possible error responses.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences with no filler. The core action and target are front-loaded, followed by a special-case note, optional behaviors, and the no-op outcome. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters and an output schema, and the description covers target selection, tab scoping, optional clear/submit, xterm handling, and failure behavior. It is slightly incomplete only in explaining timeout semantics and how selector objects are interpreted, but it is otherwise sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds meaning by mapping 'focused element' and 'CSS/structured-locator field' to the selector parameter, 'specific tab' to session_id, and 'clear and submit a key' to clear and submit_key. Only timeout is left under-described, but the core parameters are contextualized.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a concrete action ('Insert text'), a precise target ('focused element or a CSS/structured-locator field in a specific tab'), and a distinguishing mechanism ('background CDP input'). This separates it from siblings like type_text or page_press 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies contexts such as xterm containers and structured-locator targets, but it never explicitly states when to use this tool over type_text or page_press. It provides useful situational details but leaves the comparison and exclusion rules to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pointer_infoA
Report the current desktop mouse position and screen geometry in PHYSICAL pixels. screen_width/screen_height are the PRIMARY display only; screen_bounds is the virtual desktop across every display and is the range mouse_click will accept. These are not the CSS pixels the page_* tools take.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full behavioral burden, and it delivers: it discloses that screen_width/screen_height cover only the primary display while screen_bounds spans the virtual desktop, and that output is in physical not CSS pixels. The verb 'Report' clearly signals a non-mutating query. It lacks only minor details like whether the position is sampled live or cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The core purpose is front-loaded in the first sentence, the second sentence resolves the primary-vs-virtual display ambiguity, and the third sentence prevents a common unit confusion with page_* tools. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema documents return values, and there are no parameters, so the remaining burden is coordinate semantics—which the description fully addresses. It explains physical vs CSS pixels, primary vs virtual desktop, and the interaction with mouse_click's accepted range. Nothing an agent needs to correctly call and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description adds further value by explaining the semantics of the returned fields (screen_width/screen_height vs screen_bounds), which helps the agent interpret the output schema correctly even though no argument documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Report), resource (desktop mouse position and screen geometry), and the critical unit qualifier (PHYSICAL pixels). The distinction from page_* tools which use CSS pixels separates it from sibling tools that also deal with coordinates. An agent can immediately understand what this tool returns and how it differs from page-level coordinate tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly excludes page_* tools as alternatives by noting they use CSS pixels, and tells the agent that screen_bounds is the range mouse_click will accept—implying pointer_info should be consulted before clicking. This provides clear context for when to use it, though it stops short of explicitly stating 'call this before mouse_move/mouse_click' or naming the exact alternative conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_bookmarkA
Remove a bookmark by id. Set recursive=true only for a folder whose full subtree should be removed.
| Name | Required | Description | Default |
|---|---|---|---|
| recursive | No | ||
| session_id | No | ||
| bookmark_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that recursive removal affects the full subtree, which is meaningful behavioral context. It does not mention irreversibility, prerequisites, failure behavior, or session requirements, which would be valuable for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the primary action front-loaded and the one critical conditional detail following. There is no filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core operation and the trickiest parameter behavior, and an output schema exists so return-value explanation is not required. It falls short only by omitting session_id and not stating the behavior when removing a folder without recursive=true, which are relevant for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema for recursive ('only for a folder whose full subtree should be removed') and identifies bookmark_id as the target by id. However, schema description coverage is 0% and session_id is never mentioned, so parameter guidance is incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Remove a bookmark by id.' This clearly distinguishes it from sibling tools like get_bookmarks and create_bookmark, and the recursive note adds relevant scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a useful conditional: 'Set recursive=true only for a folder whose full subtree should be removed,' which guides parameter usage. However, it does not explicitly mention alternatives or state when not to use this tool, so tool-selection context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_site_permissionsA
Restore matching temporary site-permission leases now. Omit origin and permission to reset every lease for the selected browser; origin accepts only http/https.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | No | ||
| permission | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It states that the action restores temporary leases, affects the selected browser, and only accepts http/https origins. It could disclose side effects or irreversibility in more detail, but the core behavior is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the essential behavior, the conditional reset-all usage, and the origin scheme constraint. The description is compact, front-loaded, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main behavior and the crucial origin constraint, but it leaves session_id semantics and accepted permission values unspecified. The output schema helps with return expectations, yet the missing parameter context prevents full standalone completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains origin and permission usage, including the reset-all behavior when both are omitted, but it does not describe session_id at all or enumerate valid permission values. This is a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Restore') and resource ('temporary site-permission leases'), making the tool's function immediately clear. It also distinguishes this tool from siblings like set_site_permission by framing it as the reset counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance: omit origin and permission to reset every lease for the selected browser, and restrict origin to http/https. It does not explicitly name alternatives or exclusions, but the context makes the all-vs-matching distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_leave_dialogB
Resolve an intended beforeunload leave in one bounded workflow: protocol accept twice, return immediately when no dialog exists, then use a lab-only foreground Enter fallback after the normal physical-input approval gate only when protocol handling actually fails.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses a bounded multi-step workflow, the condition for early return, and a lab-only fallback gated by physical-input approval. This goes well beyond the tool name, though it does not mention side effects of accepting the leave or what happens to the page afterward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the purpose, then packs the entire workflow into one structured sentence. There is no filler, though the dense jargon and run-on structure make it harder to parse than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The workflow branches are covered, and the output schema likely handles return values. However, the description omits any guidance on session_id and does not position this tool relative to handle_dialog, which is a meaningful gap for an agent deciding how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the single optional session_id parameter is never mentioned in the description. The description adds no meaning about what session_id represents or how it affects the workflow; with low coverage the description should compensate, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Resolve an intended beforeunload leave.' It clearly targets a particular dialog workflow and distinguishes itself from the more generic handle_dialog sibling by naming 'beforeunload,' though it does not explicitly name the sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when an intended beforeunload leave needs resolving. It provides detailed internal conditions such as returning immediately when no dialog exists and using the fallback only when protocol handling fails, but it does not explain when to prefer this over handle_dialog or state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_pdfA
Print a real-browser tab to a validated PDF file through bounded CDP. The file is written atomically only after valid non-empty PDF bytes are returned; a CDP timeout invalidates and detaches the debugger lease.
| Name | Required | Description | Default |
|---|---|---|---|
| scale | No | ||
| timeout | No | ||
| landscape | No | ||
| save_path | Yes | ||
| session_id | No | ||
| page_ranges | No | ||
| print_background | No | ||
| prefer_css_page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does this well by revealing atomic file writes, validation of non-empty PDF bytes, and the CDP timeout behavior that invalidates and detaches the debugger lease.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. Purpose is front-loaded, and every clause adds meaningful behavioral or safety information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While an output schema exists and the behavioral detail is strong, the tool has 8 parameters, no annotations, and no schema descriptions. Missing context includes prerequisites like an active tab or session, timeout units, and clearer guidance for optional parameters, so the description is not fully complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no parameter-level explanation for save_path, session_id, timeout units, page_ranges, or the other options. Parameter names and defaults provide some clues, but the description does not compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Print') with a clear target ('real-browser tab') and a specific output ('validated PDF file'). It is clearly distinct from sibling screenshot and download tools, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied: call this when you need to turn the current real-browser tab into a PDF. However, it does not explicitly mention when not to use it or name alternative tools, leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_pageB
Read the current page as simplified HTML/text, preserving login state from the real browser. Defaults: cutlist=true, maxchars=35000, timeout=15 seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| cutlist | No | ||
| timeout | No | ||
| extra_js | No | ||
| maxchars | No | ||
| text_only | No | ||
| session_id | No | ||
| instruction | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. It usefully indicates a read-only operation, that the real browser session/login state is preserved, and that output is simplified HTML/text with defaults and timeout. However, it does not disclose potential side effects, how extra_js is executed, or what 'simplified' means in terms of content fidelity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the primary purpose in the first sentence and defaults in the second. It avoids filler and repetitive content. It could earn a 5 if it used the remaining space to clarify parameter semantics, but as written it is efficient despite being under-specified elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, no annotations, and 0% schema description coverage, the description is not complete enough. The output schema covers return shape, but the many undocumented parameters and lack of usage guidance leave significant gaps. An agent cannot confidently decide when to use this tool or how to configure it beyond defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only restates defaults for three of seven parameters without explaining their meaning. Parameters like extra_js, text_only, session_id, and instruction remain completely unexplained. The description adds a few hints like 'timeout=15 seconds' but is far from sufficient for correct parameter use.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Read the current page') and a specific result ('simplified HTML/text'), which distinguishes it from visual tools like capture_page_screenshot and from execute_js. The mention of preserving login state adds meaningful context. This is a clear, non-tautological purpose statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to prefer scan_page over alternatives such as execute_js, cdp_command, or capture_page_screenshot. It implies use for reading page content, but does not state exclusions or name sibling tools. An agent must infer the appropriate context from the sibling names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_pageA
Scroll the page and report the new position. scan_page omits anything past ±5000px from the current scroll offset, so on a long page: scan, then scroll, then scan again. Pass to='bottom'/'top', a pixel offset, or a CSS selector to bring into view. Defaults: to='bottom', timeout=15 seconds.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | bottom | |
| timeout | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that scrolling reports the new position, describes the scan_page interplay, and states defaults for 'to' and timeout. It does not explain timeout semantics or session_id behavior, but the core side effects and return information are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences deliver the core action, the relationship to scan_page, and all relevant parameter guidance. There is no filler or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple scroll operation with no required parameters and an output schema, the description covers the main usage workflow and the primary parameter. It could add a bit more context around timeout and session_id, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It does this well for 'to' by enumerating bottom/top, pixel offsets, and CSS selectors, and it mentions the timeout default. However, it does not explain what timeout applies to or what session_id means, leaving a gap for one parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Scroll the page and report the new position.' It clearly establishes what the tool does and distinguishes it from related navigation tools like open_url or execute_js.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly connects to scan_page's ±5000px limitation and gives a concrete workflow: scan, then scroll, then scan again. It also explains the accepted forms for the 'to' parameter, making when and how to use the tool clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_automation_profileA
Set the safe or lab automation profile for this MCP process. This does not persist or reload the extension; BROWSERTAP_MODE controls the next process.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond the simple action by stating that the change does not persist, does not reload the extension, and that BROWSERTAP_MODE governs future processes. These are exactly the side-effect and persistence details an agent needs before invoking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the core action and scope; the second delivers the critical persistence warning. Every clause earns its place and the most important behavioral constraint is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter setter with an output schema, the description is complete: it defines what the tool does, what profiles are valid, the process scope, and the non-persistence behavior. No critical selection or invocation detail is missing given the available structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the only parameter is an unconstrained string "mode" with no enum. The description compensates by defining the meaningful values as "safe" or "lab" and tying them to the automation profile concept. It adds real semantics, though it leaves the exact accepted string format slightly implicit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ("Set"), a clear resource ("automation profile"), and a process scope ("for this MCP process"). It also names the two modes, "safe" and "lab", which distinguishes this setter from its sibling getter get_automation_profile without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the usage context clear: use this tool to set the automation profile for the current MCP process. It also provides an important when-not signal: "This does not persist or reload the extension; BROWSERTAP_MODE controls the next process." It does not explicitly name a sibling alternative, but the complementary get_automation_profile is implied by the setter/getter pairing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_cookiesA
Write cookies into the real browser profile. Takes one cookie object or a list (JSON text is accepted): name is required, plus optional value/url/domain/path/expires (Unix seconds)/httpOnly/secure/sameSite. Uses CDP Network.setCookie so HttpOnly and cross-path cookies work; falls back to document.cookie only if CDP is unavailable, and then says which cookies could not carry HttpOnly. Cookies with neither url nor domain are scoped to the current page.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | ||
| cookies | Yes | ||
| timeout | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral disclosure burden. It explicitly discloses the CDP Network.setCookie mechanism, the document.cookie fallback, the HttpOnly limitation in fallback mode, and how cookies are scoped when neither url nor domain is provided. This gives the agent strong expectations about side effects and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well organized: purpose first, then input format and required fields, then mechanism/fallback behavior. Every sentence adds useful information, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential behavior, input format, fallback path, and scoping rules, and an output schema exists so return values need not be described. The main gap is the lack of explanation for tab_id, timeout, and session_id, which leaves some invocation details underspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains the cookies parameter: accepts a single object or array, JSON text accepted, required name, and all optional cookie fields with expires expressed in Unix seconds. However, tab_id, timeout, and session_id are not explained beyond their names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Write cookies into the real browser profile.' It also details the accepted input shape and required fields, making the tool's purpose unambiguous and distinct from siblings like get_cookies or delete_cookies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the general use case clear but never explicitly says when to use this tool over alternatives such as storage_set or set_site_permission. There is no when-to-use or when-not-to-use guidance, so an agent must infer the appropriate context from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_extension_enabledA
Enable or disable an installed extension by id. Chrome exposes no API to INSTALL an extension, so this only toggles ones already present; use list_extensions for ids. The BTAP bridge refuses to disable itself -- nothing would be left to re-enable it -- so ask a human to press Reload on chrome://extensions to pick up a new build.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | ||
| session_id | No | ||
| extension_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It does well by revealing that Chrome has no install API, that the BTAP bridge refuses to disable itself, and that a human reload is needed for a new build. These are non-obvious behaviors the agent cannot infer from the schema alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no fluff, and the primary behavior is front-loaded. Each sentence adds necessary context: what the tool does, how to find IDs, and an important self-disable caveat with a workaround.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple toggle tool, the description covers the operational essentials: target identification via list_extensions, the no-install constraint, the self-disable limitation, and the human-reload step for development. An output schema exists for return values, so the description need not restate them; nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for the bare schema. It clarifies extension_id ('by id') and implicitly covers 'enabled' via 'Enable or disable', but it never mentions session_id at all. Since one of three parameters is completely undocumented, the parameter semantics are only partially addressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb and resource: 'Enable or disable an installed extension by id.' It immediately distinguishes this from installation and lists the sibling tool for getting IDs, so the agent knows exactly what operation this performs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'use list_extensions for ids', giving the agent actionable guidance for the required parameter. It also states that installation is not possible via this tool. However, it does not fully contrast with related tools like uninstall_extension or extension_path, so the usage guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_site_permissionA
Temporarily set an origin-scoped browser site permission for 60-600 seconds. Only http/https origins and notifications, geolocation/location, camera, microphone, or clipboard are supported. safe asks on every allow; lab skips prompts by default and restores session approval only when BROWSERTAP_LAB_NO_ELICIT is explicitly disabled. All leases restore their prior setting.
| Name | Required | Description | Default |
|---|---|---|---|
| origin | No | ||
| setting | Yes | ||
| permission | Yes | ||
| session_id | No | ||
| duration_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden and does it well. It discloses temporary lease semantics, the fact that prior settings are restored, safe-mode prompting behavior, lab-mode prompt skipping, and the relevant environment variable condition. This is substantial transparency for a 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, followed by constraints and behavioral nuance. The lab-mode sentence is dense and uses environment-variable jargon, but every sentence contributes meaningful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there are no annotations, 5 parameters, and no schema descriptions, the description covers the main behavior and constraints well. Still, it omits required parameter semantics and does not connect to sibling tools, so an agent would need external knowledge to invoke it with full confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It adds useful constraints for origin, permission, and duration_seconds, and hints at the 'allow' setting value, but it does not enumerate valid settings for the required 'setting' parameter or explain the purpose of 'session_id'. Partial compensation, not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific operation and resource: temporarily setting an origin-scoped browser site permission. It also narrows scope clearly with a duration range, supported origin schemes, and a list of supported permission types, so an agent can tell this apart from related tools like reset_site_permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool—temporary origin-scoped permission leasing—and explicitly lists unsupported origins and permission categories. However, it never names alternatives like reset_site_permissions or states a clear rule for choosing between them, so the usage guidance remains mostly implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_getA
Read localStorage or sessionStorage. Give a key for one value, or omit it to dump every key (values are truncated past ~20k chars and truncated is reported). area='local' (default) or 'session'.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | ||
| area | No | local | |
| offset | No | ||
| timeout | No | ||
| max_bytes | No | ||
| max_items | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden. It reveals the dump-all behavior, the ~20k truncation with a reported flag, and the area default. It doesn't cover error behavior or session_id semantics, but the read-only nature and the most surprising output behavior are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences front-load the core behavior and pack the important qualifiers (truncation, default area) without wasted words. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition is adequate for basic reads and the output schema covers return shape, but it omits behavior for offset, max_items, timeout, and session_id. For a tool with seven optional parameters, an agent could easily miss dump limits or timeout semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It does explain key (single vs dump), area choices/default, and implicitly max_bytes via the truncation note. However, offset, timeout, max_items, and session_id are left undocumented, which is a clear gap for a 7-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource ('Read localStorage or sessionStorage'), then distinguishes two modes (single key vs dump-all). This makes the tool's purpose unmistakable and separates it from storage_set without needing to inspect the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use it to read browser storage, and choose 'local' or 'session' via area. It doesn't explicitly name storage_set as the alternative for writes, so it stops short of full when-not guidance, but the read-vs-write boundary is obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_setA
Write one key into localStorage or sessionStorage and read it back to confirm. area='local' (default) or 'session'. Values are strings; non-string values are JSON-encoded first.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| area | No | local | |
| value | Yes | ||
| timeout | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that the tool writes a key, verifies by reading it back, supports two storage areas, treats values as strings, and JSON-encodes non-string values. This is meaningful behavioral context beyond the bare input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences that front-load the action and then provide essential encoding and area details. Every clause earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core behavior is well covered, but with five parameters and 0% schema description coverage, the omission of timeout and session_id leaves the description only minimally viable for full invocation confidence. An output schema exists but does not compensate for the missing parameter semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains key, value, and area semantics, including default area and JSON encoding behavior. However, schema description coverage is 0%, and the description does not clarify timeout or session_id, leaving two of five parameters under-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Write'), a specific resource ('one key into localStorage or sessionStorage'), and a distinctive behavior ('read it back to confirm'). This clearly differentiates it from the sibling storage_get and other storage-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the use case clear: setting a storage key in either localStorage or sessionStorage. It does not explicitly name alternatives or exclusion conditions, but the 'write...and read back to confirm' phrasing gives enough contextual guidance for an agent to select this tool over storage_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
switch_tabA
Set the target tab for later calls by session id, URL substring, or browser name ('chrome'/'edge'/'opera') without focusing the browser. A URL substring must match exactly one tab; pass its full session_id when several tabs match. Use activate=true or activate_tab when foreground work is required.
| Name | Required | Description | Default |
|---|---|---|---|
| browser | No | ||
| activate | No | ||
| session_id | No | ||
| url_pattern | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden, and it does so well. It explicitly states that switching the tab does not focus the browser, that the setting applies to later calls, and how ambiguous URL matches are resolved. These are non-obvious behavioral traits an agent needs to avoid mistakes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the primary purpose, and contains no filler. It packs the key behavioral constraint and the alternative tool mention into the second sentence without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a stateful tab-selection tool with no annotations, no required parameters, and an output schema present, the description is complete. It covers selection methods, ambiguity handling, the no-focus side effect, and when to switch to activate_tab. Nothing critical is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does. It explains all four parameters: browser name, session_id, url_pattern, and activate. It even adds matching semantics: a URL substring must match exactly one tab, otherwise use the full session_id. This goes well beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Set the target tab for later calls' using session id, URL substring, or browser name. It also distinguishes itself from activate_tab by explicitly noting that this tool does not focus the browser. This gives an agent a precise mental model of what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides actionable when-to-use guidance, including when to pass a session_id ('pass its full session_id when several tabs match') and when to use an alternative ('Use activate=true or activate_tab when foreground work is required'). It also says the URL substring must match exactly one tab, which is a clear constraint on usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textA
Type text via the real keyboard, optionally after clicking a field at click_x/click_y in absolute virtual-desktop PHYSICAL screen pixels (see mouse_click for how that differs from the CSS pixels the page_* tools take); a click point on no display is refused with coordinates_off_screen. Pass session_id — the same one you pass every other tool (preferred) — and that tab is raised after the quiet check so the keystrokes go to it. Without one the current global target is raised, which another task may have changed. Approval may foreground the selected browser tab. activate_session='none' types into whatever already has focus.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| click_x | No | ||
| click_y | No | ||
| interval | No | ||
| session_id | No | ||
| activate_session | No | current |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden and does so richly: it discloses tab raising, quiet-check behavior, approval foregrounding, global-target risk without session_id, focus behavior for activate_session='none', and the coordinates_off_screen refusal. This gives an agent an unusually complete picture of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and information-rich, front-loading the core action while weaving in essential caveats. It is somewhat long and clause-heavy, but every sentence justifies its place; a minor structural split would improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the absent annotations, and the presence of an output schema, the description covers nearly everything needed to invoke it safely: targeting, focus, failure mode, and coordinate semantics. The only notable omission is interval, but the schema default mitigates that risk.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains click_x/click_y in physical pixels, session_id semantics, and activate_session behavior, but never mentions the interval parameter, which is a meaningful gap for a typing tool. Most parameters are clarified, but not all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific action 'Type text via the real keyboard' and the optional click behavior, clearly distinguishing itself from synthetic input tools. The physical-pixel vs CSS-pixel distinction reinforces that this is a real-input tool rather than a page-level simulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear operational guidance: pass session_id to direct keystrokes, explains the risk of omitting it, and documents the activate_session='none' variant. It never explicitly names an alternative tool or when-not-to-use conditions, but the real-keyboard framing and coordinate-system note imply the boundary with page_* tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uninstall_extensionA
Uninstall another installed extension by id. show_confirm_dialog defaults to true; set it false only for an explicitly selected disposable/test extension. The BTAP bridge cannot uninstall itself through its active connection.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | ||
| extension_id | Yes | ||
| show_confirm_dialog | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden. It discloses the confirmation-dialog default behavior and the self-uninstall limitation, which are meaningful. But it does not mention that uninstalling is likely permanent, any permission requirements, or potential side effects on other extensions or the bridge connection.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary action is front-loaded, followed by a parameter default and a key limitation. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers the core action, a parameter caveat, and a self-limitation. Still, session_id remains unexplained, and there is no broader operational context such as irreversibility or when to prefer uninstall over disable, leaving some gaps for a moderately destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must add meaning. It does add value by linking 'by id' to extension_id and explaining show_confirm_dialog's default and when to override it. However, session_id is not addressed at all, leaving part of the schema semantically undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Uninstall another installed extension by id.' It clearly identifies what the tool does and narrows scope with 'another,' which differentiates it from self-operations. It doesn't explicitly name sibling tools, but the later self-uninstall caveat helps distinguish it from extension-management siblings like set_extension_enabled.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful usage guidance for the show_confirm_dialog parameter: it defaults to true and should be set to false only for an explicitly selected disposable/test extension. It also warns that the bridge cannot uninstall itself. However, it does not explain when to choose this tool over alternatives like disabling an extension, leaving much of the tool-selection context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_filesA
Set files on a file input, which JS cannot do (input.files is read-only). Give a CSS selector for the and absolute local paths. Runs as a single CDP batch so the DOM node ids stay valid across the sequence.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | ||
| timeout | No | ||
| selector | Yes | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral transparency burden. It adds useful detail by disclosing the CDP batch mechanism and why it matters (DOM node ids stay valid), and it clarifies that the tool only sets files rather than submitting. However, it does not discuss failure behavior, path accessibility, or event side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose, then selector/path requirements, then the batching detail. Every sentence earns its place and there is no wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return handling is covered elsewhere, and the description supplies the purpose, required input semantics, and a key reliability guarantee. The only missing context is for the optional timeout and session_id parameters and edge-case behavior such as path validity or event triggering.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description adds real meaning: selector is a CSS selector for an <input type=file> and paths must be absolute local paths. It covers both required parameters well, though timeout and session_id are not explained beyond their schema defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete action and resource: 'Set files on a file input', and it explains why the tool exists ('input.files is read-only'). This makes the tool's niche immediately clear and distinguishes it from sibling tools like execute_js or download_file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear conditions: use this when you need to populate a file input with absolute local paths, and it frames the tool as the workaround for JS's file-input limitation. It does not explicitly name sibling alternatives or state when not to use it, but the context is strong enough for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forA
Wait until a condition holds on the page, then return. Use this instead of polling scan_page (each scan re-serializes the whole DOM). Exactly one of selector / text / url_pattern / js must be given: selector waits for a CSS match, text for a substring in body text, url_pattern for a regex on the URL, js for a JS expression to become truthy. Polls inside the page, so it costs one bridge roundtrip regardless of how long the wait takes.
| Name | Required | Description | Default |
|---|---|---|---|
| js | No | ||
| gone | No | ||
| text | No | ||
| timeout | No | ||
| selector | No | ||
| session_id | No | ||
| url_pattern | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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: polling happens inside the page and costs only one bridge roundtrip. However, it omits important behavior such as what happens on timeout, how the 'gone' flag changes waiting, and whether the wait fails or returns early.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, starting with the core action, then the key alternative, then parameter semantics. Every sentence adds value and there is no repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main use case and mode selection well, and an output schema exists, so return values are not required in text. However, with seven parameters and no annotations, omitting 'gone' and timeout behavior leaves the definition incomplete for more complex wait scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does well for four parameters: selector, text, url_pattern, and js. But it never explains 'gone', 'timeout' units or semantics, or 'session_id', leaving significant gaps for an agent trying to call the tool correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Wait until a condition holds on the page, then return.' It names the specific condition types (selector, text, url_pattern, js) and explicitly contrasts itself with scan_page, so an agent can understand what the tool does and how it differs from at least one close sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit guidance to use this instead of polling scan_page, with a concrete rationale about DOM re-serialization. It also explains how to choose among the four condition modes. However, it does not mention the sibling wait_for_url or clarify when to prefer that over wait_for with url_pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_urlA
Wait for navigation to settle: blocks until the tab's URL matches url_pattern (regex, or plain substring) and — unless wait_ready=false — document.readyState is 'complete', then returns the final url, title and readyState. Use this after a click or open_url that navigates; wait_for(url_pattern=...) only checks the URL and can return while the new document is still blank. Polls in-page, so a long wait is still cheap.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No | ||
| session_id | No | ||
| wait_ready | No | ||
| url_pattern | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does well: it discloses blocking semantics, URL matching mode (regex or plain substring), readyState gating via wait_ready, return values, and in-page polling. The only notable omission is how timeout behaves when the pattern is never matched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core behavior, and every sentence earns its place: the core wait condition, the return values, the usage context, the contrast with wait_for, and the polling cost note. There is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity and presence of an output schema, the description adequately covers when to use the tool, what it waits for, and what it returns. The main gap is the absence of timeout failure behavior, which matters for an agent deciding how long to wait or how to handle errors.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It usefully explains url_pattern (regex or plain substring) and wait_ready behavior, but it does not clarify timeout units or timeout failure behavior, nor does it mention session_id. Since two of four parameters remain semantically underexplained, this is only partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Wait for navigation to settle') and resource (the tab's URL and readyState). It also distinguishes itself from the sibling wait_for tool by describing exactly what wait_for does not do, so an agent can tell them apart immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool ('after a click or open_url that navigates') and names the alternative wait_for, explaining why wait_for is insufficient. This gives an agent a concrete decision rule with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
55 tool updates
v0.1.0- First observed
activate_tab - First observed
call_extension - First observed
capture_desktop_screenshot - First observed
capture_page_screenshot - First observed
cdp_batch - First observed
cdp_command - First observed
close_tabs - First observed
console_capture_start - First observed
console_capture_stop - First observed
create_bookmark - First observed
debugger_targets - First observed
delete_cookies - First observed
download_file - First observed
execute_js - First observed
extension_path - First observed
get_automation_profile - First observed
get_bookmarks - First observed
get_console_messages - First observed
get_cookies - First observed
get_setup_status - First observed
handle_dialog - First observed
hotkey - First observed
list_all_tabs - First observed
list_extensions - First observed
list_tabs - First observed
mouse_click - First observed
mouse_drag - First observed
mouse_move - First observed
network_capture_start - First observed
network_capture_stop - First observed
open_new_tab - First observed
open_url - First observed
page_click - First observed
page_drag - First observed
page_press - First observed
page_type - First observed
pointer_info - First observed
remove_bookmark - First observed
reset_site_permissions - First observed
resolve_leave_dialog - First observed
save_pdf - First observed
scan_page - First observed
scroll_page - First observed
set_automation_profile - First observed
set_cookies - First observed
set_extension_enabled - First observed
set_site_permission - First observed
storage_get - First observed
storage_set - First observed
switch_tab - First observed
type_text - First observed
uninstall_extension - First observed
upload_files - First observed
wait_for - First observed
wait_for_url
TDQS
The set contains multiple near-overlapping tools: list_tabs/list_all_tabs/debugger_targets, wait_for/wait_for_url, cdp_command/cdp_batch, and page_click vs mouse_click or page_type vs type_text. The detailed descriptions clarify the differences, but the tool names themselves do not, so misselection is likely.
Most tools follow a snake_case verb_noun pattern, but there are notable deviations: storage_get/storage_set invert the order, page_* and mouse_* use noun_verb, and extension_path/debugger_targets/hotkey/pointer_info are bare nouns. The names remain readable, but the convention is visibly mixed.
55 tools is in the extreme range and far beyond the typical well-scoped MCP surface. Several primitives overlap or could be consolidated (cdp_batch, list_all_tabs, wait_for_url, console_capture_stop), so the count feels inflated rather than necessary.
The domain is covered very thoroughly: tab lifecycle, navigation, page interaction, cookies/storage, permissions, bookmarks, extensions, network/console capture, PDF, screenshots, and desktop input are all present. Minor gaps such as explicit back/forward/reload and bookmark update/rename exist but can be worked around with cdp_command or execute_js.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
MCP server to assist with JxBrowser development.
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server to control Chrome browsers locally or remotely via the Claude extension, enabling navigation, form filling, screenshots, and JavaScript execution from any MCP client.MIT
- FlicenseNot gradedqualityCmaintenanceDrive your real, signed-in Chrome browser from any MCP client, enabling browser automation such as navigation, clicking, typing, and screenshots through standard MCP tools.1-
- AlicenseAqualityAmaintenanceMCP server that lets AI agents drive your real Chromium browser with your existing signed-in sessions, providing visible, local, and inspectable automation for tasks like navigation, clicking, typing, and form filling.251Apache 2.0

browser-relayofficial
AlicenseNot gradedqualityCmaintenanceMCP server that drives a user's real Chrome browser via a WebSocket-connected MV3 extension, enabling tab management, navigation, page interaction, screenshots, and script evaluation through natural language.9MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/LinVireo/browsertap-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server