Skip to main content
Glama
dgutierrez1

concurrent-playwright-mcp

by dgutierrez1

concurrent-playwright-mcp

An MCP server that runs concurrent, session-isolated Playwright browser contexts, so many agents can each drive their own browser at the same time without colliding.

The problem this solves

The official Playwright MCP server (@playwright/mcp) drives a single shared browser context by default, so concurrent clients share one cookie jar, storage, and set of tabs. That is fine for one agent doing one thing, but it breaks the moment you want parallel work:

  • Two sub-agents navigating at once stomp on each other's page, cookies, and storage.

  • A "log in as user A" flow and a "log in as user B" flow share one cookie jar, so the second login clobbers the first.

  • There is no clean way to give each task its own sandbox and tear it down independently.

This server fixes that. Every session gets its own BrowserContext (an incognito-like profile: isolated cookies, localStorage, cache, and tabs) keyed by a sessionId you choose. Sessions share one browser process for efficiency but never share state. The headline guarantee is verified by a real-browser test and a benchmark that asserts zero cross-session collisions.

@playwright/mcp (default)

concurrent-playwright-mcp

Parallel sessions

Shared context

Isolated context per sessionId

Cookies / storage

Shared

Isolated per session

Independent teardown

No

browser_close_session per session

Resource bounds

n/a

Session cap + optional idle eviction

Why not @playwright/mcp --isolated?

The official server can isolate too — its --isolated flag gives each connection its own context. The difference is the model:

  • Addressable sessions. Here isolation is keyed by a sessionId you choose and pass to every call, so a single client can open and drive many isolated sessions and route each call deliberately. With --isolated, a "session" is just the transport connection — you can't address N parallel contexts from one client.

  • Persistable, not ephemeral. --isolated discards all state when the browser closes. Here you can browser_save_storage_state and restore it (storageStatePath on create) to resume an authenticated profile across sessions. (An upstream request for named/persistent sessions was closed as out of scope.)

  • One lightweight context per session — not a process or container per session — so many sessions share one Chromium.

Use @playwright/mcp for a single browser; use this when many agents or tasks each need their own isolated, addressable session at the same time — especially over HTTP.

Related MCP server: ultimate-playwright-mcp

Architecture

cli.ts                  entrypoint: load config → pick transport
  ├─ config.ts          parse + validate env into a typed config
  ├─ transport/stdio.ts run over stdio (default)
  ├─ transport/http.ts  run Streamable HTTP: a session manager per client, one shared browser
  ├─ browser-provider.ts  the shared, lazily-launched, memoized Browser (a port)
  └─ server.ts          MCP edge: validates input (Zod), enforces policy, maps errors
       ├─ policy/url-policy.ts   navigation allowlist + file:/data: blocking (pure)
       ├─ policy/path-policy.ts  filesystem path confinement (pure)
       ├─ errors.ts             error taxonomy: SessionError base + machine-readable codes
       └─ session-manager.ts    isolated sessions over a BrowserProvider (the core)
            └─ session.ts        one isolated context: ref actions, capture, storage state

This is hexagonal: untrusted input is validated at the edge (server.ts) and passed inward as typed data, so the domain (SessionManager/BrowserSession) carries no transport or re-validation concerns and knows nothing about MCP. The browser is a port (BrowserProvider) injected into the manager, so the isolation guarantee is unit-tested with a fake browser (fast, no Chromium in CI) while a gated integration test proves it against real Chromium. The provider launches lazily and memoizes, so a burst of concurrent createSession calls shares one browser; over HTTP, every client gets its own session namespace while still sharing that one Chromium.

Install

npm install -g concurrent-playwright-mcp
# one-time: download the browser Playwright drives
npx playwright install chromium

Installing the package does not download Chromium — run npx playwright install chromium once, or the first browser_create_session call will fail with a Playwright hint to do so.

Or run from source:

npm install
npm run setup:browser   # playwright install chromium
npm run build

Use it from an MCP client

Over stdio (one client, e.g. Claude Desktop / Claude Code / Cursor)

Point your client at the binary; it launches one server process for that client:

{
  "mcpServers": {
    "concurrent-playwright": {
      "command": "npx",
      "args": ["-y", "concurrent-playwright-mcp"],
      "env": {
        "PW_HEADLESS": "true",
        "PW_MAX_SESSIONS": "20",
        "PW_IDLE_TIMEOUT_MS": "300000",
      },
    },
  },
}

Over HTTP (many remote / independent agents → one server)

