Skip to main content
Glama
Extended Playwright MCP Server

Extended Playwright MCP Server

Extended Playwright MCP Server

This MCP server extends the official @playwright/mcp server by implementing 22 additional tools to facilitate web automation, direct uploads, element interactions, and advanced scraping workflows for AI agents. All standard Playwright tools remain 1:1 available and fully functional.

Custom Tools (Features)

1. download_and_convert_images

  • Description: Downloads an image from a given URL, converts it to PNG format, and saves it locally.

  • Parameters:

    • url (String, required): The URL of the image to download.

    • outputDir (String, optional): The target directory (defaults to a directory named downloads inside the current workspace).

2. browser_get_html

  • Description: Extracts the raw HTML markup of a specific element (by CSS selector or Snapshot ID) or the entire page.

  • Parameters:

    • target (String, optional): CSS selector or Snapshot ID. If omitted, the HTML of the entire page is returned.

3. browser_scroll_to

  • Description: Scrolls the page or a specific element to coordinates or preset positions.

  • Parameters:

    • target (String, optional): CSS selector or Snapshot ID of the element to scroll into view.

    • x (Number, optional): Horizontal scroll coordinate.

    • y (Number, optional): Vertical scroll coordinate.

    • position (Enum ["top", "bottom", "intoView"], optional): Scroll position preset.

4. browser_extract_table

  • Description: Finds and extracts HTML table data (<table> or grid rows) and returns it as a structured JSON array.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the table or grid element.

5. browser_wait_for_network_idle

  • Description: Blocks execution until all network requests on the page are completed (no network requests active for at least 500ms). Perfect for modern Single Page Applications (SPAs).

  • Parameters:

    • timeout (Number, optional): Maximum timeout in milliseconds (defaults to 10000ms).

6. browser_get_attributes

  • Description: Returns all HTML attributes of an element as a key-value object (e.g. class, style, data-* attributes).

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the target element.

7. browser_handle_download

  • Description: Clicks an element, intercepts the triggered browser download event, and saves the file to the workspace.

  • Parameters:

    • target (String, required): CSS selector of the download button or link.

    • filename (String, optional): Custom filename to save the file as locally.

8. browser_clear_input

  • Description: Deterministically clears the text content of any input field or textarea.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the input field.

9. browser_manage_storage

  • Description: Allows reading, writing, or clearing data from localStorage or sessionStorage.

  • Parameters:

    • action (Enum ["get", "set", "clear"], required): The storage action to perform.

    • storageType (Enum ["local", "session"], required): The storage engine type.

    • key (String, optional): The key to access or modify (required for get and set).

    • value (String, optional): The value to write (required for set).

10. browser_toggle_checkbox

  • Description: Checks or unchecks a checkbox or radio button element deterministically.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the target element.

    • checked (Boolean, required): Whether the element should be checked (true) or unchecked (false).

11. browser_mock_route

  • Description: Intercepts and blocks network requests (e.g. blocking images/ads to save bandwidth/tokens) or fulfills them with mock HTTP responses.

  • Parameters:

    • urlPattern (String, required): Glob or regex pattern (e.g. **/*.{png,jpg} or **/api/v1/data).

    • action (Enum ["abort", "mock"], required): Action to perform.

    • mockStatus (Number, optional): HTTP status code for mock responses.

    • mockBody (String, optional): Response body for mock responses.

12. browser_upload_file_direct

  • Description: Directly uploads files to a file input element (<input type="file">) without needing to trigger or wait for a browser file chooser modal.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the file input element.

    • paths (Array of Strings, required): List of absolute/relative file paths to assign.

13. browser_take_screenshot_element

  • Description: Captures a PNG/JPEG screenshot of a specific element and saves it to the workspace.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the target element.

    • filename (String, optional): Custom filename to save the screenshot.

    • type (Enum ["png", "jpeg"], optional): Output image format (defaults to png).

14. browser_get_page_info

  • Description: Retrieves frame tree, URL, page title, user agent, tab count, and viewport information.

  • Parameters: None.

15. browser_set_geolocation

  • Description: Emulates a specific geographic location for testing region-restricted content.

  • Parameters:

    • latitude (Number, required): Latitude between -90 and 90.

    • longitude (Number, required): Longitude between -180 and 180.

    • accuracy (Number, optional): Geolocation accuracy value.

16. browser_emulate_media

  • Description: Emulates dark/light color scheme theme settings and media type queries (screen vs. print).

  • Parameters:

    • colorScheme (Enum ["light", "dark", "no-preference"], optional): Emulated color scheme.

    • media (Enum ["screen", "print", "null"], optional): Emulated media type.

17. browser_focus_element

  • Description: Directs DOM focus onto the target element.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the element to focus.

18. browser_dispatch_event

  • Description: Dispatches a custom event (e.g. click, change, input) with optional custom initialization parameters on a target element.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the target element.

    • type (String, required): Event type string (e.g. 'change').

    • eventInit (Object, optional): Custom event initialization parameters.

