Skip to main content
Glama
nzjami

Playwright MCP

by nzjami

Playwright MCP

A Model Context Protocol (MCP) server that provides browser automation capabilities using Playwright. This server enables LLMs to interact with web pages through structured accessibility snapshots, bypassing the need for screenshots or visually-tuned models.

Key Features

  • Fast and lightweight. Uses Playwright's accessibility tree, not pixel-based input.

  • LLM-friendly. No vision models needed, operates purely on structured data.

  • Deterministic tool application. Avoids ambiguity common with screenshot-based approaches.

Requirements

  • Node.js 18 or newer

  • VS Code, Cursor, Windsurf, Claude Desktop, Goose or any other MCP client

Getting started

First, install the Playwright MCP server with your client.

Standard config works in most of the tools:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

Use the Claude Code CLI to add the Playwright MCP server:

claude mcp add playwright npx @playwright/mcp@latest

Follow the MCP install guide, use the standard config above.

Click the button to install:

Install MCP Server

Or install manually:

Go to Cursor Settings -> MCP -> Add new MCP Server. Name to your liking, use command type with the command npx @playwright/mcp. You can also verify config or add command like arguments via clicking Edit.

Follow the MCP install guide, use the standard config above.

Click the button to install:

Install in Goose

Or install manually:

Go to Advanced settings -> Extensions -> Add custom extension. Name to your liking, use type STDIO, and set the command to npx @playwright/mcp. Click "Add Extension".

Click the button to install:

Add MCP Server playwright to LM Studio

Or install manually:

Go to Program in the right sidebar -> Install -> Edit mcp.json. Use the standard config above.

Open Qodo Gen chat panel in VSCode or IntelliJ → Connect more tools → + Add new MCP → Paste the standard config above.

Click Save.

Click the button to install:

Or install manually:

Follow the MCP install guide, use the standard config above. You can also install the Playwright MCP server using the VS Code CLI:

# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'

After installation, the Playwright MCP server will be available for use with your GitHub Copilot agent in VS Code.

Follow Windsurf MCP documentation. Use the standard config above.

Configuration

Playwright MCP server supports following arguments. They can be provided in the JSON configuration above, as a part of the "args" list:

> npx @playwright/mcp@latest --help
  --allowed-origins <origins>  semicolon-separated list of origins to allow the
                               browser to request. Default is to allow all.
  --blocked-origins <origins>  semicolon-separated list of origins to block the
                               browser from requesting. Blocklist is evaluated
                               before allowlist. If used without the allowlist,
                               requests not matching the blocklist are still
                               allowed.
  --block-service-workers      block service workers
  --browser <browser>          browser or chrome channel to use, possible
                               values: chrome, firefox, webkit, msedge.
  --caps <caps>                comma-separated list of additional capabilities
                               to enable, possible values: vision, pdf.
  --cdp-endpoint <endpoint>    CDP endpoint to connect to.
  --config <path>              path to the configuration file.
  --device <device>            device to emulate, for example: "iPhone 15"
  --executable-path <path>     path to the browser executable.
  --headless                   run browser in headless mode, headed by default
  --host <host>                host to bind server to. Default is localhost. Use
                               0.0.0.0 to bind to all interfaces.
  --ignore-https-errors        ignore https errors
  --isolated                   keep the browser profile in memory, do not save
                               it to disk.
  --image-responses <mode>     whether to send image responses to the client.
                               Can be "allow" or "omit", Defaults to "allow".
  --no-sandbox                 disable the sandbox for all process types that
                               are normally sandboxed.
  --output-dir <path>          path to the directory for output files.
  --port <port>                port to listen on for SSE transport.
  --proxy-bypass <bypass>      comma-separated domains to bypass proxy, for
                               example ".com,chromium.org,.domain.com"
  --proxy-server <proxy>       specify proxy server, for example
                               "http://myproxy:3128" or "socks5://myproxy:8080"
  --save-session               Whether to save the Playwright MCP session into
                               the output directory.
  --save-trace                 Whether to save the Playwright Trace of the
                               session into the output directory.
  --storage-state <path>       path to the storage state file for isolated
                               sessions.
  --user-agent <ua string>     specify user agent string
  --user-data-dir <path>       path to the user data directory. If not
                               specified, a temporary directory will be created.
  --viewport-size <size>       specify browser viewport size in pixels, for
                               example "1280, 720"

User profile

You can run Playwright MCP with persistent profile like a regular browser (default), or in the isolated contexts for the testing sessions.

Persistent profile

All the logged in information will be stored in the persistent profile, you can delete it between sessions if you'd like to clear the offline state. Persistent profile is located at the following locations and you can override it with the --user-data-dir argument.

# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-profile

# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-profile

# Linux
- ~/.cache/ms-playwright/mcp-{channel}-profile

Isolated

In the isolated mode, each session is started in the isolated profile. Every time you ask MCP to close the browser, the session is closed and all the storage state for this session is lost. You can provide initial storage state to the browser via the config's contextOptions or via the --storage-state argument. Learn more about the storage state here.

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--isolated",
        "--storage-state={path/to/storage.json}"
      ]
    }
  }
}

Configuration file

The Playwright MCP server can be configured using a JSON configuration file. You can specify the configuration file using the --config command line option:

npx @playwright/mcp@latest --config path/to/config.json
{
  // Browser configuration
  browser?: {
    // Browser type to use (chromium, firefox, or webkit)
    browserName?: 'chromium' | 'firefox' | 'webkit';

    // Keep the browser profile in memory, do not save it to disk.
    isolated?: boolean;

    // Path to user data directory for browser profile persistence
    userDataDir?: string;

    // Browser launch options (see Playwright docs)
    // @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch
    launchOptions?: {
      channel?: string;        // Browser channel (e.g. 'chrome')
      headless?: boolean;      // Run in headless mode
      executablePath?: string; // Path to browser executable
      // ... other Playwright launch options
    };

    // Browser context options
    // @see https://playwright.dev/docs/api/class-browser#browser-new-context
    contextOptions?: {
      viewport?: { width: number, height: number };
      // ... other Playwright context options
    };

    // CDP endpoint for connecting to existing browser
    cdpEndpoint?: string;

    // Remote Playwright server endpoint
    remoteEndpoint?: string;
  },

  // Server configuration
  server?: {
    port?: number;  // Port to listen on
    host?: string;  // Host to bind to (default: localhost)
  },

  // List of additional capabilities
  capabilities?: Array<
    'tabs' |    // Tab management
    'install' | // Browser installation
    'pdf' |     // PDF generation
    'vision' |  // Coordinate-based interactions
  >;

  // Directory for output files
  outputDir?: string;

  // Network configuration
  network?: {
    // List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
    allowedOrigins?: string[];

    // List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
    blockedOrigins?: string[];
  };
 
  /**
   * Whether to send image responses to the client. Can be "allow" or "omit". 
   * Defaults to "allow".
   */
  imageResponses?: 'allow' | 'omit';
}

