playwright-mcp-tabbed
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., "@playwright-mcp-tabbedOpen a new tab, navigate to /orders, and take a snapshot."
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.
playwright-mcp-tabbed

A tab-aware Playwright MCP server for parallel agent workflows.
playwright-mcp-tabbed adds explicit tab_index support to Playwright MCP tools so multiple agents can operate on different tabs while sharing a single browser context and login session.
The Problem
The official @playwright/mcp model is centered around a shared active page. That is perfectly fine for single-agent flows, but it becomes fragile in concurrent workflows:
Agent A selects tab 1
Agent B selects tab 2
Agent A's next action may accidentally run on tab 2
This project removes that shared active-tab assumption. Instead, each tool call can target a tab directly.
Related MCP server: playwright-mcp-orchestrator
Typical Use Cases
playwright-mcp-tabbed is especially useful when browser automation is part of a larger agent workflow.
1. Batch bug fixing
One main agent logs in once, opens several tabs, and assigns one tab_index to each bug-fixing sub-agent. Every sub-agent can reproduce and verify its own issue in parallel without losing authentication state.
2. Multi-route regression checks
After a refactor, different agents can validate /orders, /wallet, /settings, and /users at the same time while staying inside the same logged-in admin session.
3. Side-by-side environment comparison
One tab points to the old app, another to the migrated app, and another to a staging environment. Agents can compare behavior or styling in parallel without repeatedly logging in.
4. Long workflows split across agents
Instead of forcing one agent to serialize a long browser journey, you can split related subflows into dedicated tabs and assign them to separate agents.
How It Works
One browser instance
One shared browser context
Many tabs
Every browser tool call can specify
tab_index
This gives you:
shared cookies and login state
stable routing to the intended tab
better fit for multi-agent orchestration
Key Features
Adds
tab_index(and stabletab_id) to nearly all browser toolsShares login state across tabs through one browser context for the same origin
browser_context_infoexplains open tabs and reminds thatlocalhostvs127.0.0.1use different cookiesOptional
PLAYWRIGHT_MCP_BASE_URLplusbrowser_navigate.base_urlfor relative paths like/dashboardbrowser_snapshotsupportsroot_selectorandmax_charsto limit MCP payload sizebrowser_clicksupportsforce,trial, andtimeout(Playwright semantics)browser_network_requestssupportslimitandurl_containsKeeps tool names close to the official Playwright MCP naming
Works well in Cursor and similar MCP clients
Designed for deterministic parallel agent behavior
Supported Tools
browser_tabsSupportsaction: "list" | "new" | "close";newaccepts optionallabel; list includestab_idper tabbrowser_context_infoJSON summary of tabs, origins, and per-origin storage notebrowser_navigatebrowser_snapshotbrowser_take_screenshotbrowser_run_codebrowser_clickbrowser_typebrowser_fill_formbrowser_file_uploadbrowser_hoverbrowser_select_optionbrowser_press_keybrowser_wait_forbrowser_evaluatebrowser_navigate_backbrowser_network_requestsbrowser_console_messagesbrowser_resizebrowser_dragbrowser_handle_dialogbrowser_closebrowser_install
Tools that target a page accept either tab_index or tab_id (mutually exclusive). Prefer tab_id when sub-agents might race on tab creation order.
{ "tab_index": 1 }{ "tab_id": "550e8400-e29b-41d4-a716-446655440000" }Exceptions (no tab argument): browser_tabs, browser_close, browser_install, browser_context_info.
Environment
PLAYWRIGHT_MCP_BASE_URL— optional default origin for relative URLs inbrowser_navigate(e.g.http://127.0.0.1:3000).PLAYWRIGHT_MCP_RECORD_VIDEO_DIR— optional writable directory for Playwright video recording. When set, each tab/page created in the shared browser context records a video. Video files are finalized when the page or browser context closes.
Differences From Official @playwright/mcp
browser_tabs.selectis intentionally not implementedtab switching is replaced by explicit
tab_indexroutingthe design target is concurrent agent execution, not a shared active-tab interaction model
Quick Start
Install via npm
npm install playwright-mcp-tabbedLocal install
git clone https://github.com/songofhawk/playwright-mcp-tabbed
cd playwright-mcp-tabbed && npm installAdd to Cursor
Add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"playwright-tabbed": {
"command": "node",
"args": ["/absolute/path/to/playwright-mcp-tabbed/dist/index.js"],
"env": {
"PLAYWRIGHT_MCP_RECORD_VIDEO_DIR": "/absolute/path/to/recordings"
}
}
}
}You can keep the official playwright server alongside it and only use playwright-tabbed for concurrent browser tasks.
If you do not need recording, omit env or leave PLAYWRIGHT_MCP_RECORD_VIDEO_DIR unset.
Agent skill: multi-tab orchestration
This repository includes an optional Agent Skill (for Cursor, Claude Code, and similar hosts) that documents how a main agent should create tabs, assign stable tab_ids to parallel sub-agents, and merge results—aligned with this MCP server.
Path in repo:
skills/playwright-tabbed-orchestration/— containsSKILL.mdand helper scriptscripts/resolve-base-url.js.Prerequisite: enable the
playwright-tabbedMCP server in your client (see Add to Cursor).Note: The published npm package includes
dist/andskills/; you can copy fromnode_modules/playwright-mcp-tabbed/skills/playwright-tabbed-orchestrationafter install, or clone / use GitHub subpath (below) so paths stay stable.
What the skill covers
Resolve PLAYWRIGHT_BASE_URL, open N tabs, split URL/scenario lists, spawn N sub-agents (each scoped to one tab_id), then summarize. Full steps, guardrails, and a sub-agent prompt template are in SKILL.md.
Install the skill
Cursor — copy the folder into a skills directory your Cursor version recognizes, for example:
Project-local:
<your-project>/.cursor/skills/playwright-tabbed-orchestration/Or your user-level skills path per current Cursor documentation.
Claude Code — copy to:
<repo>/.claude/skills/playwright-tabbed-orchestration/(or the global skills location described in Anthropic’s docs).
OpenAI Codex — use the Codex skill-installer helper against this repository and the subpath below (adjust --ref if not on main):
python scripts/install-skill-from-github.py \
--repo songofhawk/playwright-mcp-tabbed \
--path skills/playwright-tabbed-orchestrationEquivalent tree URL:
https://github.com/songofhawk/playwright-mcp-tabbed/tree/main/skills/playwright-tabbed-orchestration
Restart Cursor / Codex (or reload skills) after copying or installing.
Helper: resolve-base-url.js
From the skill root:
cd skills/playwright-tabbed-orchestration
node scripts/resolve-base-url.js --helpPrints the site root URL from PLAYWRIGHT_BASE_URL (environment variable and/or git-root .env.local / .env / playwright.env.local). When resolving from project files, run with your terminal cwd on the application repository, or set PLAYWRIGHT_BASE_URL explicitly.
When To Use It
Use playwright-mcp-tabbed when:
you have multiple sub-agents running browser tasks at the same time
you need shared login state across those tasks
you want deterministic browser routing without a shared current-tab pointer
Stay with the official @playwright/mcp when:
you only have one agent
your workflow is strictly sequential
you do not need shared tabs across concurrent tasks
Current Limitation
This project intentionally favors explicit tab routing over active-tab semantics. If your tooling depends on browser_tabs.select, this server is not a drop-in replacement for that specific behavior.
License
MIT
Available Tools
23 toolsbrowser_clickA
Click an element. Use force:true to bypass actionability checks when overlays block; trial:true to verify hit target without clicking.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No | If true, skip actionability checks (e.g. covered by overlay). | |
| trial | No | If true, perform a trial click without actually clicking. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| timeout | No | Max wait for element in ms (Playwright default applies if omitted). | |
| selector | Yes | CSS selector or text selector (e.g. "text=Submit"). | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It discloses actionability checks, force bypass, and trial behavior. However, it does not mention failure conditions or default timeout behavior, though these are partially in schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundancy, front-loaded with core action. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and simple action, the description covers core behavior and key options. Could mention return value or side effects, but adequate for a click 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 100%, so baseline is 3. The description adds context for force and trial beyond schema descriptions (e.g., 'when overlays block', 'verify hit target'), improving understanding.
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 'Click an element', specifying the verb (click) and resource (element). It distinguishes from sibling tools like browser_hover, browser_type, etc., 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?
The description provides guidance on using force:true for overlays and trial:true for verification, but does not explicitly contrast with alternatives or when not to use. Still, the action is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_closeA
Close the browser entirely and clean up all resources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description mentions 'clean up all resources', implying side effects. However, without annotations, it should disclose more about irreversibility or state changes.
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?
Single, clear sentence with no unnecessary words. Front-loaded with core action.
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?
Simple tool with no output schema, but description lacks usage context and behavioral details. Adequate for basic understanding.
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?
No parameters, schema coverage is 100%. Baseline score of 4 applies as the description adds no param-specific info.
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 ('close the browser entirely') and resource ('all resources'). It is specific and distinguishes from sibling tools like browser_navigate 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when or when not to use the tool. The purpose is obvious but lacks context such as finalizing tasks or freeing memory.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_console_messagesB
Get console messages (log, warn, error) from the page.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It only states the action without explaining side effects (e.g., whether messages are cleared), read-only nature, or scope (per-page or per-tab).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise and front-loaded. However, it omits important context that could be added without sacrificing conciseness.
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 output schema and no annotations, the description does not specify return format, whether it fetches all messages or new ones, or any other critical usage context for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 100% of parameters with descriptions. The tool description adds no extra meaning beyond the schema, which is sufficient but not enhanced.
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 retrieves console messages categorized as log, warn, error. The verb 'get' and resource 'console messages' are specific and distinguish it from siblings that perform other browser 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?
No guidance on when to use this tool versus alternatives like browser_network_requests or browser_evaluate. Does not specify prerequisites or scenarios where console messages are useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_context_infoA
Describe the shared browser context: all tabs, origins, and a note that cookies/storage are per-origin (localhost vs 127.0.0.1 are different).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses behavioral nuance about cookies/storage being per-origin with an example (localhost vs 127.0.0.1). In absence of annotations, this effectively communicates the read-only, state-inspecting nature of the 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?
Single sentence that is concise and front-loaded with key information: shared context, tabs, origins, and storage per-origin nuance. Every part 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?
Given no output schema and no annotations, description covers essential aspects: what is described (tabs, origins) and a critical behavioral detail. Minor lack could be mentioning the shared nature explicitly, but overall adequate.
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?
No parameters (0 params), so baseline 4 applies. Description does not need to add parameter info. Schema coverage is 100% as there are no properties.
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?
Description clearly states it describes the shared browser context, listing tabs and origins, and highlights a key nuance about cookies/storage per-origin. This differentiates it from sibling action tools like browser_navigate or browser_close.
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 explicit guidance on when to use this tool vs alternatives. Context suggests it's useful before browser actions to understand state, but the description does not state this or mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_dragB
Drag from one element to another.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. | |
| source_selector | Yes | CSS selector of element to drag from. | |
| target_selector | Yes | CSS selector of element to drag to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits like event triggering, drop behavior, or prerequisites. With no annotations, the description carries the full burden, which it fails to meet.
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 redundant information. It is efficiently structured for a simple action.
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 drag action, the description is functionally complete given the schema defines selectors, but it lacks information about return values or expected behavior after dragging.
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%, with detailed parameter descriptions. The description adds no extra meaning beyond what the schema provides, so a baseline score of 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 clearly states the action 'Drag from one element to another.' It uses a specific verb and resource, but does not differentiate from similar sibling actions like click or hover, though no sibling drag tool exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as clicking or hovering. The description lacks context for optimal usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_evaluateC
Execute JavaScript in the page context and return the result.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | JavaScript code to execute. Can return a value. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility for behavioral disclosure. It does not mention execution modality (sync/async), scope, side effects, security implications, or return value details—critical omissions for a tool that runs arbitrary JavaScript.
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 of 11 words, which is highly concise and front-loaded. However, the brevity comes at the cost of omitting important details, making it efficient but slightly under-informative.
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 lack of an output schema, the description should explain how the result is returned (type, structure, potential errors). It only says 'return the result', which is vague. Important details about async handling, DOM access, and failure modes are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents each parameter. The description adds no extra meaning beyond what the schema provides, aligning with the baseline score of 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute JavaScript in the page context and return the result', which specifies the verb (execute), resource (JavaScript), and outcome (return result). However, it does not differentiate from the sibling tool 'browser_run_code', which likely performs a similar action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like browser_run_code, nor are there any prerequisites, context signals, or exclusions mentioned. The description leaves the agent without situational cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_file_uploadC
Upload one or multiple files in the specified tab.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | Absolute paths to files. If omitted, cancels the file chooser or clears the input. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It only states 'upload files' without disclosing behavioral impacts such as whether it triggers a file chooser, overwrites existing files, or has restrictions. The schema hints at cancel/clear behavior via the paths parameter, but the description itself adds no transparency.
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 action. No redundancy, but it could include more context without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex with 3 optional parameters and no output schema. The brief description lacks essential context such as when a file chooser is required, how the tool interacts with file inputs, or what happens if paths are omitted. More completeness is needed given the absence 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?
Schema coverage is 100%, so the schema already documents all parameters. The description does not add additional meaning beyond what the schema provides, meeting 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?
Description states 'Upload one or multiple files in the specified tab,' which is a clear verb+resource combination. However, it does not specify that this tool interacts with file chooser dialogs or file input elements, which limits precision compared to sibling 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 provided on when to use this tool versus alternatives like browser_click or browser_type for file inputs. There is no mention of prerequisites (e.g., needing an active file chooser) or 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.
browser_fill_formB
Fill multiple form fields at once.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | List of {selector, value} pairs. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Only states action without disclosing behavior like whether it clears existing fields, submits forms, or handles errors. Lacks crucial transparency for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with no waste. However, front-loading is adequate but could be structured better to include usage context. Still earns a high score for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite few parameters and no output schema, description is too minimal. Does not mention return value, success/failure indicators, or any side effects. Incomplete for an agent to fully understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for each parameter. Description adds no extra meaning beyond 'fill multiple form fields at once', which is already implied. 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?
Description clearly states the tool fills multiple form fields at once. Verb 'fill' with resource 'form fields' is specific, and 'multiple' distinguishes it from sibling tools like browser_type which likely fills a single field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like browser_type or browser_click. Does not mention prerequisites or scenarios where it is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_handle_dialogA
Set up handling for the next browser dialog (alert/confirm/prompt).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Whether to accept or dismiss the dialog. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. | |
| prompt_text | No | Text to enter if the dialog is a prompt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It only says 'set up handling' without explaining that it waits for a dialog, is one-time, or may time out. This lacks sufficient detail for an agent to understand the tool's operational characteristics.
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 extraneous words. 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?
Given no output schema, the description is minimal. It explains the core purpose but omits details like return value, side effects (e.g., dialog is handled only once), or timeout behavior. For a simple tool, this is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with good descriptions. The tool description does not add any further meaning to the parameters, so 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 clearly identifies the verb 'Set up handling' and the resource 'next browser dialog', specifying it's for alerts/confirm/prompts. It distinguishes itself from sibling tools like browser_click or browser_type, which do not handle dialogs.
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 a browser dialog appears, but does not explicitly state when to use vs alternatives or provide scenario guidance. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_hoverC
Hover over an element.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| selector | Yes | CSS selector of the element to hover. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fails to disclose behavioral traits such as triggering hover events, waiting for elements, or side effects like changing element state. This lack of detail could lead to misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise at one sentence, no wasted words. However, it may be too brief, lacking structure or additional context that could improve utility.
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, no output schema, and only one required param, the description is insufficient. It omits details about return values, behavior on missing elements, or interaction with JavaScript events, which are critical for a hover action.
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%, so the baseline is 3. The description adds no extra meaning beyond the schema, but the schema itself defines parameters adequately. No credit for repetition.
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?
Description clearly states the action (hover) and the target (element), making it unambiguous. However, it does not differentiate from sibling tools like browser_click or browser_type, which also target elements with specific 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?
No guidance on when to use hover versus other interaction tools (e.g., click, type). Does not specify prerequisites, such as element visibility or hover effects, nor when to avoid using this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_installB
Install Chromium used by this MCP server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description lacks behavioral details. With no annotations provided, the description carries the full burden. It does not disclose idempotency, permissions required, or what happens if Chrome is already installed. A simple 'Install' does not reveal potential side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that conveys the tool's purpose without any filler. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter setup tool, the description is minimal but arguably sufficient. However, it lacks information about when to run it (e.g., once per session), expected return value, or prerequisites like internet connectivity. Sibling tools suggest this is a setup step, but no context is given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the description does not need to explain parameter values. Baseline for 0 params is 4, as the schema already provides full coverage. The description adds no extra parameter information, which is acceptable.
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 installs Chromium for the MCP server. It is a specific verb and resource, and it distinguishes itself from sibling tools that perform browser actions like navigation or clicking. A slightly higher score would require more detail on what 'used by this MCP server' entails.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. While it is the only install tool, there is no mention of prerequisites (e.g., running before other browser tools) or when not to use it (e.g., if already installed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_network_requestsB
List recent network requests captured for this tab (since tracking started).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of entries from the end of the log (default: 50). | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. | |
| url_contains | No | If set, only return requests whose URL includes this substring. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It mentions 'since tracking started' without explaining when tracking starts, whether it's automatic, or any side effects. For a read operation, minimal disclosure is insufficient.
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 key action and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description should explain what the response contains (e.g., request details, timing). It does not. Additionally, it omits context about tracking lifecycle (start, reset, scope). Incomplete for a parameter-rich tool with 4 params.
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% with all parameters described. The description adds no additional meaning beyond what the schema already provides, so baseline score of 3 applies.
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 it lists recent network requests captured for a tab. It uses specific verb+resource (list network requests) and differentiates from sibling tools like browser_console_messages or browser_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?
The description implies usage when network request data is needed, but lacks explicit guidance on when to use versus alternatives, or when not to use it. No exclusions or context cues are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_press_keyB
Press a keyboard key.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key to press, e.g. "Enter", "Escape", "Tab", "ArrowDown". | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits such as whether the key press is sent to the focused element, whether it triggers keydown and keyup events, or special behaviors for modifier keys. No annotations are 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at 4 words, with no unnecessary information. It is front-loaded and 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 simple tool with a well-documented schema and no output schema, the description is minimally adequate. It lacks context about behavior when no element is focused or whether the press is simulated, but the schema covers the parameters sufficiently.
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%, so the description adds minimal value. It lists example keys ('Enter', 'Escape') which are also in the schema description. The meaning of the parameters is clear from the schema, justifying a 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?
The description 'Press a keyboard key' clearly states the verb (press) and resource (keyboard key), distinguishing it from sibling tools like browser_click or browser_type. However, it could be more specific about what constitutes a key press (e.g., simulating keydown and keyup).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like browser_type or browser_click. For example, it does not indicate that press_key is for single key commands while type is for text input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_resizeC
Resize the browser viewport.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | Viewport width in pixels. | |
| height | Yes | Viewport height in pixels. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fails to disclose whether resizing affects only the current tab, requires a page, or has any side effects. No mention of tab_id/tab_index mutual exclusivity or other behavioral traits.
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, but it sacrifices useful context for brevity. It could include key requirements (e.g., valid width/height) without being verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 parameters, no output schema, and no annotations, the description is too brief. It omits important context like the mutual exclusivity of tab_id and tab_index, return behavior, and constraints (e.g., positive integers).
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% (all 4 parameters have descriptions). The tool description adds no additional meaning beyond what the schema provides. Baseline score of 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 'Resize the browser viewport' clearly states the action and resource. It is specific and distinguishable from sibling tools like browser_navigate or browser_click. However, it lacks scope details (e.g., setting width/height) but these are in the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., browser_context_info) or when not to use it. No mention of prerequisites or best practices for resizing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_run_codeB
Run a Playwright JavaScript function against the specified tab.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | A JavaScript function body or arrow function. It will receive page as the first argument. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only states the basic action without disclosing behavioral traits such as side effects, execution context, permissions required, or error handling. The detail about 'receive page as the first argument' adds some context but is insufficient.
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 that conveys the essential information without any unnecessary words. It is concise 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?
The tool has three parameters, no output schema, and no annotations. The description does not explain what the function returns, whether it can be asynchronous, or any constraints. Important context like the execution environment (browser vs Node) is missing, making it insufficient for an agent to reliably use 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?
Schema description coverage is 100%, so baseline is 3. The description adds value for the 'code' parameter by clarifying that the function will receive 'page' as the first argument, which goes beyond the schema. This justifies a score above baseline.
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 it runs a Playwright JavaScript function against a specified tab. The verb 'run' and resource 'JavaScript function' are specific, but it doesn't explicitly differentiate from sibling 'browser_evaluate' which also runs JavaScript. However, the mention of 'receive page as the first argument' hints at a distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like browser_evaluate or browser_type. The description lacks any 'when to use' or 'when not to use' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_select_optionB
Select an option in a element.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Option value or label to select. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| selector | Yes | CSS selector of the <select> element. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
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 only mentions 'Select an option,' implying a write operation, but lacks details about events triggered, prerequisites, side effects, or error conditions.
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 that efficiently conveys the core action with no wasted words. Every word earns its place, balancing brevity with 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?
Given the absence of an output schema and the need to understand tab targeting and behavioral context, the description is incomplete. It does not explain return values, interaction with tab_id/tab_index, or when to prefer this over other browser interaction tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with clear parameter descriptions. The tool description adds no additional semantic value beyond what the schema already provides, meeting 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?
The description clearly states the verb 'Select' and resource 'an option in a <select> element,' making the tool's purpose specific and unambiguous. It distinguishes from sibling tools like browser_click by targeting <select> elements exclusively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., browser_click or browser_type). It only states the basic action, leaving the agent to infer usage context without explicit exclusions or recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_snapshotA
Accessibility snapshot (structured DOM text). Use root_selector to narrow scope; max_chars avoids huge MCP payloads.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| max_chars | No | If set, truncate snapshot to this many characters and append a notice. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. | |
| root_selector | No | CSS selector for the subtree to snapshot (default: body). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses output type (structured DOM text) and truncation behavior with max_chars. With no annotations, the description carries the burden; it covers key behavioral traits but omits potential side effects (e.g., freezing on large pages) or performance 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?
Two sentences, no wasted words. Front-loaded with the tool's core purpose. 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?
Given 4 parameters and no output schema, the description covers the essential purpose, scope control, and payload limit. Could elaborate on what 'structured DOM text' includes (e.g., attributes, text nodes) or default behavior, but schema partially fills gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds practical usage hints ('narrow scope', 'avoids huge payloads') that repeat or lightly extend schema descriptions. Does not add significant new semantics.
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 'Accessibility snapshot (structured DOM text),' with a specific verb (snapshot) and resource (DOM). It distinguishes from sibling tools like browser_take_screenshot (visual) and browser_context_info (metadata).
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 some parameter guidance ('Use root_selector to narrow scope; max_chars avoids huge MCP payloads') but no explicit when-to-use or when-not-to-use compared to sibling tools. The agent must infer from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_tabsA
List, create, or close browser tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | Tab index to close (required for close action). | |
| label | No | Optional label for the new tab (action new only); shown in list for parallel agent bookkeeping. | |
| action | Yes | list: all tabs with index, tab_id, label, url, title. new: blank tab (returns index + tab_id). close: close by index. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only restates the actions. It does not disclose side effects, error handling (e.g., closing non-existent tab), prerequisites, or return format beyond the schema. The label parameter's 'parallel agent bookkeeping' is a minor addition but insufficient.
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, concise and front-loaded with key actions. No wasted words, but could be slightly more detailed without losing efficiency.
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 terse. It lacks details on return values (e.g., what 'list' returns), error handling, or prerequisites (e.g., requires a browser session). For a simple tool, it's minimally adequate but misses important context.
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%, so baseline is 3. The description adds minimal value beyond the schema (e.g., 'parallel agent bookkeeping' for label). The schema already describes parameter purpose adequately.
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 actions (list, create, close) and resource (browser tabs). It distinguishes from sibling tools by focusing specifically on tab operations, leaving other browser actions to siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly tells when to use the tool (for tab management) via the action list. However, it does not explicitly compare with alternatives like browser_close (which might close the browser) or other tab-related tools, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_take_screenshotB
Take a screenshot of the specified tab. Returns a base64 PNG image.
| Name | Required | Description | Default |
|---|---|---|---|
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| full_page | No | Capture full page (default: false). | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. It mentions return format (base64 PNG) but omits details like effect of full_page parameter, potential side effects, or prerequisites (e.g., tab must exist).
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?
Single sentence, 12 words, efficient. Could have a bit more structure (e.g., separating purpose and output), but it is appropriately 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?
No output schema, but description states return type. For a simple screenshot tool with well-documented params in schema, description covers essentials. Missing details on edge cases (e.g., no tab, full page limits).
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%, so baseline is 3. Description adds no extra meaning beyond the schema; it does not elaborate on parameter usage or constraints.
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?
Clearly states action ('Take a screenshot') and resource ('specified tab'). Distinct 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.
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, nor when not to use it. Context signals show many sibling tools, but description provides no comparative advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeB
Type text into a focused or selected input element.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type. | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| selector | Yes | CSS selector of the input element. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. | |
| clear_first | No | Clear existing text before typing (default: false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It fails to mention that it can clear text first (via clear_first parameter) or how typing is performed (e.g., character by character, event triggering). The phrase 'focused or selected' is ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, which is concise but lacks important details. It is front-loaded but under-specified for a tool with 5 parameters.
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 5 parameters, 2 required, no output schema, and no annotations, the description is incomplete. It does not explain behavior for missing elements, tab disambiguation, or typing mechanics.
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 covers all 5 parameters with descriptions, achieving 100% coverage. The description adds no additional meaning beyond the schema, so baseline score of 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 the verb 'type' and the resource 'focused or selected input element', clearly indicating the action and target. It 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.
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 vs alternatives like browser_fill_form or browser_press_key. It does not mention prerequisites (e.g., element must be focused) or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_wait_forB
Wait for a selector to appear or disappear, or wait for navigation.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | State to wait for (default: visible). | |
| tab_id | No | Stable tab id from browser_tabs list; preferred when multiple agents run in parallel. Mutually exclusive with tab_index. | |
| timeout | No | Max wait time in ms (default: 10000). | |
| selector | Yes | CSS selector to wait for. | |
| tab_index | No | Tab index from browser_tabs list. If omitted, uses the lowest-index tab. Mutually exclusive with tab_id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only mentions waiting for states but does not explain timeout behavior, failure handling, or side effects. For a wait tool, more detail on what happens when the condition is not met is needed.
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 very concise (one sentence), which is good but comes at the cost of completeness. It is front-loaded with the core intent, but lacks important usage and behavioral details that would make it effective without forcing the agent to infer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple wait states, navigation, 5 parameters) and absence of an output schema, the description is too brief. It does not explain return values, error behavior, or how multiple wait conditions interact, leaving the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description adds high-level context ('appear or disappear') but does not augment parameter semantics beyond what the schema already provides. Baseline score of 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 clearly states the tool's purpose: 'Wait for a selector to appear or disappear, or wait for navigation.' It specifies the action (wait) and the target (selector/navigation), distinguishing it from sibling tools that perform actions like clicking or navigating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives (e.g., when to wait for visibility vs. just performing an action). There is no mention of prerequisites, exclusions, or context-driven selection criteria.
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.
23 tool updates
v1.1.2- First observed
browser_click - First observed
browser_close - First observed
browser_console_messages - First observed
browser_context_info - First observed
browser_drag - First observed
browser_evaluate - First observed
browser_file_upload - First observed
browser_fill_form - First observed
browser_handle_dialog - First observed
browser_hover - First observed
browser_install - First observed
browser_navigate - First observed
browser_navigate_back - First observed
browser_network_requests - First observed
browser_press_key - First observed
browser_resize - First observed
browser_run_code - First observed
browser_select_option - First observed
browser_snapshot - First observed
browser_tabs - First observed
browser_take_screenshot - First observed
browser_type - First observed
browser_wait_for
TDQS
Scored across 23 tools
Most tools target distinct actions, but browser_run_code and browser_evaluate overlap heavily as JavaScript execution tools. browser_tabs bundles list/create/close tab operations while browser_context_info also describes tabs, adding some boundary ambiguity.
The browser_ prefix is used consistently and most tools follow a verb_object style. The main deviations are noun-style names like browser_tabs, browser_context_info, browser_network_requests, and browser_console_messages, plus loose forms like browser_wait_for.
23 tools is on the heavy side for an MCP server, though the browser automation scope justifies much of the surface. The count could be tightened by merging or removing the overlapping JS execution tools.
The toolset covers navigation, interaction, forms, uploads, drag-and-drop, dialogs, waiting, screenshots, accessibility snapshots, console logs, network requests, tabs, and browser lifecycle. Minor gaps like cookie/storage management and an explicit reload/new-page tool exist, but core automation workflows have no dead ends.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP Server for an Agent Task Marketplace
An MCP memory server. One memory your agents share — across models, devices and apps.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceA Playwright-based MCP server that exposes a live browser as a traceable, inspectable, debuggable and controllable execution environment for AI agents.3,661 npm57-
- FlicenseNot gradedqualityDmaintenanceA multi-agent orchestrator that enables multiple AI agents to share a single Chrome browser instance with tab isolation and shared state. It preserves local browser data like cookies and logins while allowing concurrent agent sessions through the official Playwright MCP.9-
- AlicenseAqualityCmaintenanceMulti-agent Playwright MCP server with tab isolation via targetId, enabling multiple agents to share a single Chrome browser while maintaining isolated tab groups and shared sessions.1417 npm3MIT
- FlicenseBqualityBmaintenanceAn 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-