Respuesta corta
- Pon la entrada chrome-devtools bajo la clave "mcp" de opencode.json, con "type": "local" y el comando entero como un único array. El bloque está más abajo.
- OpenCode 1.18.34 la cargó desde el archivo global, desde un opencode.json del proyecto (también al arrancar en una subcarpeta), desde .opencode/opencode.json y desde las dos variables de entorno.
- Después ofreció 30 herramientas de navegador llamadas chrome-devtools_… y pasó al modelo la instantánea completa de la página, de 44.167 caracteres, sin recortarla.
- Tras un paso de CAPTCHA o 2FA, retoma la misma conversación con opencode run --session <session-id>. Funcionó en modo headless en todas las pasadas: la misma pestaña, los mismos campos, un solo envío.
- OpenCode permite la mayoría de las acciones por defecto, así que añade una línea de permisos si quieres aprobar tú las acciones del navegador.
LaunchRepo funciona con cualquier agente de programación que pueda leer y escribir archivos en tu espacio de trabajo y controlar un navegador. OpenCode hace ambas cosas. Esta página documenta una configuración probada; no es una certificación ni una alianza.
Añade el navegador a opencode.json
OpenCode combina sus archivos de configuración en lugar de sustituirlos. Eso hace que la configuración sea segura: añades una clave y todo lo que ya tenías se queda como estaba.
- Abre opencode.json en la raíz de tu espacio de trabajo de LaunchRepo, o créalo. Para todos los proyectos a la vez, usa ~/.config/opencode/opencode.json.
- Añade el bloque "mcp" de abajo junto a tus claves actuales. Si el archivo ya tiene una clave "mcp", añade dentro solo la entrada chrome-devtools.
- En el Chrome que vas a conectar, abre chrome://inspect/#remote-debugging y activa la depuración remota (Chrome 144+). A eso se conecta --autoConnect.
- Ejecuta opencode mcp list. Una entrada correcta muestra la línea de abajo; después pide a OpenCode que abra https://example.com y lea el título de la página.
Añadir a opencode.json
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"chrome-devtools": {
"type": "local",
"command": [
"npx",
"-y",
"chrome-devtools-mcp@1.10.1",
"--autoConnect",
"--no-usage-statistics",
"--no-performance-crux"
]
}
}
}Línea esperada en opencode mcp list opencode mcp list
✓ chrome-devtools connected--autoConnect usa el Chrome que ya tienes abierto. Para un Chrome aparte solo para lanzamientos, usa --browser-url=http://127.0.0.1:9222; así se conectó nuestra prueba a su Chrome temporal.
Conserva tu propia configuración
- Nunca pegues el bloque encima de un archivo entero. Añade la clave; OpenCode combina archivos, así que tu proveedor, tu modelo y tus otros servidores se mantienen.
- Un opencode.json de proyecto sustituye al archivo global solo en las claves que define. En nuestra prueba, un archivo de proyecto con solo "mcp" mantuvo activos el modelo y el proveedor globales.
- Para desactivar el navegador en un proyecto sin tocar el archivo global, pon "enabled": false para chrome-devtools en ese proyecto. Funcionó en todas las pasadas.
Qué archivos de configuración carga OpenCode
La misma entrada de servidor, en distintos sitios y formas. «Cargado» significa que las herramientas chrome-devtools_… llegaron a la petición de OpenCode al modelo.
| Variante | Archivo o variable | Resultado |
|---|---|---|
| Archivo de configuración global | ~/.config/opencode/opencode.json | Cargado, 30 herramientas (3/3) |
| Archivo JSONC global con comentarios y coma final | ~/.config/opencode/opencode.jsonc | Cargado, 30 herramientas (3/3) |
| Archivo de proyecto en la raíz del espacio de trabajo | opencode.json | Cargado, 30 herramientas (3/3) |
| Archivo de proyecto, OpenCode arrancado en una subcarpeta | opencode.json | Cargado, 30 herramientas (3/3) |
| Dentro de la carpeta .opencode | .opencode/opencode.json | Cargado, 30 herramientas (3/3) |
| Archivo propio mediante una variable de entorno | OPENCODE_CONFIG=<file> | Cargado, 30 herramientas (3/3) |
| JSON en línea mediante una variable de entorno | OPENCODE_CONFIG_CONTENT | Cargado, 30 herramientas (3/3) |
| Bloque "mcpServers" copiado de Claude Code o Cursor | opencode.json | No cargado, sin error (3/3) |
| "command": "npx" más "args" (la forma que usan casi todos los demás agentes) | opencode.json | Configuración rechazada, OpenCode se detiene con código de salida 1 (3/3) |
| Entrada con "enabled": false | opencode.json | No cargado, sin error (3/3) |
| Entrada global, el archivo de proyecto solo pone "enabled": false | opencode.json | No cargado, sin error (3/3) |
Las dos filas que duelen: un bloque "mcpServers" pegado se ignora sin avisar (opencode mcp list dice «No MCP servers configured»), y un comando como cadena detiene OpenCode antes de arrancar («Expected array, got "npx"»). Ambas cosas se arreglan con la forma de array de arriba.
La pasada con relevo, paso a paso
OpenCode 1.18.34 con Chrome DevTools MCP 1.10.1, Google Chrome 154.0.8037.92, macOS, Node 22, el 1 de octubre de 2026. Cada pasada usó un directorio personal nuevo y un perfil de Chrome nuevo, así que no se leyó ni se cambió ninguna configuración personal.
No intervino ningún modelo de IA. Un pequeño sustituto local respondió a las peticiones de modelo de OpenCode con llamadas a herramientas fijas y leyó los ID de los elementos solo de lo que OpenCode le envió de verdad. Así cada pasada es idéntica y gratuita, y se prueba lo que controla OpenCode: configuración, herramientas, lo que ve el modelo, permisos y sesiones. No prueba lo bien que planifica un modelo.
Pasada con relevo en el formulario demo de nuestra guía de CAPTCHA: 5 pasadas. Variantes de configuración: 3 pasadas cada una.
OpenCode abrió el formulario demo, lo rellenó, paró en la verificación simulada y terminó la pasada. Un script hizo de persona y completó la verificación en la misma pestaña. Luego, un segundo opencode run con --session continuó la misma conversación y la terminó. CAPTCHA y 2FA en flujos con agentes: el relevo controlado →
| Comprobación | Pasadas superadas |
|---|---|
| opencode mcp list muestra el servidor como conectado | 5/5 |
| Herramientas de Chrome DevTools ofrecidas al modelo | 5/5 |
| La instantánea completa de la página llega al modelo con la configuración por defecto | 5/5 |
| Abre el formulario demo en el Chrome conectado | 5/5 |
| Rellena tres campos y los vuelve a leer | 5/5 |
| Para en la verificación, estado prepared_needs_human | 5/5 |
| La pestaña y los campos rellenos sobreviven al final de la pasada | 5/5 |
| El ID de sesión aparece en opencode session list | 5/5 |
| La persona completa la verificación en la misma pestaña | 5/5 |
| opencode run --session continúa la misma sesión | 5/5 |
| La sesión continuada conserva los pasos anteriores | 5/5 |
| La pasada continuada encuentra y selecciona la misma pestaña | 5/5 |
| Campos sin cambios tras la pausa | 5/5 |
| Envía exactamente una vez | 5/5 |
| Pasada headless con "ask": llamada al navegador rechazada, sin aviso | 5/5 |
| Misma regla con --auto: la llamada al navegador se ejecuta | 5/5 |
| "deny": herramientas del navegador fuera de la lista del modelo | 5/5 |
| Pasada headless: no se ofrece al modelo la herramienta de preguntas | 5/5 |
| Pasada headless con stdin abierto: espera hasta que se detiene a los 20 s | 3/3 |

