Firefox DevTools MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEBUG | No | Set to '*' to include verbose debug logs. | |
| START_URL | No | Open this URL on start. | |
| TOOL_PRESET | No | Select which tool modules to enable: slim, basic (default), developer, mozilla, or all. | basic |
| ENABLE_SCRIPT | No | Deprecated, use --tool-preset developer or --tools ... script debugging. Selects the developer tool preset. Set to 'true' to enable. | |
| ANDROID_PACKAGE | No | Android app package name. Default org.mozilla.firefox. Other packages: org.mozilla.firefox_beta for Firefox Beta, org.mozilla.fenix for Firefox Nightly, org.mozilla.fenix.debug for Firefox Nightly Debug, org.mozilla.geckoview_example for geckoview. | org.mozilla.firefox |
| MARIONETTE_PORT | No | Marionette port for connect-existing mode, default 2828. | 2828 |
| CONNECT_EXISTING | No | Attach to an already-running Firefox instead of launching a new one. Set to 'true' to enable. | |
| FIREFOX_HEADLESS | No | Run without UI (headless mode). Set to 'true' to enable. | |
| ACCEPT_INSECURE_CERTS | No | Ignore TLS errors. Set to 'true' to enable. | |
| ENABLE_PRIVILEGED_CONTEXT | No | Deprecated, use --tool-preset mozilla or --tools ... privileged prefs. Selects the mozilla tool preset. Requires MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1. Set to 'true' to enable. | |
| MOZ_REMOTE_ALLOW_SYSTEM_ACCESS | No | Required for privileged context and prefs modules. Set to '1' to enable. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_pagesA | List open tabs (index, title, URL). Selected tab is marked. |
| new_pageA | Open new tab at URL. Returns tab index. |
| navigate_pageA | Navigate selected tab to URL. |
| select_pageA | Select active tab by index, URL, or title. Index takes precedence. |
| close_pageA | Close tab by index. |
| take_snapshotA | Capture DOM snapshot with stable UIDs. Retake after navigation. |
| resolve_uid_to_selectorA | Resolve UID to CSS selector. Fails if stale. |
| clear_snapshotA | Clear snapshot cache. Usually not needed. |
| click_by_uidA | Click element by UID. Set dblClick for double-click. |
| hover_by_uidB | Hover over element by UID. |
| fill_by_uidB | Fill text input/textarea by UID. |
| drag_by_uid_to_uidB | Drag element to another (HTML5 drag events). |
| fill_form_by_uidA | Fill multiple form fields at once. |
| upload_file_by_uidB | Upload file to file input by UID. |
| screenshot_pageA | Capture page screenshot as base64 PNG. |
| screenshot_by_uidA | Capture element screenshot by UID as base64 PNG. |
| list_downloadsA | List downloads tracked since startup, including status and saved file path. |
| clear_downloadsA | Clear the tracked downloads buffer. |
| set_download_behaviorA | Control how downloads are handled: allow (save silently to the default download directory), deny (cancel), or reset to default. Avoids the native save-file dialog. Requires a recent Firefox. |
| accept_dialogA | Accept browser dialog. Provide promptText for prompts. |
| dismiss_dialogA | Dismiss browser dialog. |
| navigate_historyA | Navigate history back/forward. UIDs become stale. |
| set_viewport_sizeA | Set viewport dimensions in pixels. |
| get_firefox_outputA | Retrieve Firefox output (stdout/stderr including MOZ_LOG, warnings, crashes, stack traces). Returns recent output from the capture file. Use filters to focus on specific content. |
| get_firefox_infoA | Get information about the current Firefox instance configuration, including binary path, environment variables, and output file location. |
| restart_firefoxA | Restart Firefox with different configuration. Allows changing binary path, environment variables, and other options. All current tabs will be closed. |
| install_extensionA | Install a Firefox extension using WebDriver BiDi webExtension.install command. Supports installing from archive (.xpi/.zip), base64-encoded data, or unpacked directory. |
| uninstall_extensionA | Uninstall a Firefox extension using WebDriver BiDi webExtension.uninstall command. Requires the extension ID returned by install_extension or obtained from list_extensions. |
| screencast_startA | Start recording a screencast (video) of the current page viewport, saving the output to a file in the downloads directory. Returns a screencast id to pass to screencast_stop. Multiple recordings can run at once. |
| screencast_stopA | Stop an in-progress screencast recording started with screencast_start and finalize the video file. Returns the path to the saved file. |
| evaluate_scriptA | Execute JS function in page. Prefer UID tools for interactions. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 31 tools
Most tools target distinct resource+action pairs (navigate, close, list, select, click, hover, fill, drag, upload, etc.). A few near-overlaps exist, such as get_firefox_info vs get_firefox_output and screenshot_page vs screencast_start, but their descriptions clarify the difference.
The dominant pattern is verb_noun, often with a by_uid suffix for element interactions (click_by_uid, hover_by_uid, etc.). Minor inconsistencies include list_pages vs new_page (plural vs singular) and the longer resolve_uid_to_selector, but the overall convention is clear.
At 31 tools, this exceeds the 25+ threshold for a heavy tool set. While many tools cover distinct features, several are auxiliary helpers (clear_snapshot, resolve_uid_to_selector, get_firefox_info) that could potentially be merged or removed without losing core functionality.
The tool surface covers a broad range of browser automation needs: page lifecycle, element interaction, snapshots, screenshots, downloads, dialogs, history, viewport control, extensions, screencasts, and script execution. Minor gaps exist (no explicit wait/condition, no direct text extraction, no iframe handling), but agents can generally work around them.