OpenCode peut utiliser Playwright MCP comme serveur local du projet. Commencez par une navigation en lecture seule et vérifiez le titre renvoyé. L’état connected confirme la connexion MCP. Le modèle doit ensuite envoyer un appel valide et Playwright doit lancer le navigateur et joindre la page.
Nous avons testé OpenCode 1.18.16 et Playwright MCP 0.0.84. Ce guide utilise la configuration 1.x. La documentation OpenCode V2 place les noms des serveurs dans mcp.servers. Lancez opencode --version avant de copier un bloc.
Déclarer le serveur local
Créez ou modifiez opencode.json à la racine du projet. S’il contient déjà un objet mcp, ajoutez l’entrée playwright sans remplacer les autres réglages. Le guide MCP OpenCode 1.x détaille le tableau de commande, l’activation et le délai.
{
"$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
}
}
}Utilisez un Firefox compatible avec le Playwright fourni par le serveur MCP. La version indiquée par npm pour le paquet testé est 1.65.0-alpha-2026-10-30.
npx -y --package playwright@1.65.0-alpha-2026-10-30 playwright install firefox
opencode mcp listSi le navigateur est installé dans un cache distinct, rendez-le accessible au processus MCP. Dans le test isolé, nous avons indiqué le binaire compatible explicitement. Lors d’une mise à jour, vérifiez la révision du navigateur et la version du paquet. Deux exécutables de même nom peuvent utiliser des protocoles différents.
Exécutez opencode mcp list dans le projet, puis vérifiez les outils dans une nouvelle session. OpenCode fusionne plusieurs sources de configuration. Pour diagnostiquer un échec, utilisez un projet vide et des répertoires de configuration et de données distincts. La référence OpenCode détaille l’ordre de priorité.
Tester une navigation en lecture seule
Le formulaire public Selenium fournit une réponse visible sans connexion à un compte.
Utilise playwright_browser_navigate uniquement pour cette URL :
{"url":"https://www.selenium.dev/selenium/web/web-form.html"}
Envoie un argument url avec l’adresse sous forme de chaîne.
Lis le résultat et donne le titre visible.
Ne clique pas, ne saisis rien, n’envoie rien et n’appelle pas d’autre outil.Vérifiez le nom de l’outil, les arguments et le titre renvoyé. Dans la session OpenCode 1.x du test, le nom affiché était playwright_browser_navigate. Le serveur expose browser_navigate à un client MCP indépendant. Le projet Playwright MCP de Microsoft décrit les instantanés d’accessibilité et les options du navigateur.
Pour comparer des modèles, gardez la même URL, la même demande, le même serveur et le même navigateur. Choisissez des modèles qui acceptent les appels structurés avec votre adaptateur. Nous avons connecté OpenCode à un Ollama local avec la configuration des fournisseurs compatibles OpenAI. Aucun compte externe n’a été utilisé. Lisez les événements d’outils, même si le texte final est vide ou que la commande renvoie zéro.
Ce que les deux modèles ont appelé
Le premier essai utilisait un ancien Firefox issu d’un cache. Les deux modèles ont envoyé l’URL prévue, mais la navigation a échoué. Un client MCP indépendant a reçu une erreur de protocole Firefox avec la même entrée valide. Avec Firefox 158, révision 1569, il a lu Web form. Dans cet environnement, une valeur numérique pour url a déclenché une erreur de validation.
Nous avons donné le même objet JSON explicite aux deux modèles dans de nouvelles sessions avec la version compatible. Le tableau distingue le résultat de l’outil et la sortie finale.
| Modèle local | Argument de navigation | Résultat de l’outil | Sortie finale |
|---|---|---|---|
qwen3:0.6b | URL exacte sous forme de chaîne | Web form | Titre omis |
qwen3.5:0.8b | URL exacte sous forme de chaîne | Web form | Aucun événement texte contenant le titre |
Le second modèle a aussi produit deux instantanés malgré la demande d’un seul appel. Lors d’un essai antérieur avec le bon Firefox, aucun modèle n’a repris l’URL exacte depuis une consigne en prose. Les deux ont navigué avec le JSON explicite dans l’essai rapporté. L’échantillon est limité. Le client indépendant a trouvé 25 outils, vérifié que browser_navigate.url était une chaîne et fermé le navigateur. Aucun formulaire n’a été envoyé.

Identifier le premier niveau en échec
| Symptôme | Premier niveau à vérifier | Étape suivante |
|---|---|---|
Serveur absent ou en échec dans opencode mcp list | Configuration et processus MCP | Vérifier la version, le répertoire, la commande, le binaire et le délai |
| Connected, mais le modèle renvoie seulement du texte | Modèle, fournisseur ou outils accessibles | Contrôler la liste des outils et répéter un seul appel avec un modèle compatible |
| Clé ou type d’argument incorrect | Schéma de l’outil | Comparer l’objet envoyé avec tools/list |
| Les arguments sont valides et le client indépendant échoue aussi | Démarrage, protocole ou réseau | Vérifier le binaire et réessayer la même URL |
| L’outil renvoie le titre, mais le texte final l’omet | Lecture du résultat par le modèle | S’appuyer sur le résultat de l’outil et demander uniquement le titre |
Un signalement sur les arguments MCP décrit un serveur de fichiers qui attendait path et recevait filePath. Une discussion sur OpenCode et le navigateur évoque des résultats irréguliers sans isoler la configuration. Vérifiez les arguments et le résultat de votre propre session avant d’attribuer un échec.
L’exemple crée un contexte propre. Pour reprendre une session ouverte, consultez la connexion à un navigateur existant. Voir aussi l’automatisation avec Playwright, Playwright MCP dans Claude Code, Playwright MCP dans Codex et les agents de programmation open source. Pour décider s’il faut ouvrir un onglet, comparez la recherche et le contrôle du navigateur et le fonctionnement des agents de navigation. Vous pouvez aussi télécharger Tabbit et comparer une autre connexion avec la même lecture publique.
Questions fréquentes
OpenCode peut-il utiliser Playwright MCP ?
Oui. En 1.x, ajoutez le serveur local sous mcp dans opencode.json puis lancez opencode mcp list dans le projet. V2 utilise un autre schéma.
Les outils fonctionnent-ils encore après un changement de modèle ?
La configuration MCP peut rester identique. Demandez la même petite action et vérifiez si les deux modèles envoient des arguments valides et lisent le résultat.
Pourquoi le serveur est-il connecté alors que la navigation échoue ?
Le serveur peut établir la connexion MCP avant de lancer le navigateur. Vérifiez les erreurs d’exécutable, de démarrage, de protocole ou de réseau dans le résultat.
Quel argument attend browser_navigate ?
Dans la version testée, url est une chaîne. Vérifiez dans tools/list et utilisez le nom exact affiché par votre client.
Cette configuration accède-t-elle aux onglets déjà ouverts ?
L’exemple crée un contexte isolé. Configurez une autre connexion si la tâche exige un onglet ou une session ouverte.