OpenCode puede usar Playwright MCP como servidor local del proyecto. Empieza por una navegación de solo lectura y comprueba el encabezado devuelto. El estado connected confirma el enlace MCP. El modelo aún debe emitir una llamada válida y Playwright tiene que iniciar el navegador y llegar a la página.
Probamos OpenCode 1.18.16 y Playwright MCP 0.0.84. Este tutorial usa el formato 1.x. La documentación de OpenCode V2 pone los nombres de servidores en mcp.servers. Comprueba opencode --version antes de copiar la configuración.
Registra el servidor local
Abre o crea opencode.json en la raíz del proyecto. Si ya contiene mcp, añade playwright dentro del mismo objeto y conserva las demás entradas. La guía de MCP de OpenCode 1.x documenta el comando como array, el estado y el tiempo de espera.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"playwright": {
"type": "local",
"command": [
"npx", "-y", "@playwright/mcp@0.0.84",
"--browser", "firefox", "--headless", "--isolated"
],
"enabled": true,
"timeout": 45000
}
}
}Instala un Firefox compatible con el Playwright que incluye el servidor. Para el paquete probado, la versión indicada en npm es 1.65.0-alpha-2026-10-30.
npx -y --package playwright@1.65.0-alpha-2026-10-30 playwright install firefox
opencode mcp listSi usas una caché de navegador separada, hazla accesible al proceso MCP. En la prueba aislada indicamos el ejecutable compatible de forma explícita. Al actualizar, comprueba que las versiones del paquete y del navegador siguen alineadas. Dos binarios con el mismo nombre pueden usar protocolos distintos.
Ejecuta opencode mcp list en la raíz y abre una sesión nueva para revisar las herramientas. OpenCode combina ajustes de distintos lugares. Para aislar un fallo, usa un proyecto vacío y directorios separados de configuración y datos. La referencia de configuración indica el orden de precedencia.
Prueba una navegación de solo lectura
El formulario público de Selenium tiene una respuesta que puedes verificar y no exige cuenta.
Usa playwright_browser_navigate solo para este URL:
{"url":"https://www.selenium.dev/selenium/web/web-form.html"}
Pasa un argumento url con el enlace como cadena.
Devuelve el encabezado visible en la respuesta.
No hagas clic, escribas, envíes ni uses otras herramientas.Revisa el nombre de la herramienta, el objeto de argumentos y el encabezado devuelto. En nuestra sesión 1.x el cliente mostró playwright_browser_navigate. Un cliente MCP independiente ve la herramienta original, browser_navigate. El repositorio de Microsoft describe las instantáneas de accesibilidad y las opciones del navegador.
Al comparar modelos, conserva el URL, la instrucción, el servidor y el navegador. Usa modelos compatibles con las llamadas estructuradas en el adaptador elegido. Conectamos OpenCode a un Ollama local con la configuración de proveedor compatible con OpenAI. No se usó una cuenta externa. Revisa el flujo de eventos aunque la respuesta final esté vacía o el código de salida sea cero.
Qué hicieron los dos modelos
La primera ejecución usó un Firefox antiguo de una caché previa. Ambos modelos enviaron el URL previsto y la navegación falló. Un cliente MCP independiente recibió un error de protocolo con la misma entrada válida. Con Firefox 158, revisión 1569, el cliente independiente leyó Web form. En ese entorno, enviar un número como url produjo un error de validación.
Dimos a los dos modelos el mismo objeto JSON explícito en sesiones nuevas con la versión compatible. El resultado de la herramienta y la respuesta final se comprobaron por separado.
| Modelo local | Argumento de navegación | Resultado de la herramienta | Salida final |
|---|---|---|---|
qwen3:0.6b | URL exacto como cadena | Web form | Omitió el encabezado |
qwen3.5:0.8b | URL exacto como cadena | Web form | Sin evento de texto con el encabezado |
El segundo modelo hizo además dos capturas de accesibilidad pese a la petición de una sola llamada. En un intento anterior con la versión compatible, ninguno reprodujo el URL exacto a partir de una instrucción en prosa. Ambos navegaron con el JSON explícito en la ejecución recogida. Es una muestra local pequeña. El cliente independiente descubrió 25 herramientas, comprobó que browser_navigate.url era una cadena y cerró el navegador. No se envió el formulario.

Encuentra la primera capa que falla
| Lo que ves | Qué revisar primero | Siguiente prueba |
|---|---|---|
El servidor falta o falla en opencode mcp list | Configuración y proceso MCP | Comprueba versión, directorio, comando, ejecutable y espera |
| Connected, pero solo hay texto del modelo | Modelo, proveedor o herramientas disponibles | Revisa las herramientas y prueba una sola llamada con otro modelo compatible |
| La clave o el tipo del argumento es incorrecto | Esquema de la herramienta | Compara el objeto de argumentos con tools/list |
| Argumentos correctos, pero también falla el cliente independiente | Arranque, protocolo o red | Usa el binario correspondiente y repite con el mismo URL |
| La herramienta devuelve el encabezado, pero falta en el texto final | Lectura del resultado por el modelo | Verifica la respuesta de la herramienta y pide solo el encabezado |
Un informe de argumentos MCP describe un servidor de archivos que esperaba path y recibió filePath. Otra conversación sobre OpenCode menciona resultados variables al navegar sin aislar la configuración. Son síntomas distintos. Contrasta los argumentos y la respuesta de tu propia sesión antes de atribuir el fallo.
Este ejemplo crea un contexto limpio. Si necesitas una sesión abierta, consulta cómo conectar un navegador existente. Puedes seguir con automatización con Playwright, Playwright MCP en Claude Code, Playwright MCP en Codex y agentes de programación de código abierto. Para decidir si el trabajo exige abrir pestañas, compara búsqueda y control del navegador y cómo funcionan los agentes de navegador. También puedes descargar Tabbit y repetir la misma lectura con otra conexión.
Preguntas frecuentes
¿Puede OpenCode usar Playwright MCP?
Sí. En 1.x, añade un servidor local bajo mcp en opencode.json y ejecuta opencode mcp list en el proyecto. V2 tiene su propio esquema.
¿Seguirá funcionando si cambio de modelo?
La configuración MCP puede quedar igual. Ejecuta la misma tarea breve con los dos modelos y revisa si generan argumentos válidos y leen la respuesta.
¿Por qué aparece connected aunque la navegación falle?
El servidor puede completar el enlace MCP antes de iniciar el navegador. Busca errores de arranque, ejecutable, protocolo o red en la respuesta de la herramienta.
¿Qué argumento espera browser_navigate?
En la versión probada, url es una cadena. Consulta tools/list y utiliza el nombre exacto que muestra el cliente.
¿La configuración conecta con pestañas abiertas?
El ejemplo crea un contexto aislado. Configura otra conexión si el trabajo necesita una pestaña o sesión que ya está abierta.