
Firefox DevTools 用 Model Context Protocol サーバー - Remote Debugging Protocol を介して AI アシスタントが Firefox ブラウザを検査・制御できるようにします
WebDriver BiDi (Selenium WebDriver 経由) で Firefox を自動化するための Model Context Protocol サーバーです。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 サーバーには本質的なリスクが伴います。重要なプラクティスをいくつか示します:
--tool-preset developer (script、debugging) や --tool-preset mozilla (privileged context) のような上位のプリセットは、エージェントが実行できることを大幅に拡張します。リスクの完全な内訳と脆弱性の報告方法については、SECURITY.md を参照してください。
--firefox-path を指定します)推奨: npx を使用すると、npm から公開されている最新バージョンを常に実行できます。
オプション A — Claude Code CLI
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
オプション B — Claude Code 設定 JSON を編集
Claude Code の設定ファイルに追加します:
~/Library/Application Support/Claude/Code/mcp_settings.json~/.config/claude/code/mcp_settings.json%APPDATA%\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"
}
}
}
}
オプション C — ヘルパースクリプト (ローカル開発ビルド)
npm run setup
# Choose Claude Code; the script saves JSON to the right path
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フラグまたは環境変数 (右側の名前) を渡すことができます:
--firefox-path — Firefox バイナリの絶対パス--headless — UI なしで実行 (FIREFOX_HEADLESS=true)--viewport 1280x720 — 初期ウィンドウサイズ--profile-path — 特定の Firefox プロファイルを使用--firefox-arg — 追加の Firefox 引数 (繰り返し指定可能)--start-url — 起動時にこの URL を開く (START_URL)--accept-insecure-certs — TLS エラーを無視 (ACCEPT_INSECURE_CERTS=true)--connect-existing — 新しい Firefox を起動する代わりに、既に実行中の Firefox に接続 (CONNECT_EXISTING=true)--marionette-port — connect-existing モード用の Marionette ポート。デフォルトは 2828 ()ツールはモジュールにグループ化されています。公開するモジュールは、名前付きプリセット (--tool-preset) か明示的なリスト (--tools) のどちらかで選択します。両方が指定された場合は --tools が優先され、プリセットは無視されます。
モジュール: pages、snapshot、input、network、console、screenshot、utilities、management、webextension、profiler、screencast、script、debugging、prefs、privileged。
プリセット (それぞれが前のプリセットのスーパーセット):
slim — pages、snapshot、input、network、consolebasic (デフォルト) — slim に加えて screenshot、utilities、management、webextension、profiler、screencastdeveloper — basic に加えて 、# Use the developer preset (adds script and debugging 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 内部ビルドでのみ利用できます。公開パッケージでは、要求された場合でもこれらは静かにスキップされます。
--pref)--android-device を使用すると、Android デバイス上で実行されている Firefox を自動化できます。PATH に adb が必要です。geckodriver は自動的に管理されます。
# List connected devices
adb devices
# Launch Firefox for Android on the single connected device
npx @mozilla/firefox-devtools-mcp --android-device auto
# Target a specific device
npx @mozilla/firefox-devtools-mcp --android-device <serial>
# Use Firefox Nightly instead
npx @mozilla/firefox-devtools-mcp --android-device <serial> --android-package org.mozilla.fenix
ホストとデバイス間のポートフォワーディングは、geckodriver によって自動的に処理されます。
--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 などで保護されたサイトでボット検出がトリガーされる可能性があります。Marionette は MCP 自動化が必要なときだけ有効にし、その後は Firefox を通常どおり再起動してください。
saveTo をサポート)saveTo をサポート)saveTo をサポート)
=======6873767 (Bug 2055949 - [firefox-devtools-mcp] expose download events to firefox devtools mcp)
saveTo 付き)saveTo 付き)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 が必要)MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 が必要)大きなツール出力は、Claude Code のような CLI クライアントで大量のコンテキストを消費する可能性があります。screenshot_page、screenshot_by_uid、take_snapshot、list_console_messages、list_network_requests、get_network_request、evaluate_script、evaluate_privileged_script ツールは、結果をインラインで返す代わりにファイルに書き込むオプションの saveTo パラメータを受け入れます。saveTo は次の 3 つの形式のいずれかを取ります:
~/.firefox-devtools-mcp 内の絶対パス。親ディレクトリは作成されます)true (~/.firefox-devtools-mcp/output/ の下にタイムスタンプ付きのファイルが生成されます)レスポンスはパスとバイトサイズを返します。保存されたファイルは常に完全で切り詰められていないデータを保持します。インラインのサイズ保護 (コンソールメッセージの上限、ネットワークヘッダーの切り詰め、スナップショットの行数上限) はファイルには適用されません。
テキストを生成するツール (スクリーンショット以外のすべて) は、保存された出力のうち、短い抜粋としてインラインでエコーバックする文字数を指定する preview も受け入れます。スクリーンショットにはプレビューはありません。
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
ローカル開発、テスト、CI の詳細については、CONTRIBUTING.md を参照してください。
--firefox-path "/Applications/Firefox.app/Contents/MacOS/firefox" (macOS) またはお使いの OS の正しいパスを指定してください。take_snapshot) を取得してください。解決策 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"]
}
}
0.x から始まります。最新リリースには npx で @latest を使用してください。問題の報告方法、テストの実行方法、プロジェクトへのローカルでの貢献方法については、CONTRIBUTING.md を参照してください。
Mozilla によってメンテナンスされています。
MIT または Apache 2.0 のいずれかを選択してライセンス供与されます。
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-package — Android アプリのパッケージ名。デフォルトは org.mozilla.firefox。その他のパッケージ: Firefox Beta は org.mozilla.firefox_beta、Firefox Nightly は org.mozilla.fenix、Firefox Nightly Debug は org.mozilla.fenix.debug、geckoview は org.mozilla.geckoview_example (ANDROID_PACKAGE)--log-file — MCP サーバーのログを stderr の代わりにファイルに書き込みます。サーバー出力を隠す MCP クライアントでのデバッグセッションに便利です。詳細なデバッグログも含めるには DEBUG=* を設定します。例: --log-file /tmp/firefox-mcp.logscriptdebuggingmozilla — developer に加えて prefs、privilegedall — すべてのモジュール