Run one long-lived server and let multiple agent clients connect to it. Each client gets its own isolated session namespace (it cannot see or touch another client's sessions), while all clients share a single Chromium process:

PW_TRANSPORT=http PW_PORT=3000 npx -y concurrent-playwright-mcp
# clients connect to the Streamable HTTP endpoint at http://<host>:3000/

Most clients accept an HTTP MCP URL directly; e.g.:

{
  "mcpServers": {
    "concurrent-playwright": { "url": "http://localhost:3000/" },
  },
}

HTTP mode has no built-in authentication. It binds 127.0.0.1 by default and rejects mismatched Host headers (DNS-rebinding protection is on), so a local web page can't drive it. To serve real remote clients, set PW_HOST and add the externally-visible host to PW_ALLOWED_HOSTS (e.g. PW_ALLOWED_HOSTS=mcp.example.com:3000), and put it behind your own authenticating proxy / network controls — anyone who can reach the port can drive a browser.

The session-per-agent pattern

The core idea: each agent or task uses its own sessionId. Create it once, then pass it to every call; sessions never share cookies, storage, or tabs, so parallel work can't collide. Target elements by the ref ids returned from browser_snapshot (the accessibility tree), not raw CSS:

browser_create_session  { "sessionId": "userA", "viewport": { "width": 1440, "height": 900 } }
browser_create_session  { "sessionId": "userB", "viewport": { "width": 375,  "height": 812 } }   # in parallel, fully isolated
browser_navigate        { "sessionId": "userA", "url": "https://example.com" }
browser_snapshot        { "sessionId": "userA" }                       # → YAML with refs like [ref=e7]
browser_click           { "sessionId": "userA", "ref": "e7", "element": "Sign in button" }
browser_save_storage_state { "sessionId": "userA", "path": "userA.json" }   # reuse the login later
browser_close_session   { "sessionId": "userA" }

Those browser_… { … } lines are illustrative, not text you type. The model emits a structured tool call and the client routes it over MCP; you never hand-write tool calls.

How it works (integrating with an agent)

Three actors are involved:

  • Operator (you): install the package + Chromium and add the config block above. That is the entire human surface — you don't enumerate tools or write tool calls.

  • MCP client / harness (Claude Code, Claude Desktop, Cursor, …): spawns the server (stdio) or connects to it (HTTP), performs the MCP handshake, calls tools/list to discover the tools and their schemas automatically, and surfaces them — plus the server's built-in instructions — to the model.

  • LLM / agent: drives the tools in a loop: allocate a sessionIdbrowser_create_sessionbrowser_navigatebrowser_snapshot (read the page, get refs) → act by ref → … → browser_close_session.

Configuration happens at three layers:

Layer

Set by

Where

Examples

Server policy & limits

operator

env in the client config (stdio) or the server's env (HTTP)

PW_HEADLESS, PW_MAX_SESSIONS, PW_ALLOWED_ORIGINS, PW_OUTPUT_DIR, PW_TRANSPORT

Per-session

agent

browser_create_session args

sessionId (required), viewport, storageStatePath

Per-call

agent

each tool's args

url, ref + element, text, path, …

Security limits live only in the server layer — an agent can't widen them (it can't escape PW_OUTPUT_DIR or bypass PW_ALLOWED_ORIGINS). Per-call args are validated at the edge with defaults, so the agent can omit the optional ones.

Tools

The agent discovers these (with full JSON schemas) via tools/list; this reference is for human integrators. Optional params are marked ?. Every tool takes sessionId except browser_list_sessions.

Session lifecycle

Tool

Params (besides sessionId)

Returns

browser_create_session

viewport?, storageStatePath?

confirmation

browser_list_sessions

— (takes no sessionId)

JSON array of live session ids

browser_close_session

confirmation

browser_save_storage_state

path

path to saved cookies+localStorage

Navigation & inspection

Tool

Params (besides sessionId)

Returns

browser_navigate

url

confirmation

browser_navigate_back

confirmation

browser_snapshot

accessibility YAML with refs

browser_screenshot

fullPage?, path?

PNG image (+ saved file if path)

browser_evaluate

script

JSON-serialized result

browser_wait_for

selector, state?, timeout?

confirmation

browser_press_key

key

confirmation

browser_resize

width, height

confirmation

browser_console_messages

onlyErrors?

JSON

browser_network_requests

JSON

browser_handle_dialog

accept, promptText?

confirmation

browser_tabs

action (list/new/close/select), index?

confirmation / tab list

Element actions — target by ref + element (a human description) from the latest browser_snapshot:

Tool

Params (besides sessionId)

browser_click

ref, element

browser_hover

ref, element

browser_type

ref, element, text

browser_select_option

ref, element, values

browser_file_upload

ref, element, paths

browser_drag

sourceRef, sourceElement, targetRef, targetElement

browser_fill_form

fields — array of { ref, element, value }

Configuration (env vars)

Invalid values (e.g. a negative PW_MAX_SESSIONS) are rejected with a warning on stderr and the default is used; the effective config is logged to stderr at startup.

Var

Default

Meaning

PW_HEADLESS

true

false to show browser windows

PW_MAX_SESSIONS

50

Hard cap on live sessions

PW_MAX_TABS

20

Hard cap on tabs per session

PW_MAX_CAPTURE

1000

Max console/network entries retained per session

PW_IDLE_TIMEOUT_MS

0 (off)

Evict a session after this long with no use

PW_OUTPUT_DIR

./output

Directory screenshots are written to (paths confined to it)

PW_UPLOAD_DIR

unset (any)

Confine browser_file_upload paths to this directory

PW_ALLOWED_ORIGINS

unset (any)

Comma-separated origin allowlist for navigation

PW_ALLOW_FILE_URLS

false

Allow file:/data: navigation

PW_ACTION_TIMEOUT_MS

15000

Per-action timeout for element interactions

PW_EXECUTABLE_PATH

unset

Use a specific Chromium build

PW_TRANSPORT

stdio

http to serve over Streamable HTTP

PW_HOST

127.0.0.1

Host to bind in http mode

PW_PORT

3000

