chrome-control-mcp
Enables controlling the Brave browser through the Chrome DevTools Protocol, including navigation, tab management, input actions, screenshots, network and console inspection, and other browser automation capabilities.
Click on "Deploy 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., "@chrome-control-mcpOpen example.com in a background tab and tell me the page title."
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.
chrome-control-mcp
MCP server + Chrome extension. Claude (or any MCP client) controls your real Chrome through the DevTools Protocol, in the background. Tool names follow chrome-devtools-mcp, so prompts written for it work here too.
Quick start
Needs Node 18 or newer and Chrome (Edge, Brave and Chromium also work).
npm install -g chrome-control-mcp
chrome-control-mcp setupNo global install? Use npx -y chrome-control-mcp setup instead.
setup opens chrome://extensions and copies the extension folder path to your clipboard. Then:
Turn on Developer mode (top right).
Click Load unpacked and paste the folder path.
Restart Claude Desktop or Claude Code.
The extension gets its token by itself and turns ON. You paste nothing. Loading the extension is the only manual step, because Chrome does not allow silent extension installs.
Check it works: ask Claude "open github.com and take a snapshot".
Related MCP server: Browser Tools for Claude Code
Commands
Run chrome-control-mcp help any time to see this list.
Command | What it does |
| One-time install: native host, extension copy, Claude config. Opens |
| Runs one shared server for many clients at |
| Prints the shared server URL with its token. |
| Prints the secret token. |
| Prints the folder to load in |
| Starts Chrome with the debugger banner hidden ( |
| Removes the native host registration, host files and the extension copy. |
| Prints the version. |
| Shows the command list. |
(no command) | Runs as an MCP server over stdio. This is what Claude launches. In a plain terminal it shows the help instead. |
setup options:
Option | Meaning |
| Do not touch Claude Desktop or Claude Code config. |
| Skip just one of them. |
| Do not open |
| Do not add |
| Replace an existing |
| Allow another extension id, for example a Chrome Web Store build. |
Setup in detail
setup does five things and prints each step:
Creates the secret token in
~/.chrome-control-mcp/token(never printed).Installs a small native host in
~/.chrome-control-mcp/native-hostand registers it for Chrome, Edge, Brave and Chromium. The extension uses it to read its token and port, so you never paste a token.Copies the extension to
~/.chrome-control-mcp/extension(a stable folder that survives package updates).Adds
chrome-controlto Claude Desktop (a backup.bak-chrome-controlis saved next to the config) and to Claude Code, when they are installed.Hides Chrome's "started debugging this browser" banner by adding
--silent-debugger-extension-apito your Chrome, Edge and Brave shortcuts (desktop, Start menu and taskbar on Windows; user launchers on Linux; on macOS usechrome-control-mcp chrome). Fully quit Chrome and reopen it from a patched shortcut for this to take effect. Skip it with--no-flag.
It is safe to run again. Existing entries are left alone unless you pass --force.
Using it
After setup, Claude launches the server itself when needed, so you run nothing by hand. Control is off by default: click the extension icon and use the toggle (it turns on automatically the first time). Turning it OFF closes the connection and detaches the debugger from all tabs.
Example prompts:
"Open example.com in a background tab and tell me the page title."
"Fill the login form on this tab and click Sign in."
"Take a screenshot of the pricing page."
"List failed network requests on the current tab."
If you update the package, run chrome-control-mcp setup again, then ask Claude to run reload_bridge_extension
(or click reload on chrome://extensions).
Run once, use from many clients
By default each client starts its own server process (they share the one extension connection). To run a single server that every client connects to:
chrome-control-mcp serve (or npx -y chrome-control-mcp serve)Windows users can also double-click start-server.cmd if they cloned the repo.
The server listens on http://127.0.0.1:8766/mcp (change with CHROME_BRIDGE_HTTP_PORT). Print the full URL, which includes
the token:
chrome-control-mcp urlConnect clients to that URL:
claude mcp add --transport http chrome-control "<url from the command above>"Other clients that support Streamable HTTP MCP can use the same URL. Treat the URL like a password. The HTTP server only accepts loopback connections, checks the Host header and rejects browser Origin headers.
Install by hand
Use this if you do not want setup to edit anything.
Add the MCP server.
Claude Code:
claude mcp add chrome-control -- npx -y chrome-control-mcpClaude Desktop config:
{ "mcpServers": { "chrome-control": { "command": "npx", "args": ["-y", "chrome-control-mcp"] } } }On Windows Claude Desktop use
"command": "cmd", "args": ["/c", "npx", "-y", "chrome-control-mcp"].Get the extension folder and the token:
chrome-control-mcp extension chrome-control-mcp tokenIn Chrome open
chrome://extensions, turn on Developer mode, click Load unpacked, pick the extension folder.Click the extension icon, paste the token, turn on Enable control. (Not needed when the native host from
setupis installed.)
Tools (32)
Group | Tools |
Input | click, click_at, drag, fill, fill_form, handle_dialog, hover, press_key, type_text, upload_file |
Navigation | list_pages, new_page, select_page, close_page, navigate_page, wait_for |
Emulation | emulate, resize_page |
Performance | performance_start_trace, performance_stop_trace, performance_analyze_insight |
Network | list_network_requests, get_network_request |
Debugging | take_snapshot, take_screenshot, evaluate_script, list_console_messages, get_console_message |
Memory | take_heapsnapshot |
Extra | cdp (raw DevTools command), status, reload_bridge_extension |
Not included: lighthouse_audit, screencast, heap snapshot analysis tools, extension/PWA/WebMCP categories. Performance analysis is a lightweight reading of the raw trace, not the full DevTools trace engine.
Tab reuse
new_page checks open tabs first. Same URL: the tab is reused. Same site: that tab is reused and navigated.
A new background tab opens only when no tab for that site exists. Pass forceNew=true to skip this.
close_page only closes tabs opened by the MCP unless force=true.
Hide the yellow debugging banner
Chrome shows "started debugging this browser" with a Cancel button while an extension is attached. An extension cannot hide it;
only a Chrome startup flag can. setup adds the flag for you (see above). To do it by hand, add this to the Chrome shortcut's
Target field, or run chrome-control-mcp chrome:
chrome.exe --silent-debugger-extension-apiFully quit Chrome first and turn off "Continue running background apps" in chrome://settings/system so it really quits.
Check chrome://version: the flag must appear in the Command Line row. Chrome opened from a shortcut without the flag, or by
clicking a link in another app, still shows the banner.
Safety
Off by default. Toggle OFF closes the connection and detaches the debugger from all tabs.
The WebSocket listens on 127.0.0.1 only. It needs a secret token and a
chrome-extension://origin.The shared HTTP server listens on loopback only, needs the token, checks the Host header and blocks browser Origin headers.
"Allowed sites" in the popup limits which sites can be controlled. Empty means all http/https sites.
Target.*,Browser.*,Storage.*andNetwork.getAllCookiesare blocked through the bridge.The extension can act as you on any allowed site while it is ON. Turn it OFF when you do not need it.
Environment variables
Variable | Default | Meaning |
| 8765 | WebSocket port between the extension and the server. |
| saved in | Override the token. |
| 8766 | Port for |
Troubleshooting
Problem | Fix |
Claude says the MCP is not connected | Restart Claude. Run |
| Check the extension is loaded and its toggle is ON. Run the |
Extension does not turn on by itself | Run |
Port 8765 or 8766 is in use | Set |
| Open a new terminal. Check that the npm global bin folder is on your PATH ( |
Yellow "debugging" banner is still there | Quit Chrome fully, reopen from a patched shortcut or run |
Setup did not edit Claude config | Use Install by hand. |
Update and uninstall
Update:
npm install -g chrome-control-mcp@latest
chrome-control-mcp setupUninstall:
chrome-control-mcp uninstall
npm uninstall -g chrome-control-mcpYour token file is kept. Remove the extension in chrome://extensions yourself, and remove the chrome-control entry from
Claude Desktop or Claude Code (claude mcp remove chrome-control).
License
MIT
Available Tools
32 toolscdpC
Send any raw Chrome DevTools Protocol command to a page.
| Name | Required | Description | Default |
|---|---|---|---|
| method | Yes | e.g. DOM.getDocument | |
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| params | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only says the command is raw. It does not disclose side effects, permissions, whether arbitrary commands can mutate or destroy state, error behavior, or return format.
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 wasted words. It is appropriately sized for a simple low-level dispatch tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an arbitrary CDP escape hatch with no annotations and no output schema, the description is insufficient. It omits expected return values, error handling, page targeting behavior, and any warning about potentially destructive protocol commands.
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 67%: method has an example and pageId has a default note, but params is undocumented. The description adds no meaning beyond the schema and does not compensate for the undocumented params object.
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: send a raw Chrome DevTools Protocol command to a page. This clearly distinguishes it from higher-level siblings like evaluate_script, click, or navigate_page, though it does not explicitly name an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this low-level tool versus the many higher-level browser automation tools. It implies an escape hatch through 'raw', but gives no when-to-use, when-not-to-use, or prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickC
Clicks on the provided element
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| dblClick | No | ||
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
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 restates the action without mentioning side effects, waiting behavior, visibility requirements, or what happens after the click, offering no transparency beyond the bare action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words, but it is under-specified for a tool with four parameters and no annotations. Its brevity comes at the cost of necessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, no annotations, no output schema, and only 50% schema coverage, the description is far too sparse to be complete. It omits usage context, behavioral details, and parameter semantics that an agent would need to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, with uid and dblClick lacking descriptions. The description adds no meaning beyond the schema, only implying that an element identifier is needed, and does not explain the purpose of uid, dblClick, or the optional 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 a specific verb (Clicks) and resource (the provided element), making the core action clear. However, it does not differentiate from sibling tools like click_at or hover, leaving ambiguity about when this tool is preferred over those.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The agent is left to infer usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_atC
Clicks at the provided coordinates (CSS pixels in the viewport).
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| dblClick | No | ||
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
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 usefully defines the coordinate frame (CSS pixels in viewport), but discloses nothing about side effects of a click — navigation, form submission, focus changes, or whether a load is triggered — which matters greatly for a synthetic input 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?
A single well-formed sentence with the coordinate semantics front-loaded and zero filler. It is appropriately tight, though the brevity borders on under-specification for a 5-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a synthetic-input tool with no annotations, no output schema, and 5 parameters (one entirely undocumented), the description is too thin. It leaves dblClick semantics, page targeting behavior, and click side effects unaddressed, so an agent lacks enough to invoke it confidently in edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 40% and only pageId and includeSnapshot are described in the schema. The description adds genuine meaning for x/y (CSS pixels, viewport-relative), which the schema omits, but leaves dblClick completely undocumented in both places, so it partially but not fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Clicks') and resource ('provided coordinates'), and the parenthetical pins the coordinate space to CSS pixels in the viewport. It is clear on its own, but it never distinguishes itself from the sibling 'click' tool, which presumably targets elements rather than raw coordinates, so an agent must infer the split.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says only what the tool does, not when to prefer it over 'click', 'hover', or 'drag', nor what prerequisites (e.g. a page being selected) apply. No when-not-to-use or alternative is named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_pageA
Closes a page by its ID. Only tabs opened by this MCP can be closed unless force is true.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | Allow closing a tab the user opened. | |
| pageId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the key restriction that only MCP-opened tabs are closable without force, but says nothing about what happens on a blocked close (error vs. silent no-op), whether closing is destructive/irreversible, or any auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the core action is front-loaded and the constraint follows immediately. Nothing could be removed without losing 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?
For a two-parameter tool with no output schema and no annotations, the description covers purpose and the critical closing restriction, which is enough for correct invocation. Minor gaps remain around failure modes and reversibility.
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 50%: force is documented in the schema, pageId is not. The description confirms pageId means the page to close and echoes the force behavior, partially compensating. However, it adds little beyond the existing force schema description and no format/identifier detail for pageId.
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 ("Closes a page by its ID") with a clear scope condition, so an agent immediately knows what the tool does. It does not explicitly distinguish itself from siblings like select_page, list_pages, or new_page, which keeps it short of a 5.
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 a concrete usage condition: only tabs opened by this MCP can be closed, unless force is true. That tells the agent when the call will succeed and when to reach for the force flag. It stops short of naming any alternative tool or describing failure behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dragC
Drag an element onto another element
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| to_uid | Yes | ||
| from_uid | Yes | ||
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It implies a state-changing action but says nothing about side effects, whether native drag events are simulated, required element visibility, or what happens after the drop.
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. It is efficient, though arguably too terse for a tool with four parameters and no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, no annotations, no output schema, and only 50% schema coverage, the description is incomplete. It omits parameter semantics, behavioral effects, and usage context, leaving critical gaps for the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, with from_uid and to_uid entirely undocumented in the schema. The description does not compensate by explaining that these parameters represent source and target element UIDs, adding no meaning beyond the parameter names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Drag') and resource ('an element onto another element'), making the core action clear. However, it does not differentiate from siblings like click, hover, or fill, which are also element-interaction tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are provided. The agent must infer that this tool is appropriate when a drag-and-drop interaction is needed, with no explicit exclusions or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emulateC
Emulates various features on the page. Settings last until the debugger detaches.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| viewport | No | <width>x<height>x<devicePixelRatio>[,mobile][,touch][,landscape] | |
| userAgent | No | Empty string clears the override. | |
| colorScheme | No | ||
| geolocation | No | latitude,longitude | |
| extraHttpHeaders | No | JSON object string. Empty string clears. | |
| cpuThrottlingRate | No | ||
| networkConditions | No |
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 only one trait – persistence until debugger detach – and omits whether settings are destructive, how they interact/override each other, permission requirements, and what state changes on the page.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no padding. However, the first sentence's vagueness means the brevity stems partly from under-specification rather than efficient communication.
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 an 8-parameter mutation-style tool with no annotations and no output schema, the description is too thin. It neither enumerates the emulatable features nor describes the return/effect, leaving most of the agent's decision inputs to the 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?
Schema description coverage is only 63%, and the description adds no parameter meaning at all – "various features" does not map to viewport, userAgent, geolocation, or the throttling/network options. The 37% undocumented gap is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a verb ("Emulates") and a resource ("features on the page"), but "various features" stays vague and largely restates the tool name rather than enumerating what can be emulated. An agent can't tell what specifically this covers 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?
No when-to-use guidance and no alternatives are named. The second sentence ("Settings last until the debugger detaches") is a behavioral note, not usage direction, so nothing routes the agent between this and siblings like cdp or resize_page.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_scriptC
Evaluate a JavaScript function inside the page. Returns the result as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | Element uids from the latest snapshot, passed as function arguments. | |
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| filePath | No | ||
| function | Yes | A JavaScript function declaration. Example: () => document.title, or (el) => el.innerText | |
| dialogAction | No | "accept", "dismiss", or text for window.prompt. Defaults to accept. | |
| waitForStableDom | No |
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 only states that the function is evaluated and the result returned as JSON. It does not disclose whether the operation can mutate the page, whether it requires specific permissions, whether it waits for the page to be ready, or any security implications. This is a significant gap for an arbitrary code execution 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 two short sentences, front-loaded with the core action and return format. There is no wasted verbiage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of evaluating arbitrary JavaScript, the lack of annotations, and the absence of an output schema, the description is too sparse. It omits critical context such as execution environment, security restrictions, side effects, and how errors are surfaced. An agent would need to infer or discover much of the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for four of six parameters (args, pageId, function, dialogAction), covering 67%. The description adds no parameter semantics at all. Two parameters (filePath, waitForStableDom) lack any description in the schema or the description text, leaving their purpose unclear.
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 'Evaluate' and resource 'JavaScript function inside the page', and notes the return format (JSON). It is clear enough to distinguish from most sibling tools like click or navigate, but it does not explicitly differentiate from cdp or other scripting 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 provides no guidance on when to use this tool versus alternatives. It does not mention conditions, prerequisites, or exclusions. The implied usage is that it runs custom JavaScript, but this is not stated explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fillC
Type text into an input, text area or select an option from a element.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| value | Yes | "true" or "false" for checkboxes and toggles, "true" for radio buttons. | |
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
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, and it discloses almost nothing: it doesn't say whether existing content is cleared before filling, whether change/blur events fire, what permissions or snapshot state the element uid requires, or what the response contains. For a DOM-mutating tool with zero annotation coverage this is a real 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?
A single tight sentence with the action and target front-loaded and no wasted words. It is efficient, though brevity here comes partly at the cost of missing detail rather than through disciplined editing.
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 mutation tool with no annotations, no output schema, and an undocumented uid parameter, the description should say more: how uid is obtained, whether the field is cleared first, and what happens on success. As written, key invocation details are absent.
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 75% (value, pageId, includeSnapshot are documented), so the schema does most of the work. The description only loosely maps to the params by naming the target element types and implying value is text-or-option; it never explains that uid is an element identifier from a snapshot, so it adds little beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action (type text / select an option) and the target resources (input, text area, <select> element), so the basic purpose is clear. However, it never distinguishes itself from close siblings like type_text or fill_form, leaving the agent to guess which of the three to pick.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as type_text (likely keystroke-by-keystroke) or fill_form (bulk filling). The agent gets no criteria for choosing this tool over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fill_formA
Fill out multiple form elements (inputs, selects, checkboxes, radios) at once. Prefer this over many fill calls.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| elements | Yes | ||
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
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 says 'fill out ... at once' but does not disclose side effects, whether it waits for elements, error handling for partial failures, or permission requirements for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste. The core capability is front-loaded, followed immediately by the routing advice.
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 mutation tool with no annotations and no output schema, the description should explain return behavior, error handling, and the required elements format. It omits all of these, leaving the agent with insufficient context to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: pageId and includeSnapshot have descriptions, but the required elements array and its uid/value items are undocumented. The description adds some meaning by listing element types, but it does not explain the uid/value structure, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fill out), resource (multiple form elements), and enumerates element types (inputs, selects, checkboxes, radios). It explicitly names the sibling alternative 'fill' and distinguishes the batch use case, so an agent can select it 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?
Explicitly says to prefer this over many fill calls, which names the alternative and the condition that selects it. However, it does not state when to use the single-element sibling instead (e.g., for one field), leaving a small routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_console_messageC
Gets a console message by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| msgid | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations and no output schema, so the description carries the full behavioral burden and supplies almost none of it. It does not say whether the message may have been evicted from the buffer, what happens on an unknown ID, or what fields a console message contains.
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 zero padding. It is efficient, though the terseness comes at the cost of the missing usage and behavior context noted 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?
For a 2-parameter retrieval tool with no annotations and no output schema, the description should at minimum explain how to obtain msgid and what a returned message represents. Neither is present, and the relationship to list_console_messages is left implicit.
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 50%: pageId is documented in the schema, while msgid is bare. The description's 'by its ID' is the only hint that msgid is the message identifier, but it adds no format, range, or sourcing guidance beyond the parameter name itself.
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 (Gets) and resource (console message) with the lookup key (by its ID), so the operation is unambiguous. It does not distinguish itself from the sibling list_console_messages, which an agent could easily confuse it with.
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 'by its ID' weakly implies the ID must come from somewhere, but the description never says to call list_console_messages first nor when to prefer this over that sibling. No exclusions, prerequisites, or alternative routing are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_network_requestB
Gets a network request by reqid (the latest request if omitted). Includes headers and bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| reqid | No | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| requestFilePath | No | ||
| responseFilePath | No |
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 return content ('Includes headers and bodies') and the omission default, which is useful, but it says nothing about side effects, permissions, or what requestFilePath/responseFilePath produce.
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 tight sentence, front-loaded with the verb and resource, with the default behavior folded in. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no annotations and no output schema, the description partially compensates via the 'headers and bodies' note, but leaves the two file-path parameters and any return shape entirely unexplained.
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 only 25% (only pageId is documented), so the description must compensate and only explains reqid and its omission default. requestFilePath and responseFilePath are opaque in both the schema and 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?
States a specific verb and resource ('Gets a network request by reqid') plus the default behavior when the id is omitted. Clear enough to act on, but it does not explicitly differentiate itself from the sibling 'list_network_requests', so an agent must infer the single-item vs collection distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical '(the latest request if omitted)' hints at one usage case but there is no guidance on when to prefer this over 'list_network_requests' or 'get_console_message'. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
handle_dialogC
If a browser dialog was opened, use this to handle it
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| promptText | No |
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 states only the trigger condition and does not disclose what accept or dismiss do, what happens to the dialog or page, or whether promptText is required for prompt dialogs.
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, front-loaded with the condition. For a tool with three parameters and no annotations, however, it is under-specified rather than appropriately concise; key details are omitted.
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 (dialog handling with accept/dismiss/promptText options) and the absence of annotations and output schema, the description is incomplete. It does not explain what each action does, when to use which action, or what the tool returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is low (33%): only pageId has a description. The description adds no parameter-level information—it does not explain the required action enum values (accept/dismiss), the meaning of promptText, or how pageId interacts with the default selected page.
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 essentially restates the tool name: 'use this to handle it' adds little beyond 'handle_dialog'. It specifies a trigger condition ('If a browser dialog was opened') but does not clarify what handling entails (accept vs dismiss, prompt text), leaving the purpose vague.
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 an explicit condition for use ('If a browser dialog was opened'), which is the primary context. However, it provides no when-not-to-use guidance or alternatives, so it remains minimal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hoverC
Hover over the provided element
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
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, and it discloses almost nothing. It does not state that hovering can trigger side effects (tooltips, dropdowns, CSS state changes), whether it is idempotent, or whether the page state is affected — all relevant for an automation 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?
A single short sentence, front-loaded with the action. It wastes no words, though the brevity reflects under-specification rather than tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a required uid parameter that is undocumented in both schema and description, the definition is too thin for a tool that mutates UI state. An agent lacks enough information to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 67%: uid has no description in the schema, and the tool description does not compensate by explaining what 'the provided element' refers to. pageId and includeSnapshot are documented in the schema, but the description adds no meaning beyond 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 verb 'hover' is specific and maps to a recognizable browser interaction, but the resource is left vague as 'the provided element' — it never says the element is identified by the uid parameter or that this acts on a rendered page. An agent can guess the intent but gets no help distinguishing this from click/drag/fill 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?
There is no guidance on when to hover versus click, click_at, or evaluate_script, nor any mention of preconditions (e.g., element must exist, page must be loaded). The agent must infer all usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_console_messagesC
List console messages for the page since the last navigation.
| Name | Required | Description | Default |
|---|---|---|---|
| types | No | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| pageIdx | No | ||
| pageSize | No | ||
| serviceWorkerId | No | Not supported. Ignored. | |
| includeStackTraces | No | ||
| includePreservedMessages | No | Include messages from the last 3 navigations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It only discloses the time scope ('since the last navigation') but omits return format, pagination behavior, message types included, and what happens when no messages exist. The parameter includePreservedMessages extends the scope to the last 3 navigations, but the description does not mention this.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with zero waste, which is good for conciseness. However, for a tool with seven parameters and no annotations, this length is arguably too terse to be appropriately sized.
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, no output schema, and low schema coverage, the description is insufficient. It does not explain return values, parameter behavior, or how to filter messages, leaving significant gaps for an agent to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 43%, so the description must compensate. It mentions no parameters at all, leaving types, pageIdx, pageSize, and includeStackTraces completely undocumented in both the schema and the description. No meaning is added beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List), resource (console messages), and scope (for the page since the last navigation). It distinguishes from the sibling get_console_message by implying a collection rather than a single message, but does not explicitly name the alternative.
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 given on when to use this tool versus alternatives like get_console_message or list_network_requests. There is no mention of prerequisites, when-not-to-use, or the relationship to other console-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_network_requestsC
Lists the most recent requests for the page since the last navigation.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| pageIdx | No | ||
| pageSize | No | ||
| resourceTypes | No | ||
| includePreservedRequests | No | Include requests from the last 3 navigations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It discloses a useful scope constraint (requests since the last navigation), but omits whether the call is read-only, whether it requires an open page, pagination behavior, or how includePreservedRequests widens the window to the last 3 navigations.
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. It is efficient, though the brevity comes at the cost of the missing guidance noted elsewhere rather than being genuinely complete.
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?
Five optional parameters, 40% schema coverage, no output schema, and no annotations leave the description far too thin. It says nothing about defaults, result format, or the sibling get_network_request, so an agent lacks what it needs to invoke this confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 40%: pageIdx, pageSize, and resourceTypes are undocumented, and the description adds nothing about pagination, resource-type filtering, or the includePreservedRequests flag that directly modifies the stated scope. It fails to compensate for the coverage 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?
States a specific verb ('Lists'), a specific resource (requests), and a temporal scope ('since the last navigation'), so the agent knows what it returns. However, it never distinguishes itself from the sibling get_network_request (singular), leaving the agent to guess which one to call for a known request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to prefer this over get_network_request, nor of any prerequisites such as an active/selected page. The only contextual cue ('since the last navigation') is descriptive of output, not of usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_pagesB
Get a list of pages open in the browser.
| Name | Required | Description | Default |
|---|---|---|---|
No 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 implies a read but never states it is non-mutating, and says nothing about whether the result is per-tab, per-window, or ordered in any particular way.
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 short sentence with no filler, and the essential information (list of open pages) is front-loaded. It is efficient, though so terse that it has no room to say anything else.
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 parameterless, so not much is required, but with no output schema and no annotations the description should at least sketch what the list contains (e.g. page identifiers usable with select_page). That gap leaves an agent guessing about 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?
The tool takes zero parameters, so there is no parameter semantics to document and the baseline of 4 applies. Nothing in the description contradicts or confuses the empty 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 gives a specific verb ("Get a list") and resource ("pages open in the browser"), so an agent immediately knows what it does. It does not, however, distinguish itself from siblings such as select_page, new_page, or close_page, which also concern pages.
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 when-to-use guidance, no mention of prerequisites, and no named alternative. The natural use case (enumerate open pages before calling select_page or close_page) is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_pageB
Open a page. It first looks for an already open tab: same URL is reused as is, same site is reused and navigated. A new background tab is opened only if none exists.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to load in a new page. | |
| timeout | No | ||
| forceNew | No | Skip the tab reuse check and always open a new tab. | |
| background | No | Open in the background without bringing it to the front. Default is true. | |
| isolatedContext | No | Not supported by the extension bridge. Ignored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the tab-reuse algorithm (same URL reused, same site reused-and-navigated, else new background tab), which is genuinely beyond the schema, but omits failure modes, load/timeout behavior, and permission needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then three dense clauses covering the reuse decision. No filler; appropriately sized for the behavior described.
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 essential reuse behavior for a page-opening tool with no output schema, but leaves the critical distinction from navigate_page and any error/failure handling unstated. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so the schema already documents url, forceNew, background, and isolatedContext. The description's reuse narrative implicitly contextualizes forceNew and background but adds no new parameter-level detail. The undocumented timeout is not 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?
States a specific verb and resource ('Open a page') and conveys the reuse semantics that define the tool. It does not, however, distinguish itself from the sibling navigate_page, which an agent must otherwise infer.
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 explicit guidance on when to use new_page versus navigate_page, select_page, or list_pages. The reuse logic describes behavior but stops short of routing the agent between alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_analyze_insightC
More detail on a specific insight from the last trace.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| insightName | Yes | ||
| insightSetId | Yes |
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, yet it discloses almost nothing: it does not say whether this re-runs analysis or just reads cached results, whether it mutates any state, what permissions are needed, or what the response looks like. The only behavioral clue is the implicit dependency on a prior trace.
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?
It is a single, front-loaded sentence with no wasted words, which is good structurally. But at this length the sentence is under-specified rather than genuinely concise, so it is only adequate.
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 whose inputs are opaque IDs, that has no annotations and no output schema, the description should explain where insightSetId/insightName come from and the trace prerequisite. It does neither, leaving meaningful gaps an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%: pageId is documented, but the two required parameters (insightSetId and insightName) have no schema descriptions. The description's vague reference to 'a specific insight' does not explain what these identifiers are or how the agent obtains valid values, leaving the burden unmet.
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 conveys that the tool returns additional detail about a single insight drawn from the last performance trace, which ties it to the trace workflow. However, 'More detail' is vague about what is actually returned, and it does not clearly distinguish itself from performance_start_trace/performance_stop_trace beyond the word 'insight'.
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 explicit when-to-use guidance, no statement that a trace must be captured first, and no alternatives named. The phrase 'from the last trace' implies a prerequisite, but the agent must infer it rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_start_traceC
Start a performance trace on the page. Use to find frontend performance issues and Core Web Vitals.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| reload | No | ||
| autoStop | No | ||
| filePath | No |
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 and falls well short. It doesn't say whether the trace runs until explicitly stopped, what autoStop does, whether the call blocks, or what artifacts/return values appear. For a stateful performance capture tool in a start/stop/analyze workflow, omitting that this is only the first step is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and then the purpose. No filler, though it is arguably too terse for a 4-parameter tool with weak schema coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, four parameters (three undocumented), and no explanation of the start/stop/analyze workflow it belongs to, the description leaves too much unspecified for an agent to invoke it confidently in sequence.
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 only 25%: pageId is documented in the schema, but reload, autoStop, and filePath have no descriptions anywhere. The description adds no parameter meaning at all, so it fails to compensate for the low coverage as required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'Start a performance trace on the page.' This is distinguishable from siblings like performance_stop_trace and performance_analyze_insight by the verb alone, so an agent can pick it correctly. It stops short of 5 because it doesn't explicitly scope itself against those 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?
'Use to find frontend performance issues and Core Web Vitals' gives the purpose/motivation for calling it, which is useful usage context. However, it never states when to use this versus the other performance tools, or that a trace typically must be followed by performance_stop_trace and performance_analyze_insight. Usage is implied rather than specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
performance_stop_traceC
Stop the active performance trace on the page.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| filePath | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a state mutation and a precondition (an active trace must exist), but does not say what happens to the captured trace data, where it is written, whether it errors if no trace is running, or what the response contains.
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 zero wasted words. The brevity is clean, though it borders on under-specification for a mutation tool rather than being genuinely complete.
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 mutation tool with no annotations, no output schema, and an undocumented parameter, the description is too thin. It omits preconditions, the fate of the trace data, and the meaning of filePath, all of which an agent needs 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 coverage is only 50%: pageId is documented but filePath is bare. The description adds nothing about either parameter, so it fails to compensate for the undocumented filePath (presumably where trace output is saved).
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 clear verb+resource ('Stop the active performance trace') and scopes it to the page. It does not, however, differentiate itself from siblings like performance_start_trace or performance_analyze_insight, leaving the agent to infer the workflow relationship.
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 only implied: the agent can gather that this ends a running trace, but there is no explicit statement of when to call it (e.g., after performance_start_trace) or what to do with the result. No alternatives or prerequisites are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyB
Press a key or key combination, e.g. "Enter", "Control+A", "Control+Shift+R". Modifiers: Control, Shift, Alt, Meta.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
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, and it discloses almost nothing: it does not say whether the key goes to the focused element or the selected page, whether pressing Enter may submit a form or trigger navigation, or whether includeSnapshot adds return payload. For a tool that can cause page-changing side effects, this is a notable 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?
Two short sentences, front-loaded with the action and immediately followed by syntax examples; the modifier list earns its place. No filler, though the brief format leaves room for additional useful guidance rather than being maximally efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should ideally mention side effects (Enter submitting/navigating) and what the response or includeSnapshot yields. For a simple three-parameter input tool the action and key syntax are covered, making it minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the key parameter itself has no schema description; the description compensates by documenting the accepted modifier names (Control, Shift, Alt, Meta) and the combination syntax with examples. It adds little about pageId/includeSnapshot, but those are already described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Press a key or key combination") and gives concrete syntax examples like "Control+Shift+R", which makes it distinguishable from text-entry siblings such as type_text and fill. It stops short of explicitly naming when this differs from those siblings, so it is clear but not fully differentiated.
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 examples of key combinations imply the intended use (keyboard shortcuts and special keys), but there is no explicit when-to-use statement, no exclusion versus type_text/fill, and no prerequisites such as a page being focused or selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reload_bridge_extensionA
Reload the Chrome Control extension (use after updating its files).
| Name | Required | Description | Default |
|---|---|---|---|
No 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 what to do and when, but does not state side effects such as whether active pages or session state are disrupted, whether permissions are required, or what happens after reloading.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. The purpose comes first and the usage condition is appended in parentheses without bloat.
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 maintenance tool with no output schema and no annotations, the description covers the essential action and trigger. It could say more about side effects, but the low complexity means the core information 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?
The tool has zero parameters, so there are no parameter semantics to document. The baseline for a parameterless tool is 4, and the description correctly does not invent or omit parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Reload the Chrome Control extension.' It clearly distinguishes this maintenance action from all sibling browser-automation tools such as navigate_page, click, or take_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?
It gives an explicit usage condition: 'use after updating its files.' This tells the agent when to invoke the tool, though it does not mention when not to use it or any alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_pageC
Resizes the page's window so that the page has the specified dimension
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | ||
| height | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. |
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 does not disclose units, whether the resize is persistent or session-scoped, whether it requires the page to be attached/selected, or what happens to non-targeted pages.
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 efficient sentence with the action front-loaded and no filler. It is not padded, though it is also thin.
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 mutation tool with no annotations, no output schema, and 33% schema coverage, the description omits too much: units, scope (which pages), persistence, and side effects. The schema's default-to-selected-page note is the only coverage of targeting.
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 only 33% – only `pageId` is documented in the schema. The description says 'specified dimension' but never clarifies units (px?), valid ranges, or the width/height semantics, so it fails to compensate for the uncovered 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?
States a specific verb (resizes) and resource (the page's window) with the outcome (page has the specified dimension). An agent can tell it apart from most siblings, though the phrasing 'page's window' is ambiguous versus viewport emulation handled by the sibling `emulate`.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as `emulate` for viewport/device resizing. The agent must infer the context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_pageC
Select a page as a context for future tool calls.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | ||
| bringToFront | No | Whether to focus the page and bring it to the top. |
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, yet it discloses almost nothing. It hints that the selection persists across future calls but does not say whether the call has side effects, what happens when bringToFront is omitted, how an invalid pageId is handled, or whether the context is scoped to the session.
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 zero filler, and the operative effect is placed at the end so the verb+resource leads. It is efficient, though perhaps too terse for the amount of behavior it leaves unexplained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and only half the parameters documented, the description should do more work than this one sentence. It omits how to source the required pageId and the default/omission behavior of bringToFront, leaving the agent under-equipped to call the tool reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: bringToFront is documented inline, but pageId has no description and the tool description never explains where the required ID comes from (presumably list_pages) or its type/expectations. The description therefore fails to compensate for the undocumented required 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 gives a concrete verb+resource ('Select a page') and states the effect ('as a context for future tool calls'), so an agent understands this is a state-setting operation rather than a page creation or navigation. However, it offers no explicit differentiation from siblings like list_pages, new_page, or close_page, so the agent must infer the boundary from the single verb.
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 'as a context for future tool calls' implicitly signals when the tool is relevant (before acting on a specific page), but there is no explicit when-to-use, no prerequisites (e.g., obtaining pageId from list_pages), and no named alternatives such as list_pages or new_page. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statusA
Is the Chrome extension connected? Also shows if this MCP instance owns the port or shares it as a peer.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry full behavioral burden. It discloses the key reported facts (connection state, port ownership/peer status), but does not state that it is read-only, has no side effects, or what happens when the extension is disconnected.
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 zero waste, front-loading the primary question and then adding the secondary port-ownership detail. Perfectly sized for a status check.
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 tool with no output schema and no annotations, the description explains what information is returned. It is nearly complete, though it could specify possible return states to fully replace the missing 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, so there are no parameter semantics to document. The baseline score for zero-parameter tools is 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 description clearly states what the tool reports: whether the Chrome extension is connected and whether this MCP instance owns or shares the port. This distinguishes it from all action-oriented sibling tools, though the generic name 'status' alone would not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool, prerequisites, or alternatives. Usage is only implied by the question phrasing, with no when-to-use or when-not-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_heapsnapshotC
Capture a heap snapshot of the page to a .heapsnapshot file.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| filePath | Yes | Path to a .heapsnapshot file. |
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 says nothing about the cost of the operation, even though heap snapshots are typically large, slow, and memory-intensive, nor about permissions, whether the page is paused, or where the file lands relative to the given path.
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 efficient sentence with the action front-loaded and no filler. It is appropriately sized, though the brevity comes partly from omission rather than tightness.
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 an unannotated, no-output-schema tool with meaningful side effects (writing a file) and likely performance impact, the description is too thin. An agent lacks any signal about cost, blocking behavior, or where the snapshot file is written relative to filePath.
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 100%, so pageId (defaults to selected page) and filePath are already fully documented in the schema. The description adds no syntax, path-resolution, or format constraints beyond restating the .heapsnapshot extension, matching the baseline for schema-covered 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?
States a specific verb (capture) and resource (heap snapshot of the page) plus the output artifact (.heapsnapshot file). It is clearly distinguishable from take_snapshot and take_screenshot, though it never names those siblings explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus take_snapshot, take_screenshot, or the performance tracing tools. No prerequisites, no exclusions, no context about what scenario a heap snapshot serves.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotC
Take a screenshot of the page or element.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | Element uid from the latest snapshot. | |
| format | No | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| quality | No | ||
| filePath | No | ||
| fullPage | No | Full page instead of viewport. Incompatible with uid. |
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 does not state whether the screenshot is returned inline or saved to filePath, what the default format is, how quality applies, or any permission or side-effect details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of waste. However, it is arguably too terse for a 6-parameter tool and could include critical defaults without sacrificing 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?
With 6 parameters, no annotations, and no output schema, the description is substantially incomplete. It omits parameter defaults, output behavior, and the relationship between filePath, format, and quality.
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 only 50%, leaving format, quality, and filePath undocumented. The description mentions 'page or element' vaguely, but adds no syntax, defaults, or meaning beyond the existing schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Take a screenshot of the page or element.' The purpose is immediately clear, but it does not differentiate itself from siblings like take_snapshot or evaluate_script that might also capture page state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus take_snapshot, evaluate_script, or other capture-related siblings. The agent must infer usage context entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_snapshotA
Take a text snapshot of the page based on the a11y tree. Lists elements with a unique uid. Always use the latest snapshot. Prefer this over a screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| verbose | No | ||
| filePath | 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 does add useful behavior: the return is a text tree of elements carrying unique uids, and snapshots go stale ('Always use the latest snapshot'). It omits how the uid is consumed downstream, cost/size characteristics, and whether this is a pure read with no 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 short sentences, front-loaded with the core action and mechanism, then return shape, then the sibling preference. 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?
For a 3-param read tool with no annotations and no output schema, the description covers purpose and return shape adequately, but leaves two parameters undocumented and gives no detail on output structure beyond 'lists elements with a unique uid'.
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 only 33% – pageId is documented but 'verbose' and 'filePath' have no description in either the schema or the tool description. The description adds zero parameter meaning, so it fails to compensate for the coverage 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?
States a specific verb+resource ('Take a text snapshot of the page') and names the underlying mechanism (a11y tree). It also distinguishes itself from the obvious sibling by stating 'Prefer this over a screenshot,' so an agent can choose between take_snapshot and take_screenshot 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?
Explicitly routes the agent away from the alternative ('Prefer this over a screenshot') and gives a usage constraint ('Always use the latest snapshot'). It stops short of a full when/when-not matrix (e.g., no guidance on when a screenshot is actually preferable), so 4 rather than 5.
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 using the keyboard into a previously focused input
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| submitKey | No | Optional key to press after typing, e.g. "Enter" |
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 disclose one meaningful trait: real keyboard input requiring prior focus, which distinguishes it from direct-value tools. However, it omits whether typing appends or replaces existing content, whether it fires key events that could trigger handlers, and permission/error 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?
A single front-loaded sentence with no wasted words. It is appropriately terse for a simple action, though it could have spent a few more words on the focus distinction from fill.
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 3-parameter, no-output-schema tool, the essential behavior (keyboard typing into the focused element) is conveyed. The main gap is not clarifying the difference from fill, which an agent choosing among these siblings would benefit from.
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 67%, with pageId and submitKey already documented in the schema. The description adds targeting context ('previously focused input') but no extra meaning for the required text parameter or the optional submitKey beyond what the schema states. Baseline 3 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?
States a specific verb (type text) and mechanism (keyboard) plus the target condition (previously focused input). It implicitly distinguishes itself from siblings like fill by emphasizing keyboard typing rather than value setting, though it never names those 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?
The phrase 'into a previously focused input' implies a prerequisite (something must be focused first) but gives no explicit when-to-use guidance or contrast with alternatives like fill or press_key. Usage is only inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_fileC
Upload a file through a file input, or an element that opens a file chooser.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| filePaths | Yes | Paths local to the computer running Chrome. | |
| includeSnapshot | No | Whether to include a snapshot in the response. Default is false. |
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 discloses only one nuance: the element may be a file input or a chooser trigger. It says nothing about permissions required, whether the upload is synchronous with the call, visible side effects (dialog or navigation), or whether existing input state is replaced.
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. The dual-target clarification is useful, though the description is too brief to fully earn the top mark given the tool's 4 parameters and absence of annotations.
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 browser-automation tool with no annotations and no output schema, the definition is minimally adequate: it conveys the action and the target types. It omits what uid refers to, whether the call blocks until upload completes, and any return behavior, which matters when nothing else documents them.
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 75%: pageId and includeSnapshot are documented in-schema, filePaths notes that paths are local to the machine running Chrome, but uid has no description anywhere. The description adds no parameter meaning beyond the schema, so the baseline of 3 for high schema coverage applies, with uid left ambiguous.
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 (upload) and resource (file) and clarifies the two target types: a file input or an element that opens a chooser. This is enough to distinguish it from sibling actions like click or fill. It stops short of naming an alternative sibling to route against, so it is clear but not maximally differentiated.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as click or fill for interacting with the same element. The only hint is that the target may be either a file input or a chooser-opening element, which is targeting guidance rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_forC
Wait for the specified text to appear on the selected page.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Resolves when any value appears on the page. | |
| pageId | No | Targets a specific page by ID. Defaults to the selected page. | |
| timeout | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden, and it does not deliver. It never states what happens on timeout (error, rejection, empty result), whether the call blocks or polls, or what it returns on success. 'Wait' implies blocking semantics but the failure mode — the most important trait for a wait tool — is undisclosed.
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 zero padding; the core action leads. It is efficient, though its brevity edges into under-specification rather than tight completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a wait/sync tool with no annotations and no output schema, the description omits the essential behavioral contract: timeout handling, return value, and blocking behavior. The single sentence is not sufficient to call this tool correctly under race conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%: 'text' (with its any-value semantics) and 'pageId' are documented in the schema, but 'timeout' has no description anywhere, leaving units and defaults unknown. The description itself adds nothing beyond restating 'specified text' and 'selected page', so the schema does most of the work — baseline 3.
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?
Specific verb+resource: 'Wait for the specified text to appear on the selected page.' An agent immediately knows this is a synchronization primitive. No sibling in the list duplicates this behavior, so no explicit differentiation is needed, but the description stops short of the 5 mark by not clarifying what distinguishes the wait from simply snapshotting.
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 when-to-use, when-not-to-use, or alternative guidance. For a browser agent this matters (e.g., poll until text vs. take_snapshot and inspect), yet the description offers nothing about sequencing or prerequisites. Implied usage only, with no exclusions.
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.
32 tool updates
v0.4.3- First observed
cdp - First observed
click - First observed
click_at - First observed
close_page - First observed
drag - First observed
emulate - First observed
evaluate_script - First observed
fill - First observed
fill_form - First observed
get_console_message - First observed
get_network_request - First observed
handle_dialog - First observed
hover - First observed
list_console_messages - First observed
list_network_requests - First observed
list_pages - First observed
navigate_page - First observed
new_page - First observed
performance_analyze_insight - First observed
performance_start_trace - First observed
performance_stop_trace - First observed
press_key - First observed
reload_bridge_extension - First observed
resize_page - First observed
select_page - First observed
status - First observed
take_heapsnapshot - First observed
take_screenshot - First observed
take_snapshot - First observed
type_text - First observed
upload_file - First observed
wait_for
TDQS
Scored across 32 tools
Most tools have clearly distinct purposes (element click vs coordinate click, page snapshots vs screenshots, console vs network listings). A few pairs overlap enough to risk misselection: fill vs type_text vs fill_form, and the three performance_* tools share a narrow domain. Descriptions do clarify these boundaries, so misselection is unlikely but possible.
The set mostly follows a consistent snake_case verb_noun convention (navigate_page, take_snapshot, click_at, list_pages). Deviations like 'status' (noun without verb), 'cdp' (bare acronym), and 'emulate' (verb without object) are minor and still readable. No mixed camelCase/snake_case confusion.
At 32 tools this server is well above the typical well-scoped range and feels heavy for browser control. Several capabilities could be consolidated (performance_start/stop/analyze_insight, take_heapsnapshot, cdp) or are only occasionally needed. The count increases selection burden without proportional unique value.
The surface covers the core browser-automation lifecycle well: navigation, element interaction, page management, and diagnostics (console, network, performance, heap). Minor gaps exist around cookie/local-storage management and download handling, but these can be worked around via evaluate_script or cdp. No dead ends for common workflows.
Related MCP Connectors
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
A paid remote MCP for AI agent browser DevTools MCP, built to return verdicts, receipts, usage logs,
Live browser debugging for AI assistants — DOM, console, network via MCP.
Related MCP Servers
- AlicenseBqualityAmaintenanceEnables controlling a real Chrome browser from MCP hosts like Claude, with extension-based or CDP fallback, supporting tabs, navigation, interaction, and page reading tools.20464 npm6MIT
- FlicenseNot gradedqualityDmaintenanceEnables browser automation (navigate, screenshot, click, type, etc.) for Claude Code via MCP protocol, with a Chrome extension for configuration.2-
- AlicenseNot gradedqualityDmaintenanceEnables browser automation through the Claude Chrome Extension, allowing agents to navigate websites, fill forms, take screenshots, and debug web apps via standard MCP protocols.1MIT
- AlicenseNot gradedqualityBmaintenanceChrome extension + MCP bridge that gives Claude control over your real browser via CDP, enabling navigation, clicking, typing, scrolling, screenshots, and JS execution with a visible cursor and tab-bring-to-front.1MIT