io.github.dinesh-nalla-se/playwright-mcp

编码与调试

by dinesh-nalla-se

为MCP提供基于Playwright的浏览器自动化工具,用于页面操作、测试与抓取任务。

什么是 io.github.dinesh-nalla-se/playwright-mcp

为MCP提供基于Playwright的浏览器自动化工具,用于页面操作、测试与抓取任务。

README

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
<!-- // Generate using: node utils/generate-links.js -->

Getting started

First, install the Playwright MCP server with your client.

Standard config works in most of the tools:

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

<img src="https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Server&color=0098FF" alt="Install in VS Code"> <img alt="Install in VS Code Insiders" src="https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Server&color=24bfa5">

<details> <summary>Amp</summary>

Add via the Amp VS Code extension settings screen or by updating your settings.json file:

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

Amp CLI Setup:

Add via the amp mcp addcommand below

bash
amp mcp add playwright -- npx @playwright/mcp@latest
</details> <details> <summary>Claude Code</summary>

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

bash
claude mcp add playwright npx @playwright/mcp@latest
</details> <details> <summary>Claude Desktop</summary>

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

</details> <details> <summary>Codex</summary>

Use the Codex CLI to add the Playwright MCP server:

bash
codex mcp add playwright npx "@playwright/mcp@latest"

Alternatively, create or edit the configuration file ~/.codex/config.toml and add:

toml
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

For more information, see the Codex MCP documentation.

</details> <details> <summary>Cursor</summary>

Click the button to install:

<img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="Install in Cursor">

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@latest. You can also verify config or add command like arguments via clicking Edit.

</details> <details> <summary>Factory</summary>

Use the Factory CLI to add the Playwright MCP server:

bash
droid mcp add playwright "npx @playwright/mcp@latest"

Alternatively, type /mcp within Factory droid to open an interactive UI for managing MCP servers.

For more information, see the Factory MCP documentation.

</details> <details> <summary>Gemini CLI</summary>

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

</details> <details> <summary>Goose</summary>

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".

</details> <details> <summary>Kiro</summary>

Follow the MCP Servers documentation. For example in .kiro/settings/mcp.json:

json
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
</details> <details> <summary>LM Studio</summary>

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.

</details> <details> <summary>opencode</summary>

Follow the MCP Servers documentation. For example in ~/.config/opencode/opencode.json:

json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "npx",
        "@playwright/mcp@latest"
      ],
      "enabled": true
    }
  }
}

</details> <details> <summary>Qodo Gen</summary>

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

Click <code>Save</code>.

</details> <details> <summary>VS Code</summary>

Click the button to install:

<img src="https://img.shields.io/badge/VS_Code-VS_Code?style=flat-square&label=Install%20Server&color=0098FF" alt="Install in VS Code"> <img alt="Install in VS Code Insiders" src="https://img.shields.io/badge/VS_Code_Insiders-VS_Code_Insiders?style=flat-square&label=Install%20Server&color=24bfa5">

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:

bash
# 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.

</details> <details> <summary>Warp</summary>

Go to Settings -> AI -> Manage MCP Servers -> + Add to add an MCP Server. Use the standard config above.

Alternatively, use the slash command /add-mcp in the Warp prompt and paste the standard config from above:

