Playwright MCP
oficialServidor oficial de Playwright MCP para automatización de navegadores, inspección de páginas, capturas de pantalla e interacción web desde Claude, Cursor y otros agentes de IA.
¿Qué puedes hacer con Playwright MCP?
- Automatización de navegador mediante instantáneas de accesibilidad — Pide a tu IA que navegue por páginas e interactúe con elementos usando datos estructurados de accesibilidad, sin necesidad de capturas de pantalla.
- Sesiones de navegación persistentes — Mantén estados de sesión iniciada a lo largo de conversaciones con un perfil persistente, o usa sesiones aisladas para pruebas limpias.
- Soporte multi-navegador — Automatiza tareas en Chromium, Firefox o WebKit, con opciones para modo headless y emulación de dispositivos.
- Configuración personalizada del navegador — Configura el tamaño de la ventana gráfica, el agente de usuario, los ajustes de proxy y los permisos para que coincidan con tus necesidades de prueba.
- Integración de extensiones del navegador — Conéctate a tu navegador Chrome o Edge existente para aprovechar las pestañas actuales y las sesiones iniciadas.
Documentación
Playwright MCP
Un servidor de Model Context Protocol (MCP) que proporciona capacidades de automatización de navegador utilizando Playwright. Este servidor permite que los LLM interactúen con páginas web a través de instantáneas de accesibilidad estructuradas, evitando la necesidad de capturas de pantalla o modelos ajustados visualmente.
Playwright MCP vs Playwright CLI
Este paquete proporciona una interfaz MCP para Playwright. Si estás utilizando un agente de codificación, podrías beneficiarte de usar CLI+SKILLS en su lugar.
-
CLI: Los agentes de codificación modernos favorecen cada vez más los flujos de trabajo basados en CLI expuestos como SKILLs sobre MCP porque las invocaciones de CLI son más eficientes en tokens: evitan cargar esquemas de herramientas grandes y árboles de accesibilidad verbosos en el contexto del modelo, permitiendo que los agentes actúen a través de comandos concisos y diseñados para un propósito específico. Esto hace que CLI + SKILLs sea más adecuado para agentes de codificación de alto rendimiento que deben equilibrar la automatización del navegador con grandes bases de código, pruebas y razonamiento dentro de ventanas de contexto limitadas.
Aprende más sobre Playwright CLI con SKILLS. -
MCP: MCP sigue siendo relevante para bucles agénticos especializados que se benefician de estado persistente, introspección enriquecida y razonamiento iterativo sobre la estructura de la página, como automatización exploratoria, pruebas auto-reparables o flujos de trabajo autónomos de larga duración donde mantener un contexto de navegador continuo supera las preocupaciones sobre el costo de tokens.
Características clave
- Rápido y ligero. Utiliza el árbol de accesibilidad de Playwright, no entrada basada en píxeles.
- Amigable con LLM. No se necesitan modelos de visión, opera puramente con datos estructurados.
- Aplicación de herramientas determinista. Evita la ambigüedad común con los enfoques basados en capturas de pantalla.
Requisitos
- Node.js 18 o más reciente
- VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie o cualquier otro cliente MCP
Primeros pasos
Primero, instala el servidor Playwright MCP con tu cliente.
Configuración estándar funciona en la mayoría de las herramientas:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Amp
Agrega a través de la pantalla de configuración de la extensión Amp VS Code o actualizando tu archivo settings.json:
"amp.mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
Configuración de Amp CLI:
Agrega a través del comando amp mcp add a continuación
amp mcp add playwright -- npx @playwright/mcp@latest
Antigravity
Agrega a través de la configuración de Antigravity o actualizando tu archivo de configuración:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Claude Code
Usa la CLI de Claude Code para agregar el servidor Playwright MCP:
claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop
Sigue la guía de instalación de MCP, usa la configuración estándar anterior.
Cline
Sigue las instrucciones en la sección Configuración de servidores MCP
Ejemplo: Configuración local
Agrega lo siguiente a tu archivo cline_mcp_settings.json:
{
"mcpServers": {
"playwright": {
"type": "stdio",
"command": "npx",
"timeout": 30,
"args": [
"-y",
"@playwright/mcp@latest"
],
"disabled": false
}
}
}
Codex
Usa la CLI de Codex para agregar el servidor Playwright MCP:
codex mcp add playwright npx "@playwright/mcp@latest"
Alternativamente, crea o edita el archivo de configuración ~/.codex/config.toml y agrega:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
Para más información, consulta la documentación de MCP de Codex.
Copilot
Usa la CLI de Copilot para agregar interactivamente el servidor Playwright MCP:
/mcp add
Alternativamente, crea o edita el archivo de configuración ~/.copilot/mcp-config.json y agrega:
{
"mcpServers": {
"playwright": {
"type": "local",
"command": "npx",
"tools": [
"*"
],
"args": [
"@playwright/mcp@latest"
]
}
}
}
Para más información, consulta la documentación de la CLI de Copilot.
Cursor
Haz clic en el botón para instalar:
O instala manualmente:
Ve a Cursor Settings -> MCP -> Add new MCP Server. Ponle un nombre a tu gusto, usa el tipo command con el comando npx @playwright/mcp@latest. También puedes verificar la configuración o agregar argumentos de comando haciendo clic en Edit.
Factory
Usa la CLI de Factory para agregar el servidor Playwright MCP:
droid mcp add playwright "npx @playwright/mcp@latest"
Alternativamente, escribe /mcp dentro de Factory droid para abrir una interfaz de usuario interactiva para gestionar servidores MCP.
Para más información, consulta la documentación de MCP de Factory.
Gemini CLI
Sigue la guía de instalación de MCP, usa la configuración estándar anterior.
Goose
Haz clic en el botón para instalar:
O instala manualmente:
Ve a Advanced settings -> Extensions -> Add custom extension. Ponle un nombre a tu gusto, usa el tipo STDIO, y establece el command a npx @playwright/mcp. Haz clic en "Add Extension".
Grok
Usa la CLI de Grok para agregar el servidor Playwright MCP:
grok mcp add playwright -- npx @playwright/mcp@latest
Alternativamente, crea o edita el archivo de configuración ~/.grok/config.toml y agrega:
[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]
Para más información, consulta la documentación de MCP de Grok.
Junie
Para agregar el servidor Playwright MCP en Junie CLI:
- Escribe
/mcp - Presiona
Ctrl+Apara agregar un nuevo servidor MCP - Selecciona Playwright de la lista
Alternativamente, agrega a .junie/mcp/mcp.json:
{
"mcpServers": {
"Playwright": {
"command": "npx",
"args": [
"-y",
"@playwright/mcp@latest"
]
}
}
}
Para más información, consulta la documentación de configuración de MCP de Junie.
Kiro
Sigue la documentación de servidores MCP. Por ejemplo en .kiro/settings/mcp.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
LM Studio
Haz clic en el botón para instalar:
O instala manualmente:
Ve a Program en la barra lateral derecha -> Install -> Edit mcp.json. Usa la configuración estándar anterior.
opencode
Sigue la documentación de servidores MCP. Por ejemplo en ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"playwright": {
"type": "local",
"command": [
"npx",
"@playwright/mcp@latest"
],
"enabled": true
}
}
}
Qodo Gen
Abre el panel de chat de Qodo Gen en VSCode o IntelliJ → Conectar más herramientas → + Agregar nuevo MCP → Pega la configuración estándar anterior.
Haz clic en Guardar.
VS Code
Haz clic en el botón para instalar:
O instala manualmente:
Sigue la guía de instalación de MCP, usa la configuración estándar anterior. También puedes instalar el servidor Playwright MCP usando la CLI de VS Code:
# For VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
Después de la instalación, el servidor Playwright MCP estará disponible para usar con tu agente GitHub Copilot en VS Code.
Warp
Ve a Settings -> AI -> Manage MCP Servers -> + Add para agregar un servidor MCP. Usa la configuración estándar anterior.
Alternativamente, usa el comando de barra /add-mcp en el prompt de Warp y pega la configuración estándar de arriba:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Windsurf
Sigue la documentación de MCP de Windsurf. Usa la configuración estándar anterior.
Configuración
El servidor Playwright MCP admite los siguientes argumentos. Se pueden proporcionar en la configuración JSON anterior, como parte de la lista "args":
| Opción | Descripción |
|---|---|
| --allowed-hosts <hosts...> | lista separada por comas de hosts desde los que este servidor puede servir. Por defecto, el host al que está vinculado el servidor. Pasa '*' para deshabilitar la verificación de host. env PLAYWRIGHT_MCP_ALLOWED_HOSTS |
| --allowed-origins | lista separada por punto y coma de orígenes CONFIABLES a los que se permite que el navegador solicite. Por defecto, se permiten todos. Importante: no sirve como límite de seguridad y no afecta las redirecciones. env PLAYWRIGHT_MCP_ALLOWED_ORIGINS |
| --allow-unrestricted-file-access | permite el acceso a archivos fuera de las raíces del espacio de trabajo. También permite el acceso sin restricciones a URLs file://. Por defecto, el acceso al sistema de archivos está restringido solo a los directorios raíz del espacio de trabajo (o al directorio de trabajo actual si no se configuran raíces), y la navegación a URLs file:// está bloqueada. env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS |
| --blocked-origins | lista separada por punto y coma de orígenes que el navegador tiene bloqueado solicitar. La lista de bloqueo se evalúa antes que la lista de permitidos. Si se usa sin la lista de permitidos, las solicitudes que no coincidan con la lista de bloqueo aún se permiten. Importante: no sirve como límite de seguridad y no afecta las redirecciones. env PLAYWRIGHT_MCP_BLOCKED_ORIGINS |
| --block-service-workers | bloquear service workers env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS |
| --browser | navegador o canal de chrome a usar, valores posibles: chrome, firefox, webkit, msedge. env PLAYWRIGHT_MCP_BROWSER |
| --caps | lista separada por comas de capacidades adicionales a habilitar, valores posibles: vision, pdf, devtools. env PLAYWRIGHT_MCP_CAPS |
| --cdp-endpoint | endpoint CDP al que conectarse. env PLAYWRIGHT_MCP_CDP_ENDPOINT |
| --cdp-header <headers...> | encabezados CDP para enviar con la solicitud de conexión, se pueden especificar varios. env PLAYWRIGHT_MCP_CDP_HEADERS |
| --cdp-timeout | tiempo de espera en milisegundos para conectar al endpoint CDP, por defecto 30000ms env PLAYWRIGHT_MCP_CDP_TIMEOUT |
| --codegen | especifica el idioma a usar para la generación de código, valores posibles: "typescript", "python", "java", "csharp", "none". Por defecto es "typescript". env PLAYWRIGHT_MCP_CODEGEN |
| --config | ruta al archivo de configuración. env PLAYWRIGHT_MCP_CONFIG |
| --console-level | nivel de mensajes de consola a devolver: "error", "warning", "info", "debug". Cada nivel incluye los mensajes de niveles más severos. env PLAYWRIGHT_MCP_CONSOLE_LEVEL |
| --device | dispositivo a emular, por ejemplo: "iPhone 15" env PLAYWRIGHT_MCP_DEVICE |
| --mobile | emular un dispositivo móvil genérico (Pixel 10 para Chromium, iPhone 17 para WebKit). Las páginas móviles suelen ser más ligeras, lo que ahorra tokens. No se puede combinar con --device. env PLAYWRIGHT_MCP_MOBILE |
| --executable-path | ruta al ejecutable del navegador. env PLAYWRIGHT_MCP_EXECUTABLE_PATH |
| --extension | Conectar a una instancia de navegador en ejecución (solo Edge/Chrome). Requiere que la "Playwright Extension" esté instalada. env PLAYWRIGHT_MCP_EXTENSION |
| --endpoint | endpoint de navegador vinculado al que conectarse. env PLAYWRIGHT_MCP_ENDPOINT |
| --file-paths | cómo se muestran las rutas de archivo en los resultados de las herramientas, "relative" a la raíz del espacio de trabajo o "absolute". Por defecto es "relative". env PLAYWRIGHT_MCP_FILE_PATHS |
| --grant-permissions <permissions...> | Lista de permisos para otorgar al contexto del navegador, por ejemplo "geolocation", "clipboard-read", "clipboard-write". env PLAYWRIGHT_MCP_GRANT_PERMISSIONS |
| --headless | ejecutar el navegador en modo headless, con interfaz por defecto env PLAYWRIGHT_MCP_HEADLESS |
| --host | host al que vincular el servidor. Por defecto es localhost. Usa 0.0.0.0 para vincular a todas las interfaces. env PLAYWRIGHT_MCP_HOST |
| --idle-timeout | cerrar el navegador después de esta cantidad de milisegundos sin una llamada de herramienta completada; la siguiente llamada de herramienta lo relanza. Por defecto es una hora para navegadores headless, nunca para los que tienen interfaz, 0 lo deshabilita. env PLAYWRIGHT_MCP_IDLE_TIMEOUT |
| --ignore-https-errors | ignorar errores https env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS |
| --init-page <path...> | ruta al archivo TypeScript para evaluar en el objeto de página de Playwright env PLAYWRIGHT_MCP_INIT_PAGE |
| --init-script <path...> | ruta al archivo JavaScript para agregar como script de inicialización. El script se evaluará en cada página antes de cualquiera de los scripts de la página. Se puede especificar varias veces. env PLAYWRIGHT_MCP_INIT_SCRIPT |
| --isolated | mantener el perfil del navegador en memoria, no guardarlo en disco. env PLAYWRIGHT_MCP_ISOLATED |
| --image-responses | si enviar respuestas de imagen al cliente. Puede ser "allow", "omit" o "only". Con "only", una respuesta que lleva una imagen consiste solo en las partes de imagen, sin la parte de texto. Por defecto es "allow". env PLAYWRIGHT_MCP_IMAGE_RESPONSES |
| --no-sandbox | deshabilitar el sandbox para todos los tipos de proceso que normalmente están en sandbox. env PLAYWRIGHT_MCP_NO_SANDBOX |
| --no-webmcp | no recopilar ni exponer las herramientas que una página registra a través de la API WebMCP. env PLAYWRIGHT_MCP_WEBMCP=false |
| --output-dir | ruta al directorio para archivos de salida con nombre automático, por ejemplo, una captura de pantalla tomada sin un nombre de archivo explícito. Los archivos con un nombre explícito se resuelven contra la raíz del espacio de trabajo y no se ven afectados por esta opción. env PLAYWRIGHT_MCP_OUTPUT_DIR |
| --output-max-size | Umbral para expulsar archivos de salida antiguos, en bytes. env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE |
| --port | puerto para escuchar en el transporte SSE. env PLAYWRIGHT_MCP_PORT |
| --profile-dir-name | nombre del directorio de perfil en el directorio de datos de usuario al que conectar con --extension, por ejemplo "Profile 1". Por defecto, el último perfil usado que tiene la extensión instalada. env PLAYWRIGHT_MCP_PROFILE_DIR_NAME |
| --proxy-bypass | dominios separados por comas para omitir el proxy, por ejemplo ".com,chromium.org,.domain.com" env PLAYWRIGHT_MCP_PROXY_BYPASS |
| --proxy-server | especificar servidor proxy, por ejemplo "http://myproxy:3128" o "socks5://myproxy:8080" env PLAYWRIGHT_MCP_PROXY_SERVER |
| --sandbox | habilitar el sandbox para todos los tipos de proceso que normalmente no están en sandbox. env PLAYWRIGHT_MCP_SANDBOX |
| --save-session | Si guardar la sesión de Playwright MCP en el directorio de salida. env PLAYWRIGHT_MCP_SAVE_SESSION |
| --secrets | ruta a un archivo que contiene secretos en el formato dotenv env PLAYWRIGHT_MCP_SECRETS_FILE |
| --shared-browser-context | reutilizar el mismo contexto de navegador entre todos los clientes HTTP conectados. env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT |
| --snapshot-boxes | incluir el cuadro delimitador de cada elemento como [box=x,y,width,height] en las instantáneas. Las coordenadas son relativas a la ventana gráfica, en píxeles CSS. env PLAYWRIGHT_MCP_SNAPSHOT_BOXES |
| --snapshot-mode | al tomar instantáneas para las respuestas, especifica el modo a usar. Puede ser "full" o "none". Por defecto es "full". env PLAYWRIGHT_MCP_SNAPSHOT_MODE |
| --storage-state | ruta al archivo de estado de almacenamiento para sesiones aisladas. env PLAYWRIGHT_MCP_STORAGE_STATE |
| --test-id-attribute | especificar el atributo a usar para los ids de prueba, por defecto "data-testid" env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE |
| --timeout-action | especificar el tiempo de espera de acción en milisegundos, por defecto 5000ms env PLAYWRIGHT_MCP_TIMEOUT_ACTION |
| --timeout-navigation | especificar el tiempo de espera de navegación en milisegundos, por defecto 60000ms env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION |
| --timeout-settle | cuánto tiempo esperar después de cada acción para que el trabajo activado se asiente, en milisegundos, por defecto 500ms env PLAYWRIGHT_MCP_TIMEOUT_SETTLE |
| --user-agent | especificar la cadena de user agent env PLAYWRIGHT_MCP_USER_AGENT |
| --user-data-dir | ruta al directorio de datos de usuario. Si no se especifica, se creará un directorio temporal. env PLAYWRIGHT_MCP_USER_DATA_DIR |
| --viewport-size | especificar el tamaño de la ventana gráfica del navegador en píxeles, por ejemplo "1280x720" env PLAYWRIGHT_MCP_VIEWPORT_SIZE |
Perfil de usuario
Puedes ejecutar Playwright MCP con un perfil persistente como un navegador normal (por defecto), en contextos aislados para sesiones de prueba, o conectarte a tu navegador existente usando la extensión del navegador.
Perfil persistente
Toda la información de inicio de sesión se almacenará en el perfil persistente; puedes eliminarlo entre sesiones si deseas borrar el estado sin conexión.
El perfil persistente se encuentra en las siguientes ubicaciones y puedes sobrescribirlo con el argumento --user-data-dir.
# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-{workspace-hash}
# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}
# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}
{workspace-hash} se deriva de la raíz del espacio de trabajo del cliente MCP, por lo que diferentes proyectos obtienen perfiles separados automáticamente.
[!IMPORTANT] Un perfil persistente solo puede ser usado por una instancia de navegador a la vez, por lo que los clientes MCP concurrentes que comparten el mismo espacio de trabajo entrarán en conflicto. Para ejecutar varios clientes en paralelo, inicia cada cliente adicional con
--isolatedo apúntalo a un--user-data-dirdistinto.
Aislado
En el modo aislado, cada sesión se inicia en el perfil aislado. Cada vez que le pidas a MCP que cierre el navegador,
la sesión se cierra y todo el estado de almacenamiento de esta sesión se pierde. Puedes proporcionar el estado de almacenamiento inicial
al navegador a través del contextOptions de la configuración o mediante el argumento --storage-state. Aprende más sobre el estado de almacenamiento aquí.
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--storage-state={path/to/storage.json}"
]
}
}
}
Extensión del navegador
La extensión de Chrome de Playwright MCP te permite conectarte a pestañas existentes del navegador y aprovechar tus sesiones iniciadas y el estado del navegador. Consulta microsoft/playwright › packages/extension para instrucciones de instalación y configuración.
Estado inicial
Hay varias formas de proporcionar el estado inicial al contexto del navegador o a una página.
Para el estado de almacenamiento, puedes:
- Comenzar con un directorio de datos de usuario usando el argumento
--user-data-dir. Esto persistirá todos los datos del navegador entre sesiones. - Comenzar con un archivo de estado de almacenamiento usando el argumento
--storage-state. Esto cargará cookies y almacenamiento local desde el archivo en un contexto de navegador aislado.
Para el estado de la página, puedes usar:
--init-pagepara apuntar a un archivo TypeScript que se evaluará en el objeto de página de Playwright. Esto te permite ejecutar código arbitrario para configurar la página.
// 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-scriptpara apuntar a un archivo JavaScript que se agregará como script de inicialización. El script se evaluará en cada página antes de cualquiera de los scripts de la página. Esto es útil para sobrescribir APIs del navegador o configurar el entorno.
// init-script.js
window.isPlaywrightMCP = true;
Archivo de configuración
El servidor de Playwright MCP se puede configurar usando un archivo de configuración JSON. Puedes especificar el archivo de configuración
usando la opción de línea de comandos --config:
npx @playwright/mcp@latest --config path/to/config.json
Esquema del archivo de configuración
{
/**
* The browser to use.
*/
browser?: {
/**
* The type of browser to use.
*/
browserName?: 'chromium' | 'firefox' | 'webkit';
/**
* Keep the browser profile in memory, do not save it to disk.
*/
isolated?: boolean;
/**
* Path to a user data directory for browser profile persistence.
* Temporary directory is created by default.
*/
userDataDir?: string;
/**
* Launch options passed to
* @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
*
* This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
*/
launchOptions?: playwright.LaunchOptions;
/**
* Context options for the browser context.
*
* This is useful for settings options like `viewport`.
*/
contextOptions?: playwright.BrowserContextOptions;
/**
* Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
*/
cdpEndpoint?: string;
/**
* CDP headers to send with the connect request.
*/
cdpHeaders?: Record<string, string>;
/**
* Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
*/
cdpTimeout?: number;
/**
* Remote endpoint to connect to an existing Playwright server. May be a
* WebSocket URL string, or a [ConnectOptions] object that mirrors the
* `connectOptions` shape used by the test runner. When passed as an object,
* `exposeNetwork`, `headers`, `slowMo`, and `timeout` are forwarded to the
* underlying connect call.
*/
remoteEndpoint?: string | playwright.ConnectOptions & { endpoint: string };
/**
* Paths to TypeScript files to add as initialization scripts for Playwright page.
*/
initPage?: string[];
/**
* Paths to JavaScript files to add as initialization scripts.
* The scripts will be evaluated in every page before any of the page's scripts.
*/
initScript?: string[];
},
/**
* Connect to a running browser instance (Edge/Chrome only). If specified, `browser`
* config is ignored.
* Requires the "Playwright Extension" to be installed.
*/
extension?: boolean;
server?: {
/**
* The port to listen on for SSE or MCP transport.
*/
port?: number;
/**
* The host to bind the server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
*/
host?: string;
/**
* The hosts this server is allowed to serve from. Defaults to the host server is bound to.
* This is not for CORS, but rather for the DNS rebinding protection.
*/
allowedHosts?: string[];
},
/**
* List of enabled tool capabilities. Possible values:
* - 'core': Core browser automation features.
* - 'pdf': PDF generation and manipulation.
* - 'vision': Coordinate-based interactions.
* - 'devtools': Developer tools features.
*/
capabilities?: ToolCapability[];
/**
* Whether to save the Playwright session into the output directory.
*/
saveSession?: boolean;
/**
* Whether to collect and expose the tools that a page registers through the
* experimental WebMCP API. Enabled by default.
*/
webmcp?: boolean;
/**
* Reuse the same browser context between all connected HTTP clients.
*/
sharedBrowserContext?: boolean;
/**
* Secrets are used to replace matching plain text in the tool responses to prevent the LLM
* from accidentally getting sensitive data. It is a convenience and not a security feature,
* make sure to always examine information coming in and from the tool on the client.
*/
secrets?: Record<string, string>;
/**
* The directory for automatically named output files, for example a screenshot taken without an
* explicit file name. Files with an explicit name are resolved against the workspace root instead
* and are not affected by this option.
*/
outputDir?: string;
/**
* Threshold for evicting old output files, in bytes.
*/
outputMaxSize?: number;
console?: {
/**
* The level of console messages to return. Each level includes the messages of more severe levels. Defaults to "info".
*/
level?: 'error' | 'warning' | 'info' | 'debug';
},
network?: {
/**
* List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
*
* Supported formats:
* - Full origin: `https://example.com:8080` - matches only that origin
* - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
*/
allowedOrigins?: string[];
/**
* List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
*
* Supported formats:
* - Full origin: `https://example.com:8080` - matches only that origin
* - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
*/
blockedOrigins?: string[];
};
/**
* Specify the attribute to use for test ids, defaults to "data-testid".
*/
testIdAttribute?: string;
timeouts?: {
/*
* Configures default action timeout: https://playwright.dev/docs/api/class-page#page-set-default-timeout. Defaults to 5000ms.
*/
action?: number;
/*
* Configures default navigation timeout: https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout. Defaults to 60000ms.
*/
navigation?: number;
/**
* Configures default expect timeout: https://playwright.dev/docs/test-timeouts#expect-timeout. Defaults to 5000ms.
*/
expect?: number;
/**
* How long to wait after each action for triggered work (navigations, requests) to settle before responding. Defaults to 500ms.
*/
settle?: number;
/**
* Close the browser after this many milliseconds without a tool call, and relaunch it on the next one.
* Defaults to one hour for headless browsers Playwright launched, and to no timeout for headed or attached ones. Pass 0 to disable.
* The CLI shuts the whole session down instead of relaunching.
*/
idle?: number;
};
/**
* Whether to send image responses to the client. Can be "allow", "omit", or "only". Defaults to "allow".
* With "only", a response that carries an image consists of the image parts alone, without the text part.
*/
imageResponses?: 'allow' | 'omit' | 'only';
/**
* How file paths are rendered in tool results. Can be "relative" to the workspace root or "absolute". Defaults to "relative".
*/
filePaths?: 'relative' | 'absolute';
snapshot?: {
/**
* When taking snapshots for responses, specifies the mode to use.
*/
mode?: 'full' | 'none';
/**
* Whether to include each element's bounding box as [box=x,y,width,height] in snapshots.
* Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect).
*/
boxes?: boolean;
};
/**
* allowUnrestrictedFileAccess acts as a guardrail to prevent the LLM from accidentally
* wandering outside its intended workspace. It is a convenience defense to catch unintended
* file access, not a secure boundary; a deliberate attempt to reach other directories can be
* easily worked around, so always rely on client-level permissions for true security.
*/
allowUnrestrictedFileAccess?: boolean;
/**
* Specify the language to use for code generation.
*/
codegen?: 'typescript' | 'python' | 'java' | 'csharp' | 'none';
}
Servidor MCP independiente
Al ejecutar un navegador con interfaz en un sistema sin display o desde procesos de trabajo de los IDEs,
ejecuta el servidor MCP desde el entorno con el DISPLAY y pasa el indicador --port para habilitar el transporte HTTP.
npx @playwright/mcp@latest --port 8931
Y luego, en la configuración del cliente MCP, establece el url al endpoint HTTP:
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/mcp"
}
}
}
Seguridad
Playwright MCP no es un límite de seguridad. Consulta Prácticas recomendadas de seguridad de MCP para obtener orientación sobre cómo proteger tu implementación.
Docker
NOTA: La implementación de Docker solo admite Chromium sin interfaz gráfica por el momento.
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
O si prefieres ejecutar el contenedor como un servicio de larga duración en lugar de dejar que el cliente MCP lo inicie, usa:
docker run -d -i --rm --init --pull=always \
--entrypoint node \
--name playwright \
-p 8931:8931 \
mcr.microsoft.com/playwright/mcp \
/app/cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0
El servidor escuchará en el puerto del host 8931 y cualquier cliente MCP podrá acceder a él.
Puedes crear la imagen de Docker tú mismo.
docker build -t mcr.microsoft.com/playwright/mcp .
Uso programático
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);
// ...
});
Herramientas
Automatización principal
- browser_click
- Título: Clic
- Descripción: Realiza un clic en una página web
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con el elementotarget(cadena): Referencia exacta del elemento objetivo de la instantánea de la página, o un selector de elemento únicodoubleClick(booleano, opcional): Si se debe realizar un doble clic en lugar de un clic simplebutton(cadena, opcional): Botón para hacer clic, por defecto es el izquierdomodifiers(matriz, opcional): Teclas modificadoras a presionar
- Solo lectura: false
- browser_close
- Título: Cerrar navegador
- Descripción: Cierra la página
- Parámetros: Ninguno
- Solo lectura: false
- browser_console_messages
- Título: Obtener mensajes de consola
- Descripción: Devuelve todos los mensajes de consola
- Parámetros:
level(cadena): Nivel de los mensajes de consola a devolver. Cada nivel incluye los mensajes de niveles más severos. Por defecto es "info".all(booleano, opcional): Devuelve todos los mensajes de consola desde el inicio de la sesión, no solo desde la última navegación. Por defecto es false.filename(cadena, opcional): Nombre de archivo para guardar los mensajes de consola. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se proporciona, los mensajes se devuelven como texto.
- Solo lectura: true
- browser_drag
- Título: Arrastrar mouse
- Descripción: Realiza arrastrar y soltar entre dos elementos
- Parámetros:
startElement(cadena, opcional): Descripción legible del elemento de origen utilizada para obtener permiso para interactuar con el elementostartTarget(cadena): Referencia exacta del elemento objetivo de la instantánea de la página, o un selector de elemento únicoendElement(cadena, opcional): Descripción legible del elemento de destino utilizada para obtener permiso para interactuar con el elementoendTarget(cadena): Referencia exacta del elemento objetivo de la instantánea de la página, o un selector de elemento único
- Solo lectura: false
- browser_drop
- Título: Soltar archivos o datos sobre un elemento
- Descripción: Suelta archivos o datos con tipo MIME sobre un elemento, como si se arrastraran desde fuera de la página. Se debe proporcionar al menos uno de "paths" o "data".
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con el elementotarget(cadena): Referencia exacta del elemento objetivo de la instantánea de la página, o un selector de elemento únicopaths(matriz, opcional): Rutas absolutas a los archivos que se soltarán sobre el elemento.data(objeto, opcional): Datos a soltar, como un mapa de tipo MIME a valor de cadena (por ejemplo, {"text/plain": "hola", "text/uri-list": "https://example.com"}).
- Solo lectura: false
- browser_emulate_media
- Título: Emular características de medios
- Descripción: Emula las características de medios CSS de la página, por ejemplo, cambiar entre el esquema de colores claro y oscuro. Los parámetros omitidos se dejan sin cambios; null borra una anulación.
- Parámetros:
colorScheme(opcional): Emula la característica de medios prefers-color-schemereducedMotion(opcional): Emula la característica de medios prefers-reduced-motionforcedColors(opcional): Emula la característica de medios forced-colorscontrast(opcional): Emula la característica de medios prefers-contrastmedia(opcional): Cambia el tipo de medio CSS de la página
- Solo lectura: false
- browser_evaluate
- Título: Evaluar JavaScript
- Descripción: Evalúa una expresión de JavaScript en la página o en un elemento
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con el elementotarget(cadena, opcional): Referencia exacta del elemento objetivo de la instantánea de la página, o un selector de elemento únicofunction(cadena): () => { /* código / } o (element) => { / código */ } cuando se proporciona un elementofilename(cadena, opcional): Nombre de archivo para guardar el resultado. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se proporciona, el resultado se devuelve como texto.
- Solo lectura: false
- browser_file_upload
- Título: Subir archivos
- Descripción: Sube uno o varios archivos
- Parámetros:
paths(matriz, opcional): Las rutas absolutas a los archivos que se subirán. Puede ser un solo archivo o varios. Si se omite, el selector de archivos se cancela.
- Solo lectura: false
- browser_fill_form
- Título: Rellenar formulario
- Descripción: Rellena múltiples campos de formulario
- Parámetros:
fields(matriz): Campos a rellenar
- Solo lectura: false
- browser_find
- Título: Buscar en la instantánea de la página
- Descripción: Busca en la instantánea de accesibilidad de la página actual texto o una expresión regular. Devuelve los nodos de instantánea coincidentes con algunas líneas de contexto circundante (como fragmentos de búsqueda), cada uno mostrado bajo su ruta desde la raíz del árbol, lo cual es más económico que capturar toda la instantánea cuando solo necesitas localizar un elemento y su ref.
- Parámetros:
text(cadena, opcional): Texto plano para buscar en la instantánea de la página (coincidencia de subcadena sin distinción de mayúsculas). Proporciona texto o regex, no ambos.regex(cadena, opcional): Expresión regular para buscar en la instantánea de la página. La coincidencia distingue mayúsculas por defecto; envuelve el patrón en barras para agregar banderas, por ejemplo, "/error/i" para no distinguir mayúsculas. Proporciona texto o regex, no ambos.filename(cadena, opcional): Guarda los resultados en un archivo en lugar de devolverlos en la respuesta. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo.
- Solo lectura: true
- browser_handle_dialog
- Título: Manejar un diálogo
- Descripción: Maneja un diálogo
- Parámetros:
accept(booleano): Si se debe aceptar el diálogo.promptText(cadena, opcional): El texto del mensaje en caso de un diálogo de aviso.
- Solo lectura: false
- browser_hover
- Título: Pasar el mouse por encima
- Descripción: Pasa el mouse por encima de un elemento en la página
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con el elementotarget(cadena): Referencia exacta del elemento objetivo de la instantánea de la página, o un selector de elemento único
- Solo lectura: false
- browser_navigate
- Título: Navegar a una URL
- Descripción: Navega a una URL
- Parámetros:
url(cadena): La URL a la que navegar
- Solo lectura: false
- browser_navigate_back
- Título: Retroceder
- Descripción: Retrocede a la página anterior en el historial
- Parámetros: Ninguno
- Solo lectura: false
- browser_network_request
- Título: Mostrar detalles de la solicitud de red
- Descripción: Devuelve los detalles completos (encabezados y cuerpo) de una sola solicitud de red, o una sola parte si se establece
part. Usa el número de browser_network_requests. - Parámetros:
index(entero): Índice basado en 1 de la solicitud, como se imprime en browser_network_requests.part(cadena, opcional): Devuelve solo esta parte de la solicitud. Omítelo para devolver los detalles completos.filename(cadena, opcional): Nombre de archivo para guardar el resultado. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se proporciona, la salida se devuelve como texto.
- Solo lectura: true
- browser_network_requests
- Título: Listar solicitudes de red
- Descripción: Devuelve una lista numerada de solicitudes de red desde que se cargó la página. Usa browser_network_request con el número para obtener los detalles completos.
- Parámetros:
static(booleano): Si se deben incluir recursos estáticos exitosos como imágenes, fuentes, scripts, etc. Por defecto es false.filter(cadena, opcional): Solo devuelve solicitudes cuya URL coincida con esta expresión regular (por ejemplo, "/api/.*user").filename(cadena, opcional): Nombre de archivo para guardar las solicitudes de red. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se proporciona, las solicitudes se devuelven como texto.
- Solo lectura: true
- browser_press_key
- Título: Presionar una tecla
- Descripción: Presiona una tecla en el teclado
- Parámetros:
key(cadena): Nombre de la tecla a presionar o un carácter a generar, comoArrowLeftoa
- Solo lectura: false
- browser_resize
- Título: Redimensionar la ventana del navegador
- Descripción: Redimensiona la ventana del navegador
- Parámetros:
width(número): Ancho de la ventana del navegadorheight(número): Alto de la ventana del navegador
- Solo lectura: false
- browser_run_code_unsafe
- Título: Ejecutar código de Playwright (no seguro)
- Descripción: Ejecuta un fragmento de código de Playwright. No seguro: ejecuta JavaScript arbitrario en el proceso del servidor de Playwright y es equivalente a RCE.
- Parámetros:
code(cadena, opcional): Una función de JavaScript que contiene código de Playwright para ejecutar. Se invocará con un solo argumento, page, que puedes usar para cualquier interacción con la página. Por ejemplo:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }filename(cadena, opcional): Carga el código desde el archivo especificado. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si se proporcionan tanto el código como el nombre de archivo, se ignorará el código.
- Solo lectura: false
- browser_select_option
- Título: Seleccionar opción
- Descripción: Selecciona una opción en un menú desplegable
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con el elementotarget(cadena): Referencia exacta del elemento objetivo de la instantánea de la página, o un selector de elemento únicovalues(matriz): Matriz de valores para seleccionar en el menú desplegable. Puede ser un solo valor o varios valores.
- Solo lectura: false
- browser_snapshot
- Título: Instantánea de página
- Descripción: Captura una instantánea de accesibilidad de la página actual; esto es mejor que una captura de pantalla.
- Parámetros:
target(cadena, opcional): Referencia exacta del elemento objetivo desde la instantánea de página, o un selector de elemento único.filename(cadena, opcional): Guarda la instantánea en un archivo en lugar de devolverla en la respuesta. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo.depth(número, opcional): Limita la profundidad del árbol de la instantánea.boxes(booleano, opcional): Incluye el cuadro delimitador de cada elemento como [box=x,y,width,height] en la instantánea. Las coordenadas son relativas al viewport, en píxeles CSS (Element.getBoundingClientRect).
- Solo lectura: true
- browser_take_screenshot
- Título: Tomar una captura de pantalla
- Descripción: Toma una captura de pantalla de la página actual. No puedes realizar acciones basadas en la captura de pantalla; usa browser_snapshot para acciones.
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con él.target(cadena, opcional): Referencia exacta del elemento objetivo desde la instantánea de página, o un selector de elemento único.type(cadena, opcional): Formato de imagen para la captura de pantalla. Si no se establece, se infiere de la extensión del archivo; de lo contrario, png.filename(cadena, opcional): Nombre de archivo para guardar la captura de pantalla. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se especifica, la captura se guarda en el directorio de salida comopage-{timestamp}.{png|jpeg|webp}.fullPage(booleano, opcional): Cuando es true, toma una captura de pantalla de toda la página desplazable, en lugar del viewport visible actualmente. No se puede usar con capturas de elementos.scale(cadena): Escala de resolución de imagen. "css" produce una captura de pantalla en píxeles CSS (más pequeña, consistente entre dispositivos). "device" produce una captura de alta resolución usando píxeles de dispositivo (más grande, tiene en cuenta la proporción de píxeles del dispositivo). El valor predeterminado es css.
- Solo lectura: true
- browser_type
- Título: Escribir texto
- Descripción: Escribe texto en un elemento editable.
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con él.target(cadena): Referencia exacta del elemento objetivo desde la instantánea de página, o un selector de elemento único.text(cadena): Texto a escribir en el elemento.submit(booleano, opcional): Si se debe enviar el texto ingresado (presionar Enter después).slowly(booleano, opcional): Si se debe escribir un carácter a la vez. Útil para activar manejadores de teclado en la página. Por defecto, todo el texto se rellena de una vez.
- Solo lectura: false
- browser_wait_for
- Título: Esperar por
- Descripción: Espera a que aparezca o desaparezca texto, o a que pase un tiempo especificado.
- Parámetros:
time(número, opcional): El tiempo a esperar en segundos, como máximo 30.text(cadena, opcional): El texto a esperar.textGone(cadena, opcional): El texto a esperar que desaparezca.
- Solo lectura: false
Gestión de pestañas
- browser_tabs
- Título: Gestionar pestañas
- Descripción: Lista, crea, cierra o selecciona una pestaña del navegador.
- Parámetros:
action(cadena): Operación a realizar.index(número, opcional): Índice de pestaña, usado para cerrar/seleccionar. Si se omite para cerrar, se cierra la pestaña actual.url(cadena, opcional): URL a navegar en la nueva pestaña, usado para nueva.
- Solo lectura: false
Instalación del navegador
Configuración (opt-in vía --caps=config)
- browser_get_config
- Título: Obtener configuración
- Descripción: Obtiene la configuración final resuelta después de fusionar opciones de CLI, variables de entorno y archivo de configuración.
- Parámetros: Ninguno
- Solo lectura: true
Red (opt-in vía --caps=network)
- browser_network_state_set
- Título: Establecer estado de red
- Descripción: Establece el estado de red del navegador a en línea o fuera de línea. Cuando está fuera de línea, todas las solicitudes de red fallarán.
- Parámetros:
state(cadena): Establece a "offline" para simular modo fuera de línea, "online" para restaurar la conectividad de red.
- Solo lectura: false
- browser_route
- Título: Simular solicitudes de red
- Descripción: Configura una ruta para simular solicitudes de red que coincidan con un patrón de URL.
- Parámetros:
pattern(cadena): Patrón de URL a coincidir (por ejemplo, "/api/users", "/*.{png,jpg}").status(número, opcional): Código de estado HTTP a devolver (predeterminado: 200).body(cadena, opcional): Cuerpo de la respuesta (texto o cadena JSON).contentType(cadena, opcional): Encabezado Content-Type (por ejemplo, "application/json", "text/html").headers(array, opcional): Encabezados a agregar en formato "Nombre: Valor".removeHeaders(cadena, opcional): Lista separada por comas de nombres de encabezados a eliminar de la solicitud.
- Solo lectura: false
- browser_route_list
- Título: Listar rutas de red
- Descripción: Lista todas las rutas de red activas.
- Parámetros: Ninguno
- Solo lectura: true
- browser_unroute
- Título: Eliminar rutas de red
- Descripción: Elimina rutas de red que coincidan con un patrón (o todas las rutas si no se especifica un patrón).
- Parámetros:
pattern(cadena, opcional): Patrón de URL a eliminar (omitir para eliminar todas las rutas).
- Solo lectura: false
Almacenamiento (opt-in vía --caps=storage)
- browser_cookie_clear
- Título: Limpiar cookies
- Descripción: Limpia todas las cookies.
- Parámetros: Ninguno
- Solo lectura: false
- browser_cookie_delete
- Título: Eliminar cookie
- Descripción: Elimina una cookie específica.
- Parámetros:
name(cadena): Nombre de la cookie a eliminar.
- Solo lectura: false
- browser_cookie_get
- Título: Obtener cookie
- Descripción: Obtiene una cookie específica por nombre.
- Parámetros:
name(cadena): Nombre de la cookie a obtener.
- Solo lectura: true
- browser_cookie_list
- Título: Listar cookies
- Descripción: Lista todas las cookies (opcionalmente filtradas por dominio/ruta).
- Parámetros:
domain(cadena, opcional): Filtra cookies por dominio.path(cadena, opcional): Filtra cookies por ruta.
- Solo lectura: true
- browser_cookie_set
- Título: Establecer cookie
- Descripción: Establece una cookie con banderas opcionales (dominio, ruta, expiración, httpOnly, secure, sameSite).
- Parámetros:
name(cadena): Nombre de la cookie.value(cadena): Valor de la cookie.domain(cadena, opcional): Dominio de la cookie.path(cadena, opcional): Ruta de la cookie.expires(número, opcional): Expiración de la cookie como marca de tiempo Unix.httpOnly(booleano, opcional): Si la cookie es solo HTTP.secure(booleano, opcional): Si la cookie es segura.sameSite(cadena, opcional): Atributo SameSite de la cookie.
- Solo lectura: false
- browser_localstorage_clear
- Título: Limpiar localStorage
- Descripción: Limpia todo el localStorage.
- Parámetros: Ninguno
- Solo lectura: false
- browser_localstorage_delete
- Título: Eliminar elemento de localStorage
- Descripción: Elimina un elemento de localStorage.
- Parámetros:
key(cadena): Clave a eliminar.
- Solo lectura: false
- browser_localstorage_get
- Título: Obtener elemento de localStorage
- Descripción: Obtiene un elemento de localStorage por clave.
- Parámetros:
key(cadena): Clave a obtener.
- Solo lectura: true
- browser_localstorage_list
- Título: Listar localStorage
- Descripción: Lista todos los pares clave-valor de localStorage.
- Parámetros: Ninguno
- Solo lectura: true
- browser_localstorage_set
- Título: Establecer elemento de localStorage
- Descripción: Establece un elemento de localStorage.
- Parámetros:
key(cadena): Clave a establecer.value(cadena): Valor a establecer.
- Solo lectura: false
- browser_sessionstorage_clear
- Título: Limpiar sessionStorage
- Descripción: Limpia todo el sessionStorage.
- Parámetros: Ninguno
- Solo lectura: false
- browser_sessionstorage_delete
- Título: Eliminar elemento de sessionStorage
- Descripción: Elimina un elemento de sessionStorage.
- Parámetros:
key(cadena): Clave a eliminar.
- Solo lectura: false
- browser_sessionstorage_get
- Título: Obtener elemento de sessionStorage
- Descripción: Obtiene un elemento de sessionStorage por clave.
- Parámetros:
key(cadena): Clave a obtener.
- Solo lectura: true
- browser_sessionstorage_list
- Título: Listar sessionStorage
- Descripción: Lista todos los pares clave-valor de sessionStorage.
- Parámetros: Ninguno
- Solo lectura: true
- browser_sessionstorage_set
- Título: Establecer elemento de sessionStorage
- Descripción: Establece un elemento de sessionStorage.
- Parámetros:
key(cadena): Clave a establecer.value(cadena): Valor a establecer.
- Solo lectura: false
- browser_set_storage_state
- Título: Restaurar estado de almacenamiento
- Descripción: Restaura el estado de almacenamiento (cookies, almacenamiento local) desde un archivo. Esto limpia las cookies y el almacenamiento local existentes antes de restaurar.
- Parámetros:
filename(cadena): Ruta al archivo de estado de almacenamiento desde el cual restaurar. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo.
- Solo lectura: false
- browser_storage_state
- Título: Guardar estado de almacenamiento
- Descripción: Guarda el estado de almacenamiento (cookies, almacenamiento local) en un archivo para reutilizarlo más tarde.
- Parámetros:
filename(cadena, opcional): Nombre de archivo para guardar el estado de almacenamiento. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se especifica, el estado de almacenamiento se guarda en el directorio de salida comostorage-state-{timestamp}.json.
- Solo lectura: true
DevTools (opt-in vía --caps=devtools)
- browser_annotate
- Título: Anotar la página actual
- Descripción: Abre el Playwright Dashboard en modo de anotación para la página actual y espera a que el usuario dibuje anotaciones. Devuelve la captura de pantalla anotada, la instantánea ARIA y la lista de anotaciones.
- Parámetros: Ninguno
- Solo lectura: true
- browser_hide_highlight
- Título: Ocultar resaltado de elemento
- Descripción: Elimina una superposición de resaltado previamente agregada para el elemento.
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada al agregar el resaltado; debe coincidir con el valor pasado a browser_highlight.target(cadena, opcional): Referencia exacta del elemento objetivo desde la instantánea de página, o un selector de elemento único.
- Solo lectura: true
- browser_highlight
- Título: Resaltar elemento
- Descripción: Mostrar una superposición de resaltado persistente alrededor del elemento en la página.
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con éltarget(cadena): Referencia exacta del elemento objetivo desde la instantánea de la página, o un selector de elemento únicostyle(cadena, opcional): CSS en línea adicional aplicado a la superposición de resaltado, p. ej. "outline: 2px dashed red".
- Solo lectura: true
- browser_resume
- Título: Reanudar ejecución de script en pausa
- Descripción: Reanudar la ejecución del script después de que se haya pausado. Cuando se llama con step establecido en true, la ejecución se pausará nuevamente antes de la siguiente acción.
- Parámetros:
step(booleano, opcional): Cuando es true, la ejecución se pausará nuevamente antes de la siguiente acción, permitiendo la depuración paso a paso.location(cadena, opcional): Pausar la ejecución en un : específico, p. ej. "example.spec.ts:42".
- Solo lectura: false
- browser_start_recording
- Título: Iniciar grabación de acciones del usuario
- Descripción: Iniciar la grabación de las acciones que el usuario realiza en el navegador como código de Playwright. Úselo cuando el usuario quiera demostrar un flujo manualmente. Llame a browser_stop_recording cuando el usuario indique que ha terminado para recuperar las acciones grabadas.
- Parámetros: Ninguno
- Solo lectura: true
- browser_start_tracing
- Título: Iniciar rastreo
- Descripción: Iniciar grabación de rastreo
- Parámetros: Ninguno
- Solo lectura: true
- browser_start_video
- Título: Iniciar video
- Descripción: Iniciar grabación de video
- Parámetros:
filename(cadena, opcional): Nombre de archivo para guardar el video. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se especifica, el video se guarda en el directorio de salida comovideo-{timestamp}.webm.size(objeto, opcional): Tamaño del videofps(número, opcional): Velocidad de fotogramas del video en fotogramas por segundo, por defecto 25cursor(booleano, opcional): Renderizar un cursor de mouse animado que viaja a cada punto de acción. Marca las acciones con 800ms para que el cursor tenga tiempo de viajar.
- Solo lectura: true
- browser_stop_recording
- Título: Detener grabación de acciones del usuario
- Descripción: Detener la grabación iniciada con browser_start_recording y devolver las acciones grabadas como código de Playwright.
- Parámetros: Ninguno
- Solo lectura: true
- browser_stop_tracing
- Título: Detener rastreo
- Descripción: Detener grabación de rastreo
- Parámetros: Ninguno
- Solo lectura: true
- browser_stop_video
- Título: Detener video
- Descripción: Detener grabación de video
- Parámetros: Ninguno
- Solo lectura: true
- browser_video_chapter
- Título: Capítulo de video
- Descripción: Agregar un marcador de capítulo a la grabación de video. Muestra una tarjeta de capítulo a pantalla completa con fondo desenfocado.
- Parámetros:
title(cadena): Título del capítulodescription(cadena, opcional): Descripción del capítuloduration(número, opcional): Duración en milisegundos para mostrar la tarjeta de capítulo
- Solo lectura: true
- browser_video_hide_actions
- Título: Ocultar superposiciones de acciones
- Descripción: Dejar de anotar las acciones realizadas en la página.
- Parámetros: Ninguno
- Solo lectura: true
- browser_video_show_actions
- Título: Mostrar superposiciones de acciones
- Descripción: Anotar las acciones posteriores realizadas en la página con una etiqueta que nombra la acción y, cuando está estilizada, marca el punto de acción y resalta el elemento objetivo. Útil durante la grabación de video o screencasting.
- Parámetros:
duration(número, opcional): Cuánto tiempo permanece cada anotación de acción en pantalla, en milisegundos. Por defecto 500.position(cadena, opcional): Dónde colocar el título de la acción en relación con la página. Por defecto arriba a la derecha.cursor(cadena, opcional): Decoración del cursor para acciones de puntero. "pointer" (por defecto) anima un puntero de mouse desde el punto de acción anterior al siguiente; "none" desactiva la decoración del cursor.style(objeto, opcional): Estilos de las decoraciones de acción.
- Solo lectura: true
Basado en coordenadas (opt-in mediante --caps=vision)
- browser_mouse_click_xy
- Título: Clic
- Descripción: Hacer clic con el botón del mouse en una posición dada
- Parámetros:
x(número): Coordenada Xy(número): Coordenada Ybutton(cadena, opcional): Botón para hacer clic, por defecto izquierdoclickCount(número, opcional): Número de clics, por defecto 1delay(número, opcional): Tiempo de espera entre presionar y soltar el mouse en milisegundos, por defecto 0
- Solo lectura: false
- browser_mouse_down
- Título: Presionar mouse hacia abajo
- Descripción: Presionar mouse hacia abajo
- Parámetros:
button(cadena, opcional): Botón a presionar, por defecto izquierdo
- Solo lectura: false
- browser_mouse_drag_xy
- Título: Arrastrar mouse
- Descripción: Arrastrar el botón izquierdo del mouse a una posición dada
- Parámetros:
startX(número): Coordenada X inicialstartY(número): Coordenada Y inicialendX(número): Coordenada X finalendY(número): Coordenada Y final
- Solo lectura: false
- browser_mouse_move_xy
- Título: Mover mouse
- Descripción: Mover el mouse a una posición dada
- Parámetros:
x(número): Coordenada Xy(número): Coordenada Y
- Solo lectura: false
- browser_mouse_up
- Título: Soltar mouse
- Descripción: Soltar mouse
- Parámetros:
button(cadena, opcional): Botón a soltar, por defecto izquierdo
- Solo lectura: false
- browser_mouse_wheel
- Título: Desplazar rueda del mouse
- Descripción: Desplazar rueda del mouse
- Parámetros:
deltaX(número): Delta XdeltaY(número): Delta Y
- Solo lectura: false
Generación de PDF (opt-in mediante --caps=pdf)
- browser_pdf_save
- Título: Guardar como PDF
- Descripción: Guardar página como PDF
- Parámetros:
filename(cadena, opcional): Nombre de archivo para guardar el PDF. Los nombres de archivo relativos se resuelven contra la raíz del espacio de trabajo. Si no se especifica, el PDF se guarda en el directorio de salida comopage-{timestamp}.pdf.
- Solo lectura: true
Afirmaciones de prueba (opt-in mediante --caps=testing)
- browser_generate_locator
- Título: Crear localizador para elemento
- Descripción: Generar localizador para el elemento dado para usar en pruebas
- Parámetros:
element(cadena, opcional): Descripción legible del elemento utilizada para obtener permiso para interactuar con éltarget(cadena): Referencia exacta del elemento objetivo desde la instantánea de la página, o un selector de elemento único
- Solo lectura: true
- browser_verify_element_visible
- Título: Verificar elemento visible
- Descripción: Verificar que el elemento sea visible en la página
- Parámetros:
role(cadena): ROL del elemento. Se puede encontrar en la instantánea así:- {ROLE} "Accessible Name":accessibleName(cadena): NOMBRE_ACCESIBLE del elemento. Se puede encontrar en la instantánea así:- role "{ACCESSIBLE_NAME}"
- Solo lectura: false
- browser_verify_list_visible
- Título: Verificar lista visible
- Descripción: Verificar que la lista sea visible en la página
- Parámetros:
element(cadena): Descripción legible de la listatarget(cadena): Referencia exacta del elemento objetivo que apunta a la listaitems(matriz): Elementos a verificar
- Solo lectura: false
- browser_verify_text_visible
- Título: Verificar texto visible
- Descripción: Verificar que el texto sea visible en la página. Prefiera browser_verify_element_visible si es posible.
- Parámetros:
text(cadena): TEXTO a verificar. Se puede encontrar en la instantánea así:- role "Accessible Name": {TEXT}o así:- text: {TEXT}
- Solo lectura: false
- browser_verify_value
- Título: Verificar valor
- Descripción: Verificar valor del elemento
- Parámetros:
type(cadena): Tipo del elementoelement(cadena): Descripción legible del elementotarget(cadena): Referencia exacta del elemento objetivo desde la instantánea de la páginavalue(cadena): Valor a verificar. Para casillas de verificación, use "true" o "false".
- Solo lectura: false