In breve
- Metti la voce chrome-devtools sotto la chiave "mcp" di opencode.json, con "type": "local" e l’intero comando in un unico array. Il blocco è qui sotto.
- OpenCode 1.18.34 l’ha caricata dal file globale, da un opencode.json di progetto (anche se avviato in una sottocartella), da .opencode/opencode.json e da entrambe le variabili d’ambiente.
- Ha poi offerto 30 strumenti browser chiamati chrome-devtools_… e ha passato al modello lo snapshot completo della pagina, 44.167 caratteri, senza accorciarlo.
- Dopo un passaggio CAPTCHA o 2FA, riprendi la stessa conversazione con opencode run --session <session-id>. Ha funzionato in headless in ogni run: stessa scheda, stessi campi, un solo invio.
- Per impostazione predefinita OpenCode consente la maggior parte delle azioni, quindi aggiungi una riga di permessi se vuoi approvare tu le azioni nel browser.
LaunchRepo funziona con qualsiasi agente di coding in grado di leggere e scrivere file nel tuo workspace e di controllare un browser. OpenCode fa entrambe le cose. Questa pagina documenta un setup testato; non è una certificazione né una partnership.
Aggiungi il browser a opencode.json
OpenCode unisce i suoi file di config invece di sostituirli. Per questo il setup è sicuro: aggiungi una chiave e tutte le impostazioni che hai già restano come sono.
- Apri opencode.json nella root del tuo workspace LaunchRepo, oppure crealo. Per tutti i progetti insieme, usa invece ~/.config/opencode/opencode.json.
- Aggiungi il blocco "mcp" qui sotto accanto alle chiavi esistenti. Se il file ha già una chiave "mcp", aggiungi al suo interno solo la voce chrome-devtools.
- Nel Chrome che avvii tu, apri chrome://inspect/#remote-debugging e attiva il debug remoto (Chrome 144+). È a questo che si collega --autoConnect.
- Esegui opencode mcp list. Una voce funzionante mostra la riga qui sotto; poi chiedi a OpenCode di aprire https://example.com e leggere il titolo della pagina.
Aggiungi 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"
]
}
}
}Riga attesa in opencode mcp list opencode mcp list
✓ chrome-devtools connected--autoConnect usa il Chrome che hai già aperto. Per un Chrome separato solo per i lanci, usa invece --browser-url=http://127.0.0.1:9222; è così che il nostro test si è collegato al suo Chrome temporaneo.
Mantieni le tue impostazioni
- Non incollare mai il blocco al posto di un intero file esistente. Aggiungi la chiave; OpenCode unisce i file, quindi provider, modello e altri server restano.
- Un opencode.json di progetto sovrascrive il file globale solo per le chiavi che imposta. Nel nostro test, un file di progetto con solo "mcp" ha mantenuto attivi il modello e il provider globali.
- Per spegnere il browser in un solo progetto senza toccare il file globale, imposta "enabled": false per chrome-devtools in quel progetto. Ha funzionato in tutti i run.
Quali file di config carica OpenCode
Stessa voce del server, posizioni e forme diverse. “Caricato” significa che gli strumenti chrome-devtools_… sono arrivati nella richiesta di OpenCode al modello.
| Variante | File o variabile | Risultato |
|---|---|---|
| File di config globale | ~/.config/opencode/opencode.json | Caricato, 30 strumenti (3/3) |
| File JSONC globale con commenti e virgola finale | ~/.config/opencode/opencode.jsonc | Caricato, 30 strumenti (3/3) |
| File di progetto nella root del workspace | opencode.json | Caricato, 30 strumenti (3/3) |
| File di progetto, OpenCode avviato in una sottocartella | opencode.json | Caricato, 30 strumenti (3/3) |
| Dentro la cartella .opencode | .opencode/opencode.json | Caricato, 30 strumenti (3/3) |
| File personalizzato tramite una variabile d’ambiente | OPENCODE_CONFIG=<file> | Caricato, 30 strumenti (3/3) |
| JSON inline tramite una variabile d’ambiente | OPENCODE_CONFIG_CONTENT | Caricato, 30 strumenti (3/3) |
| Blocco "mcpServers" copiato da Claude Code o Cursor | opencode.json | Non caricato, nessun errore (3/3) |
| "command": "npx" più "args" (la forma usata dalla maggior parte degli altri agenti) | opencode.json | Config rifiutata, OpenCode si ferma con exit code 1 (3/3) |
| Voce con "enabled": false | opencode.json | Non caricato, nessun errore (3/3) |
| Voce globale, il file di progetto imposta solo "enabled": false | opencode.json | Non caricato, nessun errore (3/3) |
Le due righe insidiose: un blocco "mcpServers" incollato viene ignorato senza una parola (opencode mcp list dice “No MCP servers configured”), e un comando in forma di stringa ferma OpenCode prima ancora che parta (“Expected array, got "npx"”). La forma ad array qui sopra risolve entrambi i casi.
Il passaggio di consegne, passo per passo
OpenCode 1.18.34 con Chrome DevTools MCP 1.10.1, Google Chrome 154.0.8037.92, macOS, Node 22, il 1 ottobre 2026. Ogni run ha usato una home directory nuova e un profilo Chrome nuovo, quindi nessuna impostazione personale è stata letta o modificata.
Non è stato coinvolto alcun modello di IA. Un piccolo sostituto locale ha risposto alle richieste al modello di OpenCode con chiamate a strumenti fisse e ha letto gli ID degli elementi solo da ciò che OpenCode gli inviava davvero. Così ogni run è identico e gratuito, e testa ciò che OpenCode controlla: config, strumenti, ciò che vede il modello, permessi e sessioni. Non testa quanto bene pianifica un modello.
Passaggio di consegne sul form demo della nostra guida ai CAPTCHA: 5 run. Varianti di config: 3 run ciascuna.
OpenCode ha aperto il form demo, l’ha compilato, si è fermato alla verifica simulata e ha chiuso il run. Uno script ha fatto la parte della persona e ha completato la verifica nella stessa scheda. Poi un secondo opencode run con --session ha proseguito la stessa conversazione e l’ha portata a termine. CAPTCHA e 2FA nei workflow con agenti: passaggio di mano controllato →
| Controllo | Run superati |
|---|---|
| opencode mcp list mostra il server come connesso | 5/5 |
| Strumenti Chrome DevTools offerti al modello | 5/5 |
| Lo snapshot completo della pagina arriva al modello con le impostazioni predefinite | 5/5 |
| Apre il form demo nel Chrome collegato | 5/5 |
| Compila tre campi e li rilegge | 5/5 |
| Si ferma alla verifica, stato prepared_needs_human | 5/5 |
| Scheda e campi compilati sopravvivono alla fine del run | 5/5 |
| L’ID di sessione compare in opencode session list | 5/5 |
| La persona completa la verifica nella stessa scheda | 5/5 |
| opencode run --session prosegue la stessa sessione | 5/5 |
| La sessione ripresa contiene ancora i passaggi precedenti | 5/5 |
| Il run ripreso trova e seleziona la stessa scheda | 5/5 |
| Campi invariati dopo la pausa | 5/5 |
| Invia esattamente una volta | 5/5 |
| Run headless con "ask": chiamata al browser rifiutata, nessun prompt | 5/5 |
| Stessa regola con --auto: la chiamata al browser viene eseguita | 5/5 |
| "deny": strumenti browser rimossi dall’elenco del modello | 5/5 |
| Run headless: nessuno strumento di domanda offerto al modello | 5/5 |
| Run headless con stdin lasciato aperto: resta in attesa finché non viene fermato dopo 20 s | 3/3 |