js
{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
</details> <details> <summary>Windsurf</summary>

Follow Windsurf MCP documentation. Use the standard config above.

</details>

Configuration

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

<!--- Options generated by update-readme.js -->
code
> npx @playwright/mcp@latest --help
  --allowed-hosts <hosts...>            comma-separated list of hosts this
                                        server is allowed to serve from.
                                        Defaults to the host the server is bound
                                        to. Pass '*' to disable the host check.
  --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.
  --cdp-header <headers...>             CDP headers to send with the connect
                                        request, multiple can be specified.
  --config <path>                       path to the configuration file.
  --device <device>                     device to emulate, for example: "iPhone
                                        15"
  --executable-path <path>              path to the browser executable.
  --extension                           Connect to a running browser instance
                                        (Edge/Chrome only). Requires the
                                        "Playwright MCP Bridge" browser
                                        extension to be installed.
  --grant-permissions <permissions...>  List of permissions to grant to the
                                        browser context, for example
                                        "geolocation", "clipboard-read",
                                        "clipboard-write".
  --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
  --init-page <path...>                 path to TypeScript file to evaluate on
                                        Playwright page object
  --init-script <path...>               path to JavaScript file to add as an
                                        initialization script. The script will
                                        be evaluated in every page before any of
                                        the page's scripts. Can be specified
                                        multiple times.
  --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.
  --save-video <size>                   Whether to save the video of the session
                                        into the output directory. For example
                                        "--save-video=800x600"
  --secrets <path>                      path to a file containing secrets in the
                                        dotenv format
  --shared-browser-context              reuse the same browser context between
                                        all connected HTTP clients.
  --storage-state <path>                path to the storage state file for
                                        isolated sessions.
  --test-id-attribute <attribute>       specify the attribute to use for test
                                        ids, defaults to "data-testid"
  --timeout-action <timeout>            specify action timeout in milliseconds,
                                        defaults to 5000ms
  --timeout-navigation <timeout>        specify navigation timeout in
                                        milliseconds, defaults to 60000ms
  --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 "1280x720"
<!--- End of options generated section -->

User profile

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

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.

bash
# 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.

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

Browser Extension

The Playwright MCP Chrome Extension allows you to connect to existing browser tabs and leverage your logged-in sessions and browser state. See extension/README.md for installation and setup instructions.

Initial state

There are multiple ways to provide the initial state to the browser context or a page.

For the storage state, you can either:

  • Start with a user data directory using the --user-data-dir argument. This will persist all browser data between the sessions.
  • Start with a storage state file using the --storage-state argument. This will load cookies and local storage from the file into an isolated browser context.

For the page state, you can use:

  • --init-page to point to a TypeScript file that will be evaluated on the Playwright page object. This allows you to run arbitrary code to set up the page.
ts
// init-page.ts
export default async ({ page }) => {
  await page.context().grantPermissions(['geolocation']);
  await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
  await page.setViewportSize({ width: 1280, height: 720 });
};
  • --init-script to point to a JavaScript file that will be added as an initialization script. The script will be evaluated in every page before any of the page's scripts. This is useful for overriding browser APIs or setting up the environment.
js
// init-script.js
window.isPlaywrightMCP = true;

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:

bash
npx @playwright/mcp@latest --config path/to/config.json
<details> <summary>Configuration file schema</summary>
typescript
{
  // 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';
}
</details>

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.

bash
npx @playwright/mcp@latest --port 8931

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

js
{
  "mcpServers": {
    "playwright": {
      "url": "http://localhost:8931/mcp"
    }
  }
}
<details> <summary><b>Docker</b></summary>

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

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

Or If you prefer to run the container as a long-lived service instead of letting the MCP client spawn it, use:

code
docker run -d -i --rm --init --pull=always \
  --entrypoint node \
  --name playwright \
  -p 8931:8931 \
  mcr.microsoft.com/playwright/mcp \
  cli.js --headless --browser chromium --no-sandbox --port 8931

The server will listen on host port 8931 and can be reached by any MCP client.

You can build the Docker image yourself.

code
docker build -t mcr.microsoft.com/playwright/mcp .
</details> <details> <summary><b>Programmatic usage</b></summary>
js
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.connect(transport);

  // ...
});
</details>

Tools

<!--- Tools generated by update-readme.js --> <details> <summary><b>Core automation</b></summary> <!-- NOTE: This has been generated via update-readme.js -->
  • 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
      • modifiers (array, optional): Modifier keys to press
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_close
    • Title: Close browser
    • Description: Close the page
    • Parameters: None
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_console_messages
    • Title: Get console messages
    • Description: Returns all console messages
    • Parameters:
      • onlyErrors (boolean, optional): Only return error messages
    • Read-only: true
<!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_file_upload
    • Title: Upload files
    • Description: Upload one or multiple files
    • Parameters:
      • paths (array, optional): The absolute paths to the files to upload. Can be single file or multiple files. If omitted, file chooser is cancelled.
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_fill_form
    • Title: Fill form
    • Description: Fill multiple form fields
    • Parameters:
      • fields (array): Fields to fill in
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • 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: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_navigate
    • Title: Navigate to a URL
    • Description: Navigate to a URL
    • Parameters:
      • url (string): The URL to navigate to
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_navigate_back
    • Title: Go back
    • Description: Go back to the previous page
    • Parameters: None
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_network_requests
    • Title: List network requests
    • Description: Returns all network requests since loading the page
    • Parameters: None
    • Read-only: true
<!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • 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: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_run_code
    • Title: Run Playwright code
    • Description: Run Playwright code snippet
    • Parameters:
      • code (string): Playwright code snippet to run. The snippet should access the page object to interact with the page. Can make multiple statements. For example: await page.getByRole('button', { name: 'Submit' }).click();
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_snapshot
    • Title: Page snapshot
    • Description: Capture accessibility snapshot of the current page, this is better than screenshot
    • Parameters: None
    • Read-only: true
<!-- NOTE: This has been generated via update-readme.js -->
  • 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:
      • type (string, optional): Image format for the screenshot. Default is png.
      • filename (string, optional): 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.
      • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • 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: false
</details> <details> <summary><b>Tab management</b></summary> <!-- NOTE: This has been generated via update-readme.js -->
  • browser_tabs
    • Title: Manage tabs
    • Description: List, create, close, or select a browser tab.
    • Parameters:
      • action (string): Operation to perform
      • index (number, optional): Tab index, used for close/select. If omitted for close, current tab is closed.
    • Read-only: false
</details> <details> <summary><b>Browser installation</b></summary> <!-- NOTE: This has been generated via update-readme.js -->
  • 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