Port to bind in http mode

PW_ALLOWED_HOSTS

unset

Extra Host values accepted in http mode (see below)

Security model

This server is dual-use: it hands an MCP client real control of a browser. Treat the client as semi-trusted and any page it visits as untrusted (a hostile page can try to steer a credulous agent into calling these tools with attacker-chosen arguments). With that in mind:

  • Navigation (browser_navigate) blocks file: and data: URLs by default — the sharpest local-file-read / SSRF vector. Set PW_ALLOW_FILE_URLS=true to allow them. Note the default still permits any http(s) URL, including internal services and cloud metadata (169.254.169.254); set PW_ALLOWED_ORIGINS to restrict navigation to an allowlist of origins for any networked deployment.

  • Screenshots and storage state (browser_screenshot with a path, browser_save_storage_state, and storageStatePath on create) are confined to PW_OUTPUT_DIR; paths that try to escape it (via .. or an absolute path) are rejected. Storage-state files contain cookies and may hold auth tokens — treat the output dir accordingly.

  • File uploads (browser_file_upload) read local files. By default any path is allowed; set PW_UPLOAD_DIR to confine uploads to one directory.

  • browser_evaluate runs arbitrary JavaScript in the page (sandboxed to the page, not Node). It is a privileged capability; the navigation allowlist is the most effective containment.

  • HTTP mode binds 127.0.0.1 by default, enables DNS-rebinding protection (rejects unexpected Host headers), caps request body size and concurrent sessions, and gives each client an isolated session namespace. It has no authentication — see the warning under "Over HTTP" before exposing it beyond localhost.

Errors are reported in-band (isError) with a stable code prefix (e.g. NAVIGATION_BLOCKED, PATH_NOT_ALLOWED, SESSION_NOT_FOUND), never thrown across the JSON-RPC channel.

Demo and benchmark

npm run demo        # two isolated sessions (desktop + mobile) drive a site in parallel
npm run benchmark   # N parallel sessions, reports throughput + asserts 0 collisions
npm run benchmark 25

Development

npm run check              # typecheck + lint + format + unit tests
npm run test:coverage      # unit tests with coverage (no browser needed)
npm run test:integration   # gated real-Chromium tests: isolation + deterministic, offline e2e
                           #   journeys through the MCP server (needs Chromium). Add
                           #   PW_HEADLESS=false to watch the parallel, isolated windows.
npm run build              # tsup -> dist/ (ESM + d.ts)

Test tiers: fast unit tests (the merge gate, no browser) → deterministic real-Chromium integration and several end-to-end journeys through the MCP server against a local styled app (gated by RUN_INTEGRATION=1, also run in CI).

See AGENTS.md for the engineering conventions this repo is built to.

License

MIT

Available Tools

23 tools
browser_clickClickC

Click an element (by ref from browser_snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesElement ref from the latest browser_snapshot (e.g. 'e12')
elementYesHuman description of the element (for logs/errors)
sessionIdYesId of the isolated browser session

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description fully bears the burden of behavioral disclosure. It lacks details on what happens if the element is not found, whether it scrolls into view, waits for visibility, or what the outcome is. Essential behavioral traits 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.

Conciseness4/5

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

The description is a single, efficient sentence. It is concise but could be structured with separate usage notes. Still, it earns its place without fluff.

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

Completeness2/5

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

Given the simplicity of the tool and no output schema, the description should at least mention what the tool returns (e.g., success indicator) or common error conditions. It is incomplete for an agent to use effectively.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description reinforces that ref comes from browser_snapshot, which is already in the schema, adding no new semantic meaning beyond the schema descriptions.

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

Purpose4/5

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

The description clearly states it clicks an element by ref from browser_snapshot. The verb 'click' and resource 'element' are specific, distinguishing it from other browser actions like hover or type, though sibling differentiation could be stronger.

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

Usage Guidelines2/5

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

No guidance is provided on when to use or not use this tool. The phrase 'by ref from browser_snapshot' implies a prerequisite but does not explicitly state that a snapshot must be taken first or list alternative tools for other interaction patterns.

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

browser_close_sessionClose sessionA

Close a session and release its browser context.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesId of the isolated browser session

TDQS

A3.8/5.0
Behavior3/5

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

Description mentions 'release its browser context' which hints at cleanup, but lacks detail on side effects (e.g., does it destroy tabs? handle errors?). No annotations provided to compensate.

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

Conciseness5/5

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

Single sentence with no wasted words. Efficiently communicates the core functionality.

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

Completeness4/5

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

Given the simplicity of the tool (1 param, no output schema), description is mostly sufficient. However, it could mention error cases or that operation is irreversible.

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

Parameters3/5

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

Schema covers 100% of parameters with a clear description for sessionId. Description does not add further meaning beyond what schema already provides.

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

Purpose5/5

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

Description clearly states action: close a session and release its browser context. It uses specific verb and resource, and distinguishes from sibling tools like browser_create_session.

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

Usage Guidelines3/5

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

No explicit when or when-not to use this tool. Context is implied: close a session when done with it, but no guidance on prerequisites or consequences if session has pending actions.

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

browser_console_messagesConsole messagesC

Return console messages captured in the session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesId of the isolated browser session
onlyErrorsNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It only states the basic function without disclosing session dependency, message format, or the effect of the onlyErrors flag. Insufficient behavioral context.

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

Conciseness4/5

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

Single sentence with no wasted words. However, it is overly brief and could include more detail without sacrificing conciseness.

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

Completeness2/5

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

No output schema; description does not mention return format or error handling. With two parameters and no annotations, the description is incomplete for a retrieval tool.

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

Parameters2/5

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

Schema coverage is 50% (only sessionId described). The description adds no meaning for onlyErrors or sessionId beyond what the schema provides. Does not compensate for the undocumented parameter.

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

Purpose5/5

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

The description clearly states the verb 'Return' and resource 'console messages captured in the session', distinguishing it from siblings like browser_network_requests and browser_screenshot.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., browser_network_requests). The optional onlyErrors parameter is not explained. No context or exclusions provided.

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

