playwright-mcp-advanced
v0.1.0
Published
Advanced Playwright Tools for MCP
Readme
Advanced Playwright MCP
This is an advanced version of the Playwright MCP that provides additional tools for browser automation.
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.
🚀 Advanced Features
This advanced version includes additional capabilities not available in the original Playwright MCP:
📸 Enhanced Screenshot Tools
- Full page screenshots - Capture entire scrollable page content with
fullPage: true - Element screenshots by locator - Screenshot specific elements using Playwright locators (
#id,.class,text=Hello) - Multiple element screenshots - Capture multiple elements simultaneously with locator arrays
- Vision mode enhancements - All screenshot capabilities available in vision mode
🔍 HTML Content Extraction
browser_get_html_content- Extract HTML content from the entire page or specific elementsbrowser_get_outer_html- Get complete element HTML including the element tag itself- Batch processing - Extract HTML from multiple elements in parallel
- Error handling - Graceful handling of missing elements
📋 Element Snapshot Tools
browser_element_snapshot- Capture accessibility snapshots of specific elements by locator(s)- Structured element data - Get tag names, text content, attributes, and visibility status
- Multiple element snapshots - Process multiple elements simultaneously with locator arrays
- YAML formatted output - Consistent format matching the main page snapshot tool
💡 Key Improvements
- Parallel execution - Multiple operations execute simultaneously for better performance
- Smart validation - Prevents conflicting parameter combinations
- Flexible locators - Support for any Playwright locator syntax
- Multiple element handling - When a single locator finds multiple elements, returns data for each element
- Developer-friendly - Clear error messages and formatted output
- Vision mode compatibility - All HTML extraction tools work in both snapshot and vision modes
🔗 Chrome Extension Mode
--extension- Connect to existing Chrome tabs through a Chrome extension- CDP Relay Server - Bridge between Chrome extension and MCP server
- Live Session Control - Work with authenticated sessions and existing browser state
- Real-time Interaction - No need to launch new browser instances
- Tab Sharing - Share active Chrome tabs with the MCP server
- Smart Redirect Handling - Automatically updates targetInfo after redirects
⚡ Electron Application Support
--electron- Connect to existing Electron applications with remote debugging enabled- Native App Automation - Control and test Electron apps using the same MCP protocol
- Context Reuse - Uses existing browser contexts and pages from running Electron apps
- File:// Protocol Support - Works with local file protocols common in Electron applications
- Live App Testing - Test and interact with production Electron applications
- No Browser Launch - Connects to your running Electron app instead of launching new browsers
🔧 Programmatic Server Creation
- Custom Tools - Add your own tools with custom logic and validation
- Custom Resources - Provide custom data resources accessible via MCP protocol
- Custom Prompts - Create reusable prompt templates with arguments
- Builder Pattern - Fluent API for server configuration and customization
- Type Safety - Full TypeScript support with Zod schema validation
- Integration - Seamlessly combine custom components with standard Playwright tools
📚 Complete Programmatic API Documentation →
Quick Example:
import { createServerBuilder, createTool } from 'playwright-mcp-advanced';
import { z } from 'zod';
const calculator = createTool(
'calculate',
'Perform calculations',
z.object({ expression: z.string() }),
async (params) => ({ content: [{ type: 'text', text: `Result: ${eval(params.expression)}` }] })
);
const server = await createServerBuilder()
.addTool(calculator)
.build();Requirements
- Node.js 18 or newer
- VS Code, Cursor, Windsurf, Claude Desktop or any other MCP client
Local Development Setup
To use this advanced version locally:
Clone and build the project:
git clone <repository-url> cd playwright-mcp-advanced npm install npm run buildConfigure your MCP client to use the local build (see configuration examples below)
Getting started
First, install the Playwright MCP server with your client.
Configuration Options
For the original Playwright MCP:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"playwright-mcp-advanced@latest"
]
}
}
}For this advanced version (local development):
{
"mcpServers": {
"playwright-advanced": {
"command": "node",
"args": [
"/path/to/playwright-mcp-advanced/dist/index.js"
]
}
}
}IDE-Specific Installation
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-advanced@latest"]}'After installation, the Playwright MCP server will be available for use with your GitHub Copilot agent in VS Code.
For original Playwright MCP:
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-advanced.
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"playwright-mcp-advanced@latest"
]
}
}
}For this advanced version (local):
Go to Cursor Settings -> MCP -> Add new MCP Server. Use the following configuration:
{
"mcpServers": {
"playwright-advanced": {
"command": "node",
"args": [
"/absolute/path/to/playwright-mcp-advanced/dist/index.js"
]
}
}
}Follow Windsurf MCP documentation. Use following configuration:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"playwright-mcp-advanced@latest"
]
}
}
}Follow the MCP install guide.
For original Playwright MCP:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"playwright-mcp-advanced@latest"
]
}
}
}For this advanced version (local):
{
"mcpServers": {
"playwright-advanced": {
"command": "node",
"args": [
"/absolute/path/to/playwright-mcp-advanced/dist/index.js"
]
}
}
}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-advanced@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"
--electron enable Electron application support, requires
--cdp-endpoint
--extension run in extension mode, starts CDP relay server
for Chrome extension
--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.
--plugins-folder <path> path to the plugins directory. Default is
"./plugins".
--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-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"Redirect Handling in CDP Relay
When using the Chrome Extension mode (--extension), the CDP Relay now intelligently handles redirects to ensure that the targetInfo (URL and title) always matches the actual page being displayed. This solves issues where the reported URL might not match the actual page after redirects.
Key features:
- Automatic URL Updates: The targetInfo is automatically updated after HTTP redirects, meta refreshes, and JavaScript redirects
- Title Synchronization: Page titles are kept in sync with the actual page content
- Event-Based Detection: Monitors CDP events to detect navigation and redirect events
- Reliable Snapshots: Ensures that snapshots always show the correct URL and title
For more details, see the CDP Relay Redirect Handling documentation.
MCP Server Configuration Examples
Communication Modes
For all modes that use HTTP SSE transport, use this agent configuration:
{
"url": "http://localhost:3000/sse",
"type": "sse"
}Note: Replace 3000 with your chosen port number.
For standard stdio communication:
{
"command": "npx",
"args": [
"playwright-mcp-advanced",
"--browser",
"chrome",
"--vision",
"--isolated"
]
}For local development:
{
"command": "node",
"args": [
"/absolute/path/to/playwright-mcp-advanced/cli.js",
"--browser",
"chrome",
"--vision",
"--isolated"
]
}Specialized Running Modes
Quick start using npm script:
npm run extensionOr manually:
npx playwright-mcp-advanced --extension --port 3000 --browser chromium --visionFeatures enabled:
- Extension mode (
--extension) - SSE transport on port 3000
- Chrome extension bridge
- Vision mode for screenshots
For detailed setup instructions, see the Extension Mode Example.
- Start your Electron app with remote debugging:
your-electron-app --remote-debugging-port=9222- Start MCP server in Electron mode:
npx playwright-mcp-advanced --electron --cdp-endpoint http://localhost:9222 --port 3000Features enabled:
- Connects to existing Electron app via CDP
- Uses existing browser contexts and pages
- SSE transport on port 3000
For complete setup guide, see the Electron Mode Example.
For headless environments or worker processes:
npx playwright-mcp-advanced --port 8931Then configure your MCP client with SSE endpoint:
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/sse"
}
}
}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}-profileIsolated
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-advanced@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-advanced@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 enabled capabilities
capabilities?: Array<
'core' | // Core browser automation
'tabs' | // Tab management
'pdf' | // PDF generation
'history' | // Browser history
'wait' | // Wait utilities
'files' | // File handling
'install' | // Browser installation
'testing' // Testing
>;
// Enable vision mode (screenshots instead of accessibility snapshots)
vision?: boolean;
// 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[];
};
/**
* Do not send image responses to the client.
*/
noImageResponses?: boolean;
}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-advanced";
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);
// ...
});Command Line Utilities
This package includes additional command-line utilities for working with MCP servers:
🔍 mcp-list-tools
A utility for discovering and inspecting available tools, resources, and prompts from any MCP server over HTTP.
# List all capabilities from default server
mcp-list-tools
# Connect to custom server
mcp-list-tools http://localhost:8080/mcp
# Get JSON output for scripting
mcp-list-tools --format=json
# Show only tools with detailed schemas
mcp-list-tools --tools-only --detailed
# Show only resources or prompts
mcp-list-tools --resources-only
mcp-list-tools --prompts-onlyKey Features:
- 🔍 Discovery: List all available tools, resources, and prompts
- 📋 Detailed Info: Show input schemas and parameter details with
--detailed - 🎯 Selective Output: Filter to show only tools, resources, or prompts
- 💻 JSON Support: Machine-readable output for automation and scripting
- 🔤 Icon Legend: Visual indicators for read-only (🔒) and destructive (⚠️) tools
- ⚡ Fast: Quick inspection without full MCP client setup
📚 Complete mcp-list-tools Documentation →
Chrome Extension Mode ✅ FULLY TESTED & WORKING
The Chrome Extension mode allows you to connect the MCP server to existing Chrome tabs through a Chrome extension. This feature has been thoroughly tested and verified working with complete CDP (Chrome DevTools Protocol) integration.
Verified capabilities:
- ✅ Real-time browser control through Chrome extension
- ✅ Navigation and page interaction (
browser_navigate,browser_click) - ✅ Content extraction (
browser_get_html_content,browser_snapshot) - ✅ Screenshot capture (
browser_screen_capture) - ✅ Session management with automatic reconnection
- ✅ Full Playwright API compatibility through CDP relay
This is useful for:
- Working with authenticated sessions
- Debugging existing web applications
- Interacting with live browser state
- Avoiding the need to launch new browser instances
- Seamless integration with existing Chrome workflows
Setting up Chrome Extension Mode
1. Start the MCP server with extension mode
npx playwright-mcp-advanced@latest --extension --port 9223Or configure your MCP client:
{
"mcpServers": {
"playwright-extension": {
"command": "npx",
"args": [
"playwright-mcp-advanced@latest",
"--extension",
"--port", "9223"
]
}
}
}2. Install the Chrome Extension
- Open Chrome and navigate to
chrome://extensions/ - Enable "Developer mode" (toggle in top right)
- Click "Load unpacked" and select the
extension/folder from this repository - The "Playwright MCP Bridge" extension should now be installed
3. Connect a Chrome tab
- Open the Chrome tab you want to control
- Click the Playwright MCP Bridge extension icon
- The extension will show the bridge URL (default:
ws://localhost:9223/extension) - Click "Share This Tab" to connect the tab to the MCP server
4. Use MCP tools with the connected tab
Once connected, you can use all MCP tools like browser_navigate, browser_click, browser_screenshot, etc., and they will operate on the connected Chrome tab.
Extension Features
- Real-time connection status - See which tab is currently shared
- Easy tab switching - Switch between shared tabs directly from the extension
- Automatic reconnection - Handles connection drops gracefully
- Single tab limitation - Only one tab can be shared at a time for security
Troubleshooting Extension Mode
- Connection failed: Check that the MCP server is running with
--extensionflag - Permission errors: Ensure the extension has debugging permissions
- Tab not responding: Try refreshing the tab and reconnecting
- Multiple tabs: Only one tab can be shared at a time - disconnect current tab first
Tools
The tools are available in two modes:
- Uses accessibility snapshots for better performance and reliability
- Faster and more lightweight than vision mode
- No screenshots required
- Works purely with structured data
- Better for automation and testing
- Uses screenshots for visual-based interactions
- Best for computer use models that interact with X,Y coordinates
- Enables coordinate-based clicking and interaction
- Perfect for visual debugging and complex UI interactions
Enable Vision Mode by adding the --vision flag:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"playwright-mcp-advanced@latest",
"--vision"
]
}
}
}Additional Vision-specific tools:
browser_screen_capture- Enhanced screenshot capture with locator supportbrowser_screen_click- Click at X,Y coordinatesbrowser_screen_drag- Drag between coordinatesbrowser_screen_move_mouse- Move mouse to coordinatesbrowser_screen_type- Type text in vision mode
Note: All HTML extraction tools (browser_get_html_content, browser_get_outer_html) work in both modes. Most interaction tools like browser_press_key, browser_wait_for, browser_file_upload, and browser_handle_dialog are shared between modes.
- browser_snapshot
- Title: Page snapshot
- Description: Capture accessibility snapshot of the current page, this is better than screenshot
- Parameters: None
- Read-only: true
- browser_element_snapshot 🆕
- Title: Element snapshot
- Description: Capture accessibility snapshot of specific elements by locator(s). Better than screenshot for specific elements.
- Enhancement: Capture structured accessibility data for specific elements using locators
- Parameters:
locator(string, optional): Playwright locator string to capture accessibility snapshot of a specific element (e.g., "#id", ".class", "text=Hello"). Cannot be combined with locators parameter.locators(array, optional): Array of Playwright locator strings to capture accessibility snapshots of multiple elements. Cannot be combined with locator parameter.
- Read-only: true
- 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 elementref(string): Exact target element reference from the page snapshotdoubleClick(boolean, optional): Whether to double click instead of single click
- Read-only: false
- 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 elementstartRef(string): Exact source element reference from the page snapshotendElement(string): Human-readable target element description used to obtain the permission to interact with the elementendRef(string): Exact target element reference from the page snapshot
- 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 elementref(string): Exact target element reference from the page snapshot
- 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 elementref(string): Exact target element reference from the page snapshottext(string): Text to type into the elementsubmit(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_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 elementref(string): Exact target element reference from the page snapshotvalues(array): Array of values to select in the dropdown. This can be a single value or multiple values.
- Read-only: false
- 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 asArrowLeftora
- Read-only: false
- 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 elementref(string): Exact target element reference from the page snapshottext(string): Text to type into the elementsubmit(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 secondstext(string, optional): The text to wait fortextGone(string, optional): The text to wait for to disappear
- Read-only: true
- 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_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_screen_capture ⭐
- 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.
- Enhancement: Enhanced with fullPage and locator support for flexible screenshot capture
- 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 topage-{timestamp}.{png|jpeg}if not specified.fullPage(boolean, optional): Whether to take a screenshot of the full scrollable page. Cannot be combined with element/ref/locator parameters.locator(string, optional): Playwright locator string to screenshot a specific element (e.g., "#id", ".class", "text=Hello"). Cannot be combined with element/ref/fullPage parameters.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.
- 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 topage-{timestamp}.pdfif not specified.
- 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_console_messages
- Title: Get console messages
- Description: Returns all console messages
- Parameters: None
- Read-only: true
- browser_get_html_content 🆕
- Title: Get HTML content
- Description: Get HTML content of the current page or specific elements. Returns full page HTML by default, or HTML of specific elements when locator(s) provided.
- Enhancement: Extract HTML content from page or specific elements with flexible locator support
- Parameters:
locator(string, optional): Playwright locator string to get HTML content of a specific element (e.g., "#id", ".class", "text=Hello"). Cannot be combined with locators parameter.locators(array, optional): Array of Playwright locator strings to get HTML content of multiple elements. Cannot be combined with locator parameter.
- Read-only: true
- browser_get_outer_html 🆕
- Title: Get outer HTML content
- Description: Get outer HTML content of specific elements (includes the element tag itself). Requires locator(s) to be specified.
- Enhancement: Get complete element HTML including the element tag itself
- Parameters:
locator(string, optional): Playwright locator string to get outer HTML content of a specific element (e.g., "#id", ".class", "text=Hello"). Cannot be combined with locators parameter.locators(array, optional): Array of Playwright locator strings to get outer HTML content of multiple elements. Cannot be combined with locator parameter.
- 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_close
- Title: Close browser
- Description: Close the page
- Parameters: None
- Read-only: true
- browser_resize
- Title: Resize browser window
- Description: Resize the browser window
- Parameters:
width(number): Width of the browser windowheight(number): Height of the browser window
- Read-only: true
- 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_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_screen_capture ⭐
- Title: Take a screenshot
- Description: Take a screenshot of the current page
- Enhancement: Enhanced with fullPage and locator/locators support for flexible vision mode capture
- Parameters:
fullPage(boolean, optional): Whether to take a screenshot of the full scrollable page. Cannot be combined with locator/locators parameters.locator(string, optional): Playwright locator string to screenshot a specific element (e.g., "#id", ".class", "text=Hello"). Cannot be combined with fullPage/locators parameters.locators(array, optional): Array of Playwright locator strings to screenshot multiple elements. Cannot be combined with fullPage/locator parameters.
- Read-only: true
- 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 elementx(number): X coordinatey(number): Y coordinate
- Read-only: true
- browser_mouse_click_xy
- Title: Click
- Description: Click left mouse button
- Parameters:
element(string): Human-readable element description used to obtain permission to interact with the elementx(number): X coordinatey(number): Y coordinate
- Read-only: false
- browser_mouse_drag_xy
- Title: Drag mouse
- Description: Drag left mouse button
- Parameters:
element(string): Human-readable element description used to obtain permission to interact with the elementstartX(number): Start X coordinatestartY(number): Start Y coordinateendX(number): End X coordinateendY(number): End Y coordinate
- Read-only: false
- browser_type
- Title: Type text
- Description: Type text
- Parameters:
text(string): Text to type into the elementsubmit(boolean, optional): Whether to submit entered text (press Enter after)
- Read-only: false
- 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 asArrowLeftora
- Read-only: false
- 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 elementref(string): Exact target element reference from the page snapshottext(string): Text to type into the elementsubmit(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 secondstext(string, optional): The text to wait fortextGone(string, optional): The text to wait for to disappear
- Read-only: true
- 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_get_html_content 🆕
- Title: Get HTML content
- Description: Get HTML content of the current page or specific elements. Returns full page HTML by default, or HTML of specific elements when locator(s) provided.
- Enhancement: Extract HTML content from page or specific elements with flexible locator support
- Parameters:
locator(string, optional): Playwright locator string to get HTML content of a specific element (e.g., "#id", ".class", "text=Hello"). Cannot be combined with locators parameter.locators(array, optional): Array of Playwright locator strings to get HTML content of multiple elements. Cannot be combined with locator parameter.
- Read-only: true
- browser_get_outer_html 🆕
- Title: Get outer HTML content
- Description: Get outer HTML content of specific elements (includes the element tag itself). Requires locator(s) to be specified.
- Enhancement: Get complete element HTML including the element tag itself
- Parameters:
locator(string, optional): Playwright locator string to get outer HTML content of a specific element (e.g., "#id", ".class", "text=Hello"). Cannot be combined with locators parameter.locators(array, optional): Array of Playwright locator strings to get outer HTML content of multiple elements. Cannot be combined with locator parameter.
- Read-only: true
License
This project is licensed under the same terms as the original Playwright MCP.