</details> <details> <summary><b>Coordinate-based (opt-in via --caps=vision)</b></summary> <!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • 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: false
</details> <details> <summary><b>PDF generation (opt-in via --caps=pdf)</b></summary> <!-- NOTE: This has been generated via update-readme.js -->
  • 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. Prefer relative file names to stay within the output directory.
    • Read-only: true
</details> <details> <summary><b>Test assertions (opt-in via --caps=testing)</b></summary> <!-- NOTE: This has been generated via update-readme.js -->
  • browser_generate_locator
    • Title: Create locator for element
    • Description: Generate locator for the given element to use in tests
    • 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
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_verify_element_visible
    • Title: Verify element visible
    • Description: Verify element is visible on the page
    • Parameters:
      • role (string): ROLE of the element. Can be found in the snapshot like this: - {ROLE} "Accessible Name":
      • accessibleName (string): ACCESSIBLE_NAME of the element. Can be found in the snapshot like this: - role "{ACCESSIBLE_NAME}"
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_verify_list_visible
    • Title: Verify list visible
    • Description: Verify list is visible on the page
    • Parameters:
      • element (string): Human-readable list description
      • ref (string): Exact target element reference that points to the list
      • items (array): Items to verify
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_verify_text_visible
    • Title: Verify text visible
    • Description: Verify text is visible on the page. Prefer browser_verify_element_visible if possible.
    • Parameters:
      • text (string): TEXT to verify. Can be found in the snapshot like this: - role "Accessible Name": {TEXT} or like this: - text: {TEXT}
    • Read-only: false
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_verify_value
    • Title: Verify value
    • Description: Verify element value
    • Parameters:
      • type (string): Type of the element
      • element (string): Human-readable element description
      • ref (string): Exact target element reference that points to the element
      • value (string): Value to verify. For checkbox, use "true" or "false".
    • Read-only: false
</details> <details> <summary><b>Tracing (opt-in via --caps=tracing)</b></summary> <!-- NOTE: This has been generated via update-readme.js -->
  • browser_start_tracing
    • Title: Start tracing
    • Description: Start trace recording
    • Parameters: None
    • Read-only: true
<!-- NOTE: This has been generated via update-readme.js -->
  • browser_stop_tracing
    • Title: Stop tracing
    • Description: Stop trace recording
    • Parameters: None
    • Read-only: true
</details> <!--- End of tools generated section -->

常见问题

io.github.dinesh-nalla-se/playwright-mcp 是什么?

为MCP提供基于Playwright的浏览器自动化工具,用于页面操作、测试与抓取任务。

相关 Skills

前端设计

by anthropics

Universal
热门

面向组件、页面、海报和 Web 应用开发,按鲜明视觉方向生成可直接落地的前端代码与高质感 UI,适合做 landing page、Dashboard 或美化现有界面,避开千篇一律的 AI 审美。

想把页面做得既能上线又有设计感,就用前端设计:组件到整站都能产出,难得的是能避开千篇一律的 AI 味。

编码与调试
未扫描166.1k

网页应用测试

by anthropics

Universal
热门

用 Playwright 为本地 Web 应用编写自动化测试,支持启动开发服务器、校验前端交互、排查 UI 异常、抓取截图与浏览器日志,适合调试动态页面和回归验证。

借助 Playwright 一站式验证本地 Web 应用前端功能,调 UI 时还能同步查看日志和截图,定位问题更快。

编码与调试
未扫描166.1k

网页构建器

by anthropics

Universal
热门

面向复杂 claude.ai HTML artifact 开发,快速初始化 React + Tailwind CSS + shadcn/ui 项目并打包为单文件 HTML,适合需要状态管理、路由或多组件交互的页面。

在 claude.ai 里做复杂网页 Artifact 很省心,多组件、状态和路由都能顺手搭起来,React、Tailwind 与 shadcn/ui 组合效率高、成品也更精致。

编码与调试
未扫描166.1k

相关 MCP Server

GitHub

编辑精选

by GitHub

热门

GitHub 是 MCP 官方参考服务器,让 Claude 直接读写你的代码仓库和 Issues。

这个参考服务器解决了开发者想让 AI 安全访问 GitHub 数据的问题,适合需要自动化代码审查或 Issue 管理的团队。但注意它只是参考实现,生产环境得自己加固安全。

编码与调试
89.2k

by Context7

热门

Context7 是实时拉取最新文档和代码示例的智能助手,让你告别过时资料。

它能解决开发者查找文档时信息滞后的问题,特别适合快速上手新库或跟进更新。不过,依赖外部源可能导致偶尔的数据延迟,建议结合官方文档使用。

编码与调试
60.2k

by tldraw

热门

tldraw 是让 AI 助手直接在无限画布上绘图和协作的 MCP 服务器。

这解决了 AI 只能输出文本、无法视觉化协作的痛点——想象让 Claude 帮你画流程图或白板讨论。最适合需要快速原型设计或头脑风暴的开发者。不过,目前它只是个基础连接器,你得自己搭建画布应用才能发挥全部潜力。

编码与调试
49.6k

评论