19. browser_get_element_state

  • Description: Checks current states of an element: whether it is visible, enabled, editable, or checked.

  • Parameters:

    • target (String, required): CSS selector or Snapshot ID of the element.

20. browser_key_down_up

  • Description: Separately fires keydown and keyup events for modifier controls or custom key holding.

  • Parameters:

    • key (String, required): Name of the key (e.g., 'Shift', 'Control', 'a', 'ArrowUp').

    • action (Enum ["down", "up"], required): Press down or release key.

21. browser_get_links

  • Description: Extracts and lists all internal and external link URLs from the current page.

  • Parameters: None.

22. browser_mouse_move_click

  • Description: Performs absolute mouse movement and click actions on coordinate pixels.

  • Parameters:

    • x (Number, required): X coordinate in pixels.

    • y (Number, required): Y coordinate in pixels.

    • click (Boolean, optional): Set to true to click at the coordinates.

    • button (Enum ["left", "right", "middle"], optional): Mouse click button.


Related MCP server: Kryfto

Integration

You can bind this local MCP server to your preferred MCP client (such as Claude Desktop or Cursor). Since it runs locally, you execute it using node and the path to the compiled JavaScript bundle.

1. Claude Desktop (Configuration)

Add the server to your Claude Desktop configuration file (e.g. at %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "playwright": {
      "command": "node",
      "args": [
        "C:/Users/danev/Downloads/extend-playwright-mcp/dist/index.js",
        "--extension"
      ],
      "env": {
        "PLAYWRIGHT_MCP_EXTENSION_TOKEN": "PYefeTc_P7a5Ej8TmHCIshkWvtIPnlQ90H04ItZ66Aw"
      }
    }
  }
}

Note: Replace C:/Users/danev/Downloads/extend-playwright-mcp with your actual directory path if the project folder is moved. Ensure you use forward slashes (/) instead of backslashes (\) in the JSON paths.

2. Cursor (Configuration)

Add a new MCP server in Cursor:

  • Name: playwright

  • Type: command

  • Command:

    node "C:/Users/danev/Downloads/extend-playwright-mcp/dist/index.js" --extension
  • Environment Variables:

    • Name: PLAYWRIGHT_MCP_EXTENSION_TOKEN

    • Value: PYefeTc_P7a5Ej8TmHCIshkWvtIPnlQ90H04ItZ66Aw


Development and Compilation

If you modify the TypeScript code, compile the project again using:

# Install dependencies
npm install

# Compile the project (outputs to the dist/ folder)
npm run build

Available Tools

46 tools
browser_clear_inputA
Destructive

Clears the text in an input or textarea element.

Inputs: target (required).

browser_clickB
Destructive

Perform click on a web page

Inputs: target (required), button, element, modifiers, +1 more.

browser_closeB
Destructive

Close the page

Inputs: no named parameters.

browser_console_messagesB
Read-only

Returns all console messages

Inputs: level (required), all, filename.

browser_dispatch_eventB
Destructive

Dispatches a custom event with optional custom initialization parameters on a target element.

Inputs: type (required), target (required), eventInit.

browser_dragA
Destructive

Perform drag and drop between two elements

Inputs: endTarget (required), startTarget (required), endElement, startElement.

browser_dropA
Destructive

Drop files or MIME-typed data onto an element, as if dragged from outside the page. At least one of "paths" or "data" must be provided.

Inputs: target (required), data, paths, element.

browser_emulate_mediaA
Destructive

Emulates light/dark color scheme or media type queries (screen vs. print).

Inputs: media, colorScheme.

browser_evaluateB
Destructive

Evaluate JavaScript expression on page or element

Inputs: function (required), target, element, filename.

browser_extract_tableA
Read-only

Extracts tabular HTML table data into a structured JSON array.

Inputs: target (required).

browser_file_uploadB
Destructive

Upload one or multiple files

Inputs: paths.

browser_fill_formB
Destructive

Fill multiple form fields

Inputs: fields (required).

browser_findA
Read-only

Search the accessibility snapshot of the current page for text or a regular expression. Returns matching snapshot nodes with a few lines of surrounding context (like search snippets), each shown under its path from the root of the tree, which is cheaper than capturing the whole snapshot when you only need to locate an element and its ref.

Inputs: text, regex.

browser_focus_elementC
Destructive

Focuses the target element.

Inputs: target (required).

browser_get_attributesA
Read-only

Returns all attributes of an HTML element as a key-value dictionary.

Inputs: target (required).

browser_get_element_stateA
Read-only

Checks the state of an element: visible, enabled, editable, checked, or focused.

Inputs: target (required).

browser_get_htmlA
Read-only

Returns the raw HTML of a target element or the entire page if no target is specified.

Inputs: target.

browser_get_page_infoA
Read-only

Retrieves detailed page metadata including URL, title, frames, tabs count, viewport, and agent information.

Inputs: no named parameters.

browser_handle_dialogC
Destructive

Handle a dialog

Inputs: accept (required), promptText.

browser_handle_downloadA
Destructive

Clicks an element and intercepts the resulting file download event, saving the file to the workspace.