Standalone MCP server

When running headed browser on system w/o display or from worker processes of the IDEs, run the MCP server from environment with the DISPLAY and pass the --port flag to enable HTTP transport.

npx @playwright/mcp@latest --port 8931

And then in MCP client config, set the url to the HTTP endpoint:

{
  "mcpServers": {
    "playwright": {
      "url": "http://localhost:8931/mcp"
    }
  }
}

NOTE: The Docker implementation only supports headless chromium at the moment.

{
  "mcpServers": {
    "playwright": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
    }
  }
}

You can build the Docker image yourself.

docker build -t mcr.microsoft.com/playwright/mcp .
import http from 'http';

import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';

http.createServer(async (req, res) => {
  // ...

  // Creates a headless Playwright MCP server with SSE transport
  const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
  const transport = new SSEServerTransport('/messages', res);
  await connection.sever.connect(transport);

  // ...
});

Tools

  • browser_click

    • Title: Click

    • Description: Perform click on a web page

    • Parameters:

      • element (string): Human-readable element description used to obtain permission to interact with the element

      • ref (string): Exact target element reference from the page snapshot

      • doubleClick (boolean, optional): Whether to perform a double click instead of a single click

      • button (string, optional): Button to click, defaults to left

    • Read-only: false

  • browser_close

    • Title: Close browser

    • Description: Close the page

    • Parameters: None

    • Read-only: true

  • browser_console_messages

    • Title: Get console messages

    • Description: Returns all console messages

    • Parameters: None

    • Read-only: true

  • browser_drag

    • Title: Drag mouse

    • Description: Perform drag and drop between two elements

    • Parameters:

      • startElement (string): Human-readable source element description used to obtain the permission to interact with the element

      • startRef (string): Exact source element reference from the page snapshot

      • endElement (string): Human-readable target element description used to obtain the permission to interact with the element

      • endRef (string): Exact target element reference from the page snapshot

    • Read-only: false

  • browser_evaluate

    • Title: Evaluate JavaScript

    • Description: Evaluate JavaScript expression on page or element

    • Parameters:

      • function (string): () => { /* code / } or (element) => { / code */ } when element is provided

      • element (string, optional): Human-readable element description used to obtain permission to interact with the element

      • ref (string, optional): Exact target element reference from the page snapshot

    • Read-only: false

  • browser_file_upload

    • Title: Upload files

    • Description: Upload one or multiple files

    • Parameters:

      • paths (array): The absolute paths to the files to upload. Can be a single file or multiple files.

    • Read-only: false

  • browser_handle_dialog

    • Title: Handle a dialog

    • Description: Handle a dialog

    • Parameters:

      • accept (boolean): Whether to accept the dialog.

      • promptText (string, optional): The text of the prompt in case of a prompt dialog.

    • Read-only: false

  • browser_hover

    • Title: Hover mouse

    • Description: Hover over element on page

    • Parameters:

      • element (string): Human-readable element description used to obtain permission to interact with the element

      • ref (string): Exact target element reference from the page snapshot

    • Read-only: true

  • browser_navigate

    • Title: Navigate to a URL

    • Description: Navigate to a URL

    • Parameters:

      • url (string): The URL to navigate to

    • Read-only: false

  • browser_navigate_back

    • Title: Go back

    • Description: Go back to the previous page

    • Parameters: None

    • Read-only: true

  • browser_navigate_forward

    • Title: Go forward

    • Description: Go forward to the next page

    • Parameters: None

    • Read-only: true

  • browser_network_requests

    • Title: List network requests

    • Description: Returns all network requests since loading the page

    • Parameters: None

    • Read-only: true

  • browser_press_key

    • Title: Press a key

    • Description: Press a key on the keyboard

    • Parameters:

      • key (string): Name of the key to press or a character to generate, such as ArrowLeft or a

    • Read-only: false

  • browser_resize

    • Title: Resize browser window

    • Description: Resize the browser window

    • Parameters:

      • width (number): Width of the browser window

      • height (number): Height of the browser window

    • Read-only: true

  • browser_select_option

    • Title: Select option

    • Description: Select an option in a dropdown

    • Parameters:

      • element (string): Human-readable element description used to obtain permission to interact with the element

      • ref (string): Exact target element reference from the page snapshot

      • values (array): Array of values to select in the dropdown. This can be a single value or multiple values.

    • Read-only: false

  • browser_snapshot

    • Title: Page snapshot

    • Description: Capture accessibility snapshot of the current page, this is better than screenshot

    • Parameters: None

    • Read-only: true

  • browser_take_screenshot

    • Title: Take a screenshot

    • Description: Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.

    • Parameters:

      • raw (boolean, optional): Whether to return without compression (in PNG format). Default is false, which returns a JPEG image.

      • filename (string, optional): File name to save the screenshot to. Defaults to page-{timestamp}.{png|jpeg} if not specified.

      • element (string, optional): Human-readable element description used to obtain permission to screenshot the element. If not provided, the screenshot will be taken of viewport. If element is provided, ref must be provided too.

      • ref (string, optional): Exact target element reference from the page snapshot. If not provided, the screenshot will be taken of viewport. If ref is provided, element must be provided too.

      • fullPage (boolean, optional): When true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots.

    • Read-only: true

  • browser_type

    • Title: Type text

    • Description: Type text into editable element

    • Parameters:

      • element (string): Human-readable element description used to obtain permission to interact with the element

      • ref (string): Exact target element reference from the page snapshot

      • text (string): Text to type into the element

      • submit (boolean, optional): Whether to submit entered text (press Enter after)

      • slowly (boolean, optional): Whether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.

    • Read-only: false

  • browser_wait_for

    • Title: Wait for

    • Description: Wait for text to appear or disappear or a specified time to pass

    • Parameters:

      • time (number, optional): The time to wait in seconds

      • text (string, optional): The text to wait for

      • textGone (string, optional): The text to wait for to disappear

    • Read-only: true

  • browser_tab_close

    • Title: Close a tab

    • Description: Close a tab

    • Parameters:

      • index (number, optional): The index of the tab to close. Closes current tab if not provided.

    • Read-only: false

  • browser_tab_list

    • Title: List tabs

    • Description: List browser tabs

    • Parameters: None

    • Read-only: true

  • browser_tab_new

    • Title: Open a new tab

    • Description: Open a new tab

    • Parameters:

      • url (string, optional): The URL to navigate to in the new tab. If not provided, the new tab will be blank.

    • Read-only: true

  • browser_tab_select

    • Title: Select a tab

    • Description: Select a tab by index

    • Parameters:

      • index (number): The index of the tab to select

    • Read-only: true

  • browser_install

    • Title: Install the browser specified in the config

    • Description: Install the browser specified in the config. Call this if you get an error about the browser not being installed.

    • Parameters: None

    • Read-only: false

  • browser_mouse_click_xy

    • Title: Click

    • Description: Click left mouse button at a given position

    • Parameters:

      • element (string): Human-readable element description used to obtain permission to interact with the element

      • x (number): X coordinate

      • y (number): Y coordinate

    • Read-only: false

  • browser_mouse_drag_xy

    • Title: Drag mouse

    • Description: Drag left mouse button to a given position

    • Parameters:

      • element (string): Human-readable element description used to obtain permission to interact with the element

      • startX (number): Start X coordinate

      • startY (number): Start Y coordinate

      • endX (number): End X coordinate

      • endY (number): End Y coordinate

    • Read-only: false

  • browser_mouse_move_xy

    • Title: Move mouse

    • Description: Move mouse to a given position

    • Parameters:

      • element (string): Human-readable element description used to obtain permission to interact with the element

      • x (number): X coordinate

      • y (number): Y coordinate

    • Read-only: true

  • browser_pdf_save

    • Title: Save as PDF

    • Description: Save page as PDF

    • Parameters:

      • filename (string, optional): File name to save the pdf to. Defaults to page-{timestamp}.pdf if not specified.

    • Read-only: true

