firefox-devtools-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| START_URL | No | Open this URL on start | |
| FIREFOX_HEADLESS | No | Run without UI | |
| ACCEPT_INSECURE_CERTS | No | Ignore TLS errors |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_pagesA | List open tabs (index, title, URL). Selected tab is marked. |
| new_pageB | Open new tab at URL. Returns tab index. |
| navigate_pageB | Navigate selected tab to URL. |
| select_pageA | Select active tab by index, URL, or title. Index takes precedence. |
| close_pageA | Close tab by index. |
| get_page_textA | Get the visible text of the page (document.body.innerText). Caps at maxLength (default 20000 chars); saveTo saves the full text to a file. |
| take_snapshotA | Capture DOM snapshot with stable UIDs. A UID stays valid across snapshots until its element is removed or the page navigates. Output caps at maxLines (default 100); scope with selector or dump the full tree with saveTo. |
| resolve_uid_to_selectorA | Resolve UID to CSS selector. Fails if the element is gone. |
| clear_snapshotC | Clear snapshot UIDs. 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. |
| press_keyA | Press a single key, optionally with modifiers, to submit, dismiss, navigate or trigger a shortcut. Not for entering text: use fill_by_uid instead. |
| type_textA | Type text key by key into the focused element, optionally followed by a key such as Enter. Use fill_by_uid to set the value of a known input; use this for elements that only react to real typing, such as autocomplete fields and rich text editors. |
| screenshot_pageB | Capture viewport screenshot as base64 PNG. Set fullPage for the whole scrollable document. |
| 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 to a destination folder), 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. |
| close_firefox_sessionA | Ends the browser session. If the server connected to your existing Firefox, this releases the connection and leaves Firefox running. If the server started Firefox itself, this closes it. Call this when the browser task is complete and no further browser interaction is expected. |
| 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 | Run a JS function in the page and return its result. Prefer this for targeted reads (a value, text, computed style, whether an element exists) instead of a full take_snapshot. Use the UID interaction tools for clicking, typing, and filling. |
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 34 tools
Most tools target distinct actions (click, hover, fill, drag, screenshot, dialogs), and descriptions clearly separate page-level vs element-level operations. Minor ambiguity exists between fill_form_by_uid and fill_by_uid, and among get_page_text, take_snapshot, and evaluate_script, but their descriptions provide adequate guidance.
Tool names consistently follow a snake_case verb_noun pattern (e.g., list_pages, close_page, install_extension, screencast_start). Even paired and related tools use the same convention, making the naming predictable and scannable.
At 34 tools, the set is large and heavier than ideal for an MCP server, requiring agents to manage a substantial tool list. However, the tools are organized around distinct browser automation concerns and most serve a clear purpose, so the count feels like justified comprehensiveness rather than duplication.
The tool surface covers tab lifecycle, navigation, DOM interaction, screenshots, downloads, dialogs, extensions, screencasting, and session management. The main gap is that uninstall_extension references list_extensions, but no list_extensions tool is exposed; network and console inspection tools are also absent, but core browser automation workflows are well covered.