En bref
- Placez l’entrée chrome-devtools sous la clé "mcp" de opencode.json, avec "type": "local" et la commande entière dans un seul tableau. Le bloc se trouve plus bas.
- OpenCode 1.18.34 l’a chargée depuis le fichier global, depuis un opencode.json de projet (y compris lancé dans un sous-dossier), depuis .opencode/opencode.json et depuis les deux variables d’environnement.
- Il a ensuite proposé 30 outils de navigateur nommés chrome-devtools_… et transmis au modèle le snapshot complet de la page, 44 167 caractères, sans le raccourcir.
- Après une étape CAPTCHA ou 2FA, reprenez la même conversation avec opencode run --session <session-id>. Cela a fonctionné en mode headless à chaque essai : même onglet, mêmes champs, un seul envoi.
- Par défaut, OpenCode autorise la plupart des actions : ajoutez une ligne de permission si vous voulez approuver vous-même les actions dans le navigateur.
LaunchRepo fonctionne avec tout agent de code capable de lire et d’écrire des fichiers dans votre espace de travail et de piloter un navigateur. OpenCode fait les deux. Cette page documente une configuration testée ; ce n’est ni une certification ni un partenariat.
Ajouter le navigateur à opencode.json
OpenCode fusionne ses fichiers de config au lieu de les remplacer. La configuration est donc sans risque : vous ajoutez une clé et tous vos réglages existants restent intacts.
- Ouvrez opencode.json à la racine de votre espace de travail LaunchRepo, ou créez-le. Pour tous vos projets à la fois, utilisez plutôt ~/.config/opencode/opencode.json.
- Ajoutez le bloc "mcp" ci-dessous à côté de vos clés existantes. Si le fichier contient déjà une clé "mcp", ajoutez-y seulement l’entrée chrome-devtools.
- Dans le Chrome que vous utilisez pour vos lancements, ouvrez chrome://inspect/#remote-debugging et activez le débogage à distance (Chrome 144+). C’est à lui que --autoConnect se connecte.
- Lancez opencode mcp list. Une entrée fonctionnelle affiche la ligne ci-dessous ; demandez ensuite à OpenCode d’ouvrir https://example.com et de lire le titre de la page.
Ajouter à 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"
]
}
}
}Ligne attendue dans opencode mcp list opencode mcp list
✓ chrome-devtools connected--autoConnect utilise le Chrome que vous avez déjà ouvert. Pour un Chrome séparé réservé aux lancements, utilisez plutôt --browser-url=http://127.0.0.1:9222 ; c’est ainsi que notre test s’est connecté à son Chrome temporaire.
Conservez vos propres réglages
- Ne collez jamais le bloc à la place d’un fichier existant entier. Ajoutez la clé ; OpenCode fusionne les fichiers, donc votre fournisseur, votre modèle et vos autres serveurs restent en place.
- Un opencode.json de projet ne remplace le fichier global que pour les clés qu’il définit. Dans notre test, un fichier de projet contenant seulement "mcp" a gardé actifs le modèle et le fournisseur globaux.
- Pour désactiver le navigateur dans un seul projet sans toucher au fichier global, définissez "enabled": false pour chrome-devtools dans ce projet. Cela a fonctionné à chaque essai.
Quels fichiers de config OpenCode charge
Même entrée de serveur, emplacements et formes différents. « Chargé » signifie que les outils chrome-devtools_… sont arrivés dans la requête d’OpenCode au modèle.
| Variante | Fichier ou variable | Résultat |
|---|---|---|
| Fichier de config global | ~/.config/opencode/opencode.json | Chargé, 30 outils (3/3) |
| Fichier JSONC global avec commentaires et virgule finale | ~/.config/opencode/opencode.jsonc | Chargé, 30 outils (3/3) |
| Fichier de projet à la racine de l’espace de travail | opencode.json | Chargé, 30 outils (3/3) |
| Fichier de projet, OpenCode lancé dans un sous-dossier | opencode.json | Chargé, 30 outils (3/3) |
| Dans le dossier .opencode | .opencode/opencode.json | Chargé, 30 outils (3/3) |
| Fichier personnalisé via une variable d’environnement | OPENCODE_CONFIG=<file> | Chargé, 30 outils (3/3) |
| JSON en ligne via une variable d’environnement | OPENCODE_CONFIG_CONTENT | Chargé, 30 outils (3/3) |
| Bloc "mcpServers" copié depuis Claude Code ou Cursor | opencode.json | Non chargé, sans erreur (3/3) |
| "command": "npx" plus "args" (la forme utilisée par la plupart des autres agents) | opencode.json | Config refusée, OpenCode s’arrête avec le code de sortie 1 (3/3) |
| Entrée avec "enabled": false | opencode.json | Non chargé, sans erreur (3/3) |
| Entrée globale, le fichier de projet définit seulement "enabled": false | opencode.json | Non chargé, sans erreur (3/3) |
Les deux lignes qui piègent : un bloc "mcpServers" collé est ignoré sans un mot (opencode mcp list affiche « No MCP servers configured »), et une commande sous forme de chaîne arrête OpenCode avant même son démarrage (« Expected array, got "npx" »). La forme en tableau ci-dessus règle les deux.
Le relais, étape par étape
OpenCode 1.18.34 avec Chrome DevTools MCP 1.10.1, Google Chrome 154.0.8037.92, macOS, Node 22, le 1 octobre 2026. Chaque essai a utilisé un nouveau dossier personnel et un nouveau profil Chrome : aucun réglage personnel n’a été lu ni modifié.
Aucun modèle d’IA n’a été utilisé. Un petit substitut local a répondu aux requêtes de modèle d’OpenCode avec des appels d’outils fixes et n’a lu les identifiants d’éléments que dans ce qu’OpenCode lui envoyait réellement. Chaque essai est ainsi identique et gratuit, et teste ce qu’OpenCode contrôle : config, outils, ce que voit le modèle, permissions et sessions. Cela ne teste pas la qualité de planification d’un modèle.
Relais sur le formulaire de démonstration de notre guide CAPTCHA : 5 essais. Variantes de config : 3 essais chacune.
OpenCode a ouvert le formulaire de démonstration, l’a rempli, s’est arrêté à la vérification factice et a terminé l’exécution. Un script a joué le rôle de la personne et a terminé la vérification dans le même onglet. Puis un second opencode run avec --session a poursuivi la même conversation et l’a menée à terme. CAPTCHA et 2FA dans les workflows d’agents : le relais maîtrisé →
| Vérification | Essais réussis |
|---|---|
| opencode mcp list affiche le serveur comme connecté | 5/5 |
| Outils Chrome DevTools proposés au modèle | 5/5 |
| Le snapshot complet de la page parvient au modèle avec les réglages par défaut | 5/5 |
| Ouvre le formulaire de démonstration dans le Chrome connecté | 5/5 |
| Remplit trois champs et les relit | 5/5 |
| S’arrête à la vérification, statut prepared_needs_human | 5/5 |
| L’onglet et les champs remplis survivent à la fin de l’exécution | 5/5 |
| L’ID de session apparaît dans opencode session list | 5/5 |
| La personne termine la vérification dans le même onglet | 5/5 |
| opencode run --session poursuit la même session | 5/5 |
| La session poursuivie contient toujours les étapes précédentes | 5/5 |
| L’exécution poursuivie trouve et sélectionne le même onglet | 5/5 |
| Champs inchangés après la pause | 5/5 |
| Envoie exactement une fois | 5/5 |
| Exécution headless avec "ask" : appel au navigateur refusé, sans invite | 5/5 |
| Même règle avec --auto : l’appel au navigateur s’exécute | 5/5 |
| "deny" : outils du navigateur retirés de la liste du modèle | 5/5 |
| Exécution headless : aucun outil de question proposé au modèle | 5/5 |
| Exécution headless avec stdin resté ouvert : attend jusqu’à l’arrêt forcé après 20 s | 3/3 |

