Guía de configuración del MCP de Playwright
Esta guía resuelve los 4 incidentes de conexión que aparecieron repetidas
veces al configurar el servidor MCP de Playwright para los skills de QA
(qa-exploratory-test, etc.). Está pensada para que, si te encontrás con
alguno de estos errores, sepas exactamente qué revisar y qué comando correr —
sin tener que investigar de nuevo.
Requisitos previos
Esta guía usa los comandos de la CLI de Claude Code (
claude mcp ...) como referencia, porque son los que están documentados hoy con este nivel de detalle. El archivo.mcp.jsonque se diagnostica en los incidentes de abajo es el mismo para Codex y Copilot — lo que cambia es el comando para listar/agregar/quitar el servidor MCP, que depende de la CLI o extensión de cada asistente. Si usás Codex o Copilot, buscá el comando equivalente en la documentación de esa herramienta; la lógica de cada incidente (qué está mal y por qué) es la misma.
- Claude Code CLI instalado y funcionando — todos los comandos de esta
guía (
claude mcp ...) se corren desde ahí. - Node.js con
npxdisponible en el PATH — la config final levanta el servidor connpx @playwright/mcp@latest, así que npx tiene que poder resolver y descargar ese paquete. - Navegadores de Playwright instalados — si es la primera vez que usás
Playwright en esta máquina, instalá los navegadores antes de configurar el
MCP (esto instala Chromium, Firefox y WebKit):
npx playwright install**Importante: ** Si se esta usando vscode, el repositorio al que debe estar apuntando o mirando claude code, tiene que ser el repositorio bajo test. Sino puede que no encuentre el mcp al momento de configurar el bootstrap.
Cómo verificar el estado del MCP (siempre el primer paso)
claude mcp list
Buscá la línea de playwright. Puede darte 3 resultados:
✓ Connected→ el server está bien registrado (pero ver el Incidente 3 — "Connected" no siempre significa que las tools ya estén disponibles).✘ Failed to connect→ ver Incidente 1.- Aparece dos veces (en scopes distintos) → ver Incidente 2.
Si claude mcp list muestra ✓ Connected pero las herramientas browser_*
no aparecen cuando las buscás (ToolSearch en Claude Code, o simplemente no
se pueden invocar), pasá directo al Incidente 3.
Incidente 1 — "Failed to connect" por nombre de paquete incorrecto
Configuración inicial (rota):
{
"mcpServers": {
"playwright": {
"command": "mcp-server-playwright",
"args": ["--browser", "chromium"]
}
}
}
Qué pasa:
claude mcp list
playwright: mcp-server-playwright --browser chromium - ✘ Failed to connect
mcp-server-playwright no es un paquete npm real — no existe con ese
nombre. Por eso el proceso nunca arranca.
Variante del mismo síntoma: en vez de (o antes de) correr
claude mcp list, puede que directamente veas este error en el chat al intentar usar una tool de Playwright:Es el mismo Incidente 1 visto desde el lado del cliente MCP: el proceso stdio del server nunca llegó a levantar (comando inexistente), entonces la conexión se cierra apenas se abre. Confirmalo corriendo:MCP error -32000: Connection closedSi el primero no encuentra nada y el segundo sí devuelve una versión, es este incidente — segui los mismos pasos de abajo.where mcp-server-playwright # (o el comando que tengas configurado) npm view @playwright/mcp version
Pasos a seguir:
-
Eliminá la entrada rota:
claude mcp remove playwright -
Volvé a agregarla con el paquete oficial (
@playwright/mcp):claude mcp add playwright -- npx @playwright/mcp@latest --browser chromium --isolated(el flag
--isolatedes para evitar el Incidente 4 — ver más abajo). -
Verificá:
claude mcp list
Configuración final (correcta):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--browser", "chromium", "--isolated"]
}
}
}
playwright: npx @playwright/mcp@latest --browser chromium --isolated - ✓ Connected.
Incidente 2 — El servidor está duplicado en dos scopes distintos
Configuración inicial (rota): playwright definido a la vez en scope
project (.mcp.json del repo) y en scope local (config personal),
cada uno con un comando distinto (por ejemplo uno con el paquete roto del
Incidente 1 y otro con el paquete correcto).
Qué pasa:
[Warning] Server "playwright" is defined in multiple scopes with different
endpoints: project (mcp-server-playwright --browser chromium),
local (npx @playwright/mcp@latest). OAuth tokens are stored per endpoint...
browser_* no se registren nunca en la sesión.
Pasos a seguir:
-
Confirmá en qué scopes está definido:
claude mcp get playwright -
Dejá una sola definición. Sacá la del scope que no vas a usar (lo habitual es sacar la de
projecty quedarte con la delocal, para no forzar la config a todo el equipo vía el repo):claude mcp remove playwright -s project -
Reiniciá VS Code por completo (cerrar y volver a abrir la ventana, no solo el chat) para que la sesión levante limpia.
Configuración final: una sola entrada de playwright, en un solo scope,
con el comando correcto del Incidente 1. Verificá con claude mcp list que
aparece una sola vez y sin warnings.
Incidente 3 — Las tools no aparecen aunque el server esté "Connected"
Configuración inicial: .mcp.json correcto, claude mcp list en
✓ Connected, pero al buscar las tools (browser_navigate, browser_click,
etc.) no aparecen ninguna.
Qué pasa: la sesión de VS Code/Claude Code se abrió antes de que el servidor de Playwright quedara disponible (por ejemplo, lo configuraste o arreglaste con la sesión ya abierta). Las tools de un MCP nuevo no se cargan en caliente dentro de una sesión que ya estaba corriendo.
Pasos a seguir: 1. Cerrá todo VS Code (no solo la pestaña/ventana de chat). 2. Volvé a abrirlo. 3. Empezá una sesión nueva de Claude Code y volvé a intentar.
Configuración final: no cambia nada en el archivo de config — el fix es puramente "reiniciar sesión después de tocar la config del MCP". Regla general: cada vez que agregás, sacás o modificás un servidor MCP, reiniciá VS Code antes de volver a usarlo.
Incidente 4 — "Browser is already in use"
Configuración inicial (rota):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--browser", "chromium"]
}
}
}
--isolated)
Qué pasa:
Error: Browser is already in use for
C:\Users\<user>\AppData\Local\ms-playwright-mcp\mcp-chrome-<hash>,
use --isolated to run multiple instances of the same browser
--isolated, todas las sesiones comparten un único perfil de navegador —
la segunda que intenta usarlo choca con un lock.
Pasos a seguir:
- Si tenés otra sesión de Claude Code abierta usando Playwright, cerrala (o esperá a que termine) — eso libera el lock al toque.
-
Para que esto no vuelva a pasar, agregá
--isolateda los args del servidor:claude mcp remove playwright claude mcp add playwright -- npx @playwright/mcp@latest --browser chromium --isolated -
Reiniciá VS Code (ver Incidente 3) y probá de nuevo.
Configuración final (correcta):
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest", "--browser", "chromium", "--isolated"]
}
}
}
--isolated, cada sesión levanta su propio perfil de navegador aislado
y pueden correr varias en paralelo sin pisarse.
Incidente 5 — "Browser ... is not installed" por versión desincronizada de @playwright/mcp@latest
Configuración inicial (rota): cualquier config que use @playwright/mcp@latest (la
recomendada en esta guía), en una máquina donde ya había navegadores de Playwright instalados
de una corrida anterior.
Qué pasa:
Error: Browser "chrome-for-testing" is not installed; expected executable at
C:\Users\<user>\AppData\Local\ms-playwright\chromium-1237\chrome-win64\chrome.exe
@latest, cada corrida puede traer una versión distinta del paquete
@playwright/mcp, y cada versión empaqueta una revisión distinta de Playwright (por lo
tanto espera una revisión distinta de Chrome-for-Testing). Si en la máquina solo está
instalada una revisión vieja (por ejemplo 1228) y el npx de esa corrida bajó una versión
más nueva que pide la 1237, el navegador nunca abre — cualquier skill que dependa de
browser_navigate queda bloqueada antes de llegar a la app.
Pasos a seguir:
-
Instalá la revisión que el MCP actual espera, con el comando del propio MCP (no
playwright install chromium, que puede traer una revisión distinta si el proyecto tiene otra versión de Playwright declarada en supackage.json):npx @playwright/mcp@latest install-browser chrome-for-testing -
Si el error persiste, fijate qué revisión pide el mensaje de error y confirmá que esa carpeta exista en
%LOCALAPPDATA%\ms-playwright\(Windows) o~/.cache/ms-playwright(Linux/Mac).
Cómo evitarlo a futuro: pinear una versión fija de @playwright/mcp en vez de
@latest (ej. @playwright/mcp@0.x.y) en .mcp.json / qa-stack.yaml, para que la
revisión esperada no cambie sola entre corridas. Si preferís seguir con @latest, correr
npx @playwright/mcp@latest install-browser chrome-for-testing cada vez que actualices o
reinstales dependencias — no solo la primera vez.
Configuración final recomendada (resuelve los 4 incidentes de una)
claude mcp add playwright -- npx @playwright/mcp@latest --browser chromium --isolated
Definida una sola vez, en un solo scope, con el paquete oficial
@playwright/mcp y el flag --isolated. Después de configurarlo así:
- Reiniciá VS Code por completo.
- Verificá con
claude mcp list→ debe aparecer una sola vez como✓ Connected. - Empezá una sesión nueva y confirmá que las tools
browser_*están disponibles antes de correrqa-exploratory-testu otro skill que dependa del browser.