Releases: mozilla/firefox-devtools-mcp
Releases · mozilla/firefox-devtools-mcp
0.9.2
Added
evaluate_privileged_scriptnow detectsconst/let/varstatements and rejects them with a helpful error message suggesting IIFE workaround- BiDi console and network events now degrade gracefully when Firefox Remote Agent is not running, instead of crashing
- Comprehensive e2e scenario integration tests covering the full
FirefoxClientAPI - Unit tests for privileged context state consistency and statement detection
- Testing documentation (
docs/testing.md)
Fixed
- Privileged context state not preserved across tool calls:
set_firefox_prefsandlist_extensionsno longer silently revert a privileged context selection - Session cleanup on connection failure:
getFirefox()now closes the failed instance to prevent zombie geckodriver processes and Marionette session locks
Changed
- Breaking: Removed
--marionette-hostCLI parameter (connect-existing mode now uses localhost only) - Rewrote connect-existing mode to use Selenium's native
--connect-existingfeature viaServiceBuilder, replacing the customGeckodriverHttpDriverHTTP client (~530 lines removed) - Replaced custom
IDriver/IElement/IBiDiinterfaces with nativeWebDriver/WebElementfrom selenium-webdriver - Improved error messages for BiDi-dependent features (console/network) to suggest
--remote-debugging-port - Pinned all dependency versions for build reproducibility
- Updated dependencies:
@modelcontextprotocol/sdk1.29.0,tsup8.5.0,tsx4.21.0,typescript-eslint8.58.0
Full Changelog: 0.9.1...0.9.2
0.9.1
What's Changed
Bug Fixes
- Fixed
SERVER_VERSIONreporting0.7.1instead of actual package version — now reads frompackage.jsondynamically - Fixed connect-existing mode: session cleanup, BiDi support,
--marionette-hostparameter (#50) - Fixed lint/type errors from PR #50 merge
- Resolved 11 security vulnerabilities in dependencies (#47)
Improvements
- Removed fragile
process.onhandlers in test setup that masked real errors and causedMaxListenersExceededWarning - Added unit tests for connect-existing mode (BiDi, session cleanup, reconnect)
Contributors
Full Changelog: 0.9.0...0.9.1
0.9.0
What's Changed
New Features
- Content script evaluation — evaluate JS against web pages (
--enable-scriptflag) - Privileged context support — chrome-privileged context for Firefox internal development (
--enable-privileged-contextflag) - WebExtension tools — install, uninstall, and list Firefox extensions
- Firefox restart tool — restart Firefox with new config at runtime (preserves profile path)
- Preferences configuration — read/write Firefox prefs via CLI (
--pref name=value) and runtime tools (set_firefox_prefs,get_firefox_prefs) - Environment variables & output capture —
--envand--output-fileCLI flags - WebDriver BiDi commands — direct support for sending BiDi commands
- MOZ_LOG support — Firefox logging integration
Fixes
- Use native
--profilearg for reliable profile loading - Wait for WebSocket ready before sending BiDi commands
- Fix pref tools failing when env var passed via
--env - Handle disconnected Firefox gracefully in
restart_firefox - Don't kill unrelated Firefox processes on test cleanup
Breaking Changes
- Script evaluation and privileged context are now opt-in via
--enable-scriptand--enable-privileged-contextflags - Removed non-English documentation files
Contributors
Full Changelog: 0.8.1...0.9.0
0.8.1
What's Changed
Fixes
- Fixed flaky snapshot integration test on Node 22 CI runners (increased Firefox startup timeout from 30s to 60s)
- Upgraded all GitHub Actions from v4 to v5 (checkout, setup-node) and upload-artifact to v7 to resolve Node.js 20 deprecation warnings
- Publish workflow now uses Node.js 22
Full Changelog: 0.8.0...0.8.1
0.8.0
What's Changed
New Feature: Connect to existing Firefox (--connect-existing)
You can now attach to an already-running Firefox instance instead of launching a new one. This enables automating your existing browsing session — with cookies, logins, and open tabs intact.
Usage
# Start Firefox with Marionette enabled
firefox --marionette
# Run the MCP server
npx firefox-devtools-mcp --connect-existing --marionette-port 2828Also supports environment variables: CONNECT_EXISTING=true MARIONETTE_PORT=2828
How it works
- Introduces
GeckodriverHttpDriver— a thin HTTP client that talks to geckodriver's WebDriver REST API directly, bypassing selenium-webdriver's BiDi auto-upgrade (which hangs in connect-existing mode) - Adds
IDriver/IElementinterfaces for compile-time safety across all consumers - BiDi-dependent features (console events, network events) are gracefully skipped in connect-existing mode; all other features work (snapshots, clicks, navigation, screenshots, tab management)
- On close/reset, only the geckodriver process is killed — the user's Firefox stays open
Contributors
- feat: add --connect-existing mode to attach to running Firefox by @rdeknijf-ewx in #44
Full Changelog: 0.7.4...0.8.0
0.7.4
0.7.3
What's Changed
- docs: Document solutions for Windows MCP server errors by @EzioMercer in #41
New Contributors
- @EzioMercer made their first contribution in #41
Full Changelog: 0.7.1...0.7.3