用于 Firefox DevTools 的 Model Context Protocol 服务器 - 使 AI 助手能够通过 WebDriver BiDi 检查和操控 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 服务器存在固有风险。几个关键实践:
basic 预设已包含 evaluate_script;--tool-preset slim 会移除它。更高的预设如 --tool-preset developer(调试、网络、控制台、性能分析器)和 --tool-preset mozilla(特权上下文)会进一步扩展代理可执行的操作。有关风险及如何报告漏洞的完整说明,请参阅 SECURITY.md。
--firefox-path 指定)推荐:使用 npx,以便运行 npm 上发布的最新版本。
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest
# 通过参数使用无头模式 + 视口
claude mcp add firefox-devtools npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# 或通过环境变量
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
# 通过参数使用无头模式 + 视口
codex mcp add firefox-devtools -- \
npx @mozilla/firefox-devtools-mcp@latest -- --headless --viewport 1280x720
# 或通过环境变量
codex mcp add firefox-devtools \
--env START_URL=https://example.com \
--env FIREFOX_HEADLESS=true \
-- npx @mozilla/firefox-devtools-mcp@latest
添加到 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/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
# 选择 Claude Code;脚本会将 JSON 保存到正确的路径
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 — 无界面运行(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 而非启动新实例(CONNECT_EXISTING=true)--marionette-port — connect-existing 模式下的 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。其他包: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)--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 优先,预设被忽略。
模块:pages、snapshot、input、network、console、screenshot、downloads、utilities、management、webextension、profiler、screencast、script、debugging、prefs、privileged。
预设(每个都是前一个的超集):
slim — pages、snapshot、input、screenshotbasic(默认)— slim 加上 downloads、script、utilities、management、webextension、screencastdeveloper — basic 加上 debugging、network、console、profilermozilla — developer 加上 prefs、privilegedall — 所有模块请注意,默认的 basic 包含 script,因此也包含 evaluate_script 工具。有关这对攻击面的影响,请参阅 SECURITY.md,并使用 --tool-preset slim 或显式的 --tools 列表将其移除。
# 使用 developer 预设(添加网络、控制台、调试和性能分析器工具)
npx @mozilla/firefox-devtools-mcp --tool-preset developer
# 仅启用你需要的模块
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(自动管理)。
警告: Android 模式会在每次会话前清除目标应用的所有数据。 标签页、历史记录、书签、密码、Cookie 和设置都会丢失。geckodriver 在创建会话时 会运行
adb shell pm clear <package>,且无法跳过,然后在自己的临时配置文件上 运行会话,该配置文件之后会被删除。因此,--android-device需要--android-wipe-app-data,并且你应该安装专用于自动化的构建版本,而不是自动化 你日常使用的浏览器。Bug 2064088 跟踪为 geckodriver 添加保留现有应用数据的选项。
# 列出已连接的设备
adb devices
# 在唯一连接的设备上启动 Firefox for Android
npx @mozilla/firefox-devtools-mcp --android-device auto --android-wipe-app-data