Resposta curta
- Coloca a entrada chrome-devtools sob a chave "mcp" do opencode.json, com "type": "local" e o comando inteiro como um único array. O bloco está mais abaixo.
- O OpenCode 1.18.34 carregou-a a partir do ficheiro global, de um opencode.json do projeto (também quando arrancado numa subpasta), de .opencode/opencode.json e das duas variáveis de ambiente.
- Depois ofereceu 30 ferramentas de browser chamadas chrome-devtools_… e passou ao modelo o snapshot completo da página, com 44.167 caracteres, sem o encurtar.
- Depois de um passo de CAPTCHA ou 2FA, retoma a mesma conversa com opencode run --session <session-id>. Funcionou em modo headless em todas as execuções: o mesmo separador, os mesmos campos, uma submissão.
- O OpenCode permite a maioria das ações por omissão, por isso adiciona uma linha de permissões se quiseres aprovar tu as ações do browser.
O LaunchRepo funciona com qualquer agente de programação que consiga ler e escrever ficheiros no teu espaço de trabalho e controlar um browser. O OpenCode faz as duas coisas. Esta página documenta uma configuração testada; não é uma certificação nem uma parceria.
Adiciona o browser ao opencode.json
O OpenCode junta os seus ficheiros de configuração em vez de os substituir. Isso torna a configuração segura: adicionas uma chave e tudo o que já tinhas fica como estava.
- Abre o opencode.json na raiz do teu espaço de trabalho do LaunchRepo, ou cria-o. Para todos os projetos de uma vez, usa antes ~/.config/opencode/opencode.json.
- Adiciona o bloco "mcp" abaixo junto às chaves que já tens. Se o ficheiro já tiver uma chave "mcp", adiciona lá dentro apenas a entrada chrome-devtools.
- No Chrome que vais ligar, abre chrome://inspect/#remote-debugging e ativa a depuração remota (Chrome 144+). É a isso que o --autoConnect se liga.
- Executa opencode mcp list. Uma entrada que funciona mostra a linha abaixo; depois pede ao OpenCode que abra https://example.com e leia o título da página.
Adicionar 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"
]
}
}
}Linha esperada em opencode mcp list opencode mcp list
✓ chrome-devtools connectedO --autoConnect usa o Chrome que já tens aberto. Para um Chrome à parte, só para lançamentos, usa antes --browser-url=http://127.0.0.1:9222; foi assim que o nosso teste se ligou ao seu Chrome temporário.
Mantém as tuas próprias definições
- Nunca coles o bloco por cima de um ficheiro inteiro. Adiciona a chave; o OpenCode junta ficheiros, por isso o teu fornecedor, o teu modelo e os teus outros servidores mantêm-se.
- Um opencode.json de projeto sobrepõe-se ao ficheiro global apenas nas chaves que define. No nosso teste, um ficheiro de projeto só com "mcp" manteve ativos o modelo e o fornecedor globais.
- Para desligar o browser num projeto sem tocar no ficheiro global, define "enabled": false para chrome-devtools nesse projeto. Funcionou em todas as execuções.
Que ficheiros de configuração o OpenCode carrega
A mesma entrada de servidor, em sítios e formatos diferentes. «Carregado» significa que as ferramentas chrome-devtools_… chegaram ao pedido do OpenCode ao modelo.
| Variante | Ficheiro ou variável | Resultado |
|---|---|---|
| Ficheiro de configuração global | ~/.config/opencode/opencode.json | Carregado, 30 ferramentas (3/3) |
| Ficheiro JSONC global com comentários e vírgula final | ~/.config/opencode/opencode.jsonc | Carregado, 30 ferramentas (3/3) |
| Ficheiro de projeto na raiz do espaço de trabalho | opencode.json | Carregado, 30 ferramentas (3/3) |
| Ficheiro de projeto, OpenCode arrancado numa subpasta | opencode.json | Carregado, 30 ferramentas (3/3) |
| Dentro da pasta .opencode | .opencode/opencode.json | Carregado, 30 ferramentas (3/3) |
| Ficheiro próprio através de uma variável de ambiente | OPENCODE_CONFIG=<file> | Carregado, 30 ferramentas (3/3) |
| JSON inline através de uma variável de ambiente | OPENCODE_CONFIG_CONTENT | Carregado, 30 ferramentas (3/3) |
| Bloco "mcpServers" copiado do Claude Code ou do Cursor | opencode.json | Não carregado, sem erro (3/3) |
| "command": "npx" mais "args" (o formato que a maioria dos outros agentes usa) | opencode.json | Configuração rejeitada, o OpenCode para com código de saída 1 (3/3) |
| Entrada com "enabled": false | opencode.json | Não carregado, sem erro (3/3) |
| Entrada global, o ficheiro de projeto só define "enabled": false | opencode.json | Não carregado, sem erro (3/3) |
As duas linhas que custam: um bloco "mcpServers" colado é ignorado sem aviso (opencode mcp list diz «No MCP servers configured»), e um comando em string para o OpenCode antes de arrancar («Expected array, got "npx"»). Ambos se resolvem com o formato de array acima.
A execução com passagem, passo a passo
OpenCode 1.18.34 com Chrome DevTools MCP 1.10.1, Google Chrome 154.0.8037.92, macOS, Node 22, a 1 de outubro de 2026. Cada execução usou uma pasta pessoal nova e um perfil de Chrome novo, por isso nenhuma definição pessoal foi lida ou alterada.
Não houve nenhum modelo de IA envolvido. Um pequeno substituto local respondeu aos pedidos de modelo do OpenCode com chamadas de ferramentas fixas e leu os IDs dos elementos apenas do que o OpenCode realmente lhe enviou. Assim, cada execução é idêntica e gratuita, e testa-se o que o OpenCode controla: configuração, ferramentas, o que o modelo vê, permissões e sessões. Não testa quão bem um modelo planeia.
Execução com passagem no formulário de demonstração do nosso guia de CAPTCHA: 5 execuções. Variantes de configuração: 3 execuções cada.
O OpenCode abriu o formulário de demonstração, preencheu-o, parou na verificação simulada e terminou a execução. Um script fez de pessoa e concluiu a verificação no mesmo separador. Depois, um segundo opencode run com --session continuou a mesma conversa e terminou-a. CAPTCHA e 2FA em fluxos com agentes: a passagem controlada →
| Verificação | Execuções aprovadas |
|---|---|
| opencode mcp list mostra o servidor como ligado | 5/5 |
| Ferramentas do Chrome DevTools oferecidas ao modelo | 5/5 |
| O snapshot completo da página chega ao modelo com as definições por omissão | 5/5 |
| Abre o formulário de demonstração no Chrome ligado | 5/5 |
| Preenche três campos e volta a lê-los | 5/5 |
| Para na verificação, estado prepared_needs_human | 5/5 |
| O separador e os campos preenchidos sobrevivem ao fim da execução | 5/5 |
| O ID da sessão aparece em opencode session list | 5/5 |
| A pessoa conclui a verificação no mesmo separador | 5/5 |
| opencode run --session continua a mesma sessão | 5/5 |
| A sessão continuada ainda tem os passos anteriores | 5/5 |
| A execução continuada encontra e seleciona o mesmo separador | 5/5 |
| Campos inalterados após a pausa | 5/5 |
| Submete exatamente uma vez | 5/5 |
| Execução headless com "ask": chamada ao browser rejeitada, sem pedido de confirmação | 5/5 |
| Mesma regra com --auto: a chamada ao browser é executada | 5/5 |
| "deny": ferramentas do browser removidas da lista do modelo | 5/5 |
| Execução headless: nenhuma ferramenta de perguntas oferecida ao modelo | 5/5 |
| Execução headless com stdin aberto: espera até ser parada ao fim de 20 s | 3/3 |