Available Tools

22 tools
browser_clickB
Destructive

Perform click on a web page

ParametersJSON Schema
NameRequiredDescriptionDefault
elementYesHuman-readable element description used to obtain permission to interact with the element
refYesExact target element reference from the page snapshot
doubleClickNoWhether to perform a double click instead of a single click
buttonNoButton to click, defaults to left
modifiersNoModifier keys to press

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already provide significant behavioral information (destructiveHint: true, readOnlyHint: false, openWorldHint: true). The description adds minimal value beyond this, only stating the basic action. It doesn't elaborate on what 'destructive' means in this context (e.g., could trigger navigation, form submission, or JavaScript events), nor does it mention rate limits or authentication needs.

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 extremely concise at just four words, with zero wasted language. It's front-loaded with the core action and target. Every word earns its place, making it efficient for quick understanding.

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 the tool's complexity (destructive web interaction with 5 parameters) and rich annotations, the description is minimally adequate. However, with no output schema and a potentially complex behavioral impact (destructive actions on web pages), the description could do more to explain typical outcomes or error conditions. It meets minimum requirements but leaves 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 description coverage is 100%, so all parameters are well-documented in the schema itself. The description adds no additional parameter information beyond what's in the schema. The baseline score of 3 reflects adequate parameter documentation through the schema alone, with no extra value from the description.

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 'Perform click on a web page' clearly states the action (click) and target (web page), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like browser_hover or browser_press_key, which also involve web page interactions. The description is specific but lacks sibling distinction.

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. There's no mention of when to choose browser_click over browser_press_key for button presses, or browser_hover for mouse movements without clicking. No context about prerequisites or typical use cases is provided.

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

browser_closeA
Destructive

Close the page

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior4/5

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

The description 'Close the page' aligns with the destructiveHint=true annotation, indicating it terminates the page. It adds context beyond annotations by specifying what gets closed (the page), though it doesn't detail side effects like potential data loss or if it affects other tabs. No contradiction with annotations exists.

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 extremely concise at just three words, front-loading the essential action without any fluff. Every word ('Close the page') directly contributes to understanding the tool's function, making it highly efficient.

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 the tool's simplicity (0 parameters, destructive operation) and lack of output schema, the description is minimally adequate. It states the action but doesn't cover behavioral nuances like confirmation dialogs or post-closure state, which could be helpful for an agent in a browser automation context.

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?

With 0 parameters and 100% schema description coverage, the baseline is 4. The description doesn't need to explain parameters, and it appropriately doesn't add unnecessary details, maintaining clarity for a parameterless tool.

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 'Close the page' clearly states the action (close) and target (the page), making the purpose immediately understandable. However, it doesn't distinguish this from potential sibling tools like browser_tabs (which might manage multiple tabs) or explicitly mention it closes the current browser page versus other browser windows.

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. It doesn't specify if this should be used after completing tasks, to clean up resources, or in what context it's appropriate compared to other browser navigation tools like browser_navigate or browser_tabs.

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

browser_console_messagesC
Read-only

Returns all console messages

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoLevel of the console messages to return. Each level includes the messages of more severe levels. Defaults to "info".info

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, and openWorldHint=true, covering safety and scope. The description adds minimal context beyond this, stating it 'returns all console messages' but not detailing format, ordering, or limitations (e.g., buffer size, real-time vs. historical). No contradiction with annotations.

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 extremely concise with a single sentence ('Returns all console messages'), which is front-loaded and wastes no words. It efficiently conveys the core purpose without unnecessary elaboration.

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's complexity (interacting with browser console), lack of output schema, and minimal annotations, the description is insufficient. It doesn't explain return format (e.g., array of objects with properties like message, level, timestamp), potential for empty results, or how it integrates with browser state, leaving gaps for agent 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 description coverage is 100%, with the 'level' parameter fully documented in the schema (enum, default, description). The description doesn't add any parameter-specific information beyond what's in the schema, so it meets the baseline for high coverage without extra value.

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

Purpose3/5

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

The description 'Returns all console messages' clearly states the verb ('returns') and resource ('console messages'), but it's vague about scope and doesn't differentiate from siblings like browser_network_requests. It doesn't specify whether this returns messages from the current page, all tabs, or a specific timeframe.

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 versus alternatives. It doesn't mention prerequisites (e.g., requires an active browser session), timing considerations (e.g., after page load), or how it relates to sibling tools like browser_evaluate or browser_run_code for debugging purposes.

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

browser_dragB
Destructive

Perform drag and drop between two elements

ParametersJSON Schema
NameRequiredDescriptionDefault
startElementYesHuman-readable source element description used to obtain the permission to interact with the element
startRefYesExact source element reference from the page snapshot
endElementYesHuman-readable target element description used to obtain the permission to interact with the element
endRefYesExact target element reference from the page snapshot

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate this is a destructive, non-read-only operation with open-world hints, which the description doesn't contradict. However, the description adds minimal behavioral context beyond annotations—it mentions the drag-and-drop action but doesn't detail effects like UI changes, error handling, or interaction constraints. With annotations covering safety and scope, the description provides some value but is not rich in behavioral details.

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, clear sentence with no wasted words. It's front-loaded with the core action and efficiently conveys the essential purpose without unnecessary elaboration.

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 the tool's complexity (destructive interaction with four required parameters) and lack of output schema, the description is minimal but adequate. It covers the basic action but doesn't address outcomes, error cases, or integration with sibling tools like browser_snapshot for obtaining references. With annotations providing safety and scope hints, it's passable but could be more comprehensive.

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%, so parameters are well-documented in the schema. The description doesn't add any semantic details beyond implying two elements are involved, which is already clear from the parameter names. This meets the baseline for high schema coverage without enhancing parameter understanding.

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 action ('perform drag and drop') and the target ('between two elements'), which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like browser_click or browser_hover, which also involve element interaction but with different behaviors.

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 like browser_click or browser_hover, nor does it mention prerequisites such as needing a page snapshot or element references. It lacks context about typical use cases or exclusions.

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