Inputs: target (required), filename.

browser_hoverA
Destructive

Hover over element on page

Inputs: target (required), element.

browser_key_down_upA
Destructive

Fires a separate keydown or keyup event for custom key combinations or modifier actions.

Inputs: key (required), action (required).

browser_manage_storageA
Destructive

Inspects, sets, or clears values in local/session storage.

Inputs: action (required), storageType (required), key, value.

browser_mock_routeA
Destructive

Intercepts and mocks/blocks network requests matching a URL pattern (e.g. blocking images/ads, or mocking responses).

Inputs: action (required), urlPattern (required), mockBody, mockStatus.

browser_mouse_move_clickC
Destructive

Controls fine mouse movement to target coordinates and clicks on coordinates.

Inputs: x (required), y (required), click, button.

browser_navigateC
Destructive

Navigate to a URL

Inputs: url (required).

browser_navigate_backA
Destructive

Go back to the previous page in the history

Inputs: no named parameters.

browser_network_requestA
Read-only

Returns full details (headers and body) of a single network request, or a single part if part is set. Use the number from browser_network_requests.

Inputs: index (required), part, filename.

browser_network_requestsA
Read-only

Returns a numbered list of network requests since loading the page. Use browser_network_request with the number to get full details.

Inputs: static (required), filter, filename.

browser_press_keyB
Destructive

Press a key on the keyboard

Inputs: key (required).

browser_resizeB
Destructive

Resize the browser window

Inputs: width (required), height (required).

browser_run_code_unsafeA
Destructive

Run a Playwright code snippet. Unsafe: executes arbitrary JavaScript in the Playwright server process and is RCE-equivalent.

Inputs: code, filename.

browser_scroll_toA
Destructive

Scrolls the page or a specific element into view or to custom coordinates.

Inputs: x, y, target, position.

browser_select_optionB
Destructive

Select an option in a dropdown

Inputs: target (required), values (required), element.

browser_set_geolocationB
Destructive

Emulates a specific geographic location for the browser context.

Inputs: latitude (required), longitude (required), accuracy.

browser_snapshotB
Read-only

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

Inputs: boxes, depth, target, filename.

browser_tabsA
Destructive

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

Inputs: action (required), url, index.

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.

Inputs: type (required), scale (required), target, element, +2 more.

browser_take_screenshot_elementA
Read-only

Takes a screenshot of a specific element and saves it to the workspace.

Inputs: target (required), type, filename.

browser_toggle_checkboxA
Destructive

Checks or unchecks a checkbox/radio button element deterministically.

Inputs: target (required), checked (required).

browser_typeB
Destructive

Type text into editable element

Inputs: text (required), target (required), slowly, submit, +1 more.

browser_upload_file_directA
Destructive

Directly sets input files on a file input element bypassing the file-chooser modal requirement.

Inputs: paths (required), target (required).

browser_wait_forA
Read-only

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

Inputs: text, time, textGone.

browser_wait_for_network_idleA
Read-only

Waits until there are no active network connections (network idle state) for at least 500ms.

Inputs: timeout.

download_and_convert_imagesA
Destructive

Downloads an image from the given URL and converts it to PNG format. Saves output in target directory and returns the absolute local path.

Inputs: url (required), outputDir.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 46 tools

    Disambiguation4/5

    Most tools have distinct purposes, but a few pairs overlap in function (e.g., browser_file_upload vs browser_upload_file_direct, browser_drag vs browser_drop) and could confuse an agent. Overall, descriptions help clarify the boundaries between similar actions.

    Naming Consistency4/5

    The vast majority of tools follow the browser_<action> pattern, but there are notable exceptions like `download_and_convert_images` (no browser_ prefix) and noun-style names such as browser_tabs, browser_network_requests, and browser_console_messages. These deviations are minor but break full consistency.

    Tool Count2/5

    With 46 tools, the server is heavily over-scoped for a browser automation toolkit. Many fine-grained actions like browser_key_down_up, browser_mouse_move_click, and browser_dispatch_event could be consolidated or covered by a generic evaluate tool. While the domain is broad, this count exceeds what is typically considered well-scoped.

    Completeness5/5

    The tool surface provides comprehensive coverage of browser automation: navigation, interaction, extraction, screenshots, network interception, storage management, tabs, dialogs, downloads, and geolocation. It also includes browser_run_code_unsafe to fill any remaining gaps, making the surface effectively complete for its stated purpose.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables comprehensive browser automation and web interaction through Playwright with 50+ specialized functions for navigation, form filling, data extraction, and Chrome DevTools Protocol support. Designed specifically for AI agents to perform complex web workflows including scraping, testing, and automated browsing tasks.
      15 npm
      1
      Apache 2.0
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides 42+ MCP tools for browser automation, web scraping, and search, enabling AI agents like Claude and Cursor to browse, extract data, and run research agents on the live web.
      9
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Exposes Playwright browser automation as MCP tools, enabling AI assistants to control a real browser tab-by-tab for form filling, navigation, and more, while preserving the user's active session.
      -