Retoma cuando la persona haya terminado
Cada opencode run imprime su ID de sesión en la salida de --format json, y opencode session list --format json también lo muestra.
Continúa con el mismo ID. En nuestras pasadas, la sesión continuada tenía todos los pasos anteriores, encontró la misma pestaña mediante Chrome DevTools MCP, vio los campos sin cambios y envió una sola vez.
¿Prefieres la interfaz de terminal? opencode --session <session-id> abre ahí la misma conversación.
- Busca la sesión
opencode session list --format json- Continúa en modo headless
opencode run --session <session-id> "The check is done. Re-read the form and submit once."- Continúa en la interfaz de terminal
opencode --session <session-id>
Aprobaciones: ask, allow, deny
Sin un bloque de permisos, OpenCode ejecuta las herramientas del navegador sin preguntar. Una línea lo cambia. Probamos cada regla en modo headless, como llaman los scripts a OpenCode:
| Regla | En un opencode run headless |
|---|---|
"chrome-devtools_*": "ask" | Rechazada al instante con «The user rejected permission to use this specific tool call.» La pasada termina igualmente con código de salida 0. |
Misma regla más --auto | La llamada al navegador se ejecuta. Según la documentación, las reglas deny explícitas siguen aplicándose. |
"chrome-devtools_*": "deny" | Las herramientas del navegador desaparecen de la lista de herramientas del modelo. |
Aprueba tú cada acción del navegador
{
"permission": {
"chrome-devtools_*": "ask"
}
}Usa "ask" en la interfaz de terminal, donde OpenCode pregunta una vez, siempre o rechazar. En pasadas headless, o aceptas que "ask" bloquea el navegador o usas --auto sabiendo lo que haces, con un perfil de Chrome dedicado a lanzamientos.
Si vienes de Claude Code
El servidor es el mismo; la configuración, no. Cuatro diferencias deciden si tu entrada funciona:
| Tema | OpenCode | Claude Code |
|---|---|---|
| Dónde va la entrada | Clave "mcp" en opencode.json | "mcpServers" en .mcp.json |
| Forma del comando | "command" es un único array, más "type": "local" | "command" como cadena más el array "args" |
| Nombres de herramientas en reglas | chrome-devtools_take_snapshot | mcp__chrome-devtools__take_snapshot |
| Aprobaciones por defecto | Casi todas las acciones permitidas | Pregunta la primera vez que se usa cada herramienta |
Tres cosas que hacen perder tiempo
- Un bloque "mcpServers" pegado no avisa
- OpenCode ignora la clave por completo: ningún error, código de salida 0, ninguna herramienta de navegador. Mueve la entrada bajo "mcp" y convierte el comando en un único array.
- Las pasadas headless esperan si stdin queda abierto
- Cuando un script arranca opencode run con stdin abierto como pipe, OpenCode espera una entrada que nunca llega. En las 3 pasadas se quedó colgado hasta que lo detuvimos; con stdin desde /dev/null respondió al momento.
- "ask" significa no en los scripts
- En una pasada headless no hay nadie que responda, así que cada "ask" se convierte en un rechazo. Decide en cada pasada si el navegador puede actuar solo.
| Tema | Texto | Lo que observamos |
|---|---|---|
| OpenCode: servidores locales | Add local MCP servers using type to "local" within the MCP object. | La forma con "type": "local" y array se cargó en todas las pasadas. |
| OpenCode: varios archivos | Configuration files are merged together, not replaced. | Confirmado: un archivo de proyecto con solo "mcp" mantuvo el modelo y el proveedor globales. |
| OpenCode: qué archivo gana | Project config has the highest precedence among standard config files - it overrides both global and remote configs. | Confirmado: un "enabled": false en el proyecto desactivó la entrada global. |
| OpenCode: nombres de herramientas | MCP server tools are registered with server name as prefix | Las herramientas llegaron como chrome-devtools_take_snapshot y similares. |
| OpenCode: permisos por defecto | If you don’t specify anything, OpenCode starts from permissive defaults: | Las herramientas del navegador se ejecutaron sin preguntar hasta que añadimos una regla. |
| OpenCode: --auto | Explicit "deny" rules are still enforced. | Probamos --auto con "ask"; con "deny" las herramientas ni siquiera se ofrecieron. |
| OpenCode: tamaño del contexto | MCP servers add to your context, so you want to be careful with which ones you enable. | Chrome DevTools MCP añade 30 herramientas. Deja apagados los demás servidores mientras lanzas. |
| OpenCode: opción --session | Session ID to continue | Funcionó en modo headless en todas las pasadas, a diferencia de agentes que solo retoman en su interfaz de terminal. |
| Claude Code: archivo de proyecto | Project-scoped servers enable team collaboration by storing configurations in a .mcp.json file at your project’s root directory. | Archivo y clave distintos a los de OpenCode; la misma entrada no sirve tal cual. |
| Claude Code: nombres de herramientas en reglas | mcp__puppeteer__* matches every tool from the puppeteer server | OpenCode usa en su lugar un solo guion bajo tras el nombre del servidor. |
| Claude Code: modo por defecto | Prompts for permission on first use of each tool. | El valor por defecto de OpenCode es el contrario: permitir, salvo que pongas una regla. |
| Chrome DevTools MCP: sección de OpenCode | Add the following configuration to your `opencode.json` file. | Misma forma que nuestro bloque; nosotros fijamos la versión y añadimos --autoConnect. |
Arranca LaunchRepo en OpenCode
Abre OpenCode en tu espacio de trabajo privado de LaunchRepo y pega el prompt de inicio. Después, el kit guía el onboarding, prueba tu conexión con Chrome en Example Domain y prepara la pasada.
- El prompt de inicio recomienda Claude Code o Codex CLI para obtener los mejores resultados. OpenCode funciona con el mismo kit porque tiene las dos cosas que el kit necesita: acceso a archivos en el espacio de trabajo y un navegador mediante MCP.
- OpenCode lee AGENTS.md del espacio de trabajo, así que adopta por sí solo las reglas del kit.
- Los pasos de CAPTCHA y 2FA vuelven a ti como relevos; retomas la sesión con --session, como se muestra arriba.
Prompt de inicio de LaunchRepo
Recommend Claude Code CLI or Codex CLI in a terminal instead of the desktop apps for best results. If session metadata confirms desktop hosting, explicitly advise me to switch to the CLI and resume this same private workspace. Do not infer the host from a CLI engine version alone.
Read AGENTS.md, then follow "Start the dashboard for the owner". Create my private
workspace if I do not have one yet, start the dashboard, and give me the link.
Then lead ONBOARDING.md one phase at a time. Reuse recorded permissions instead of
asking again unless their scope is missing or conflicting. Actually test my visible
existing Chrome profile and intended identity as BROWSER-SETUP.md requires; use the
OS fallback if needed. Use one platform/browser worker by default. Build the normal
run only from suitable free-ready routes, keep research separate, and preserve any
draft that needs one exact human CAPTCHA/2FA action. Never claim browser control
bypasses or reduces those challenges.Lo que esta prueba no cubre
- Los avisos de aprobación y la herramienta de preguntas de la interfaz de terminal. El comportamiento headless de arriba está medido; el de la interfaz sigue la documentación.
- Un modelo de IA real. El sustituto saca la calidad del modelo del resultado; un modelo real aún puede elegir un elemento equivocado.
- --autoConnect a un perfil de Chrome de uso diario. Usamos un Chrome temporal mediante --browser-url.
- Windows y Linux, servidores MCP remotos, cuentas de OpenCode y planes de modelos de pago.
Fuentes
Cada cita de arriba está copiada palabra por palabra de estas páginas, leídas el 1 de octubre de 2026. El comportamiento probado sale de nuestras propias pasadas, descritas en esta página.
Preguntas frecuentes
- ¿Dónde pongo los servidores MCP en OpenCode?
- Bajo la clave "mcp" de opencode.json, en la raíz de tu proyecto o en ~/.config/opencode/opencode.json. En nuestra prueba, OpenCode 1.18.34 también cargó .opencode/opencode.json, OPENCODE_CONFIG y OPENCODE_CONFIG_CONTENT.
- ¿Cuál es la configuración de OpenCode para Chrome DevTools MCP?
- Una entrada llamada chrome-devtools con "type": "local" y "command": ["npx", "-y", "chrome-devtools-mcp@1.10.1", "--autoConnect", "--no-usage-statistics", "--no-performance-crux"]. Ejecuta opencode mcp list para verla conectada.
- ¿Por qué OpenCode no muestra mi servidor MCP?
- Lo más habitual es que la entrada se haya copiado de otro agente: un bloque "mcpServers" se ignora sin error, y "command": "npx" con "args" por separado hace que OpenCode rechace toda la configuración. Usa "mcp" y un único array de comando.
- ¿Puedo usar Playwright MCP en su lugar?
- Sí, la misma forma de entrada "mcp" sirve para cualquier servidor MCP local. Esta página prueba Chrome DevTools MCP porque se conecta al Chrome que ya usas; nuestra página comparativa explica cuándo encaja mejor Playwright MCP.
- ¿Cómo retomo una sesión de OpenCode tras un CAPTCHA?
- Completa la verificación en la misma pestaña de Chrome y luego ejecuta opencode run --session <session-id> con una instrucción breve, o ábrela en la interfaz de terminal con opencode --session <session-id>. En nuestras pasadas, la sesión, la pestaña y los campos seguían ahí.
- ¿LaunchRepo da soporte oficial a OpenCode?
- LaunchRepo admite agentes de programación con acceso a archivos y al navegador; OpenCode tiene ambos, y esta página documenta una configuración probada. No es una certificación ni una alianza, y el prompt de inicio sigue recomendando Claude Code o Codex CLI para obtener los mejores resultados.
Dale a OpenCode un plan de lanzamiento
LaunchRepo le da a tu agente la lista de plataformas, el runbook y un tracker que mantiene al día. OpenCode hace el trabajo en tu navegador; la última palabra es tuya.
Ver precios