browser_evaluateA
Destructive

Evaluate JavaScript expression on page or element

ParametersJSON Schema
NameRequiredDescriptionDefault
functionYes() => { /* code */ } or (element) => { /* code */ } when element is provided
elementNoHuman-readable element description used to obtain permission to interact with the element
refNoExact target element reference from the page snapshot

TDQS

A3.5/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false, destructiveHint=true, and openWorldHint=true, indicating this is a potentially dangerous write operation with unpredictable outcomes. The description adds context by specifying it evaluates JavaScript 'on page or element,' which clarifies the scope beyond what annotations provide. However, it doesn't elaborate on specific risks, side effects, or execution environment details that would be helpful given the destructive nature.

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, efficient sentence that immediately communicates the core functionality. Every word earns its place with no redundancy or unnecessary elaboration. It's perfectly front-loaded and appropriately sized for a tool with good schema documentation.

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 the tool's complexity (JavaScript evaluation with destructive potential), the description is minimally adequate. Annotations cover safety aspects, and the schema fully documents parameters, but there's no output schema to explain return values. The description doesn't address execution context, error handling, or security implications that would be valuable for such a powerful tool.

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%, with clear documentation for all three parameters. The description adds minimal value beyond the schema, only implying that 'element' and 'ref' parameters relate to targeting specific elements. It doesn't explain parameter interactions or provide examples of valid JavaScript expressions, so it meets but doesn't exceed the baseline expectation.

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 verb ('Evaluate') and resource ('JavaScript expression on page or element'), making the purpose immediately understandable. It distinguishes this from siblings like browser_click or browser_type by focusing on JavaScript evaluation rather than UI interaction. However, it doesn't explicitly differentiate from browser_run_code, which might be a similar sibling.

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. It doesn't mention when to choose browser_evaluate over browser_run_code (a likely similar sibling) or other JavaScript execution tools. There's no context about appropriate use cases, prerequisites, or limitations beyond what's implied by the parameters.

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

browser_file_uploadB
Destructive

Upload one or multiple files

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsNoThe absolute paths to the files to upload. Can be single file or multiple files. If omitted, file chooser is cancelled.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide readOnlyHint=false, destructiveHint=true, and openWorldHint=true, indicating a write operation with potential side effects. The description adds that it can upload 'one or multiple files' and implies a file chooser interaction if paths are omitted, but doesn't elaborate on authentication, rate limits, or specific destructive outcomes beyond annotations.

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, efficient sentence with no wasted words. It's front-loaded with the core action ('upload files') and adds a useful detail about handling multiple files, making it highly concise and well-structured.

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 the tool's complexity (file upload with potential side effects), annotations cover safety aspects, but the description lacks details on error handling, supported file types, or interaction with browser state. With no output schema, it doesn't explain return values, leaving gaps for an agent to infer behavior.

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%, with the 'paths' parameter fully documented in the schema. The description adds no additional parameter semantics beyond what the schema provides, such as file format constraints or upload behavior details, so it meets the baseline for high coverage.

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 verb ('upload') and resource ('files'), specifying it can handle 'one or multiple files'. It distinguishes from sibling tools like browser_navigate or browser_type by focusing on file uploads, though it doesn't explicitly differentiate from all siblings.

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 versus alternatives. The description doesn't mention prerequisites, context (e.g., browser state), or exclusions, leaving the agent to infer usage from the tool name alone.

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

browser_fill_formB
Destructive

Fill multiple form fields

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYesFields to fill in

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=false (mutation), destructiveHint=true (potentially destructive), and openWorldHint=true (dynamic environment). The description adds minimal behavioral context beyond this—it implies batch operation ('multiple form fields') but doesn't disclose risks like form submission side effects, error handling, or that 'ref' requires exact page snapshot references. No contradiction with annotations.

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?

Extremely concise at three words, front-loaded with the core action. Every word earns its place—'fill' specifies the action, 'multiple' indicates batch capability, and 'form fields' identifies the target. No wasted verbiage.

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?

For a destructive mutation tool (destructiveHint=true) with no output schema, the description is inadequate. It doesn't explain what happens after filling (e.g., form submission, validation), error scenarios, or dependencies (e.g., requires browser_snapshot for 'ref'). Given the complexity and risk, more context is needed.

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%, with detailed parameter documentation in the schema itself. The description adds no additional meaning about parameters beyond implying batch processing ('multiple'), which is already clear from the array type in the schema. Baseline 3 is appropriate as the schema carries the full burden.

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 'Fill multiple form fields' clearly states the verb ('fill') and resource ('form fields'), distinguishing it from siblings like browser_type (single field typing) or browser_select_option (dropdown selection). However, it doesn't explicitly mention that this is for browser automation or that it handles multiple field types, which the schema reveals.

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_type (for single text fields) or browser_select_option (for dropdowns). The description doesn't mention prerequisites (e.g., needing a browser snapshot first) or exclusions (e.g., not for non-form elements).

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

browser_handle_dialogC
Destructive

Handle a dialog

ParametersJSON Schema
NameRequiredDescriptionDefault
acceptYesWhether to accept the dialog.
promptTextNoThe text of the prompt in case of a prompt dialog.

TDQS

C2.2/5.0
Behavior3/5

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

Annotations provide readOnlyHint=false, destructiveHint=true, and openWorldHint=true, indicating this is a mutating, potentially destructive operation with open-ended effects. The description adds no behavioral context beyond these annotations—it doesn't explain what gets destroyed (e.g., dialog state, user input), what permissions are needed, or any rate limits. However, it doesn't contradict the annotations, so it meets the lower bar with annotations present.

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

Conciseness2/5

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

While concise with only three words, the description is under-specified rather than efficiently structured. It fails to front-load essential information and doesn't use its limited space to convey meaningful context. Every word should earn its place, but 'Handle a dialog' provides minimal value beyond the tool name itself.

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?

For a tool with destructiveHint=true, no output schema, and complex browser interaction context, the description is incomplete. It doesn't explain what a 'dialog' refers to in the browser context, what the tool returns, error conditions, or how it fits with sibling tools. The annotations help but don't compensate for the lack of operational context in the description.

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%, with clear descriptions for both parameters (accept and promptText). The description adds no additional meaning about parameters beyond what the schema provides—it doesn't explain when promptText is required, what happens if accept is false, or how these parameters interact with different dialog types. This meets the baseline of 3 given the comprehensive schema coverage.

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

Purpose2/5

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