Riprendi dopo che la persona ha finito
Ogni opencode run stampa il suo ID di sessione nell’output --format json, e anche opencode session list --format json lo elenca.
Prosegui con lo stesso ID. Nei nostri run la sessione ripresa aveva tutti i passaggi precedenti, ha ritrovato la stessa scheda tramite Chrome DevTools MCP, ha visto i campi invariati e ha inviato una sola volta.
Preferisci l’interfaccia da terminale? opencode --session <session-id> apre lì la stessa conversazione.
- Trova la sessione
opencode session list --format json- Prosegui in headless
opencode run --session <session-id> "The check is done. Re-read the form and submit once."- Prosegui nell’interfaccia da terminale
opencode --session <session-id>
Approvazioni: ask, allow, deny
Senza un blocco di permessi, OpenCode esegue gli strumenti browser senza chiedere. Basta una riga per cambiarlo. Abbiamo eseguito ogni regola in headless, come gli script chiamano OpenCode:
| Regola | In un opencode run headless |
|---|---|
"chrome-devtools_*": "ask" | Rifiutata subito con “The user rejected permission to use this specific tool call.” Il run termina comunque con exit code 0. |
Stessa regola più --auto | La chiamata al browser viene eseguita. Le regole deny esplicite valgono comunque, secondo la documentazione. |
"chrome-devtools_*": "deny" | Gli strumenti browser spariscono dall’elenco degli strumenti del modello. |
Approva tu ogni azione nel browser
{
"permission": {
"chrome-devtools_*": "ask"
}
}Usa "ask" nell’interfaccia da terminale, dove OpenCode chiede una volta, sempre o rifiuta. Per i run headless, accetta che "ask" blocchi il browser oppure usa --auto consapevolmente, su un profilo Chrome dedicato ai lanci.
Se arrivi da Claude Code
Il server è lo stesso, la config no. Quattro differenze decidono se la tua voce funziona:
| Tema | OpenCode | Claude Code |
|---|---|---|
| Dove sta la voce | Chiave "mcp" in opencode.json | "mcpServers" in .mcp.json |
| Forma del comando | "command" è un unico array, più "type": "local" | Stringa "command" più array "args" |
| Nomi degli strumenti nelle regole | chrome-devtools_take_snapshot | mcp__chrome-devtools__take_snapshot |
| Approvazioni predefinite | Maggior parte delle azioni consentita | Chiede al primo uso di ogni strumento |
Tre cose che fanno perdere tempo
- Un blocco "mcpServers" incollato tace
- OpenCode ignora del tutto la chiave: nessun errore, exit code 0, nessuno strumento browser. Sposta la voce sotto "mcp" e trasforma il comando in un unico array.
- I run headless aspettano su uno stdin aperto
- Quando uno script avvia opencode run con stdin lasciato aperto come pipe, OpenCode aspetta un input che non arriva mai. In tutti e 3 i run è rimasto bloccato finché non è stato fermato; con stdin da /dev/null ha risposto subito.
- "ask" negli script significa no
- In un run headless non c’è nessuno a rispondere, quindi ogni "ask" diventa un rifiuto. Decidi run per run se il browser può agire da solo.
| Tema | Testo | Cosa abbiamo osservato |
|---|---|---|
| OpenCode: server locali | Add local MCP servers using type to "local" within the MCP object. | La forma "type": "local" più array è stata caricata in ogni run. |
| OpenCode: più file | Configuration files are merged together, not replaced. | Confermato: un file di progetto con solo "mcp" ha mantenuto il modello e il provider globali. |
| OpenCode: quale file vince | Project config has the highest precedence among standard config files - it overrides both global and remote configs. | Confermato: un "enabled": false di progetto ha spento la voce globale. |
| OpenCode: nomi degli strumenti | MCP server tools are registered with server name as prefix | Gli strumenti sono arrivati come chrome-devtools_take_snapshot e così via. |
| OpenCode: permessi predefiniti | If you don’t specify anything, OpenCode starts from permissive defaults: | Gli strumenti browser sono stati eseguiti senza prompt finché non abbiamo aggiunto una regola. |
| OpenCode: --auto | Explicit "deny" rules are still enforced. | Abbiamo testato --auto con "ask"; con "deny" gli strumenti non sono stati proprio offerti. |
| OpenCode: dimensione del contesto | MCP servers add to your context, so you want to be careful with which ones you enable. | Chrome DevTools MCP aggiunge 30 strumenti. Tieni spenti gli altri server mentre lanci. |
| OpenCode: flag --session | Session ID to continue | Ha funzionato in headless in ogni run, a differenza degli agenti che riprendono solo nella loro interfaccia da terminale. |
| Claude Code: file di progetto | Project-scoped servers enable team collaboration by storing configurations in a .mcp.json file at your project’s root directory. | File e chiave diversi da OpenCode; la stessa voce non si trasferisce. |
| Claude Code: nomi degli strumenti nelle regole | mcp__puppeteer__* matches every tool from the puppeteer server | OpenCode usa invece un solo underscore dopo il nome del server. |
| Claude Code: modalità predefinita | Prompts for permission on first use of each tool. | Il default di OpenCode è l’opposto: consentire, a meno che tu non imposti una regola. |
| Chrome DevTools MCP: sezione OpenCode | Add the following configuration to your `opencode.json` file. | Stessa forma del nostro blocco; noi fissiamo la versione e aggiungiamo --autoConnect. |
Avvia LaunchRepo in OpenCode
Apri OpenCode nel tuo workspace privato LaunchRepo e incolla il prompt di avvio. Il kit guida poi l’onboarding, testa la connessione al tuo Chrome su Example Domain e prepara il run.
- Il prompt di avvio consiglia Claude Code o Codex CLI per i risultati migliori. OpenCode funziona con lo stesso kit perché ha le due cose che servono al kit: accesso ai file nel workspace e un browser tramite MCP.
- OpenCode legge AGENTS.md dal workspace, quindi recepisce da solo le regole del kit.
- I passaggi CAPTCHA e 2FA tornano a te come passaggi di consegne; riprendi la sessione con --session come mostrato sopra.
Prompt di avvio di 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.Cosa non copre questo test
- I prompt di approvazione e lo strumento di domanda dell’interfaccia da terminale. Il comportamento headless qui sopra è misurato; quello dell’interfaccia segue la documentazione.
- Un vero modello di IA. Il sostituto toglie la qualità del modello dal risultato; un modello può comunque scegliere l’elemento sbagliato.
- --autoConnect a un profilo Chrome di tutti i giorni. Abbiamo usato un Chrome temporaneo tramite --browser-url.
- Windows e Linux, server MCP remoti, account OpenCode e piani di modelli a pagamento.
Fonti
Ogni citazione qui sopra è copiata parola per parola da queste pagine, lette il 1 ottobre 2026. Il comportamento testato viene dai nostri run descritti in questa pagina.
| Fonte | Data della pagina | Verificato |
|---|---|---|
| OpenCode Docs: MCP servers | ||
| OpenCode Docs: Config | ||
| OpenCode Docs: Permissions | ||
| OpenCode Docs: CLI | ||
| OpenCode Docs: Providers | ||
| Claude Code Docs: Connect Claude Code to tools via MCP | nessuna data indicata | |
| Claude Code Docs: Configure permissions | nessuna data indicata | |
| Chrome DevTools MCP: MCP client configuration | nessuna data indicata |
FAQ
- Dove metto i server MCP in OpenCode?
- Sotto la chiave "mcp" di opencode.json, nella root del progetto oppure in ~/.config/opencode/opencode.json. Nel nostro test OpenCode 1.18.34 ha caricato anche .opencode/opencode.json, OPENCODE_CONFIG e OPENCODE_CONFIG_CONTENT.
- Qual è la config di OpenCode per Chrome DevTools MCP?
- Una voce chiamata chrome-devtools con "type": "local" e "command": ["npx", "-y", "chrome-devtools-mcp@1.10.1", "--autoConnect", "--no-usage-statistics", "--no-performance-crux"]. Esegui opencode mcp list per vederla connessa.
- Perché OpenCode non mostra il mio server MCP?
- Il più delle volte la voce è stata copiata da un altro agente: un blocco "mcpServers" viene ignorato senza errori, e "command": "npx" con "args" separati fa rifiutare a OpenCode l’intera config. Usa "mcp" e un unico array per il comando.
- Posso usare invece Playwright MCP?
- Sì, la stessa forma della voce "mcp" funziona per qualsiasi server MCP locale. Questa pagina testa Chrome DevTools MCP perché si collega al Chrome che usi già; la nostra pagina di confronto spiega quando Playwright MCP è la scelta migliore.
- Come riprendo una sessione OpenCode dopo un CAPTCHA?
- Completa la verifica nella stessa scheda di Chrome, poi esegui opencode run --session <session-id> con una breve istruzione, oppure aprila nell’interfaccia da terminale con opencode --session <session-id>. Nei nostri run sessione, scheda e campi erano ancora tutti lì.
- OpenCode è supportato ufficialmente da LaunchRepo?
- LaunchRepo supporta gli agenti di coding che hanno accesso a file e browser; OpenCode li ha entrambi, e questa pagina documenta un setup testato. Non è una certificazione né una partnership, e il prompt di avvio consiglia comunque Claude Code o Codex CLI per i risultati migliori.
Dai a OpenCode un piano di lancio
LaunchRepo dà al tuo agente l’elenco delle piattaforme, il runbook e un tracker che tiene aggiornato. OpenCode fa il lavoro nel tuo browser; l’ultima parola resta a te.
Vedi i prezzi