Retomar depois de a pessoa terminar
Cada opencode run imprime o seu ID de sessão na saída de --format json, e opencode session list --format json também o lista.
Continua com o mesmo ID. Nas nossas execuções, a sessão continuada tinha todos os passos anteriores, encontrou o mesmo separador através do Chrome DevTools MCP, viu os campos inalterados e submeteu uma única vez.
Preferes a interface de terminal? opencode --session <session-id> abre lá a mesma conversa.
- Encontra a sessão
opencode session list --format json- Continua em modo headless
opencode run --session <session-id> "The check is done. Re-read the form and submit once."- Continua na interface de terminal
opencode --session <session-id>
Aprovações: ask, allow, deny
Sem um bloco de permissões, o OpenCode executa as ferramentas do browser sem perguntar. Uma linha muda isso. Testámos cada regra em modo headless, tal como os scripts chamam o OpenCode:
| Regra | Num opencode run headless |
|---|---|
"chrome-devtools_*": "ask" | Rejeitada de imediato com «The user rejected permission to use this specific tool call.» A execução termina mesmo assim com código de saída 0. |
Mesma regra mais --auto | A chamada ao browser é executada. Segundo a documentação, as regras deny explícitas continuam a aplicar-se. |
"chrome-devtools_*": "deny" | As ferramentas do browser desaparecem da lista de ferramentas do modelo. |
Aprova tu cada ação do browser
{
"permission": {
"chrome-devtools_*": "ask"
}
}Usa "ask" na interface de terminal, onde o OpenCode pergunta uma vez, sempre ou rejeitar. Em execuções headless, ou aceitas que "ask" bloqueia o browser, ou usas --auto de forma consciente, num perfil de Chrome dedicado a lançamentos.
Se vens do Claude Code
O servidor é o mesmo, a configuração não. Quatro diferenças decidem se a tua entrada funciona:
| Tema | OpenCode | Claude Code |
|---|---|---|
| Onde fica a entrada | Chave "mcp" no opencode.json | "mcpServers" no .mcp.json |
| Formato do comando | "command" é um único array, mais "type": "local" | "command" em string mais o array "args" |
| Nomes de ferramentas nas regras | chrome-devtools_take_snapshot | mcp__chrome-devtools__take_snapshot |
| Aprovações por omissão | A maioria das ações permitida | Pergunta na primeira utilização de cada ferramenta |
Três coisas que fazem perder tempo
- Um bloco "mcpServers" colado não dá sinal
- O OpenCode ignora a chave por completo: sem erro, código de saída 0, sem ferramentas de browser. Move a entrada para debaixo de "mcp" e transforma o comando num único array.
- As execuções headless esperam por stdin aberto
- Quando um script arranca opencode run com stdin aberto como pipe, o OpenCode espera por uma entrada que nunca chega. Em todas as 3 execuções ficou pendurado até ser parado; com stdin a partir de /dev/null respondeu de imediato.
- "ask" significa não nos scripts
- Numa execução headless não há ninguém para responder, por isso cada "ask" passa a ser uma rejeição. Decide em cada execução se o browser pode agir sozinho.
| Tema | Texto | O que observámos |
|---|---|---|
| OpenCode: servidores locais | Add local MCP servers using type to "local" within the MCP object. | O formato com "type": "local" e array carregou em todas as execuções. |
| OpenCode: vários ficheiros | Configuration files are merged together, not replaced. | Confirmado: um ficheiro de projeto só com "mcp" manteve o modelo e o fornecedor globais. |
| OpenCode: que ficheiro ganha | Project config has the highest precedence among standard config files - it overrides both global and remote configs. | Confirmado: um "enabled": false no projeto desligou a entrada global. |
| OpenCode: nomes de ferramentas | MCP server tools are registered with server name as prefix | As ferramentas chegaram como chrome-devtools_take_snapshot e por aí fora. |
| OpenCode: permissões por omissão | If you don’t specify anything, OpenCode starts from permissive defaults: | As ferramentas do browser correram sem perguntar até adicionarmos uma regra. |
| OpenCode: --auto | Explicit "deny" rules are still enforced. | Testámos --auto com "ask"; com "deny" as ferramentas nem sequer foram oferecidas. |
| OpenCode: tamanho do contexto | MCP servers add to your context, so you want to be careful with which ones you enable. | O Chrome DevTools MCP acrescenta 30 ferramentas. Mantém os outros servidores desligados enquanto fazes o lançamento. |
| OpenCode: opção --session | Session ID to continue | Funcionou em modo headless em todas as execuções, ao contrário de agentes que só retomam na sua interface de terminal. |
| Claude Code: ficheiro de projeto | Project-scoped servers enable team collaboration by storing configurations in a .mcp.json file at your project’s root directory. | Ficheiro e chave diferentes dos do OpenCode; a mesma entrada não passa de um para o outro. |
| Claude Code: nomes de ferramentas nas regras | mcp__puppeteer__* matches every tool from the puppeteer server | O OpenCode usa antes um único underscore a seguir ao nome do servidor. |
| Claude Code: modo por omissão | Prompts for permission on first use of each tool. | No OpenCode, a predefinição é a oposta: permitir, a não ser que definas uma regra. |
| Chrome DevTools MCP: secção do OpenCode | Add the following configuration to your `opencode.json` file. | Mesmo formato do nosso bloco; nós fixamos a versão e acrescentamos --autoConnect. |
Arranca o LaunchRepo no OpenCode
Abre o OpenCode no teu espaço de trabalho privado do LaunchRepo e cola o prompt de arranque. O kit conduz depois o onboarding, testa a tua ligação ao Chrome no Example Domain e monta a execução.
- O prompt de arranque recomenda o Claude Code ou o Codex CLI para os melhores resultados. O OpenCode funciona com o mesmo kit porque tem as duas coisas de que o kit precisa: acesso a ficheiros no espaço de trabalho e um browser através de MCP.
- O OpenCode lê o AGENTS.md do espaço de trabalho, por isso adota sozinho as regras do kit.
- Os passos de CAPTCHA e 2FA voltam para ti como passagens; retomas a sessão com --session, como mostrado acima.
Prompt de arranque do 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.O que este teste não cobre
- Os pedidos de aprovação e a ferramenta de perguntas da interface de terminal. O comportamento headless acima foi medido; o da interface segue a documentação.
- Um modelo de IA real. O substituto retira a qualidade do modelo do resultado; um modelo pode ainda escolher o elemento errado.
- --autoConnect a um perfil de Chrome do dia a dia. Usámos um Chrome temporário através de --browser-url.
- Windows e Linux, servidores MCP remotos, contas do OpenCode e planos de modelos pagos.
Fontes
Cada citação acima foi copiada palavra por palavra destas páginas, lidas a 1 de outubro de 2026. O comportamento testado vem das nossas próprias execuções, descritas nesta página.
Perguntas frequentes
- Onde coloco os servidores MCP no OpenCode?
- Sob a chave "mcp" do opencode.json, na raiz do teu projeto ou em ~/.config/opencode/opencode.json. No nosso teste, o OpenCode 1.18.34 também carregou .opencode/opencode.json, OPENCODE_CONFIG e OPENCODE_CONFIG_CONTENT.
- Qual é a configuração do OpenCode para o Chrome DevTools MCP?
- Uma entrada chamada chrome-devtools com "type": "local" e "command": ["npx", "-y", "chrome-devtools-mcp@1.10.1", "--autoConnect", "--no-usage-statistics", "--no-performance-crux"]. Executa opencode mcp list para a ver ligada.
- Porque é que o OpenCode não mostra o meu servidor MCP?
- Na maioria das vezes, a entrada foi copiada de outro agente: um bloco "mcpServers" é ignorado sem erro, e "command": "npx" com "args" separados faz o OpenCode rejeitar a configuração inteira. Usa "mcp" e um único array de comando.
- Posso usar o Playwright MCP em vez disso?
- Sim, o mesmo formato de entrada "mcp" funciona para qualquer servidor MCP local. Esta página testa o Chrome DevTools MCP porque se liga ao Chrome que já usas; a nossa página de comparação explica quando o Playwright MCP encaixa melhor.
- Como retomo uma sessão do OpenCode depois de um CAPTCHA?
- Conclui a verificação no mesmo separador do Chrome e depois executa opencode run --session <session-id> com uma instrução curta, ou abre-a na interface de terminal com opencode --session <session-id>. Nas nossas execuções, a sessão, o separador e os campos ainda lá estavam.
- O OpenCode é oficialmente suportado pelo LaunchRepo?
- O LaunchRepo suporta agentes de programação com acesso a ficheiros e ao browser; o OpenCode tem ambos, e esta página documenta uma configuração testada. Não é uma certificação nem uma parceria, e o prompt de arranque continua a recomendar o Claude Code ou o Codex CLI para os melhores resultados.
Dá ao OpenCode um plano de lançamento
O LaunchRepo dá ao teu agente a lista de plataformas, o runbook e um tracker que ele mantém atualizado. O OpenCode faz o trabalho no teu browser; a última palavra é tua.
Ver preços