browser_create_sessionCreate sessionA

Create an isolated browser session. Each session has its own cookies, storage, and tabs; sessions never share state, so many agents can drive separate sessions at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewportNoViewport size
sessionIdYesId of the isolated browser session
storageStatePathNoStorage-state JSON (within the output dir) to seed cookies/localStorage from

TDQS

A3.9/5.0
Behavior3/5

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

No annotations provided, so the description must cover behavioral traits. It discloses isolation and concurrency, but lacks details on authentication requirements, error handling (e.g., duplicate sessionId), rate limits, or session lifecycle. This is adequate but not comprehensive.

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

Conciseness5/5

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

Two sentences efficiently convey the core function and key behavioral trait. Front-loaded with the primary action, no filler, and every word adds value.

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

Completeness3/5

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

The description covers purpose and isolation behavior, but with no output schema, it omits return value information (e.g., session details). It also does not connect to sibling tools or sequence (e.g., use before browser_navigate). Adequate for a simple tool, but missing context for full agentic use.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema's descriptions already explain each parameter. The tool description adds no extra semantic value beyond the schema; it only reiterates isolation context. Baseline 3 is appropriate given high coverage.

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

Purpose5/5

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

The description clearly states it creates an isolated browser session, distinguishing it from operations within a session. It explicitly mentions separation of cookies, storage, and tabs, and that multiple agents can drive separate sessions, making the purpose specific and unambiguous.

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

Usage Guidelines4/5

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

The description implicitly indicates when to use this tool (when isolation is needed), but does not explicitly state prerequisites (e.g., must create a session before other browser actions) or exclude scenarios. A clear usage context is provided, but alternative or when-not-to-use guidance is absent.

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

browser_dragDrag and dropB

Drag one element onto another (both by ref from browser_snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesId of the isolated browser session
sourceRefYesElement ref from the latest browser_snapshot (e.g. 'e12')
targetRefYesElement ref from the latest browser_snapshot (e.g. 'e12')
sourceElementYesHuman description of the element (for logs/errors)
targetElementYesHuman description of the element (for logs/errors)

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It fails to mention key details like whether the action waits for drop completion, how the mouse moves, or if events (e.g., dragstart, drop) are fired. The description is too minimal to inform an agent of the tool's runtime behavior.

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

Conciseness4/5

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

The description is a single, short sentence that conveys the core purpose without unnecessary words. While it could be more informative, it is not verbose and respects the principle of front-loading. It earns its place.

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

Completeness2/5

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

Given the tool has 5 required parameters, no output schema, and no annotations, the description is insufficient. It does not explain return values, error conditions, or the sequence of actions (e.g., mouse down, move, up). For a complex action like drag-and-drop, more context is needed for an agent to use it effectively.

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

Parameters3/5

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

Schema descriptions already cover all 5 parameters with clear explanations (e.g., sourceRef is 'Element ref from the latest browser_snapshot'). The description adds no new semantic meaning, but since schema coverage is 100%, the baseline of 3 is appropriate. No contradictions or omissions.

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

Purpose5/5

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

The description clearly states the action ('Drag one element onto another') and specifies the resource ('both by ref from browser_snapshot'). It distinguishes from sibling tools like click, hover, and type by explicitly naming drag-and-drop. This is a specific verb-resource pair with no ambiguity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., browser_click for clicking or browser_hover for hovering). It does not mention prerequisites, when not to use it, or common pitfalls. The only context is implicit: use it for dragging elements.

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

browser_evaluateEvaluate JavaScriptB

Run a JavaScript expression in the page and return the JSON-serialized result.

ParametersJSON Schema
NameRequiredDescriptionDefault
scriptYes
sessionIdYesId of the isolated browser session

TDQS

B3.1/5.0
Behavior2/5

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

No annotations exist, so the description must fully convey behavioral traits. It mentions JSON serialization but omits critical details: whether the expression can have side effects, whether it supports async, or any security implications. The description is insufficient for understanding the tool's full behavior.

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

Conciseness4/5

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

The description is a single, concise sentence that front-loads the core action. It avoids unnecessary words but could benefit from slightly more structure for readability. Still, it is appropriately sized for the tool's simplicity.

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

Completeness2/5

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

Given the lack of output schema and annotations, the description leaves many gaps. It does not explain possible errors, return types beyond 'JSON-serialized', or behavior for complex expressions. The tool runs arbitrary code, which demands more completeness for safe usage.

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

Parameters3/5

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