Reprendre une fois la personne passée
Chaque opencode run affiche son ID de session dans la sortie --format json, et opencode session list --format json le liste aussi.
Poursuivez avec le même ID. Dans nos essais, la session poursuivie contenait toutes les étapes précédentes, retrouvait le même onglet via Chrome DevTools MCP, voyait les champs inchangés et envoyait une seule fois.
Vous préférez l’interface du terminal ? opencode --session <session-id> y ouvre la même conversation.
- Trouver la session
opencode session list --format json- Poursuivre en headless
opencode run --session <session-id> "The check is done. Re-read the form and submit once."- Poursuivre dans l’interface du terminal
opencode --session <session-id>
Approbations : ask, allow, deny
Sans bloc de permission, OpenCode exécute les outils du navigateur sans demander. Une ligne suffit à changer cela. Nous avons testé chaque règle en headless, comme les scripts appellent OpenCode :
| Règle | Dans un opencode run headless |
|---|---|
"chrome-devtools_*": "ask" | Refusé immédiatement avec « The user rejected permission to use this specific tool call. » L’exécution se termine malgré tout avec le code 0. |
Même règle plus --auto | L’appel au navigateur s’exécute. Les règles deny explicites s’appliquent toujours, selon la documentation. |
"chrome-devtools_*": "deny" | Les outils du navigateur disparaissent de la liste d’outils du modèle. |
Approuver vous-même chaque action dans le navigateur
{
"permission": {
"chrome-devtools_*": "ask"
}
}Utilisez "ask" dans l’interface du terminal, où OpenCode propose « une fois », « toujours » ou « refuser ». Pour les exécutions headless, acceptez que "ask" bloque le navigateur, ou utilisez --auto en connaissance de cause, sur un profil Chrome dédié aux lancements.
Si vous venez de Claude Code
Le serveur est le même, la config non. Quatre différences décident si votre entrée fonctionne :
| Sujet | OpenCode | Claude Code |
|---|---|---|
| Emplacement de l’entrée | Clé "mcp" dans opencode.json | "mcpServers" dans .mcp.json |
| Forme de la commande | "command" est un seul tableau, plus "type": "local" | Chaîne "command" plus tableau "args" |
| Noms d’outils dans les règles | chrome-devtools_take_snapshot | mcp__chrome-devtools__take_snapshot |
| Approbations par défaut | La plupart des actions autorisées | Demande à la première utilisation de chaque outil |
Trois pièges qui font perdre du temps
- Un bloc "mcpServers" collé reste muet
- OpenCode ignore complètement la clé : aucune erreur, code de sortie 0, aucun outil de navigateur. Déplacez l’entrée sous "mcp" et transformez la commande en un seul tableau.
- Les exécutions headless attendent sur un stdin ouvert
- Quand un script lance opencode run avec stdin laissé ouvert comme pipe, OpenCode attend une entrée qui n’arrive jamais. Dans les 3 essais, il est resté bloqué jusqu’à l’arrêt forcé ; avec stdin depuis /dev/null, il a répondu immédiatement.
- "ask" veut dire non dans les scripts
- Personne ne peut répondre dans une exécution headless, donc chaque "ask" devient un refus. Décidez à chaque exécution si le navigateur peut agir seul.
| Sujet | Formulation | Ce que nous avons observé |
|---|---|---|
| OpenCode : serveurs locaux | Add local MCP servers using type to "local" within the MCP object. | La forme "type": "local" plus tableau s’est chargée à chaque essai. |
| OpenCode : plusieurs fichiers | Configuration files are merged together, not replaced. | Confirmé : un fichier de projet contenant seulement "mcp" a gardé le modèle et le fournisseur globaux. |
| OpenCode : quel fichier l’emporte | Project config has the highest precedence among standard config files - it overrides both global and remote configs. | Confirmé : un "enabled": false de projet a désactivé l’entrée globale. |
| OpenCode : noms d’outils | MCP server tools are registered with server name as prefix | Les outils sont arrivés sous la forme chrome-devtools_take_snapshot, etc. |
| OpenCode : permissions par défaut | If you don’t specify anything, OpenCode starts from permissive defaults: | Les outils du navigateur se sont exécutés sans invite jusqu’à ce que nous ajoutions une règle. |
| OpenCode : --auto | Explicit "deny" rules are still enforced. | Nous avons testé --auto avec "ask" ; avec "deny", les outils n’étaient pas proposés du tout. |
| OpenCode : taille du contexte | MCP servers add to your context, so you want to be careful with which ones you enable. | Chrome DevTools MCP ajoute 30 outils. Désactivez les autres serveurs pendant vos lancements. |
| OpenCode : option --session | Session ID to continue | A fonctionné en headless à chaque essai, contrairement aux agents qui ne reprennent que dans leur interface de terminal. |
| Claude Code : fichier de projet | Project-scoped servers enable team collaboration by storing configurations in a .mcp.json file at your project’s root directory. | Fichier et clé différents d’OpenCode ; la même entrée ne se transpose pas. |
| Claude Code : noms d’outils dans les règles | mcp__puppeteer__* matches every tool from the puppeteer server | OpenCode utilise à la place un seul tiret bas après le nom du serveur. |
| Claude Code : mode par défaut | Prompts for permission on first use of each tool. | Le défaut d’OpenCode est l’inverse : autoriser, sauf si vous définissez une règle. |
| Chrome DevTools MCP : section OpenCode | Add the following configuration to your `opencode.json` file. | Même forme que notre bloc ; nous fixons la version et ajoutons --autoConnect. |
Démarrer LaunchRepo dans OpenCode
Ouvrez OpenCode dans votre espace de travail privé LaunchRepo et collez le prompt de démarrage. Le kit mène ensuite l’onboarding, teste votre connexion Chrome sur Example Domain et prépare l’exécution.
- Le prompt de démarrage recommande Claude Code ou Codex CLI pour les meilleurs résultats. OpenCode fonctionne avec le même kit, car il a les deux choses dont le kit a besoin : l’accès aux fichiers de l’espace de travail et un navigateur via MCP.
- OpenCode lit AGENTS.md dans l’espace de travail et reprend donc tout seul les règles du kit.
- Les étapes CAPTCHA et 2FA vous reviennent sous forme de relais ; vous reprenez la session avec --session comme indiqué plus haut.
Prompt de démarrage 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.Hors du périmètre de ce test
- Les invites d’approbation et l’outil de question de l’interface du terminal. Le comportement headless ci-dessus est mesuré ; celui de l’interface suit la documentation.
- Un vrai modèle d’IA. Le substitut retire la qualité du modèle du résultat ; un modèle peut toujours choisir le mauvais élément.
- --autoConnect vers un profil Chrome du quotidien. Nous avons utilisé un Chrome temporaire via --browser-url.
- Windows et Linux, les serveurs MCP distants, les comptes OpenCode et les offres de modèles payantes.
Sources
Chaque citation ci-dessus est reprise mot pour mot de ces pages, lues le 1 octobre 2026. Le comportement testé provient de nos propres essais décrits sur cette page.
| Source | Date de la page | Vérifié |
|---|---|---|
| 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 | pas de date indiquée | |
| Claude Code Docs: Configure permissions | pas de date indiquée | |
| Chrome DevTools MCP: MCP client configuration | pas de date indiquée |
FAQ
- Où placer les serveurs MCP dans OpenCode ?
- Sous la clé "mcp" de opencode.json, soit à la racine de votre projet, soit dans ~/.config/opencode/opencode.json. Dans notre test, OpenCode 1.18.34 a aussi chargé .opencode/opencode.json, OPENCODE_CONFIG et OPENCODE_CONFIG_CONTENT.
- Quelle est la config OpenCode pour Chrome DevTools MCP ?
- Une entrée nommée chrome-devtools avec "type": "local" et "command": ["npx", "-y", "chrome-devtools-mcp@1.10.1", "--autoConnect", "--no-usage-statistics", "--no-performance-crux"]. Lancez opencode mcp list pour la voir connectée.
- Pourquoi OpenCode n’affiche-t-il pas mon serveur MCP ?
- Le plus souvent, l’entrée a été copiée depuis un autre agent : un bloc "mcpServers" est ignoré sans erreur, et "command": "npx" avec des "args" séparés fait rejeter toute la config par OpenCode. Utilisez "mcp" et un seul tableau de commande.
- Puis-je utiliser Playwright MCP à la place ?
- Oui, la même forme d’entrée "mcp" fonctionne pour tout serveur MCP local. Cette page teste Chrome DevTools MCP parce qu’il se connecte au Chrome que vous utilisez déjà ; notre page comparative explique quand Playwright MCP convient mieux.
- Comment reprendre une session OpenCode après un CAPTCHA ?
- Terminez la vérification dans le même onglet Chrome, puis lancez opencode run --session <session-id> avec une courte instruction, ou ouvrez-la dans l’interface du terminal avec opencode --session <session-id>. Dans nos essais, la session, l’onglet et les champs étaient tous encore là.
- OpenCode est-il officiellement pris en charge par LaunchRepo ?
- LaunchRepo prend en charge les agents de code qui ont accès aux fichiers et au navigateur ; OpenCode a les deux, et cette page documente une configuration testée. Ce n’est ni une certification ni un partenariat, et le prompt de démarrage recommande toujours Claude Code ou Codex CLI pour les meilleurs résultats.
Donnez un plan de lancement à OpenCode
LaunchRepo donne à votre agent la liste des plateformes, le runbook et un suivi qu’il tient à jour. OpenCode fait le travail dans votre navigateur ; vous gardez le dernier mot.
Voir les tarifs