
Serveur Model Context Protocol pour Firefox DevTools - permet aux assistants IA d'inspecter et de contrôler le navigateur Firefox via le Remote Debugging Protocol.
Serveur Model Context Protocol pour automatiser Firefox via WebDriver BiDi (via Selenium WebDriver). Fonctionne avec Claude Code, Claude Desktop, Cursor, Cline et d'autres clients MCP.
Dépôt : https://github.com/mozilla/firefox-devtools-mcp
Remarque : Ce serveur MCP nécessite une installation locale de Firefox et ne peut pas fonctionner sur des services d'hébergement cloud comme glama.ai. Utilisez
npx @mozilla/firefox-devtools-mcp@latestpour l'exécuter localement, ou utilisez Docker avec le Dockerfile fourni.
Les serveurs MCP de navigateur comportent des risques inhérents. Quelques pratiques clés :
basic par défaut inclut déjà evaluate_script ; --tool-preset slim le supprime. Les préréglages supérieurs comme --tool-preset developer (débogage, réseau, console, profileur) et --tool-preset mozilla (contexte privilégié) étendent davantage ce que l'agent peut faire.Consultez SECURITY.md pour une analyse complète des risques et la manière de signaler des vulnérabilités.
--firefox-path)Recommandé : utilisez npx pour exécuter la dernière version publiée depuis npm.
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via arguments
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Ou via des variables d'environnement
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true
codex mcp add firefox-devtools -- npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via arguments
codex mcp add firefox-devtools -- \
npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Ou via des variables d'environnement
codex mcp add firefox-devtools \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true \
-- npx @mozilla/firefox-devtools-mcp@latest
Ajoutez au mcp_settings.json de Claude Code :
{
"mcpServers": {
"firefox-devtools": {
"command": "npx",
"args": ["-y", "@mozilla/firefox-devtools-mcp@latest", "--headless", "--viewport", "1280x720"],
"env": {
"START_URL": "about:blank"
}
}
}
}
Ajoutez à ~/.codex/config.toml :
[mcp_servers.firefox-devtools]
command = "npx"
args = ["-y", "@mozilla/firefox-devtools-mcp@latest", "--headless", "--viewport", "1280x720"]
[mcp_servers.firefox-devtools.env]
START_URL = "about:blank"
npm run setup
# Choisissez Claude Code ; le script enregistre le JSON au bon chemin
npx @modelcontextprotocol/inspector npx @mozilla/firefox-devtools-mcp@latest --start-url https://example.com --headless
Appelez ensuite des outils comme :
list_pages, select_page, navigate_pagetake_snapshot puis click_by_uid / fill_by_uidlist_network_requests (capture toujours active), get_network_requestlist_downloads (capture toujours active), set_download_behaviorscreenshot_page, list_console_messagesVous pouvez passer des drapeaux ou des variables d'environnement (noms à droite) :
--firefox-path — chemin absolu vers le binaire Firefox--headless — exécuter sans interface (FIREFOX_HEADLESS=true)--viewport 1280x720 — taille initiale de la fenêtre--profile-path — utiliser un profil Firefox spécifique--firefox-arg — arguments Firefox supplémentaires (répétable)--start-url — ouvrir cette URL au démarrage (START_URL)--accept-insecure-certs — ignorer les erreurs TLS (ACCEPT_INSECURE_CERTS=true)--connect-existing — se connecter à une instance Firefox déjà en cours d'exécution au lieu d'en lancer une nouvelle (CONNECT_EXISTING=true)Les outils sont regroupés en modules. Vous choisissez les modules à exposer soit avec un préréglage nommé
(--tool-preset) soit avec une liste explicite (--tools). Lorsque les deux sont fournis, --tools l'emporte et
le préréglage est ignoré.
Modules : pages, snapshot, input, network, console, screenshot, downloads,
utilities, management, webextension, profiler, screencast, script, debugging,
prefs, privileged.
Préréglages (chacun est un sur-ensemble du précédent) :
slim — pages, snapshot, input, screenshotbasic (par défaut) — slim plus downloads, script, utilities, management, webextension, screencastdeveloper — basic plus debugging, , , Notez que basic, le préréglage par défaut, inclut script et donc l'outil evaluate_script.
Consultez SECURITY.md pour comprendre ce que cela implique pour la surface
d'attaque, et utilisez --tool-preset slim ou une liste --tools explicite pour le supprimer.
# Utiliser le préréglage developer (ajoute les outils réseau, console, débogage et profileur)
npx @mozilla/firefox-devtools-mcp --tool-preset developer
# Activer uniquement les modules nécessaires
npx @mozilla/firefox-devtools-mcp --tools pages network console
Les modules prefs et privileged nécessitent MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 et ne sont disponibles que
dans la build interne de Mozilla. Le paquet public les ignore même s'ils sont demandés et
journalise un avertissement nommant les modules supprimés.
--pref)Utilisez --android-device pour automatiser Firefox s'exécutant sur un appareil Android. Nécessite adb dans votre PATH et geckodriver, qui est géré automatiquement.
Avertissement : Le mode Android efface toutes les données de l'application cible avant chaque session. Onglets, historique, marque-pages, mots de passe, cookies et paramètres sont tous perdus. geckodriver exécute
adb shell pm clear <package>lors de la création de la session et n'offre aucun moyen de l'ignorer, puis exécute la session sur son propre profil temporaire qui est supprimé ensuite. Pour cette raison,--android-devicenécessite--android-wipe-app-data, et vous devriez installer une build dédiée à l'automatisation plutôt que d'automatiser le navigateur que vous utilisez. Bug 2064088 suit l'ajout d'une option à geckodriver pour conserver les données d'application existantes.
# Lister les périphériques connectés
adb devices
# Lancer Firefox pour Android sur le seul périphérique connecté
npx @mozilla/firefox-devtools-mcp --android-device auto --android-wipe-app-data
# Cibler un périphérique spécifique
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-wipe-app-data
# Utiliser Firefox Nightly à la place
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-package org.mozilla.fenix --android-wipe-app-data
Le transfert de port entre l'hôte et le périphérique est géré automatiquement par geckodriver.
Utilisez --connect-existing pour automatiser votre session de navigation réelle, avec cookies, connexions et onglets ouverts intacts :
# Démarrer Firefox avec Marionette et l'agent distant (BiDi)
firefox --marionette --remote-debugging-port
# Exécuter le serveur MCP
npx @mozilla/firefox-devtools-mcp --connect-existing --marionette-port 2828
Les deux drapeaux sont requis car le MCP utilise à la fois WebDriver Classic (--marionette) et WebDriver BiDi (--remote-debugging-port). Si Firefox est démarré uniquement avec --marionette, le serveur MCP ne parvient pas à se connecter et vous demande de redémarrer Firefox avec les deux drapeaux.
Avertissement : Ne laissez pas Marionette activé pendant la navigation normale. Il définit
navigator.webdriver = trueet modifie d'autres signaux d'empreinte du navigateur, ce qui peut déclencher la détection de robots sur les sites protégés par Cloudflare, Akamai, etc. N'activez Marionette que lorsque vous avez besoin de l'automatisation MCP, puis redémarrez Firefox normalement ensuite.
Consultez docs/tools.md pour la liste complète des outils par module, avec descriptions et paramètres (générés à partir de la source).
saveTo optionnel)saveTo optionnel)saveTo optionnel)saveTo optionnel)saveTo optionnel pour les environnements CLI)sandbox optionnel pour un domaine isolé ; saveTo optionnel pour les résultats volumineux)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1)Les sorties d'outils volumineuses peuvent consommer un contexte significatif dans les clients CLI comme Claude Code. Les
outils screenshot_page, screenshot_by_uid, take_snapshot, list_console_messages,
list_network_requests, get_network_request, get_page_text,
evaluate_script, et
evaluate_privileged_script acceptent un paramètre optionnel saveTo qui écrit le
résultat dans un fichier au lieu de le renvoyer en ligne. saveTo prend l'une des trois formes suivantes :
~/.firefox-devtools-mcp ; les répertoires parents sont créés)true (un fichier horodaté est généré sous ~/.firefox-devtools-mcp/output/)La réponse renvoie le chemin et la taille en octets. Le fichier enregistré contient toujours les données complètes et non tronquées : les limites de taille en ligne (plafonds de messages console, troncature des en-têtes réseau, plafonds de lignes de snapshot) ne s'y appliquent jamais.
Les outils produisant du texte (tout sauf les captures d'écran) acceptent également preview, un nombre
de caractères de la sortie enregistrée à renvoyer en ligne comme court extrait. Les captures d'écran n'ont pas
d'aperçu.
screenshot_page({ saveTo: "page.png" })
take_snapshot({ saveTo: true })
list_network_requests({ urlContains: "api", saveTo: "network.json" })
evaluate_script({ function: "() => performance.getEntries()", saveTo: true, preview: 2000 })
Par défaut, les chemins d'enregistrement sont restreints : les chemins relatifs sont résolus par rapport au répertoire
de travail courant, et les chemins absolus ne sont autorisés que dans ~/.firefox-devtools-mcp. Les chemins qui
sortent de ces emplacements sont rejetés. Démarrez le serveur avec --unrestricted-save-paths pour
écrire à des emplacements arbitraires, y compris des chemins absolus en dehors de ce répertoire.
Les fichiers enregistrés peuvent ensuite être consultés par exemple avec l'outil Read de Claude Code sans impacter la taille du contexte.
npm install
npm run build
# Exécuter avec Inspector contre la build locale
npx @modelcontextprotocol/inspector node dist/index.js --headless --viewport 1280x720
# Ou exécuter en développement avec rechargement à chaud
npm run inspector:dev
Consultez CONTRIBUTING.md pour plus de détails sur le développement local, les tests et l'IC.
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox" (macOS) ou le chemin correct sur votre système d'exploitation.take_snapshot) lorsqu'un outil UID signale qu'il est absent.Solution 1 Enveloppez avec cmd /c (détails) :
"mcpServers": {
"firefox-devtools": {
"command": "cmd",
"args": ["/c", "npx", "-y", "@mozilla/firefox-devtools-mcp@latest"]
}
}
Solution 2 Utilisez le chemin absolu vers npx (ajustez l'extension — .cmd, .bat, .exe, ou .ps1 — pour correspondre à votre configuration) :
0.x. Utilisez @latest avec npx pour la version la plus récente.Consultez CONTRIBUTING.md pour savoir comment signaler des problèmes, exécuter des tests et travailler sur le projet localement.
Maintenu par Mozilla.
Sous licence MIT ou Apache 2.0 à votre choix.
--marionette-portMARIONETTE_PORT--pref name=value — définir une préférence Firefox au démarrage via moz:firefoxOptions (répétable)--tool-preset — sélectionner les modules d'outils à activer : slim, basic (par défaut), developer, mozilla, ou all. Voir Modules d'outils et préréglages. (TOOL_PRESET)--tools — liste explicite des modules d'outils à activer, remplaçant entièrement --tool-preset (par ex. --tools pages network script). Voir Modules d'outils et préréglages.--enable-script — obsolète, utilisez --tool-preset developer ou --tools ... script debugging. Sélectionne le préréglage d'outils developer. (ENABLE_SCRIPT=true)--enable-privileged-context — obsolète, utilisez --tool-preset mozilla ou --tools ... privileged prefs. Sélectionne le préréglage d'outils mozilla. Nécessite MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 (ENABLE_PRIVILEGED_CONTEXT=true)--android-device — activer le mode Firefox pour Android ; la valeur est le numéro de série du périphérique ADB (par ex. emulator-5554). Exécutez adb devices pour lister les périphériques connectés. Omettez la valeur ou utilisez auto pour sélectionner automatiquement le seul périphérique connecté.--android-wipe-app-data — confirmer que le mode Android efface toutes les données de l'application cible. Requis avec --android-device. (ANDROID_WIPE_APP_DATA=true)--android-package — nom du paquet d'application Android, par défaut org.mozilla.firefox. Autres paquets : org.mozilla.firefox_beta pour Firefox Beta, org.mozilla.fenix pour Firefox Nightly, org.mozilla.fenix.debug pour Firefox Nightly Debug, org.mozilla.geckoview_example pour geckoview (ANDROID_PACKAGE)--unrestricted-save-paths — permettre au paramètre saveTo d'écrire n'importe où sur le disque au lieu des racines par défaut. Voir Enregistrement de sorties volumineuses sur disque et la note de sécurité dans SECURITY.md. (UNRESTRICTED_SAVE_PATHS=true)--log-file — écrire les journaux du serveur MCP dans un fichier au lieu de stderr. Utile pour déboguer des sessions avec des clients MCP qui masquent la sortie du serveur. Définissez DEBUG=* pour inclure également les journaux de débogage verbeux. Exemple : --log-file /tmp/firefox-mcp.lognetworkconsoleprofilermozilla — developer plus prefs, privilegedall — tous les modulesMOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1"mcpServers": {
"firefox-devtools": {
"command": "C:\\nvm4w\\nodejs\\npx.ps1",
"args": ["-y", "@mozilla/firefox-devtools-mcp@latest"]
}
}