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

npm version CI codecov License: MIT License: Apache 2.0

Glama

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_page
  • take_snapshot,然後 click_by_uid / fill_by_uid
  • list_network_requests(持續擷取)、get_network_request
  • list_downloads(持續擷取)、set_download_behavior
  • screenshot_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 任一授權條款下使用。