Schema coverage is 50% (sessionId described, script not). The description adds no extra meaning to the script parameter beyond 'JavaScript expression'. It does not specify format, constraints, or how results are returned. Baseline 3 applies, as coverage is not low enough to require heavy compensation.

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

Purpose5/5

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

The description clearly states the tool runs JavaScript in a page and returns JSON-serialized results. The verb 'evaluate' combined with 'JavaScript expression' precisely defines the action, distinguishing it from sibling tools like clicks or navigation.

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

Usage Guidelines2/5

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

No usage guidelines provided. The description does not indicate when to use this tool over alternatives, nor does it mention prerequisites or exclusions. Sibling tools cover various actions, but there is no comparison or recommendation.

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

browser_file_uploadUpload filesB

Set files on a file input (by ref from browser_snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesElement ref from the latest browser_snapshot (e.g. 'e12')
pathsYesFile paths (confined to the upload dir if configured)
elementYesHuman description of the element (for logs/errors)
sessionIdYesId of the isolated browser session

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full burden but does not disclose behavioral traits such as session requirements, file path restrictions, or whether the upload is immediate. It only states what the tool does, not side effects or safety.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that gets directly to the point. However, it could be slightly more informative without losing conciseness.

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

Completeness2/5

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

Given the absence of annotations and output schema, and 4 required parameters, the description is insufficiently complete. It does not explain the return behavior, error conditions, or workflow context (e.g., need for an existing session).

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

Parameters3/5

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

The input schema has 100% coverage with individual parameter descriptions, so the tool description adds minimal extra meaning. The mention of 'by ref from browser_snapshot' is already covered in the ref parameter description.

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

Purpose5/5

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

The description clearly states the action ('Set files'), the target ('a file input'), and how to reference the element ('by ref from browser_snapshot'). It is specific to file upload and distinguishes it from sibling tools like browser_type or browser_click.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool vs alternatives, such as browser_type or browser_fill_form. The description does not mention prerequisites or constraints like file path availability.

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

browser_fill_formFill formA

Fill several fields in one call (each by ref from browser_snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes
sessionIdYesId of the isolated browser session

TDQS

A3.6/5.0
Behavior2/5

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

No annotations provided; the description does not disclose side effects, auto-submission, waiting behavior, or error handling, which is insufficient for a mutation tool.

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

Conciseness5/5

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

One concise sentence front-loading the key action and source of refs.

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

Completeness2/5

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

Lacks context on behavior, error handling, and side effects; given no output schema or annotations, the tool needs more explanation for safe usage.

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

Parameters3/5

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

Schema coverage is 50% with descriptions for ref, value, element; the description adds little beyond what's in the schema (refs from snapshot already documented in schema).

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

Purpose5/5

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

The description clearly states the tool fills several fields in one call using refs from browser_snapshot, distinguishing it from single-field actions like browser_type or browser_click.

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

Usage Guidelines4/5

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

It implies usage for batch filling from snapshot refs but does not explicitly mention when not to use it or alternatives for single fields.

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

browser_handle_dialogHandle dialogC

Decide the next dialog (alert/confirm/prompt) instead of auto-dismissing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
acceptYes
sessionIdYesId of the isolated browser session
promptTextNo

TDQS

C2.7/5.0
Behavior2/5

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

No annotations provided, so full burden on description. It mentions 'instead of auto-dismissing' but doesn't disclose blocking behavior, error conditions, or effects of parameters.

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

Conciseness4/5

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

One sentence, very concise. However, it could be restructured for clarity, adding separate statements for purpose and parameter hints.

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

Completeness2/5

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

Tool lacks output schema and annotations; description is too short to cover required parameter roles, side effects, or return behavior. Incomplete for a 3-param tool.

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

Parameters2/5

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

Schema coverage is only 33% (only sessionId has description). Description adds no meaning to parameters accept or promptText, which are undocumented.

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

Purpose4/5

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

Description states the verb 'Decide' and resource 'dialog' with types (alert/confirm/prompt), and contrasts with auto-dismissing. However, it could more explicitly say it accepts or dismisses the dialog.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus sibling tools. It doesn't mention prerequisites like when a dialog is present or how to trigger it.

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

browser_hoverHoverA

Hover over an element (by ref from browser_snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesElement ref from the latest browser_snapshot (e.g. 'e12')
elementYesHuman description of the element (for logs/errors)
sessionIdYesId of the isolated browser session

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description must convey behavioral traits. It only states the action without side effects, triggers, or error conditions. Missing details like whether it simulates a real hover or just moves cursor.

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

Conciseness5/5

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

Single sentence, minimal, front-loaded with purpose. No extraneous content.

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

Completeness3/5

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

Simple tool with full schema coverage; no output schema needed. However, lacks behavioral transparency and usage guidance, leaving gaps for an agent.

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

Parameters3/5

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

Schema coverage is 100%, so baseline 3. Description adds minor value by referencing snapshot but doesn't elaborate on parameter formats or constraints beyond schema.

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

Purpose5/5

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

Clear verb 'Hover over an element' with specific source 'by ref from browser_snapshot'. Distinguishes from sibling tools like browser_click and browser_type.

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

Usage Guidelines3/5

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

Implies need for prior snapshot but no explicit guidance on when to hover vs other interactions. No alternatives mentioned.

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

browser_list_sessionsList sessionsA

List the ids of all live browser sessions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, but the description accurately implies a read-only operation. It does not disclose potential side effects, but listing is inherently non-destructive.

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

Conciseness5/5

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

A single, concise sentence that conveys exactly what the tool does with no unnecessary words.

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

Completeness5/5

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

Given the simplicity of the tool (no parameters, no output schema), the description is complete and sufficient for an agent to understand its behavior.

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

Parameters5/5

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

The tool has zero parameters, so the description need not add any parameter information. The schema coverage is trivial, and the description is sufficient.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'ids of all live browser sessions'. It is specific and distinguishes from sibling tools like browser_create_session or browser_close_session.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives. The description is clear but lacks contextual cues for selection among siblings.

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

browser_navigateNavigateA

Navigate the session's active page to a URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesDestination URL
sessionIdYesId of the isolated browser session

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits like whether it waits for page load, error handling, or side effects. It only states 'navigate to a URL' without such details, leaving ambiguity for the agent.

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

Conciseness5/5

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

The description is a single concise sentence with no fluff. Every word is necessary and front-loaded.

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

Completeness3/5

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

Given no output schema and no annotations, the description is minimal but serviceable for a simple navigation tool. It could be improved by mentioning page load waiting or result behavior to be more complete.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no extra meaning beyond the schema's parameter descriptions, which already define 'Destination URL' and 'Id of the isolated browser session'.

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

Purpose5/5

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

The description clearly states the tool navigates the session's active page to a URL. The verb 'navigate' and resource 'session's active page' are specific and distinguish it from siblings like browser_navigate_back and browser_create_session.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool vs alternatives like browser_navigate_back or when to create a new session. The description implies usage for navigating to a URL but lacks when-not or alternative recommendations.

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

browser_navigate_backNavigate backB

Go back to the previous page in the session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesId of the isolated browser session

TDQS

B3.2/5.0
Behavior2/5

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

No annotations provided; description only says 'go back' without disclosing side effects like page reload, scroll position restoration, or form data loss. Minimal behavioral detail.

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

Conciseness4/5

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

Very short at 7 words, efficient and front-loaded. However, it could include additional context (e.g., that it works within a session) without being verbose.

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

Completeness3/5

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

For a simple action with one parameter and no output schema, the description is adequate but lacks completeness on prerequisites and behavior when no previous page exists.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter 'sessionId', which is described. The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action: 'Go back to the previous page.' It uses a specific verb+resource and distinguishes from sibling tool 'browser_navigate' which goes to a specific URL.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like browser_navigate or browser_tabs. It does not specify prerequisites or edge cases (e.g., no previous page).

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

browser_network_requestsNetwork requestsC

Return network responses captured in the session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesId of the isolated browser session

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description must disclose behavioral traits. It only states the return behavior but does not mention whether data is cleared, if authorization is needed, or if the tool is read-only. This lack of context 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.

Conciseness4/5

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

The description is concise with a single sentence. It is front-loaded with the action and result, but could benefit from additional context without being wordy.

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

Completeness2/5

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

Given no output schema and simple schema, the description is incomplete. It does not explain what format or content the network responses will have (e.g., list of objects with URL, status, body), nor any limitations like session timeout or number of responses.

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

Parameters3/5

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

Schema coverage is 100% with one parameter (sessionId) well-defined in schema. The description adds no extra semantic value beyond the schema, which is acceptable but not helpful.

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

Purpose4/5

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

The description clearly states the tool returns network responses, distinguishing it from sibling tools like browser_console_messages. However, it could be more specific about the scope (e.g., all requests, completed vs pending, inclusion of headers/body).

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

Usage Guidelines2/5

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

No usage guidance is provided. The description does not indicate when to use this tool versus others (e.g., browser_snapshot for visual captures) or any prerequisites like having an active session after navigation.

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

browser_press_keyPress keyB

Press a keyboard key (e.g. "Enter", "ArrowDown").

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
sessionIdYesId of the isolated browser session

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description bears the full burden of behavioral disclosure. It only says 'press a keyboard key' without specifying modifiers, key release behavior, or requirements like an active session.

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

Conciseness5/5

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

Single sentence, zero waste, and front-loaded with the action. Every word earns its place.

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

Completeness3/5

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

For a simple tool, the description is minimally adequate but lacks details about session requirement, key input constraints, and return behavior. Given the lack of output schema and missing param descriptions, it should provide more context.

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

Parameters3/5

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

Schema description coverage is 50% (sessionId described, key not). The description adds examples for the 'key' parameter, which adds some meaning, but does not specify allowed values or format.

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

Purpose5/5

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

The description clearly states it presses a keyboard key with examples like 'Enter' and 'ArrowDown', which differentiates it from sibling tools like browser_click (mouse) and browser_type (typing text).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives (e.g., browser_type for text input) or prerequisites (e.g., an existing browser session).

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

browser_resizeResize viewportC

Resize the session's viewport.

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYes
heightYes
sessionIdYesId of the isolated browser session

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. However, it only states the action without mentioning side effects, permissions, or constraints. For example, it does not specify whether resizing affects page content or requires an active session.

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

Conciseness4/5

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

The description is a single sentence with no wasted words, achieving conciseness. However, it is so minimal that it sacrifices necessary detail, which prevents a perfect score.

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

Completeness2/5

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

Given the tool has three required parameters and no output schema, the description is incomplete. It does not explain the effect of resizing, the relationship to other browser actions, or any prerequisites, leaving significant gaps for an agent.

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

Parameters1/5

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

Schema description coverage is only 33% (only sessionId described). The description adds no meaning for width and height beyond the schema's type and bounds. Since coverage is low, the description should compensate but fails to do so.

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

Purpose5/5

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

The description clearly states the verb 'Resize' and the resource 'session's viewport', which is specific and unambiguous. It distinguishes well from sibling tools like browser_navigate or browser_screenshot, as directly naming the action and target.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives, nor any conditions or exclusions. It simply states the action, leaving the agent without context for appropriate usage.

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

browser_save_storage_stateSave storage stateA

Save the session's cookies + localStorage to a JSON file (within the output dir) for later reuse via browser_create_session.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path within the output dir
sessionIdYesId of the isolated browser session

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses saving cookies+localStorage to a JSON file, but lacks details on overwrite behavior, permissions, or failure modes.

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

Conciseness5/5

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

A single sentence that is front-loaded with verb and resource, containing no extraneous information.

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

Completeness4/5

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

Given no output schema or annotations, the description adequately explains what is saved (cookies+localStorage), where (JSON file in output dir), and purpose (reuse via browser_create_session). It could mention the file path format, but it's sufficient.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds meaning by specifying 'cookies + localStorage' as the saved content, which goes beyond the parameter descriptions.

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

Purpose5/5

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

The description clearly states the action 'Save' and the resource 'session's cookies + localStorage to a JSON file'. It also distinguishes itself from siblings by mentioning 'for later reuse via browser_create_session'.

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

Usage Guidelines4/5

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

The description implies usage by mentioning it saves state for later reuse via a sibling tool, but it does not explicitly state when to use or provide alternatives beyond that sibling.

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

browser_screenshotScreenshotB

Capture a PNG of the active page and return it as an image. Optionally also save it to a file within the output dir.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOptional file path within the output dir to also save to
fullPageNo
sessionIdYesId of the isolated browser session

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It mentions returning a PNG and optional file save, but does not disclose side effects, performance impact, or that it is a read-only operation.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action, no redundant words.

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

Completeness2/5

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

Despite no output schema and no annotations, the description is minimal. It lacks details on return format (PNG is mentioned but not explicit), fullPage parameter behavior, and differentiation from browser_snapshot.

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

Parameters3/5

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

The description adds meaning for 'path' (optional save) beyond the schema, but does not explain 'fullPage' or clarify 'sessionId' beyond the schema. Schema description coverage is 67%, so additional explanation is moderately helpful.

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

Purpose5/5

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

The description clearly states the verb ('Capture'), resource ('active page'), and output ('PNG image'). It distinguishes from siblings like browser_snapshot by specifying the format and behavior.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives (e.g., browser_snapshot). No mention of when not to use or prerequisites.

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

browser_select_optionSelect optionB

Select one or more options in a (by ref from browser_snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesElement ref from the latest browser_snapshot (e.g. 'e12')
valuesYes
elementYesHuman description of the element (for logs/errors)
sessionIdYesId of the isolated browser session

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only says 'select options', not disclosing side effects (e.g., page mutation), requirements (element must be <select>), or limitations (only single selections? multiple?). This is insufficient for a UI interaction tool.

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

Conciseness5/5

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

The description is a single sentence with no wasted words. It is front-loaded with the core action and resource.

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

Completeness2/5

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

With no output schema, no annotations, and only partial parameter coverage, the description fails to provide sufficient context. It doesn't explain what happens after selection (e.g., page update, event triggers) or error conditions. For a UI interaction tool, this is inadequate.

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

Parameters3/5

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

Schema coverage is 75%, and the description adds context for the ref parameter (source). However, the values parameter lacks description in both schema and description, and the description does not explain the relationship between parameters or usage patterns beyond ref.

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

Purpose5/5

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

The description clearly states the tool selects options in a <select> element using a ref from browser_snapshot. It uses a specific verb and resource, and distinguishes from sibling tools like browser_click or browser_fill_form.

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

Usage Guidelines3/5

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

The description implies usage after browser_snapshot by mentioning 'by ref from browser_snapshot', but gives no when-to-use or when-not-to-use guidance, nor any alternatives.

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

browser_snapshotAccessibility snapshotA

Get the accessibility snapshot (YAML) of the active page, including element refs to target with other tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdYesId of the isolated browser session

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. States it gets snapshot of active page, which is a read-only operation. Does not disclose potential side effects, performance, or permissions needed, but adequate for a simple retrieval.

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

Conciseness5/5

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

Single sentence efficiently conveys purpose, format, and usage context. No redundant information.

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

Completeness4/5

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

No output schema exists, but description explains return value (YAML snapshot with element refs), sufficient for a simple retrieval tool. Lacks details on snapshot structure but adequate for use.

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

Parameters3/5

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

Schema coverage is 100% with sessionId described. Description adds no additional meaning to the parameter beyond schema, so baseline 3.

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

Purpose5/5

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

Clearly states it retrieves the accessibility snapshot in YAML format and includes element refs for targeting with other tools. Distinguishes from siblings like browser_screenshot (visual) and browser_evaluate (JS execution).

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

Usage Guidelines4/5

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

Explicitly mentions returning element refs for use with other tools, implying the tool is for obtaining targets for subsequent automation. No explicit 'when not to use', but context is clear given sibling diversity.

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

browser_tabsTabsC

List, open, close, or select a tab within the session.

ParametersJSON Schema
NameRequiredDescriptionDefault
indexNoTab index for close/select
actionYes
sessionIdYesId of the isolated browser session

TDQS

C2.9/5.0
Behavior2/5

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

Without annotations, the description should cover behavioral traits like side effects, session requirement, or zero-based indexing. It only lists actions without revealing how tabs are managed or that 'open' maps to action 'new'.

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

Conciseness4/5

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

Single sentence listing all actions, front-loaded and compact. Could improve by aligning 'open' with 'new' but otherwise efficient.

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

Completeness2/5

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

Given 22 sibling tools and no output schema, the description lacks critical context about session dependence, action semantics, and when to combine with other tools like browser_create_session.

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

Parameters2/5

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

The description adds no extra meaning beyond the schema; it even creates ambiguity by using 'open' for action 'new'. The optional index parameter is not clarified in context.

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

Purpose5/5

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

The description explicitly states the tool manages tabs (list, open, close, select) which aligns with the action enum and clearly distinguishes from sibling browser tools like browser_navigate or browser_create_session.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., existing session) or when to prefer other tools like browser_navigate for navigation.

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

browser_typeTypeA

Fill an input with text (by ref from browser_snapshot).

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesElement ref from the latest browser_snapshot (e.g. 'e12')
textYes
elementYesHuman description of the element (for logs/errors)
sessionIdYesId of the isolated browser session

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description bears full responsibility for behavioral disclosure. It states the core action but omits important details such as whether existing text is cleared, whether events are triggered, or how errors are handled. The description is too sparse for a mutation tool.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that efficiently conveys the tool's purpose. Every word adds value, with no redundancy or filler.

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

Completeness3/5

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

For a simple typing action, the description is minimally adequate but lacks information on return values, error conditions, and behavior with different input types (e.g., textarea vs input). With no output schema, the agent must infer results.

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

Parameters3/5

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

The schema already provides descriptions for 75% of parameters (ref, element, sessionId). The description adds context that ref comes from a snapshot, but does not elaborate on the 'text' parameter (no schema description) or the 'element' parameter beyond its human-readable purpose. It adds marginal value over the schema.

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

Purpose5/5

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

The description clearly states the tool's action ('Fill an input with text') and specifies the resource (an input) and the source of the element reference ('by ref from browser_snapshot'). This distinguishes it from sibling tools like browser_click or browser_fill_form.

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

Usage Guidelines3/5

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

The description implies usage after taking a snapshot (by mentioning 'from browser_snapshot'), but it does not explicitly state when to use this tool vs alternatives like browser_fill_form or browser_press_key. No usage restrictions or prerequisites are provided.

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

browser_wait_forWait for selectorB

Wait until a CSS selector reaches a state.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNovisible
timeoutNoTimeout in milliseconds
selectorYesCSS selector to wait for
sessionIdYesId of the isolated browser session

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. It fails to disclose behavioral traits such as timeout behavior, polling interval, or side effects, only restating 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.

Conciseness4/5

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

The description is concise and front-loaded, but it is very short; a bit more detail would improve without adding verbosity.

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

Completeness2/5

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

Given no annotations and no output schema, the description is insufficient. It does not explain return values, error handling, or behavior on timeout, leaving significant gaps.

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

Parameters3/5

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

Schema coverage is 75% with parameter descriptions, and the tool description adds no extra meaning beyond the basic action. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action (wait) on a specific resource (CSS selector) to reach a state, distinguishing it from sibling tools like browser_click or browser_navigate.

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

Usage Guidelines3/5

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

The description implies usage for waiting on selector states but does not explicitly state when to use or avoid this tool, nor does it mention alternatives.

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

TDQS

A3.5/5.0
Disambiguation5/5

Each tool targets a specific browser automation action (click, type, navigate, etc.) with clear boundaries. The only potential overlap is between browser_type and browser_fill_form, but the latter is explicitly for multiple fields, so no confusion.

Naming Consistency5/5

All tools follow the exact same `browser_<verb>` pattern in snake_case, providing a predictable and intuitive naming scheme. There are no deviations or mixed conventions.

Tool Count4/5

At 23 tools, the set is comprehensive but on the higher side. However, each tool serves a distinct and necessary browser automation function, so the count is justified and not excessive.

Completeness4/5

The tool surface covers nearly all essential browser automation tasks: navigation, interaction, evaluation, dialogs, network, console, sessions, storage, tabs, waiting, and screenshots. Minor gaps like scrolling or raw DOM queries exist but are workable.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    B
    maintenance
    An MCP server for generic browser automation using Playwright. Enables MCP clients to navigate pages, inspect elements, execute JavaScript, capture screenshots, and monitor console logs and network traffic via a headless Chromium instance.
    7
  • A
    license
    A
    quality
    D
    maintenance
    A tab-aware Playwright MCP server that enables multiple agents to operate on different tabs concurrently while sharing a single browser context and login session.
    23
    5
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dgutierrez1/concurrent-playwright-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server