Chrome DevTools MCP
OFFICIAL SERVERLets an assistant control and inspect a live Chrome browser: automate pages, debug, trace performance.
Mozilla's server for driving and debugging Firefox: browse, fill forms, read console, network, profiler
Official · Mozilla TypeScript Local · stdio Browser automationDeveloper tools
79 popularity score ★ 553 ↓ 4.1k/wk
Opens the app, which asks before it adds the server.
claude mcp add firefox-devtools -- npx -y @mozilla/firefox-devtools-mcp@latest{
"mcpServers": {
"firefox-devtools": {
"command": "npx",
"args": [
"-y",
"@mozilla/firefox-devtools-mcp@latest"
]
}
}
}{
"mcpServers": {
"firefox-devtools": {
"command": "npx",
"args": [
"-y",
"@mozilla/firefox-devtools-mcp@latest"
]
}
}
}{
"servers": {
"firefox-devtools": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@mozilla/firefox-devtools-mcp@latest"
]
}
}
}[mcp_servers.firefox-devtools]
command = "npx"
args = ["-y", "@mozilla/firefox-devtools-mcp@latest"]gemini mcp add --scope user firefox-devtools npx -- -y @mozilla/firefox-devtools-mcp@latestFIREFOX_HEADLESS |
Optional: true runs Firefox without a window (same as --headless). |
|---|---|
TOOL_PRESET |
Optional: slim, basic, developer, mozilla or all: which tool modules are on. |
START_URL |
Optional: URL opened when the browser starts (same as --start-url). |
AUTO_PROFILE |
Optional: true keeps a persistent profile under ~/.firefox-devtools-mcp, one per Firefox binary. |
ACCEPT_INSECURE_CERTS |
Optional: true ignores TLS certificate errors. |
UNRESTRICTED_SAVE_PATHS |
Optional: true lets saveTo write anywhere on disk. |
DISABLE_NETWORK_BODY_COLLECTION |
Optional: true stops capturing request and response bodies, keeping headers only. |
| Set together: connect-existing | |
CONNECT_EXISTING |
Optional: true attaches to a running Firefox instead of launching one. |
MARIONETTE_PORT |
Optional: Marionette port used in connect-existing mode. |
IDLE_TIMEOUT |
Optional: Seconds without tool calls before a connect-existing session releases Firefox. |
| Set together: android | |
ANDROID_WIPE_APP_DATA |
Optional: true confirms the app data wipe that --android-device mode needs. |
ANDROID_PACKAGE |
Optional: Android app package for --android-device mode. |
Firefox DevTools MCP is Mozilla's server for controlling a real Firefox from an MCP client. It launches Firefox, or attaches to one already running, and talks to it over WebDriver BiDi through Selenium. You take a snapshot of the page, which gives every element a UID, and then click, hover, type, drag, fill forms or upload files by that UID. Tabs, history, dialogs, viewport size, screenshots, PDF printing and downloads have their own tools.
There are two main uses. One is plain browsing, where the assistant reads pages and works through multi-step flows on a site. The other is web development: open the page you are building, then look at its console output and network requests, put logpoints in its scripts, record a profile with the Firefox profiler or capture a screencast. Large results can go to a file through a saveTo parameter instead of filling the conversation.
Tools are grouped in modules that you choose with --tool-preset (slim, basic, developer, mozilla, all) or an explicit --tools list. The generated tool reference counts 57 tools in 19 modules. The npm build skips the launch, prefs, privileged and bidi modules, so 49 tools are reachable from it. The default basic preset turns on 35 of those, evaluate_script among them. Network, console, debugging and profiler tools need the developer preset or higher. Firefox for Android can be driven over adb too. The project is still at 0.x, so expect its interface to change.
The main branch has already moved the server's home folder from ~/.firefox-devtools-mcp to ~/.firefox-mcp and renamed the profile folder and marker file. The published package still uses the old names.
| Runtime | Node.js 20.19.0+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Also |
|
Firefox is found automatically, or set --firefox-path. The debugger tools need Firefox 153 or newer. For --connect-existing, start Firefox yourself with --marionette --remote-debugging-port. It needs a local browser, so a cloud host without one cannot run it.
Network, console, debugging and profiler tools are off under the default basic preset; start with --tool-preset developer or a --tools list. The prefs, privileged and launch modules are skipped by the public package even if you ask for them. Android mode wipes all data of the target app before every session, which is why it insists on --android-wipe-app-data. saveTo accepts relative paths or paths under ~/.firefox-devtools-mcp only, unless you pass --unrestricted-save-paths. Leaving Marionette enabled in your everyday browser sets navigator.webdriver and can trip bot detection. Snapshot UIDs go stale after navigation.
Suits web developers who test in Firefox and want an assistant to see console errors, network traffic, logpoints and profiles for a page they control, and anyone automating sites in Firefox specifically. It runs locally and can act on pages, so give it a dedicated profile and avoid --connect-existing against your daily one. For Chrome, the Chrome DevTools MCP server, which we also list, is the counterpart. For cross-browser test automation, Microsoft's Playwright MCP, also listed, is the usual pick.
17 only read, 32 change things. A ? marks an optional parameter.
list_pagesnew_page changesurl: stringwait?: enumnavigate_page changesurl: stringwait?: enumselect_page changespageIdx?: numberurl?: stringtitle?: stringclose_page changespageIdx: numberget_page_textmaxLength?: numbersaveTo?: anypreview?: numbertake_snapshotmaxLines?: numberincludeAttributes?: booleanincludeText?: booleanmaxDepth?: numberincludeAll?: booleanselector?: stringsaveTo?: anypreview?: numberresolve_uid_to_selectoruid: stringclear_snapshot changesclick_by_uid changesuid: stringdblClick?: booleanhover_by_uid changesuid: stringfill_by_uid changesuid: stringvalue: stringdrag_by_uid_to_uid changesfromUid: stringtoUid: stringfill_form_by_uid changeselements: arrayupload_file_by_uid changesuid: stringfilePath: stringpress_key changeskey: stringuid?: stringtype_text changestext: stringuid?: stringsubmitKey?: stringlist_network_requestslimit?: numbersinceMs?: numberurlContains?: stringmethod?: stringstatus?: numberstatusMin?: numberstatusMax?: numberisXHR?: booleanresourceType?: stringsortBy?: enumdetail?: enumformat?: enumsaveTo?: anypreview?: numberget_network_requestid?: stringurl?: stringformat?: enumsaveTo?: anypreview?: numberset_network_cache changesbehavior: enumscope?: enumlist_console_messageslevel?: enumlimit?: numbersinceMs?: numbertextContains?: stringsource?: stringformat?: enumsaveTo?: anypreview?: numberclear_console_messages changesscreenshot_pagefullPage?: booleansaveTo?: anyscreenshot_by_uiduid: stringsaveTo?: anyprint_pagelandscape?: booleanbackground?: booleansaveTo?: anylist_downloadsstatus?: enumurlContains?: stringlimit?: numberformat?: enumclear_downloads changesset_download_behavior changesbehavior: enumdownloadFolder?: stringaccept_dialog changespromptText?: stringdismiss_dialog changesnavigate_history changesdirection: enumset_viewport_size changeswidth: numberheight: numberget_firefox_outputlines?: numbergrep?: stringsince?: numberget_firefox_infoclose_firefox_session changesinstall_extension changestype: enumpath?: stringvalue?: stringpermanent?: booleanuninstall_extension changesid: stringprofiler_is_activeprofiler_start changespreset?: enumentries?: integerinterval?: numberfeatures?: arraythreads?: arrayactiveContext?: stringprofiler_stop changesdiscard?: booleanscreencast_start changescontext?: stringframeRate?: integerwidth?: integerheight?: integermimeType?: stringscreencast_stop changesscreencast?: stringevaluate_script changesfunction: stringargs?: arraytimeout?: numbersandbox?: stringsaveTo?: anypreview?: numberenable_debugger changeslist_scriptsget_script_sourcescriptUrl: stringset_logpoint changesurl: stringline: numberexpression: stringremove_logpoint changeslogpoint: stringget_logpoint_resultslogpoint: string