firefox-devtools-mcp
官方用於 Firefox DevTools 的 Model Context Protocol 伺服器,可讓 AI 助手透過遠端除錯協定檢查並控制 Firefox 瀏覽器。
你可以用 Firefox DevTools MCP 做什麼?
- 代理瀏覽 — 請您的助理導覽頁面、填寫表單,並使用
take_snapshot、click_by_uid和fill_by_uid完成多步驟工作流程。 - 網頁開發檢查 — 讓助理載入您的頁面,並透過
list_console_messages、list_network_requests和list_downloads檢查主控台訊息、網路請求與下載項目。 - JavaScript 評估 — 使用
evaluate_script在頁面環境中執行自訂腳本,以擷取資料或測試功能。 - 螢幕截圖擷取 — 使用
screenshot_page請求頁面截圖,並可透過saveTo參數選擇性地將大型輸出直接儲存至磁碟。 - 頁面管理 — 使用
list_pages、select_page和navigate_page在開啟的分頁之間切換,並導覽至新的 URL。
文件
Firefox DevTools MCP
Model Context Protocol 伺服器,讓 AI 代理程式可以使用 Firefox。它有兩個主要使用情境:
- 代理程式瀏覽:代理程式使用瀏覽器執行一般任務,例如閱讀頁面、填寫表單,以及在網站上完成多步驟流程。
- 代理程式輔助網頁開發:代理程式載入您正在處理的頁面,並使用開發者工具進行檢查,例如主控台、網路請求、除錯器和效能分析器。
它透過 WebDriver BiDi(經由 Selenium WebDriver)控制 Firefox,並可與 Claude Code、Claude Desktop、Cursor、Cline 及其他 MCP 用戶端搭配使用。
儲存庫:https://github.com/mozilla/firefox-devtools-mcp
注意:此 MCP 伺服器需要本機安裝 Firefox 瀏覽器,無法在 glama.ai 等雲端託管服務上執行。請使用
npx @mozilla/firefox-devtools-mcp@latest在本機執行,或使用隨附的 Dockerfile 搭配 Docker。
安全性
瀏覽器 MCP 伺服器具有固有的風險。幾個關鍵做法:
- 使用專用的 Firefox 設定檔。 絕對不要對您的一般設定檔執行伺服器——代理程式可以存取瀏覽器能觸及的任何內容,包括 Cookie 和已儲存的工作階段。
- 謹慎選擇造訪的網站。 頁面可能回傳旨在操控代理程式的內容(提示注入)。請停留在您控制或信任的網站。
- 只啟用您需要的工具模組。 預設的
basic預設集已包含evaluate_script;--tool-preset slim會將其移除。較高的預設集,例如--tool-preset developer(除錯、網路、主控台、效能分析器)和--tool-preset mozilla(特殊權限內容),會進一步擴展代理程式的能力。
請參閱 SECURITY.md 以了解風險的完整說明以及如何回報漏洞。
需求
- Node.js ≥ 20.19.0
- 已安裝 Firefox 100+(自動偵測,或傳入
--firefox-path)
安裝並與 Claude Code 或 Codex 搭配使用(npx)
建議:使用 npx,以便執行 npm 上最新發佈的版本。
選項 A — CLI
Claude Code
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via args
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Or via environment variables
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true
Codex
codex mcp add firefox-devtools -- npx @mozilla/firefox-devtools-mcp@latest
# Headless + viewport via args
codex mcp add firefox-devtools -- \
npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# Or via environment variables
codex mcp add firefox-devtools \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true \
-- npx @mozilla/firefox-devtools-mcp@latest
選項 B — 編輯設定檔
Claude Code
新增至 Claude Code 的 mcp_settings.json:
{
"mcpServers": {
"firefox-devtools": {
"command": "npx",
"args": ["-y", "@mozilla/firefox-devtools-mcp@latest", "--headless", "--viewport", "1280x720"],
"env": {
"START_URL": "about:blank"
}
}
}
}
Codex
新增至 ~/.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"
選項 C — 輔助指令碼(本機開發建置)
npm run setup
# Choose Claude Code; the script saves JSON to the right path
使用 MCP Inspector 試用
npx @modelcontextprotocol/inspector npx @mozilla/firefox-devtools-mcp@latest --start-url https://example.com --headless
然後呼叫類似以下的工具:
list_pages、select_page、navigate_pagetake_snapshot,然後click_by_uid/fill_by_uidlist_network_requests(持續擷取)、get_network_requestlist_downloads(持續擷取)、set_download_behaviorscreenshot_page、list_console_messages
CLI 選項
您可以傳入旗標或環境變數(右側為名稱):
--firefox-path— Firefox 二進位檔的絕對路徑--headless— 在沒有 UI 的情況下執行(FIREFOX_HEADLESS=true)--viewport 1280x720— 初始視窗大小--profile-path— 使用特定的 Firefox 設定檔。Firefox 會在該路徑的firefox_devtools_mcp_profile子資料夾中執行,並以.firefox-devtools-mcp檔案標記;將--profile-path指向已標記的設定檔會直接重複使用它--firefox-arg— 額外的 Firefox 引數(可重複)--start-url— 啟動時開啟此 URL(START_URL)--accept-insecure-certs— 忽略 TLS 錯誤(ACCEPT_INSECURE_CERTS=true)--connect-existing— 附加到已在執行的 Firefox,而不是啟動新的(CONNECT_EXISTING=true)--marionette-port— 連線現有模式的 Marionette 連接埠,預設為 2828(MARIONETTE_PORT)--pref name=value— 透過moz:firefoxOptions在啟動時設定 Firefox 偏好設定(可重複)--tool-preset— 選擇要啟用的工具模組:slim、basic(預設)、developer、mozilla或all。請參閱工具模組與預設集。(TOOL_PRESET)--tools— 要啟用的工具模組明確清單,完全覆蓋--tool-preset(例如--tools pages network script)。請參閱工具模組與預設集。--enable-script— 已棄用,請使用--tool-preset developer或--tools ... script debugging。 選擇developer工具預設集。(ENABLE_SCRIPT=true)--enable-privileged-context— 已棄用,請使用--tool-preset mozilla或--tools ... privileged prefs。 選擇mozilla工具預設集。需要MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1(ENABLE_PRIVILEGED_CONTEXT=true)--android-device— 啟用 Firefox for Android 模式;值為 ADB 裝置序號(例如emulator-5554)。執行adb devices以列出已連線的裝置。省略值或使用auto自動選擇唯一連線的裝置。--android-wipe-app-data— 確認 Android 模式會清除目標應用程式的所有資料。必須與--android-device一起使用。(ANDROID_WIPE_APP_DATA=true)--android-package— Android 應用程式套件名稱,預設為org.mozilla.firefox。其他套件:org.mozilla.firefox_beta用於 Firefox Beta、org.mozilla.fenix用於 Firefox Nightly、org.mozilla.fenix.debug用於 Firefox Nightly Debug、org.mozilla.geckoview_example用於 geckoview(ANDROID_PACKAGE)--unrestricted-save-paths— 讓saveTo參數寫入磁碟上的任何位置,而不是預設根目錄。請參閱將大量輸出儲存到磁碟以及 SECURITY.md 中的安全性說明。(UNRESTRICTED_SAVE_PATHS=true)--log-file— 將 MCP 伺服器日誌寫入檔案,而不是 stderr。對於隱藏伺服器輸出的 MCP 用戶端進行除錯工作階段很有用。設定DEBUG=*以同時包含詳細的除錯日誌。範例:--log-file /tmp/firefox-mcp.log
工具模組與預設集
工具會分組為模組。您可以透過具名預設集(--tool-preset)或明確清單(--tools)選擇要公開的模組。當兩者都提供時,--tools 優先,預設集會被忽略。
預設集(每個都是前一個的超集):
slim— 瀏覽頁面並與之互動的最低需求basic(預設)— 新增一般瀏覽工具developer— 新增網頁開發者工具mozilla— 新增 Firefox 開發者工具all— 所有模組
請參閱 docs/tools.md 以了解模組清單以及每個預設集中的模組。
請注意,basic(預設)包含 script,因此也包含 evaluate_script 工具。請參閱 SECURITY.md 以了解這對攻擊面意味著什麼,並使用 --tool-preset slim 或明確的 --tools 清單將其移除。
# Use the developer preset (adds network, console, debugging and profiler tools)
npx @mozilla/firefox-devtools-mcp --tool-preset developer
# Enable only the modules you need
npx @mozilla/firefox-devtools-mcp --tools pages network console
prefs 和 privileged 模組需要 MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1,且僅在 Mozilla 內部建置中可用。launch 模組也需要 Mozilla 內部建置:它會在呼叫者選擇的二進位檔、設定檔、環境和偏好設定組合下重新啟動 Firefox,這是操作者應掌控的設定變更。請改用 --pref、--firefox-path 及其他命令列選項。bidi 模組也需要 Mozilla 內部建置:它會傳送任何 WebDriver BiDi 命令,因此可以存取其他模組公開的內容。公開套件即使被要求也會跳過這些模組,並記錄警告,說明它捨棄了哪些模組。
實用的偏好設定(--pref)
- remote.prefs.recommended=false。當 Firefox 在自動化環境中執行時,它會套用RecommendedPreferences 來修改瀏覽器行為以利測試。將 remote.prefs.recommended 設為 false 可跳過這些設定,獲得更接近一般 Firefox 執行個體的設定。
- remote.log.level=Trace。在 Firefox 中啟用詳細的 WebDriver 通訊協定日誌。MCP 伺服器會自動將相符的日誌層級傳遞給 geckodriver,讓兩端以相同的詳細程度記錄。
- app.update.disabledForTesting=false。允許 Firefox 自動下載並套用更新。請注意,更新可能會中斷您的工作階段。同時需要設定 remote.prefs.recommended=false。
Firefox for Android
使用 --android-device 自動化在 Android 裝置上執行的 Firefox。需要在 PATH 中有 adb 以及 geckodriver(會自動管理)。
警告: Android 模式會在每次工作階段前清除目標應用程式的所有資料。 分頁、歷史記錄、書籤、密碼、Cookie 和設定都會遺失。geckodriver 在建立工作階段時會執行
adb shell pm clear <package>,且無法跳過,然後在其自己的臨時設定檔上執行工作階段,該設定檔之後會被刪除。 因此,--android-device需要--android-wipe-app-data,而且您應該 安裝專用於自動化的建置版本,而不是自動化您日常使用的瀏覽器。 Bug 2064088 追蹤在 geckodriver 中新增選項以保留現有應用程式資料的進度。
# List connected devices
adb devices
# Launch Firefox for Android on the single connected device
npx @mozilla/firefox-devtools-mcp --android-device auto --android-wipe-app-data
# Target a specific device
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-wipe-app-data
# Use Firefox Nightly instead
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-package org.mozilla.fenix --android-wipe-app-data
主機與裝置之間的連接埠轉送由 geckodriver 自動處理。
連線到現有的 Firefox
使用 --connect-existing 自動化您的真實瀏覽工作階段,保留 Cookie、登入資訊和開啟的分頁:
# Start Firefox with Marionette and the Remote Agent (BiDi)
firefox --marionette --remote-debugging-port
# Run the MCP server
npx @mozilla/firefox-devtools-mcp --connect-existing --marionette-port 2828
兩個旗標都是必要的,因為 MCP 同時使用 WebDriver Classic(--marionette)和 WebDriver BiDi(--remote-debugging-port)。如果 Firefox 僅以 --marionette 啟動,MCP 伺服器將無法連線,並要求您以兩個旗標重新啟動 Firefox。
警告: 在一般瀏覽期間不要保持啟用 Marionette。它會設定
navigator.webdriver = true並變更其他瀏覽器指紋訊號, 這可能會在受 Cloudflare、Akamai 等保護的網站上觸發機器人偵測。 只有在需要 MCP 自動化時才啟用 Marionette,然後正常重新啟動 Firefox。
工具總覽
請參閱 docs/tools.md 以了解按模組分類的完整工具清單,包含說明和參數(從原始碼產生)。
將大量輸出儲存到磁碟
大型工具輸出可能會在 Claude Code 等 CLI 用戶端中消耗大量內容。多個工具接受選用的 saveTo 參數,將結果寫入檔案,而不是內嵌回傳。請參閱 docs/tools.md 以了解清單。
saveTo 接受三種形式之一:
- 檔案路徑(相對於目前工作目錄,或
~/.firefox-devtools-mcp/output內的絕對路徑;會建立父目錄)。到達 Firefox 設定檔或此伺服器回讀的檔案路徑會被拒絕 - 現有目錄(會在內部產生帶時間戳記的檔案)
true(會在~/.firefox-devtools-mcp/output/下產生帶時間戳記的檔案)
回應會回傳路徑和位元組大小。儲存的檔案永遠包含完整、未截斷的資料:內嵌大小保護(主控台訊息上限、網路標頭截斷、快照行數上限)永遠不適用於它。
產生文字的工具也接受 preview,即儲存輸出的字元數,以簡短摘錄的形式內嵌回顯。docs/tools.md 中的清單顯示哪些工具支援此功能。
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 })
預設情況下,儲存路徑受到限制:相對路徑會相對於目前工作目錄解析,絕對路徑僅允許在 ~/.firefox-devtools-mcp 內。逸出這些位置的路徑會被拒絕。使用 --unrestricted-save-paths 啟動伺服器以寫入任意位置,包括該目錄之外的絕對路徑。
儲存的檔案之後可以例如使用 Claude Code 的 Read 工具檢視,而不會影響內容大小。
本機開發
npm install
npm run build
# Run with Inspector against local build
npx @modelcontextprotocol/inspector node dist/index.js --headless --viewport 1280x720
# Or run in dev with hot reload
npm run inspector:dev
請參閱 CONTRIBUTING.md 以了解本機開發、測試和 CI 的更多詳細資訊。
疑難排解
- 找不到 Firefox:請傳入
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox"(macOS)或您作業系統上的正確路徑。 - 首次執行較慢:Selenium 會建立 BiDi 工作階段;後續執行會較快。
- 過期的 UID:UID 在其元素被移除或頁面導覽前皆有效;當 UID 工具回報某個 UID 已不存在時,請擷取新的快照(
take_snapshot)。 - Windows 10:在探索 MCP 伺服器 'firefox-devtools' 時發生錯誤:MCP 錯誤 -32000:連線已關閉
-
解決方案 1 使用
cmd /c包裝(詳細資訊):"mcpServers": { "firefox-devtools": { "command": "cmd", "args": ["/c", "npx", "-y", "@mozilla/firefox-devtools-mcp@latest"] } } -
解決方案 2 使用
npx的絕對路徑(調整副檔名 —.cmd、.bat、.exe或.ps1— 以符合您的設定):"mcpServers": { "firefox-devtools": { "command": "C:\\nvm4w\\nodejs\\npx.ps1", "args": ["-y", "@mozilla/firefox-devtools-mcp@latest"] } }
-
版本
- 1.0 之前的 API:版本從
0.x開始。使用 npx 搭配@latest以取得最新版本。
貢獻
請參閱 CONTRIBUTING.md 了解如何回報問題、執行測試以及在本地開發此專案。
作者
由 Mozilla 維護。
授權
可依您的選擇,在 MIT 或 Apache 2.0 任一授權條款下使用。