Local Browser MCP
This server provides an MCP-controllable real browser (Playwright) that an agent can drive to interact with local web apps and allowed hosts.
Navigate to URLs (validated against an allowlist or all hosts if enabled)
Take screenshots (full page, element, PNG/JPEG with quality)
Get a DOM/accessibility snapshot with stable refs for element targeting
Click, hover, fill inputs, type text, and press keys/chords
Run arbitrary JavaScript in the page via
evalRead buffered console messages and recent network requests
Wait for selectors, text, or a timeout
Resize the viewport and reload/back/forward navigation
Get visible page text
Manage tabs and popups: list, open, switch, close tabs
Handle JavaScript dialogs (accept/dismiss) and inspect dialog history
List downloaded files from the session
Manage the navigation allowlist: list hosts, request host additions, remove hosts
Provides the ability to use Firefox as the browser engine, enabling automated control of Firefox for navigation, clicking, screenshots, DOM snapshotting, and other browser automation tasks.
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., "@Local Browser MCPnavigate to http://localhost:3000 and take a screenshot"
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.
Local Browser MCP
A headless, agent-controllable real browser as an MCP server. It gives an agent (Claude Code, or any MCP client) a real Playwright browser pointed at your local dev servers — and any hosts you explicitly allow. Navigate, click, hover, fill, type, run JS, screenshot, snapshot the DOM, and read console/network, all over MCP.
The agent launches the browser, drives it headlessly, and it's torn down when the session ends. Because it normally only drives your own localhost, it can be given broad control without general-web-browsing risk; additional hosts are opt-in.
Install
Requires Node.js ≥ 20. The Chromium binary (~110 MB) is downloaded automatically on first install.
Claude Code / any MCP client (recommended)
Add it to your MCP config (e.g. a project .mcp.json, your user config via
claude mcp add, or your client's equivalent). npx runs it straight from this GitHub repo —
no npm registry account needed (requires git on the machine):
{
"mcpServers": {
"local-browser": {
"command": "npx",
"args": ["-y", "github:NolanLT/local-browser-mcp"],
"env": {
"LOCAL_BROWSER_ALLOWED_HOSTS": "localhost,127.0.0.1"
}
}
}
}Restart your client. The tools appear with no other setup — MCP namespaces them under the server
name, so they show up as local-browser: navigate, local-browser: click, and so on. (First run
installs dependencies and downloads Chromium, then caches.)
If the package is also published to npm, you can swap the arg for the shorter
["-y", "local-browser-mcp"].
As a Claude Code plugin (GitHub marketplace)
/plugin marketplace add NolanLT/local-browser-mcp
/plugin install local-browser@local-browser-marketplaceThe plugin's MCP server is the same npx invocation above.
Related MCP server: bwb-browser
Configuration (environment variables)
Variable | Default | Purpose |
|
|
|
|
| Comma-separated navigation allowlist |
|
|
|
| — |
|
| — | If set, run in HTTP mode on this port (else stdio) |
|
| HTTP bind address; use |
| — | If set, HTTP requests need |
Remote / connector mode (claude.ai web & mobile, Cowork, Desktop connectors)
stdio only reaches clients on the same machine. To use this from claude.ai (web/mobile), Cowork, or a Desktop custom connector, run it in HTTP mode and expose it over public HTTPS — Anthropic's cloud connects to your endpoint, so it must be reachable and authenticated.
⚠️ A public endpoint can drive a real browser, including
eval. Always setLOCAL_BROWSER_TOKENand keep a tightLOCAL_BROWSER_ALLOWED_HOSTS(andLOCAL_BROWSER_ALLOW_ALL=false) before exposing it. Without a token the HTTP path is unauthenticated.
Quick start (tunnel)
# 1. Generate a secret and run in HTTP mode
export LOCAL_BROWSER_TOKEN=$(openssl rand -hex 32)
LOCAL_BROWSER_HTTP_PORT=3000 node dist/server.cjs
# → [local-browser] HTTP MCP ready on http://127.0.0.1:3000/mcp
# 2. In another shell, expose it over public HTTPS (TLS terminates at the tunnel)
cloudflared tunnel --url http://127.0.0.1:3000 # or: ngrok http 3000
# → https://something.trycloudflare.comThen register the connector in claude.ai (also Desktop/Cowork):
Customize → Connectors → "+" → name it, enter the public https://…/mcp URL, and put your
token in the auth/Bearer field → Add → enable it per-conversation via the "+" in the composer.
Production (always-on)
Host on a box that can run Chromium (VPS, Fly.io, Render, a Playwright-deps container — not
serverless edge, which can't spawn Chromium). Set LOCAL_BROWSER_HTTP_HOST=0.0.0.0, keep
LOCAL_BROWSER_TOKEN on, and terminate TLS at a reverse proxy (Caddy/nginx) or pass real certs.
GET /health is always open (no secrets) for setup checks; everything else requires the token.
Tools
Tool | Purpose |
| Go to a URL (allowlist-validated) |
| Image to the agent; |
| Flat DOM/a11y snapshot |
| Click an element |
| Hover (e.g. open a dropdown) |
| Fill an input |
| Type into the focused element |
| Press a key/chord (Enter, Tab, Escape, Control+A, …) |
| Run JS in the page, return JSON result |
| Buffered console / recent requests |
| Wait for a condition |
| Resize the viewport |
| History nav |
| Visible page text |
| Tabs & popups |
| JS dialogs (auto-handled; accept/dismiss) |
| Files downloaded this session (saved to |
| Allowlist management |
ref values come from snapshot() (elements are tagged with data-lbmcp-ref), so
click({ ref }) targets them reliably.
Security
Navigation is rejected unless the host is in
LOCAL_BROWSER_ALLOWED_HOSTS(orALLOW_ALLis on) and the protocol is http/https.The browser uses a fresh, ephemeral profile — no saved cookies, logins, or passwords.
evalruns arbitrary JS with the page's full privileges. Harmless on your own dev site; powerful on a real one. WithALLOW_ALLon, every visited page is untrusted input (prompt- injection surface) and the agent can script it — keepALLOW_ALLoff unless you mean it.There's no built-in approval dialog (the server is headless). When run under Claude Code, host additions and eval calls are gated by Claude Code's own per-tool permission prompts.
In HTTP mode there is no per-call prompt — the bearer token (
LOCAL_BROWSER_TOKEN) is the gate. Set it before exposing the endpoint publicly, and keep the host allowlist tight. See Remote / connector mode.
Develop
npm install # installs deps + downloads Chromium
npm run typecheck # tsc --noEmit
npm run build # bundle → dist/server.cjs
npm test # spawn the built server, assert the MCP handshake + tool listRun it by hand over stdio (it waits for JSON-RPC on stdin):
node dist/server.cjsSee CONTRIBUTING.md for the full dev/release workflow.
Project
License
Available Tools
27 toolsallow_hostA
Add a host (e.g. "github.com") to the navigation allowlist for this session. The client's own per-tool approval is the gate.
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | Hostname to allow, e.g. github.com |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It usefully discloses that the change is session-scoped and that the client's per-tool approval gates the action, which are real behavioral traits. It does not mention idempotency or the effect of re-allowing an already allowed host, but for a simple allowlist mutation this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The core action and example are front-loaded, and the session scope and approval caveat are placed second for added clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description covers purpose, scope, and approval behavior. Minor gaps like idempotency or how to list allowed hosts are not critical for a correct call, so the definition is nearly 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 100% and the only parameter already has a clear description with an example. The tool description adds context by tying the host to the navigation allowlist, but does not need to add further parameter semantics. 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?
The description states a specific action ('Add a host') with a clear resource ('the navigation allowlist') and scope ('for this session'), with a concrete example. It is unambiguous and distinguishes itself from siblings like disallow_host and list_allowed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it: before or when needing to navigate to a host not on the allowlist. It also clarifies session scoping and that client per-tool approval is the gate. However, it does not explicitly mention alternatives or conditions such as 'use disallow_host to remove' or 'use list_allowed to inspect', leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backB
Navigate back in history.
| 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 only restates the core action and does not mention whether it waits for page load, what happens at the start of history, or whether the action can fail.
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 five-word sentence with no filler. It is concise, front-loaded, and every word contributes to the 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 zero-parameter tool with no output schema, the description is minimally viable. However, it omits behavioral context such as boundary behavior at the start of history and whether navigation is synchronous, leaving some assumptions to 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?
The tool has zero parameters and schema coverage is 100%, so there is nothing meaningful for the description to add. The baseline of 4 applies because the absence of parameters is already fully clear from 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 clear action — navigating back in history — with a specific verb and resource. It is unambiguous, though it does not explicitly differentiate itself from siblings like navigate or forward beyond the word 'back'.
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 about when to use this tool versus siblings such as navigate or forward, nor any mention of conditions or exclusions. The agent must infer usage context entirely from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickB
Click an element by CSS selector or by a ref from snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | 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 burden. It discloses the two input mechanisms but does not state what happens when both are provided, whether the element must be visible or attached, what errors can occur, or what the click triggers. The wording is minimal rather than behaviorally transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no filler, and the core scoping information is front-loaded. It is appropriately concise, though it could carry a bit more useful context without becoming bloated.
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 click tool the definition is close to adequate, but it lacks usage context, parameter precedence, error behavior, and return value information. With no output schema or annotations, the description does not fully stand alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the parameters are bare strings. The description adds useful meaning by clarifying that selector means a CSS selector and ref means a ref from snapshot, but it leaves format, optionality, and precedence unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Click' with the resource 'an element' and clearly identifies the two targeting mechanisms (CSS selector or ref). This is enough to distinguish it from sibling tools like hover, type, and press_key.
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 click over sibling tools, when to prefer ref over selector, or whether certain conditions must be met before clicking. There are no exclusions, alternatives, or prerequisites described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_tabA
Close a tab by index, or the active tab if no index is given. Returns the updated tab list.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It does disclose the default behavior and the return value, which is helpful. However, it does not mention what happens on an invalid index, whether the operation is irreversible, or that closing the active tab may invalidate the current browsing context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core behavior is front-loaded and the return value is stated compactly.
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 one-parameter tool with no output schema or annotations, the description covers purpose, optional parameter semantics, default behavior, and return value. The main omissions are error behavior and index base, which are relatively minor for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must add meaning. It does: 'index' is optional and defaults to closing the active tab. It stops short of specifying zero-based indexing or accepted ranges, but for a single optional parameter this is reasonably complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Close') and resource ('tab'), and clarifies both modes: by index or the active tab by default. This clearly distinguishes it from sibling tools like new_tab, switch_tab, and tabs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: whenever a tab needs to be closed. It also gives guidance on parameter omission ('or the active tab if no index is given'), but it does not explicitly compare against alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
consoleA
Return buffered console messages (log/warn/error) captured from the page.
| 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. It states that messages are 'buffered' and captured from the page, but it does not disclose whether reading clears the buffer, whether repeated calls return the same messages, or what the exact return structure is. Some behavior is transparent, but key details are missing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence with no filler. It front-loads the core behavior and the qualifying details (buffer, levels, page origin) are packed efficiently.
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 retrieval tool with no nested schema and no output schema, the description is largely complete. An agent can understand what the tool returns and from where, though a bit more detail about return format or buffer semantics would fully round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100%, so the description has no parameter burden to carry. The baseline of 4 applies because there are no parameters to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') with a clear resource ('buffered console messages') and specifies the message kinds included ('log/warn/error') and their origin ('captured from the page'). This clearly distinguishes it from siblings like network, dialogs, or downloads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes it clear the tool is for retrieving page console output, so the intended context is implied. However, it does not explicitly state when to prefer this tool over alternatives such as network or eval, nor does it mention any prerequisites like having navigated first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dialogsA
Return JS dialogs (alert/confirm/prompt/beforeunload) the page has raised, and how each was handled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. 'Return' clearly signals a read operation, and the description adds that each dialog's handling is included. It does not mention whether reading consumes the dialog list, but for a simple parameterless getter this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence that front-loads the verb and resource, then adds specific dialog types and the handling detail. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and parameterless, but there is no output schema and the description leaves 'how each was handled' underspecified. An agent still lacks a clear sense of the return shape, such as whether handling is expressed as accepted/dismissed, input values, or timestamps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so there are no parameter semantics to document. Schema description coverage is 100%, and the description appropriately avoids inventing parameter details where none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Return') and identifies a precise resource: JS dialogs of types alert/confirm/prompt/beforeunload. It also states that the result includes handling outcomes, which clearly distinguishes it from siblings like set_dialog_behavior that configure dialog behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for inspecting dialogs that the page has raised, but it does not explicitly state when to use it over alternatives such as set_dialog_behavior or snapshot. No exclusions, prerequisites, or alternative-selection conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disallow_hostB
Remove a host from the navigation allowlist.
| Name | Required | Description | Default |
|---|---|---|---|
| host | 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 burden. It states the action but does not disclose behavioral traits such as idempotency (what happens if the host is not in the allowlist), reversibility, or any side effects. For a mutation tool, this 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?
The description is a single concise sentence with no wasted words. It is front-loaded with the core action and resource, achieving maximum brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and no output schema or annotations, the description is too sparse. It omits parameter format, edge-case behavior, and any usage context. An agent needs more to call it correctly, especially regarding host input validation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a single required parameter 'host' with 0% description coverage, and the tool description does not clarify the expected format (e.g., domain, URL, or exact string). The agent must guess the syntax, making this inadequate for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Remove') and a clear resource ('host from the navigation allowlist'). It distinguishes from siblings like 'allow_host' (add) and 'list_allowed' (list) by its action, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the verb 'Remove' versus 'allow_host', but it does not explicitly state when to choose this tool over alternatives or any prerequisites (e.g., host must already be allowed). No exclusion criteria or context are provided, so it relies on the agent to infer the appropriate situation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
downloadsA
List files downloaded during this session (url, filename, saved path).
| 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 carries the full burden: it clearly signals a read-only listing operation, scopes results to the current session, and discloses the returned data fields. It does not elaborate on edge cases (e.g., empty history), but for a zero-parameter list tool this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the action and resource, with the output shape appended compactly. Every word earns its place; there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description adequately covers what the agent needs: what it returns and the session scoping. There is no missing information critical for invoking this 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?
There are zero parameters, so the baseline of 4 applies. The description does not need to add parameter meaning, and the parenthetical output fields give useful context beyond 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 uses a specific verb ('List') with a clear resource ('files downloaded during this session') and states the payload fields (url, filename, saved path). It is unambiguous and distinguishable from the sibling set, none of which involve download listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance on when to use this tool versus alternatives, and no exclusion or prerequisite information. The use case is implied by the name and description, but the instruction to state when-not/alternatives is not satisfied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evalA
Evaluate a JavaScript expression in the page context and return the JSON-serializable result. Runs with the page's full privileges — the client's own per-tool approval is the gate.
| Name | Required | Description | Default |
|---|---|---|---|
| expression | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though no annotations are provided, the description discloses meaningful behavioral traits: execution happens in page context, it runs with page-full privileges, the client's per-tool approval is the gate, and the result is JSON-serializable. This gives agents an appropriate sense of risk and output constraints, though it does not detail side effects or asynchronous 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?
Two short sentences carry the essential information with no filler. The core operation and return contract appear first, and the important security/privilege warning follows naturally. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, no-output-schema tool with no annotations, the description covers the operation, return format, and security model. It is adequate for an agent to invoke the tool safely, though it could be more complete with error or side-effect details. Overall it is strong given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'expression' parameter. It adds that the value must be a JavaScript expression executed in page context and that its result must be JSON-serializable. This is helpful, but it leaves details like statement vs expression syntax, promise handling, and serialization failure behavior unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Evaluate') and resource ('JavaScript expression in the page context'), and it distinguishes the tool from browser-automation siblings by focusing on code execution. It also clarifies the return type ('JSON-serializable result'). This uniquely identifies what eval does among the sibling set.
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 about when to use eval versus alternatives, and there are no exclusions or conditions stated. The approval note explains permission context but does not help an agent decide when this tool is the right choice compared to console, get_text, or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fillC
Fill an input/textarea identified by a CSS selector with the given value.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| selector | 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 burden. It does not disclose whether the fill replaces existing content, triggers events, waits for visibility, or errors when the selector is not found. The description only states the basic 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?
A single, front-loaded sentence with no filler or redundancy. Every word contributes to understanding what the tool does.
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 no annotations and no output schema, the description is too thin for an agent to fully anticipate behavior. It lacks side effects, prerequisites, and failure behavior, which are relevant for a tool that modifies a page.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It usefully clarifies that 'selector' is a CSS selector and that 'value' is the value to fill, but it adds no further detail about value formatting or selector behavior.
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'), a clear resource ('input/textarea'), and the mechanism ('identified by a CSS selector') with the value to set. It is clear about what the tool operates on, though it does not explicitly distinguish itself from the sibling 'type' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use fill versus alternatives like type, or any conditions or exclusions. The agent is left to infer when this tool is appropriate relative to its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forwardA
Navigate forward in history.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It simply states the action without explaining what happens if there is no forward history, whether it triggers a page load, or how errors are handled. This lack of behavioral context is a significant gap for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, four-word sentence that is perfectly concise. It contains no fluff or redundant information, and the key action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description covers the core action but omits contextual details like prerequisites (e.g., must have navigated back first) and failure behaviors. It is adequate for understanding the basic purpose but incomplete for robust agent decision-making.
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 is no semantic gap for the description to fill. Per the rubric, a tool with no parameters receives a baseline score of 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 specifies the action: navigate forward in history. It distinguishes itself from sibling tools like 'back' (the inverse) and 'navigate' (which typically goes to a specific URL) by indicating direction within the browsing history.
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 versus alternatives. It does not mention that forward navigation only works after going back, nor does it name or contrast with similar tools. Usage is only implied by the noun 'forward', which is insufficient for an agent deciding between this and other navigation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_textB
Return the visible text content of the page body.
| 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 does not mention return format (e.g., plain string, encoded text), behavior on dynamic content, or whether it waits for page load. The phrase 'visible text' implies it excludes hidden elements, but this is not confirmed.
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, concise sentence that is front-loaded with the core action and resource. Every word serves a purpose, and there is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no annotations, the description should cover return format, timing, and exclusions, but it only states the basic purpose. The absence of output schema means the agent cannot infer return details from structured metadata, so these gaps are significant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (no properties). The description adds value by clarifying what is returned, which is the only relevant semantic for a no-parameter tool. The baseline for zero params is 4, and the description meets that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb ('Return') and the resource ('visible text content of the page body'), making the purpose obvious. It distinguishes itself from sibling tools like screenshot (visual) and snapshot (likely structural/DOM), though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 snapshot or eval. The agent must infer from the description that get_text is for visible text only, which is not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hoverA
Hover the mouse over an element (by CSS selector or snapshot ref) — e.g. to open a dropdown menu.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | ||
| selector | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits on its own. It only states the basic action without mentioning side effects, whether it waits for element visibility, triggers events, or any state changes. This is a significant gap for a tool that could have nuanced behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. It efficiently conveys the action and targeting method, making it easy to parse.
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 two-parameter action with no output schema, the description covers the core usage and a common example. However, it omits behavioral details (e.g., whether hover triggers events, waits for element, or errors on missing element) that an agent might need for reliable execution, especially given the lack of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema lists two string parameters with no descriptions (coverage 0%), so the description compensates by explaining that 'selector' is a CSS selector and 'ref' is a snapshot ref, and implies they are alternatives. This adds meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('hover the mouse over an element') and specifies the two methods of targeting (CSS selector or snapshot ref). This distinguishes it from siblings like click, fill, and type, which perform different actions.
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 provides a concrete example ('to open a dropdown menu') that signals a common use case. However, it does not explicitly contrast with alternatives (e.g., when to use click instead) or state exclusions, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_allowedA
List the hosts the browser may navigate to, and whether all hosts are allowed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden. 'List' clearly signals a non-mutating read operation, and the description discloses that the output includes both the hosts and a boolean indicating whether all hosts are allowed. It does not detail output format or ordering, but for a parameterless query this is largely sufficient.
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 that conveys both the primary action and the extra output component with no filler. Every word contributes 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?
Given the tool's simplicity, zero parameters, and clear read-only purpose, the description is complete enough for an agent to invoke it correctly. The presence of sibling tools like allow_host and disallow_host gives sufficient context for how this fits into host management.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter meanings. The baseline of 4 applies because the schema is vacuously complete at 100% coverage and no parameter clarifications are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb, 'List,' and a clear resource, 'hosts the browser may navigate to,' and adds the extra output element, 'whether all hosts are allowed.' This distinguishes it well from siblings like allow_host and disallow_host, which mutate host permissions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to inspect the current set of allowed hosts, and the naming convention suggests it complements allow_host and disallow_host. However, it does not explicitly state when to prefer this over alternatives, nor does it mention any verification workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
networkA
Return recent network requests (method, url, status, resourceType).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says it returns requests, but does not clarify whether the list is cleared on retrieval, whether it includes pending requests, or whether it has side effects. For a read-like tool 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?
A single sentence that is fully front-loaded with the action and the returned fields. There is no filler or redundant phrasing; every word contributes to understanding the 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 zero-parameter, simple getter, the description is largely complete: it names the resource and the fields returned. However, there is no output schema and the description does not explain the meaning of 'recent' (e.g., count limits, persistence), but these are minor for the simplicity of the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 parameters), so the baseline is 4 and no parameter documentation is needed. The description adds no parameter-related meaning, but none is required; there is nothing to compensate for.
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 ('Return') and resource ('recent network requests'), and enumerates the exact fields (method, url, status, resourceType) that make the purpose concrete. This clearly differentiates it from sibling tools like 'console' or 'downloads', which cover other event types.
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, no mention of prerequisites, and no indication of whether it should be called before or after navigation. The description simply states what it returns, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_tabA
Open a new tab (optionally navigating to a URL) and make it active. Returns the updated tab list.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining behavior. It clearly discloses that a new tab is opened, that navigation is optional, that the tab becomes active, and that the updated tab list is returned. This is meaningful transparency for a simple tab-creation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly written sentence that front-loads the core action, adds the key optional behavior, and notes the return value. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, one optional parameter, and absence of an output schema, the description covers the essential behavior and return value. It is somewhat light on parameter detail and alternative routing, but it provides enough for an agent to call this tool correctly in most 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?
The single url parameter has no schema-level description, so the description's mention of 'optionally navigating to a URL' adds useful context by indicating the parameter is optional and controls navigation. It does not specify URL formatting or what happens when omitted, but the parameter name and string type make the basic meaning clear.
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: open a new tab, optionally navigate it to a URL, and make it active. This clearly distinguishes it from sibling tools like navigate, switch_tab, or close_tab by focusing on creating a new tab rather than operating on an existing one.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is implied by the description: use this when a new tab should be created and activated. However, it does not explicitly contrast with alternatives such as navigate (for changing the current tab) or switch_tab (for activating an already-open tab), leaving some routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyA
Press a key or chord on the keyboard (e.g. "Enter", "Tab", "Escape", "ArrowDown", "Control+A"). Useful to submit forms or navigate without a mouse.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name or chord, e.g. "Enter" or "Control+A" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the action and a likely consequence (form submission/navigation), but does not explain synthetic-event behavior, focus requirements, or side effects beyond pressing a key. This is minimal but not misleading.
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, zero fluff. The first sentence conveys the operation and examples; the second adds the use case. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter, no-output-schema tool, the combination of description and schema is sufficient. It lacks only deeper side-effect or event-detail disclosure, which is a minor gap given the straightforward scope.
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%, and the schema already defines the 'key' parameter with examples matching the description. The description adds no additional parameter-level meaning, so it sits at the baseline of 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?
States a specific verb and resource: 'Press a key or chord on the keyboard.' The examples ('Enter', 'Tab', 'Escape', 'ArrowDown', 'Control+A') and the use case ('submit forms or navigate without a mouse') make it easy to distinguish from sibling tools like click, hover, or type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear contexts: 'submit forms or navigate without a mouse.' However, it does not name alternatives (e.g., type for text, click for button activation) or explicitly state when not to use it, so the guidance is contextual but not comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reloadB
Reload the current page.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether the reload waits for page load, discards unsaved form state, or returns any result, leaving important behavioral traits 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?
The description is a single sentence with no filler or redundant detail. It is appropriately sized for a zero-parameter tool and front-loads the action clearly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core behavior is stated, but with no output schema and no annotations, the description leaves some context unspecified, such as whether the tool waits for navigation to complete and how it relates to reload_and_snapshot. It is adequate for invocation but not fully 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?
The tool has zero parameters, so the baseline is 4. No parameter-level documentation is needed, and the description adds no parameter meaning because there are no parameters to clarify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'reload' and the resource 'current page', making the core action clear. However, it does not differentiate itself from the sibling tool reload_and_snapshot, which also reloads the current page but then takes a snapshot.
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 about when to use reload versus navigate, go_back, go_forward, or reload_and_snapshot. The agent must infer the appropriate context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resizeB
Resize the page viewport.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | ||
| height | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description is the only behavioral disclosure, but it contains no side effects, units, constraints, or postconditions. It does not contradict anything, but it also does not add any hidden behavior 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 description is one short sentence with no filler, making it easy to parse quickly. It earns its place, even if lean.
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 two-parameter tool this is barely adequate, but the absence of units or behavioral notes leaves room for mis-invocation. It covers the basic action but lacks enough context to be considered fully 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?
The schema has 0% description coverage and the description does not explain width/height units, interpretation, or constraints. The parameter names are self-evident, but the description adds no semantic value 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 exactly what the tool does with a specific verb ('Resize') and a clear target ('the page viewport'). It is concise and distinguishable from the sibling navigation and 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 guidance is given about when to use this tool versus alternatives or any prerequisites. The description merely states the action, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshotB
Capture a screenshot of the current page (optionally full page or a single element). Use format 'jpeg' (with optional quality 1-100) for a lighter, faster capture; 'png' (default) is lossless.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ||
| quality | No | JPEG quality 1-100 (default 70); ignored for png | |
| fullPage | No | ||
| selector | 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 discloses format tradeoffs, default png, quality range, and optional full page/element capture. However, it does not state the return type (e.g., image data or file path), default viewport behavior, or what the 'selector' parameter expects. It adds useful behavioral context but leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The core action is front-loaded, and the format guidance is compactly integrated. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with no output schema and no annotations, the description is moderately helpful but incomplete: it omits return value details and precise semantics for fullPage and selector. An agent could likely handle a basic viewport screenshot but may struggle with element capture or interpreting the result.
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 25% (only quality has a description), so the description must compensate. It explains format and quality tradeoffs and mentions full page/element options, but it does not clarify the exact semantics of fullPage (default value, viewport vs full scroll) or selector (CSS selector vs other syntax). It adds value but does not fully cover the undocumented 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 and resource: 'Capture a screenshot of the current page' with optional full page or element capture. It is clear about the tool's function, but it does not explicitly distinguish itself from the sibling 'snapshot' tool, so it falls 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 provides format-selection guidance ('jpeg' for lighter/faster capture, 'png' is lossless) but gives no guidance on when to use screenshot versus the sibling snapshot tool or other browser tools. There is no when-not-to-use information or alternative recommendations, leaving tool selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_dialog_behaviorA
Set how JS dialogs are auto-handled: 'accept' (default) or 'dismiss'. beforeunload is always dismissed.
| Name | Required | Description | Default |
|---|---|---|---|
| behavior | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose a key behavioral trait: beforeunload is always dismissed regardless of the setting. It also implies that the setting persists for subsequent dialogs. However, it doesn't disclose whether this setting is session-wide, per-page, or resets after navigation, nor does it mention any side effects or limitations. The description adds some value but leaves important behavioral questions unanswered.
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, compact sentence that front-loads the core purpose and includes the key behavioral exception. Every word earns its place, and the structure is clear and efficient. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with an enum, the description is mostly adequate. It covers the core purpose, the parameter values, and a key behavioral exception. However, it lacks context about the scope of the setting (session, page, navigation), whether it affects all tabs or just the current one, and how it interacts with the 'dialogs' sibling tool. Given the tool's simplicity, this is a minor gap, but the missing scope information could lead to incorrect usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The description does explain the two enum values ('accept' and 'dismiss') and their meaning, which adds value beyond the raw schema. However, it doesn't explain the exact effect of each choice in detail (e.g., what happens to the dialog, whether a callback is triggered), and the schema already provides the enum values. The description adds some semantic meaning but not comprehensive parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: setting how JS dialogs are auto-handled, with 'accept' or 'dismiss' options. It distinguishes itself from sibling tools like 'dialogs' (which likely inspects dialogs) by focusing on the auto-handling behavior. However, it doesn't explicitly name a sibling alternative, so it loses a point for not fully differentiating from the 'dialogs' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you want to control JS dialog auto-handling. It mentions the default behavior ('accept') and a special case (beforeunload is always dismissed), which gives some context. However, it doesn't explicitly state when NOT to use it or mention alternatives like 'dialogs' for inspecting dialogs, so usage guidance is only implied, not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
snapshotA
Return a flat accessibility/DOM snapshot (tag, role, text, ref) for element targeting. Use a returned ref with click.
| 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. 'Return a flat snapshot' implies a read-only operation and no side effects, but it does not explicitly state that it does not modify the page or disclose any performance or pagination considerations. While the behavior is largely inferable from the name and description, the lack of explicit confirmation about non-modification is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero fluff. It front-loads the output structure and then provides actionable usage in the same breath. Every word earns its place, making it highly 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?
Given the tool's simplicity (no parameters, no output schema), the description is complete. It specifies the exact fields of the snapshot and how to consume them, which is all an agent needs to call and use the tool correctly. The absence of an output schema is compensated by the explicit field enumeration.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description adds value beyond the empty schema by explaining what the snapshot contains (tag, role, text, ref) and how the ref should be used, which is helpful for agents even though there is nothing to parameterize.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb (return), resource (flat accessibility/DOM snapshot), and the distinguishing content (tag, role, text, ref). It also ties the output to a concrete use case (element targeting) and names the sibling tool 'click' for downstream usage, making its purpose unambiguous and distinct from 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 description gives explicit guidance: 'Use a returned `ref` with `click`.' This provides a clear next step and implies the tool is for obtaining targeting references. However, it does not mention when to prefer this over alternatives (e.g., get_text or screenshot) or any exclusions, leaving some inference for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
switch_tabB
Switch the active tab by index (see tabs).
| Name | Required | Description | Default |
|---|---|---|---|
| index | 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 burden of behavioral disclosure. It states the action ('switch') but does not disclose consequences such as what happens to the current tab, whether the operation is reversible, or error behavior for invalid indices. This is a significant gap for a state-changing 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 a single, front-loaded sentence with no filler. Every word earns its place, and the parenthetical pointer to `tabs` is an efficient way to link related tooling.
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?
This is a simple tool with one parameter and no output schema, so the description is moderately complete. However, with no annotations, it should at least note that it changes browser state and handle out-of-range indices or return values. The current description covers the basic action but leaves behavioral edge cases unaddressed; a 3 reflects this minimal-but-clear coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'by index' and directs the agent to `tabs`, which helps infer the parameter's source, but it does not explain the indexing scheme (0-based, bounds, type semantics beyond schema). The description adds minimal meaning beyond the parameter name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Switch') and resource ('active tab') and clearly indicates the mechanism ('by index'). It also references the sibling tool `tabs`, which tells the agent where to obtain valid indices. This distinguishes it from related tab tools like new_tab, close_tab, and navigate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the workflow: use `tabs` to get indices, then switch by index. However, it does not explicitly state when to prefer this tool over alternatives or any exclusions (e.g., limitations with multiple windows). The guidance is present but implicit, so it's adequate but not thorough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tabsA
List open tabs (index, url, title, and which is active).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly indicates a read-only operation by using 'List', and specifies the output fields, so an agent knows it does not modify browser state. However, it does not explicitly state that there are no side effects or mention any permissions or system requirements, which would be helpful given the absence of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, front-loading the action and resource, then listing details. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool, the description is complete: it states the action, the target (open tabs), and the returned fields (index, url, title, active flag). No output schema exists, but the description covers what an agent needs 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?
The tool has no parameters, so the schema fully documents everything. The description adds no parameter information, but none is needed. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List') and resource ('open tabs'), and enumerates the fields returned (index, url, title, active). This clearly distinguishes it from sibling tools like switch_tab and new_tab, which perform different actions on tabs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need to see open tabs) but does not explicitly mention when to use it over alternatives like switch_tab or new_tab. There is no guidance on prerequisites or related tools, so an agent must infer the use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
typeB
Type text using the keyboard into the currently focused element.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that this simulates keyboard input and requires focus, but it does not say whether existing text is replaced or appended, how special characters/newlines are handled, or what side effects may occur.
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 concise sentence with no wasted words. It would earn a 5 if it also included a brief usage hint, but as written it is efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers the core operation reasonably well)Skip—what it does and where. However, it omits practical context like whether the text appends or replaces existing inputiard and when to prefer fill, which an agent would need to avoid mistakes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for text, so the parameter's meaning relies entirely on the tool description. The description makes clear that text is what gets typed, which is adequate for a single untyped string, but it adds no format details such as support for newlines or special keys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a concrete action ('Type text using the keyboard') and identifies the target resource ('the currently focused element'). This separates it from sibling tools like navigate or screenshot, and from fill, which might target form fields differently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the element must already be focused, but it does not explain when to choose type over fill, press_key, or other input-related siblings, nor does it mention any prerequisites like clicking or focusing first.
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 a selector to become visible, for text to appear, or for a short delay.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | ||
| selector | No | ||
| timeoutMs | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior, but it omits key traits: what happens on timeout, whether an error is thrown, polling/checking behavior, and whether timeoutMs represents a delay or a timeout limit. It names three modes but does not explain their semantics beyond surface level.
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 efficient sentence and is easy to parse. It front-loads the primary action, though it omits important detail; this is conciseness but also under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and three undocumented parameters, the description is incomplete. An agent cannot determine timeout behavior, parameter interaction, or whether calling with no arguments is valid. The described modes give some context but leave critical operational details unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'selector', 'text', and 'short delay', loosely mapping to the three properties, but it does not clarify units for timeoutMs, whether the parameters are mutually exclusive, or what happens when multiple are supplied. This is insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action ('wait for') and identifies the resources: a selector becoming visible, text appearing, or a short delay. It distinguishes the tool from siblings by its synchronization purpose, though it does not explicitly name an alternative or contrast behavior.
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, no prerequisites, and no mention of when not to use it. The description implies a synchronization use case but leaves the agent to infer context.
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.
54 tool updates
v0.4.0- Added
allow_host - Added
back - Removed
browser_allow_host - Removed
browser_back - Removed
browser_click - Removed
browser_close_tab - Removed
browser_console - Removed
browser_dialogs - Removed
browser_disallow_host - Removed
browser_downloads - Removed
browser_eval - Removed
browser_fill - Removed
browser_forward - Removed
browser_get_text - Removed
browser_hover - Removed
browser_list_allowed - Removed
browser_navigate - Removed
browser_network - Removed
browser_new_tab - Removed
browser_press_key - Removed
browser_reload - Removed
browser_resize - Removed
browser_screenshot - Removed
browser_set_dialog_behavior - Removed
browser_snapshot - Removed
browser_switch_tab - Removed
browser_tabs - Removed
browser_type - Removed
browser_wait_for - Added
click - Added
close_tab - Added
console - Added
dialogs - Added
disallow_host - Added
downloads - Added
eval - Added
fill - Added
forward - Added
get_text - Added
hover - Added
list_allowed - Added
navigate - Added
network - Added
new_tab - Added
press_key - Added
reload - Added
resize - Added
screenshot - Added
set_dialog_behavior - Added
snapshot - Added
switch_tab - Added
tabs - Added
type - Added
wait_for
19 tool updates
v0.3.0- Changed
browser_allow_host1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
browser_click1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
browser_close_tab - Added
browser_dialogs - Changed
browser_disallow_host1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
browser_downloads - Changed
browser_eval1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
browser_fill1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
browser_hover1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
browser_navigate1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
browser_new_tab - Added
browser_press_key - Changed
browser_resize1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
browser_screenshot3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / formatAdded value: +{ + "enum": [ + "png", + "jpeg" + ], + "type": "string" +} - added
Input schema / properties / qualityAdded value: +{ + "description": "JPEG quality 1-100 (default 70); ignored for png", + "maximum": 100, + "minimum": 1, + "type": "number" +}
- Added
browser_set_dialog_behavior - Added
browser_switch_tab - Added
browser_tabs - Changed
browser_type1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
browser_wait_for1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
19 tool updates
v0.2.0- First observed
browser_allow_host - First observed
browser_back - First observed
browser_click - First observed
browser_console - First observed
browser_disallow_host - First observed
browser_eval - First observed
browser_fill - First observed
browser_forward - First observed
browser_get_text - First observed
browser_hover - First observed
browser_list_allowed - First observed
browser_navigate - First observed
browser_network - First observed
browser_reload - First observed
browser_resize - First observed
browser_screenshot - First observed
browser_snapshot - First observed
browser_type - First observed
browser_wait_for
TDQS
Scored across 27 tools
Each tool targets a distinct browser action (navigation, interaction, inspection, tab management, dialogs, downloads, allowlist). No significant overlap; `snapshot` vs `get_text` and `fill` vs `type` are clearly differentiated.
All tools use lowercase_with_underscores, with action-oriented verbs (e.g., `navigate`, `click`, `wait_for`, `new_tab`). Consistent pattern throughout.
With 27 tools, the server exceeds the recommended range. While the breadth is comprehensive, it pushes into the 'too many' territory, risking agent confusion and maintenance overhead.
The tool set covers core browser operations well, but lacks explicit tools for URL retrieval, scrolling, and cookie management. However, `eval` can work around these gaps, so coverage is mostly complete.
Maintenance
Related MCP Connectors
Stealth web browser for agents: search, fetch, click, download and type in persistent MCP sessions.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
Headless browser primitives for AI agents when sites need real JS rendering.
Hyperbrowser MCP — wraps the Hyperbrowser AI-agent browsing API
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceMCP server that connects AI agents to a real Chrome browser via a WebSocket extension bridge, enabling over 40 browser control tools without debug mode or profile isolation.-
- AlicenseBqualityAmaintenanceA lightweight 30KB MCP browser automation server that uses raw Chrome DevTools Protocol to enable AI agents to browse the web, take screenshots, interact with elements, and capture live page events like console logs and network requests.267 npm15MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that gives AI clients controlled access to a real headless browser with domain allowlisting, SSRF protection, per-session isolation, audit logging, and persistent cookies/state across restarts.6 npmMIT
- AlicenseNot gradedqualityAmaintenanceA zero-dependency MCP server that drives a real Chrome browser through a companion extension, enabling AI agents to automate real user sessions with trusted input events, compact accessibility-tree snapshots, and 14 tools for navigation, interaction, scripting, and inspection.302 npm1MIT