The description 'Handle a dialog' is a tautology that merely restates the tool name, providing no specific information about what the tool actually does. It doesn't specify what type of dialog (e.g., JavaScript alert, confirmation, prompt) or what handling entails, nor does it distinguish this from sibling tools like browser_click or browser_press_key that might also interact with browser UI elements.

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

Usage Guidelines1/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. It doesn't mention what triggers a dialog, when this tool is appropriate, or how it relates to sibling tools like browser_evaluate or browser_run_code that might generate dialogs. There's no context about prerequisites or timing considerations.

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

browser_hoverA
Destructive

Hover over element on page

ParametersJSON Schema
NameRequiredDescriptionDefault
elementYesHuman-readable element description used to obtain permission to interact with the element
refYesExact target element reference from the page snapshot

TDQS

A3.5/5.0
Behavior4/5

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

Annotations provide readOnlyHint=false, openWorldHint=true, and destructiveHint=true, indicating this is a mutable, open-world, and potentially destructive operation. The description adds value by specifying 'hover over element on page,' which implies mouse interaction that could trigger page changes (consistent with destructiveHint). It doesn't contradict annotations and adds context about the action type, though more detail on effects (e.g., may trigger JavaScript events) would enhance it.

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 extremely concise with 'Hover over element on page,' a single sentence that efficiently conveys the core action without unnecessary words. It is front-loaded with the key verb 'Hover,' making it easy to scan. Every word earns its place, and there is no redundancy or fluff.

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 the tool's moderate complexity (interactive browser action), annotations cover safety and world hints, and schema fully documents parameters, the description is minimally adequate. However, it lacks details on output (no schema provided), potential side effects (e.g., page state changes), or prerequisites (e.g., needing a page snapshot first). For a destructive tool, more context on behavior would improve completeness.

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%, with clear descriptions for both parameters: 'element' as a human-readable description for permission and 'ref' as an exact target reference. The description adds no additional parameter semantics beyond what the schema provides, such as examples or usage tips. With high schema coverage, the baseline score of 3 is appropriate as the schema carries the burden.

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 'Hover over element on page' clearly states the action (hover) and target (element on page), making the purpose immediately understandable. It distinguishes from siblings like browser_click or browser_type by specifying the hover interaction rather than click or keyboard input. However, it doesn't explicitly differentiate from all siblings (e.g., browser_drag also involves mouse movement).

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. It doesn't mention when hovering is appropriate (e.g., to trigger tooltips, dropdowns, or hover effects) versus clicking or other interactions, nor does it reference sibling tools like browser_click for different actions. Usage context is implied but not stated.

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

browser_installA
Destructive

Install the browser specified in the config. Call this if you get an error about the browser not being installed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

The description adds valuable context about when to call the tool (in response to installation errors), which goes beyond what annotations provide. Annotations already indicate this is a destructive, non-read-only operation with open-world characteristics, but the description provides practical usage context that helps the agent understand when this destructive operation is appropriate.

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 extremely concise (two sentences) with zero wasted words. The first sentence states the purpose, the second provides usage guidance - both sentences earn their place by providing essential 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?

For a zero-parameter tool with comprehensive annotations, the description provides complete guidance on purpose and usage context. While there's no output schema, the description doesn't need to explain return values for an installation operation. The only minor gap is not explicitly mentioning what happens after installation completes.

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?

With 0 parameters and 100% schema description coverage, the baseline would be 4. The description appropriately doesn't discuss parameters since there are none, and the schema fully documents the empty parameter structure.

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 specific action ('Install') and resource ('browser specified in the config'), and distinguishes it from all sibling tools which perform browser interaction operations rather than installation. It provides a concrete purpose that goes beyond just restating the name.

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

Usage Guidelines5/5

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

The description explicitly states when to use this tool ('if you get an error about the browser not being installed'), providing clear contextual guidance. It also implicitly distinguishes from sibling tools by focusing on installation rather than browser interaction operations.

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

browser_navigateB
Destructive

Navigate to a URL

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL to navigate to

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already indicate this is a destructive (destructiveHint: true) and open-world (openWorldHint: true) operation, but the description adds minimal context beyond that. It doesn't explain what 'destructive' means in this context (e.g., navigating away from current page loses state) or mention potential side effects like page loads or navigation errors.

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 extremely concise at just three words, front-loading the core action without any wasted text. Every word earns its place, making it easy to parse quickly.

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?

For a destructive tool with no output schema and rich annotations, the description is insufficient. It doesn't explain what happens after navigation (e.g., page load completion, potential errors) or how it interacts with other browser tools, leaving gaps in understanding the tool's full behavior.

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?

With 100% schema description coverage, the input schema fully documents the single 'url' parameter. The description adds no additional meaning beyond what's in the schema, so it meets the baseline for high coverage without compensating value.

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 'Navigate to a URL' clearly states the verb ('Navigate') and resource ('URL'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'browser_navigate_back', which also involves navigation but in a different direction.

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 like 'browser_navigate_back' or other browser interaction tools. There's no mention of prerequisites (e.g., needing an open browser session) or typical use cases (e.g., loading a webpage).

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

browser_navigate_backB
Destructive

Go back to the previous page

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true (implying it changes browser state) and readOnlyHint=false (confirming it's not read-only), which the description doesn't contradict. The description adds minimal behavioral context beyond this, such as not specifying if it waits for page load or handles errors like no history, but doesn't provide misleading information.

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, efficient sentence that directly states the tool's purpose without any fluff. It's front-loaded and wastes no words, making it easy to understand at a glance.

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 the tool's low complexity (0 parameters, no output schema) and annotations covering key behavioral traits (destructive, not read-only), the description is adequate but lacks completeness. It doesn't address potential nuances like error conditions (e.g., no previous page) or integration with browser state, which could be helpful for an agent.

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?

With 0 parameters and 100% schema description coverage, the baseline is 4 as there are no parameters to document. The description doesn't need to compensate for any parameter gaps, and it appropriately avoids unnecessary parameter details.

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 action ('Go back') and target ('to the previous page'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'browser_navigate' (which goes to a specific URL) or 'browser_tabs' (which might involve tab navigation), leaving room for improvement in sibling distinction.

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. It doesn't mention prerequisites (e.g., needing a browser session with history), exclusions (e.g., not usable on the first page), or comparisons to siblings like 'browser_navigate' for forward navigation or 'browser_tabs' for tab switching, offering minimal usage context.

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

browser_network_requestsB
Read-only

Returns all network requests since loading the page

ParametersJSON Schema
NameRequiredDescriptionDefault
includeStaticNoWhether to include successful static resources like images, fonts, scripts, etc. Defaults to false.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate read-only and non-destructive behavior, so the description doesn't need to repeat that. It adds context about the scope ('since loading the page'), which is useful. However, it lacks details on return format, pagination, or potential limitations like memory constraints for large request logs.

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, efficient sentence that front-loads the core functionality without unnecessary words. Every part of the sentence contributes directly to understanding the tool's purpose, making it highly concise and well-structured.

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 the tool's low complexity (1 parameter, no output schema) and rich annotations, the description is adequate but minimal. It covers the basic action and scope but doesn't address potential behavioral nuances like how requests are formatted or if there are time-based limitations, leaving some gaps for an agent to infer.

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%, so the input schema fully documents the single parameter 'includeStatic'. The description doesn't add any parameter-specific information beyond what's in the schema, such as examples or edge cases, meeting the baseline for high schema coverage.

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 action ('returns') and resource ('all network requests since loading the page'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'browser_console_messages' or 'browser_snapshot', which also retrieve browser data but for different resources.

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. It doesn't mention scenarios where network request data is needed over other browser monitoring tools, nor does it specify prerequisites like requiring a loaded page, which is implied but not stated.

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

browser_press_keyB
Destructive

Press a key on the keyboard

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesName of the key to press or a character to generate, such as `ArrowLeft` or `a`

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description doesn't contradict (it implies an action). However, the description adds no behavioral context beyond what annotations provide, such as effects on browser state or interaction requirements. No contradiction is present.

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, clear sentence with no wasted words. It's front-loaded and efficiently conveys the core action, making it easy for an agent to parse quickly.

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 the tool's simplicity (one parameter, high schema coverage) and annotations covering safety (destructive), the description is minimally adequate. However, it lacks output information or richer context about keyboard interactions, which could be helpful 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?

The input schema has 100% description coverage, with the 'key' parameter well-documented. The description adds no additional meaning or examples beyond the schema, so it meets the baseline for high schema coverage without compensating value.

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 'Press a key on the keyboard' clearly states the action (press) and target (key on keyboard), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like 'browser_type' which might involve keyboard input, but the specificity is adequate.

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 like 'browser_type' or 'browser_fill_form'. It lacks context about appropriate scenarios, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone.

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

browser_resizeB
Destructive

Resize the browser window

ParametersJSON Schema
NameRequiredDescriptionDefault
widthYesWidth of the browser window
heightYesHeight of the browser window

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description does not contradict. However, the description adds minimal behavioral context beyond annotations—it does not explain what 'resize' entails (e.g., whether it affects viewport, triggers events, or has side effects like reloading). With annotations covering safety, a baseline score is appropriate, but more detail would improve transparency.

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, direct sentence—'Resize the browser window'—with no unnecessary words. It is front-loaded and efficiently conveys the core action, making it easy for an AI agent to parse quickly without clutter.

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 the tool's moderate complexity (a destructive operation with two parameters), annotations provide safety hints, but there is no output schema. The description is minimal and does not address potential outcomes, errors, or dependencies (e.g., needing an open browser). It is adequate as a basic descriptor but lacks depth for full contextual understanding.

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%, with clear descriptions for 'width' and 'height' parameters. The description does not add any meaning beyond the schema (e.g., units, valid ranges, or default behaviors). According to the rules, with high schema coverage, the baseline score is 3, as the schema adequately documents parameters without extra description input.

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 'Resize the browser window' clearly states the verb ('Resize') and resource ('browser window'), making the purpose immediately understandable. However, it does not differentiate this tool from its siblings (e.g., browser_snapshot or browser_take_screenshot, which also relate to browser window manipulation), so it falls short of a perfect score.

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. For example, it does not mention whether this is for testing layouts, simulating device sizes, or other contexts, nor does it reference sibling tools like browser_snapshot for capturing the resized window. This lack of contextual usage information limits its effectiveness for an AI agent.

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

browser_run_codeA
Destructive

Run Playwright code snippet

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesA JavaScript function containing Playwright code to execute. It will be invoked with a single argument, page, which you can use for any page interaction. For example: `async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }`

TDQS

A3.5/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and openWorldHint=true, which the description doesn't contradict. It adds valuable context by specifying that the code is a JavaScript function invoked with a 'page' argument, clarifying execution behavior beyond the annotations. However, it doesn't mention potential risks like infinite loops or resource consumption.

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 extremely concise with just three words, front-loading the essential action. Every word earns its place by specifying the tool's core function without redundancy or fluff, making it efficient for quick comprehension.

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 the tool's complexity (executing arbitrary code with destructive potential) and lack of output schema, the description is minimally adequate. It identifies the tool's purpose but lacks details on return values, error handling, or safety considerations, leaving gaps for the agent to infer.

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% description coverage, providing a clear example of the 'code' parameter. The description adds minimal semantics beyond this, only restating 'Playwright code snippet' without elaborating on constraints or best practices. Baseline 3 is appropriate given the schema's thorough documentation.

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 verb ('Run') and resource ('Playwright code snippet'), making the purpose immediately understandable. It distinguishes from siblings by focusing on executing arbitrary code rather than specific actions like 'browser_click' or 'browser_navigate', though it doesn't explicitly contrast with them.

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. With many sibling tools for specific browser interactions (e.g., browser_click, browser_type), it fails to indicate scenarios where running custom Playwright code is preferable over using dedicated tools, leaving the agent without usage 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
Destructive

Select an option in a dropdown

ParametersJSON Schema
NameRequiredDescriptionDefault
elementYesHuman-readable element description used to obtain permission to interact with the element
refYesExact target element reference from the page snapshot
valuesYesArray of values to select in the dropdown. This can be a single value or multiple values.

TDQS

B3.2/5.0
Behavior4/5

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

Annotations indicate destructiveHint=true and readOnlyHint=false, which the description doesn't contradict. The description adds value by specifying the action is for dropdowns, but it doesn't elaborate on behavioral traits like whether it triggers page changes, requires specific permissions, or handles errors. With annotations covering safety, it provides some context but could be more detailed.

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, efficient sentence with no wasted words. It's front-loaded and appropriately sized for the tool's purpose, making it easy to scan and understand quickly.

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 the tool has annotations (destructive, openWorld) but no output schema, the description is minimal. It covers the basic action but lacks details on return values, error handling, or integration with other browser tools. For a destructive operation in browser automation, more context would be helpful, but it's adequate as a starting point.

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%, so parameters are fully documented in the schema. The description doesn't add any meaning beyond what the schema provides, such as explaining how 'values' interact with dropdowns or the relationship between 'element' and 'ref'. Baseline 3 is appropriate as the schema handles the heavy lifting.

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

Purpose3/5

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

The description 'Select an option in a dropdown' clearly states the action (select) and target (dropdown), but it's vague about the context (browser automation) and doesn't distinguish from siblings like browser_fill_form or browser_click. It restates the title 'Select option' without adding specificity.

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 versus alternatives. For example, it doesn't clarify if this is for dropdowns only, how it differs from browser_fill_form for form inputs, or prerequisites like needing a page snapshot. The description lacks any usage context.

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

browser_snapshotA
Read-only

Capture accessibility snapshot of the current page, this is better than screenshot

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoSave snapshot to markdown file instead of returning it in the response.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true, indicating a safe, read-only operation that doesn't modify the page. The description adds value by specifying it captures an 'accessibility snapshot' and compares it to a screenshot, but it doesn't disclose additional behavioral traits like what data is included in the snapshot, potential rate limits, or authentication needs. With annotations covering safety, the description adds some context but not rich behavioral details.

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 extremely concise with two short sentences: 'Capture accessibility snapshot of the current page, this is better than screenshot.' It's front-loaded with the core purpose and includes a comparative note. There's zero waste, and every sentence earns its place by clarifying the tool's function and differentiating it from a sibling.

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 the tool's complexity (simple operation with 1 parameter), annotations provide safety info, and schema covers parameters fully, but there's no output schema. The description is minimal and doesn't explain what an accessibility snapshot returns or its format, which is a gap since output isn't documented elsewhere. It's adequate for a basic tool but lacks details on output behavior, making it incomplete for full understanding.

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 1 parameter with 100% description coverage, documenting that 'filename' saves the snapshot to a markdown file instead of returning it in the response. The description doesn't add any parameter semantics beyond what the schema provides, as it mentions no parameters. With high schema coverage, the baseline is 3, and the description doesn't compensate or add extra meaning.

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's purpose: 'Capture accessibility snapshot of the current page' specifies the verb (capture) and resource (accessibility snapshot of current page). It distinguishes from sibling 'browser_take_screenshot' by mentioning 'this is better than screenshot,' though it doesn't fully explain what an accessibility snapshot entails. The purpose is clear but could be more specific about what an accessibility snapshot includes.

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 by contrasting with 'browser_take_screenshot' ('this is better than screenshot'), suggesting this tool is preferred for accessibility purposes over a visual screenshot. However, it doesn't explicitly state when to use this tool versus alternatives like 'browser_take_screenshot' or other browser tools, nor does it provide context on prerequisites or exclusions. The guidance is implied but lacks specificity.

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

browser_tabsB
Destructive

List, create, close, or select a browser tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesOperation to perform
indexNoTab index, used for close/select. If omitted for close, current tab is closed.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide readOnlyHint=false, openWorldHint=true, and destructiveHint=true. The description adds context about the multi-action nature (list, create, close, select) and implies destructive behavior for 'close' action. However, it doesn't elaborate on rate limits, authentication needs, or specific destructive consequences beyond what annotations already indicate.

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 extremely concise (one sentence) and front-loaded with all key information. Every word earns its place by listing the four possible actions. No redundant or verbose language is present.

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 the tool's moderate complexity (multiple actions with different behaviors), rich annotations, and 100% schema coverage, the description is minimally adequate. However, it lacks output information (no output schema provided) and doesn't explain result formats or error conditions. For a multi-action tool with destructive operations, more context would be helpful.

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%, with clear parameter documentation. The description adds no additional parameter semantics beyond what's in the schema. It mentions the actions but doesn't explain parameter usage, constraints, or interactions beyond the schema's enum and description. Baseline 3 is appropriate given complete schema coverage.

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's purpose with specific verbs (list, create, close, select) and resource (browser tab). It distinguishes from siblings by focusing on tab management rather than navigation, interaction, or monitoring. However, it doesn't explicitly differentiate from all siblings (e.g., browser_close could be ambiguous).

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. It doesn't mention when to use browser_tabs versus browser_close for closing tabs, or when to use browser_navigate versus creating a new tab. No context about prerequisites, sequencing, or exclusions is provided.

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

browser_take_screenshotA
Read-only

Take a screenshot of the current page. You can't perform actions based on the screenshot, use browser_snapshot for actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoImage format for the screenshot. Default is png.png
filenameNoFile name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg}` if not specified. Prefer relative file names to stay within the output directory.
elementNoHuman-readable element description used to obtain permission to screenshot the element. If not provided, the screenshot will be taken of viewport. If element is provided, ref must be provided too.
refNoExact target element reference from the page snapshot. If not provided, the screenshot will be taken of viewport. If ref is provided, element must be provided too.
fullPageNoWhen true, takes a screenshot of the full scrollable page, instead of the currently visible viewport. Cannot be used with element screenshots.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, destructiveHint=false, and openWorldHint=true, indicating a safe, non-destructive operation. The description adds valuable context about the tool's limitations ('You can't perform actions based on the screenshot'), which isn't covered by annotations. However, it doesn't mention potential rate limits or performance implications of full-page screenshots.

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 perfectly concise with just two sentences. The first sentence states the core purpose, and the second provides crucial usage guidance. Every word earns its place with zero wasted text.

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 tool's moderate complexity (5 parameters, no output schema) and excellent annotations (readOnlyHint, destructiveHint, openWorldHint), the description provides good contextual completeness. It covers purpose, differentiation from siblings, and behavioral constraints. The main gap is lack of information about return values (no output schema), but the description compensates reasonably well.

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?

With 100% schema description coverage, the input schema already fully documents all 5 parameters. The description doesn't add any additional parameter semantics beyond what's in the schema, so it meets the baseline of 3 where the schema does the heavy lifting.

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 purpose with a specific verb ('Take a screenshot') and resource ('current page'). It explicitly distinguishes from sibling browser_snapshot by stating 'use browser_snapshot for actions,' establishing clear differentiation.

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

Usage Guidelines5/5

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

The description provides explicit guidance on when to use this tool versus alternatives: 'use browser_snapshot for actions.' This clearly indicates this tool is for capturing screenshots only, not for performing actions based on them, which helps the agent choose correctly among browser-related tools.

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

browser_typeB
Destructive

Type text into editable element

ParametersJSON Schema
NameRequiredDescriptionDefault
elementYesHuman-readable element description used to obtain permission to interact with the element
refYesExact target element reference from the page snapshot
textYesText to type into the element
submitNoWhether to submit entered text (press Enter after)
slowlyNoWhether to type one character at a time. Useful for triggering key handlers in the page. By default entire text is filled in at once.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations provide readOnlyHint=false, destructiveHint=true, and openWorldHint=true, indicating this is a write operation with potential side effects in an unpredictable environment. The description adds minimal behavioral context beyond annotations - it mentions typing text but doesn't explain what 'editable element' means, how permissions work, or potential consequences. No contradiction with annotations exists, but the description doesn't compensate for the lack of output schema or rich behavioral disclosure.

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, efficient sentence that states the core functionality without unnecessary words. It's front-loaded with the essential action and target. Every word earns its place, making it easy for an agent to quickly understand the tool's purpose.

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 destructive tool with 5 parameters and no output schema, the description is minimally adequate. It states what the tool does but doesn't provide enough context about how it works, what constitutes success/failure, or what the agent should expect. The annotations help with safety profiling, but the description doesn't fully compensate for the complexity of browser automation.

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%, with all parameters well-documented in the schema itself. The description adds no additional parameter semantics beyond what's already in the schema - it doesn't explain the relationship between 'element' and 'ref', when to use 'submit' or 'slowly', or provide examples. With complete schema coverage, the baseline score of 3 is appropriate.

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 action ('Type text') and target ('into editable element'), providing a specific verb+resource combination. It distinguishes from siblings like browser_click or browser_press_key by focusing on text input rather than clicking or key pressing. However, it doesn't explicitly differentiate from browser_fill_form, which might have overlapping functionality.

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 like browser_fill_form or browser_press_key. There's no mention of prerequisites, context requirements, or specific scenarios where this tool is preferred over siblings. The agent must infer usage from the tool name and parameters alone.

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

browser_wait_forB
Read-only

Wait for text to appear or disappear or a specified time to pass

ParametersJSON Schema
NameRequiredDescriptionDefault
timeNoThe time to wait in seconds
textNoThe text to wait for
textGoneNoThe text to wait for to disappear

TDQS

B3.3/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=true, destructiveHint=false, and openWorldHint=true, which already convey safety and flexibility. The description adds that it waits for text changes or time, but doesn't specify behavioral details like timeout behavior, concurrency, or error handling. No contradiction with annotations exists, so it meets the lower bar with minimal added context.

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, efficient sentence that front-loads the core functionality without unnecessary words. Every part earns its place by covering the key actions (wait for text appear/disappear or time pass), making it highly concise and well-structured.

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 the tool's moderate complexity (3 parameters, no output schema) and rich annotations, the description is adequate but incomplete. It covers what the tool does but lacks details on return values, error conditions, or interaction with sibling tools, leaving gaps for the agent to navigate.

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%, with clear descriptions for time, text, and textGone parameters. The description mentions these concepts but doesn't add semantic details beyond the schema, such as how parameters interact (e.g., exclusive use) or default behaviors. Baseline 3 is appropriate given high schema coverage.

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's purpose as waiting for text to appear/disappear or for time to pass, which is specific and actionable. However, it doesn't explicitly differentiate from sibling tools like browser_wait_for_selector or browser_wait_for_timeout (if they existed), though among the actual siblings listed, it's distinct as the only waiting tool.

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. It doesn't mention prerequisites (e.g., needing an active browser session) or compare to other waiting mechanisms in the browser toolset. This leaves the agent to infer usage from context alone.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 14 tool updatesv1.0.0
    • Changedbrowser_click1 field changed
      • addedInput schema / properties / modifiers
        Added value: +{
        +  "description": "Modifier keys to press",
        +  "items": {
        +    "enum": [
        +      "Alt",
        +      "Control",
        +      "ControlOrMeta",
        +      "Meta",
        +      "Shift"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedbrowser_console_messages1 field changed
      • addedInput schema / properties / level
        Added value: +{
        +  "default": "info",
        +  "description": "Level of the console messages to return. Each level includes the messages of more severe levels. Defaults to \"info\".",
        +  "enum": [
        +    "error",
        +    "warning",
        +    "info",
        +    "debug"
        +  ],
        +  "type": "string"
        +}
    • Changedbrowser_file_upload2 fields changed
      • changedInput schema / properties / paths / description
        Previous value: -"The absolute paths to the files to upload. Can be a single file or multiple files."New value: +"The absolute paths to the files to upload. Can be single file or multiple files. If omitted, file chooser is cancelled."
      • removedInput schema / required
        Removed value: -[
        -  "paths"
        -]
    • Addedbrowser_fill_form
    • Removedbrowser_navigate_forward
    • Changedbrowser_network_requests1 field changed
      • addedInput schema / properties / includeStatic
        Added value: +{
        +  "default": false,
        +  "description": "Whether to include successful static resources like images, fonts, scripts, etc. Defaults to false.",
        +  "type": "boolean"
        +}
    • Addedbrowser_run_code
    • Changedbrowser_snapshot1 field changed
      • addedInput schema / properties / filename
        Added value: +{
        +  "description": "Save snapshot to markdown file instead of returning it in the response.",
        +  "type": "string"
        +}
    • Removedbrowser_tab_close
    • Removedbrowser_tab_list
    • Removedbrowser_tab_new
    • Removedbrowser_tab_select
    • Addedbrowser_tabs
    • Changedbrowser_take_screenshot1 field changed
      • changedInput schema / properties / filename / description
        Previous value: -"File name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg}` if not specified."New value: +"File name to save the screenshot to. Defaults to `page-{timestamp}.{png|jpeg}` if not specified. Prefer relative file names to stay within the output directory."
  2. 24 tool updates
    • First observedbrowser_click
    • First observedbrowser_close
    • First observedbrowser_console_messages
    • First observedbrowser_drag
    • First observedbrowser_evaluate
    • First observedbrowser_file_upload
    • First observedbrowser_handle_dialog
    • First observedbrowser_hover
    • First observedbrowser_install
    • First observedbrowser_navigate
    • First observedbrowser_navigate_back
    • First observedbrowser_navigate_forward
    • First observedbrowser_network_requests
    • First observedbrowser_press_key
    • First observedbrowser_resize
    • First observedbrowser_select_option
    • First observedbrowser_snapshot
    • First observedbrowser_tab_close
    • First observedbrowser_tab_list
    • First observedbrowser_tab_new
    • First observedbrowser_tab_select
    • First observedbrowser_take_screenshot
    • First observedbrowser_type
    • First observedbrowser_wait_for

TDQS

B3.3/5.0
Disambiguation4/5

Most tools have distinct purposes targeting specific web automation actions like clicking, navigating, or handling dialogs, but some overlap exists between browser_snapshot and browser_take_screenshot, and browser_wait_for is broad. The descriptions help clarify, but an agent might occasionally misselect between similar tools like these.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with a 'browser_' prefix and clear verb_noun combinations, such as browser_click, browser_navigate, and browser_take_screenshot. This predictability makes it easy for agents to understand and use the toolset without confusion.

Tool Count3/5

With 22 tools, the count is borderline high for a web automation server, as it might feel heavy and could potentially be streamlined. However, given Playwright's comprehensive functionality, it's reasonable but approaches the upper limit of what's well-scoped.

Completeness5/5

The toolset provides complete coverage for web automation tasks, including navigation, interaction (click, type, drag), form handling, file uploads, dialogs, screenshots, network monitoring, and browser management. There are no obvious gaps, supporting full CRUD-like operations for browser-based workflows.

Maintenance

ActivityInactive
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

  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots without requiring screenshots or vision models.
    22
    5,881,527
    1
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots without needing screenshots or visually-tuned models.
    22
    5,881,527
    Apache 2.0
  • A
    license
    B
    quality
    D
    maintenance
    A Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots without requiring screenshots or visually-tuned models.
    24
    5,881,527
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots without requiring screenshots or visually-tuned models.
    22
    5,881,527
    Apache 2.0

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/nzjami/mcpPlaywright'

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