Firefox DevTools MCP
NPM · @MOZILLA/FIREFOX-DEVTOOLS-MCP · SCANNED SEP 24
Control and debug Firefox: navigate, fill forms, inspect network and console, profile.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 47 of 143 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to mozilla/firefox-devtools-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT OR Apache-2.0).Pass
- Actively maintained (last published 1 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability80
- AI-judged instruction clarity (excellent).Pass
- Tool/resource definitions use about 4551 tokens (~94/item across 48 items; 48 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "uninstall_extension" implies "uninstall" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 49 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the Firefox DevTools MCP server?
Firefox DevTools MCP runs locally as an npm package, launched with npx -y @mozilla/firefox-devtools-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · @mozilla/firefox-devtools-mcp
claude mcp add mozilla-firefox-devtools-mcp -- npx -y @mozilla/firefox-devtools-mcp
{
"mcpServers": {
"mozilla-firefox-devtools-mcp": {
"command": "npx",
"args": [
"-y",
"@mozilla/firefox-devtools-mcp"
]
}
}
} {
"servers": {
"mozilla-firefox-devtools-mcp": {
"command": "npx",
"args": [
"-y",
"@mozilla/firefox-devtools-mcp"
]
}
}
} codex mcp add mozilla-firefox-devtools-mcp -- npx -y @mozilla/firefox-devtools-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"mozilla-firefox-devtools-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@mozilla/firefox-devtools-mcp"
],
"enabled": true
}
}
} openclaw mcp add mozilla-firefox-devtools-mcp --command npx --arg -y --arg @mozilla/firefox-devtools-mcp
mcp_servers:
mozilla-firefox-devtools-mcp:
command: "npx"
args: ["-y", "@mozilla/firefox-devtools-mcp"] {
"McpServers": {
"mozilla-firefox-devtools-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@mozilla/firefox-devtools-mcp"
]
}
}
} assistant mcp add mozilla-firefox-devtools-mcp -t stdio -c npx -a -y @mozilla/firefox-devtools-mcp
{
"mcpServers": {
"mozilla-firefox-devtools-mcp": {
"command": "npx",
"args": [
"-y",
"@mozilla/firefox-devtools-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 22 Sept 26 80
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Sept 2026 · Analysed npm/@mozilla/firefox-devtools-mcp@0.10.4
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | mozilla/firefox-devtools-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/mozilla/firefox-devtools-mcp/.github/workflows/publish.yml@refs/tags/v0.10.4 |
| Rekor log index | 2909006261 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:c65f80fb25d5c20669a7aff1f8281808bf29ca03b0be0039f1ef7799c9d8d65ed2d8df58be0201ba0aa18ae16825e853f875870c10650ef1160119150 |
Background: How many MCP packages publish verified provenance →
Dependencies 143 packages
| Packages resolved | 143 |
|---|---|
| Stale | 47 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
accept_dialog ~30
Accept browser dialog. Provide promptText for prompts.
| Name | Type | Req | Description |
|---|---|---|---|
| promptText | string | – | Text for prompt dialogs |
No output schema declared.
No examples provided.
clear_console_messages ~14
Clear collected console messages.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
clear_downloads ~15
Clear the tracked downloads buffer.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
clear_snapshot ~17
Clear snapshot UIDs. Usually not needed.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
click_by_uid ~46
Click element by UID. Set dblClick for double-click.
| Name | Type | Req | Description |
|---|---|---|---|
| dblClick | boolean | – | Double-click (default: false) |
| uid | string | yes | Element UID from snapshot |
No output schema declared.
No examples provided.
close_firefox_session ~60
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.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
close_page ~25
Close tab by index.
| Name | Type | Req | Description |
|---|---|---|---|
| pageIdx | number | yes | Tab index to close |
No output schema declared.
No examples provided.
dismiss_dialog ~13
Dismiss browser dialog.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
drag_by_uid_to_uid ~43
Drag element to another (HTML5 drag events).
| Name | Type | Req | Description |
|---|---|---|---|
| fromUid | string | yes | Source element UID |
| toUid | string | yes | Target element UID |
No output schema declared.
No examples provided.
enable_debugger ~31
Enable the JS debugger for the current page. Required before set_logpoint works. Requires Firefox 153+.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
evaluate_script ~275
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.
| Name | Type | Req | Description |
|---|---|---|---|
| args | array | – | UIDs to pass as function arguments |
| function | string | yes | JS function string, e.g. () => document.title |
| preview | number | – | Number of characters of the saved result to return inline as a preview when saveTo is used. Omit for no preview. |
| sandbox | string | – | Evaluate in an isolated sandbox realm with this name instead of the page realm. The sandbox shares the page DOM and keeps the native built-ins even where the page overrode them. Page-defined globals… |
| saveTo | boolean|string | – | Save the result to a file as JSON instead of returning it inline. Pass a file path, an existing directory (generated file inside), or true (generated file under ~/.firefox-devtools-mcp/output/). Rela… |
| timeout | number | – | Timeout in ms (default: 5000) |
No output schema declared.
No examples provided.
fill_by_uid ~39
Fill text input/textarea by UID.
| Name | Type | Req | Description |
|---|---|---|---|
| uid | string | yes | Input element UID from snapshot |
| value | string | yes | Text to fill |
No output schema declared.
No examples provided.
fill_form_by_uid ~32
Fill multiple form fields at once.
| Name | Type | Req | Description |
|---|---|---|---|
| elements | array | yes | Array of {uid, value} pairs |
No output schema declared.
No examples provided.
get_firefox_info ~31
Get information about the current Firefox instance configuration, including binary path, environment variables, and output file location.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_firefox_output ~102
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.
| Name | Type | Req | Description |
|---|---|---|---|
| grep | string | – | Filter log lines containing this string (case-insensitive) |
| lines | number | – | Number of recent log lines to return (default: 100, max: 10000) |
| since | number | – | Only show logs written in the last N seconds |
No output schema declared.
No examples provided.
get_logpoint_results ~39
Get the results collected by a logpoint since it was set.
| Name | Type | Req | Description |
|---|---|---|---|
| logpoint | string | yes | Logpoint id returned by set_logpoint. |
No output schema declared.
No examples provided.
get_network_request ~191
Get request details by ID, including the response body (and request body when present). Large text bodies are truncated inline; binary bodies are summarized. URL lookup as fallback.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Output format (default: text) |
| id | string | – | Request ID from list_network_requests |
| preview | number | – | Number of characters of the saved output to return inline as a preview when saveTo is used. Omit for no preview. |
| saveTo | boolean|string | – | Save the request details with full untruncated headers and bodies to a file as JSON instead of returning them inline (binary bodies are stored base64-encoded). Pass a file path, an existing directory… |
| url | string | – | URL fallback (may match multiple) |
No output schema declared.
No examples provided.
get_page_text ~163
Get the visible text of the page (document.body.innerText). Caps at maxLength (default 20000 chars); saveTo saves the full text to a file.
| Name | Type | Req | Description |
|---|---|---|---|
| maxLength | number | – | Max characters to return inline (default: 20000). Ignored when saveTo is used. |
| preview | number | – | Number of characters of the saved text to return inline as a preview when saveTo is used. Omit for no preview. |
| saveTo | boolean|string | – | Save the full untruncated text to a file instead of returning it inline. Pass a file path, an existing directory (generated file inside), or true (generated file under ~/.firefox-devtools-mcp/output/… |
No output schema declared.
No examples provided.
get_script_source ~46
Get the source code of a JavaScript file loaded in the page. Requires enable_debugger to have been called.
| Name | Type | Req | Description |
|---|---|---|---|
| scriptUrl | string | yes | URL of the script to retrieve. |
No output schema declared.
No examples provided.
hover_by_uid ~26
Hover over element by UID.
| Name | Type | Req | Description |
|---|---|---|---|
| uid | string | yes | Element UID from snapshot |
No output schema declared.
No examples provided.
install_extension ~137
Install a Firefox extension using WebDriver BiDi webExtension.install command. Supports installing from archive (.xpi/.zip), base64-encoded data, or unpacked directory.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | – | File path (for archivePath or path types) |
| permanent | boolean | – | Firefox-specific: Install permanently (requires signed extension). Default: false (temporary install) |
| type | string | yes | Extension data type: "archivePath" for .xpi/.zip, "base64" for encoded data, "path" for unpacked directory |
| value | string | – | Base64-encoded extension data (for base64 type) |
No output schema declared.
No examples provided.
list_console_messages ~228
List console messages, filterable by level, time, text, source. Caps at limit (default 50); saveTo saves all matches to a file.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Output format (default: text) |
| level | string | – | Filter by level |
| limit | number | – | Max messages (default: 50) |
| preview | number | – | Number of characters of the saved output to return inline as a preview when saveTo is used. Omit for no preview. |
| saveTo | boolean|string | – | Save matching messages to a file in full (untruncated) instead of returning them inline. Saves all matching messages by default; pass an explicit limit to cap how many are saved. Pass a file path, an… |
| sinceMs | number | – | Only last N ms |
| source | string | – | Filter by source |
| textContains | string | – | Text filter (case-insensitive) |
No output schema declared.
No examples provided.
list_downloads ~73
List downloads tracked since startup, including status and saved file path.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | Output format (default: text) |
| limit | number | – | Max downloads (default: 50) |
| status | string | – | Filter by status |
| urlContains | string | – | URL filter (case-insensitive) |
No output schema declared.
No examples provided.
list_network_requests ~317
List network requests, returning IDs for get_network_request. Filter by url/method/status; caps at limit (default 50); saveTo saves all matches to a file.
| Name | Type | Req | Description |
|---|---|---|---|
| detail | string | – | Detail level (default: summary) |
| format | string | – | Output format (default: text) |
| isXHR | boolean | – | XHR/fetch only |
| limit | number | – | Max requests (default: 50) |
| method | string | – | HTTP method filter |
| preview | number | – | Number of characters of the saved output to return inline as a preview when saveTo is used. Omit for no preview. |
| resourceType | string | – | Resource type filter |
| saveTo | boolean|string | – | Save matching requests to a file as JSON instead of returning them inline. Saves full untruncated headers by default; pass detail=summary or min for a lean form, or an explicit limit to cap how many… |
| sinceMs | number | – | Only last N ms |
| sortBy | string | – | Sort field (default: timestamp) |
| status | number | – | Exact status code |
| statusMax | number | – | Max status code |
| statusMin | number | – | Min status code |
| urlContains | string | – | URL filter (case-insensitive) |
No output schema declared.
No examples provided.
list_pages ~23
List open tabs (index, title, URL). Selected tab is marked.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_scripts ~28
List all JavaScript files currently loaded in the page. Requires enable_debugger to have been called.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
navigate_history ~29
Navigate history back/forward. UIDs become stale.
| Name | Type | Req | Description |
|---|---|---|---|
| direction | string | yes | back or forward |
No output schema declared.
No examples provided.
navigate_page ~104
Navigate selected tab to URL.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Target URL |
| wait | string | – | When to return: 'none' (navigation started), 'interactive' (DOMContentLoaded), 'complete' (load event fired, including subresources). Omit for the default: 'interactive' for http/https/data/blob/file… |
No output schema declared.
No examples provided.
new_page ~108
Open new tab at URL. Returns tab index.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | Target URL |
| wait | string | – | When to return: 'none' (navigation started), 'interactive' (DOMContentLoaded), 'complete' (load event fired, including subresources). Omit for the default: 'interactive' for http/https/data/blob/file… |
No output schema declared.
No examples provided.
press_key ~212
Press a single key, optionally with modifiers, to submit, dismiss, navigate or trigger a shortcut. Not for entering text: use fill_by_uid instead.
| Name | Type | Req | Description |
|---|---|---|---|
| key | string | yes | One key, optionally preceded by "+"-separated modifiers, such as "Escape", "Enter" or "ctrl+shift+t". Modifiers: ctrl, alt, shift, meta. Named keys: Enter, Return, NumpadEnter, Tab, Backspace, Delete… |
| uid | string | – | Focusable element UID from snapshot to focus before pressing (default: the already focused element) |
No output schema declared.
No examples provided.
profiler_is_active ~18
Check whether the Firefox profiler is currently recording.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
profiler_start ~191
Start the Firefox profiler. Provide either a preset name or explicit recording options (entries, interval, features, threads). Cannot combine both. Valid presets: web-developer, firefox-platform, graphics, media, ml, networking, power, debug.
| Name | Type | Req | Description |
|---|---|---|---|
| activeContext | string | – | Id of the top-level navigable to mark as the active tab in the profile. Does not restrict profiling to that tab. |
| entries | integer | – | Number of entries to keep in the sampling buffer. Required when no preset is given. |
| features | array | – | Profiler features to enable. Required when no preset is given. |
| interval | number | – | Sampling interval in milliseconds. Required when no preset is given. |
| preset | string | – | Profiler preset name. Cannot be combined with entries, interval, features, or threads. |
| threads | array | – | Thread names to profile. Required when no preset is given. |
No output schema declared.
No examples provided.
profiler_stop ~67
Stop the Firefox profiler and save the recorded profile to a file in the downloads directory. Returns the path to the saved file, or null when nothing was saved.
| Name | Type | Req | Description |
|---|---|---|---|
| discard | boolean | – | If true, stop the profiler and discard the recording instead of saving it to disk. Defaults to false. |
No output schema declared.
No examples provided.
remove_logpoint ~32
Remove a previously set logpoint.
| Name | Type | Req | Description |
|---|---|---|---|
| logpoint | string | yes | Logpoint id returned by set_logpoint. |
No output schema declared.
No examples provided.
resolve_uid_to_selector ~34
Resolve UID to CSS selector. Fails if the element is gone.
| Name | Type | Req | Description |
|---|---|---|---|
| uid | string | yes | UID from snapshot |
No output schema declared.
No examples provided.
screencast_start ~160
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.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | – | Id of the top-level browsing context to record. Defaults to the currently selected page. |
| frameRate | integer | – | Target frame rate of the recording, in frames per second. |
| height | integer | – | Height of the recorded video in pixels. Defaults to the viewport height. |
| mimeType | string | – | MIME type of the output file. Defaults to "video/webm". |
| width | integer | – | Width of the recorded video in pixels. Defaults to the viewport width. |
No output schema declared.
No examples provided.
screencast_stop ~71
Stop an in-progress screencast recording started with screencast_start and finalize the video file. Returns the path to the saved file.
| Name | Type | Req | Description |
|---|---|---|---|
| screencast | string | – | Id of the screencast to stop, as returned by screencast_start. Optional when exactly one recording is active. |
No output schema declared.
No examples provided.
screenshot_by_uid ~93
Capture element screenshot by UID as base64 PNG.
| Name | Type | Req | Description |
|---|---|---|---|
| saveTo | boolean|string | – | Save the screenshot to a file instead of returning it as image data in the response. Pass a file path, an existing directory (generated file inside), or true (generated file under ~/.firefox-devtools… |
| uid | string | yes | Element UID from snapshot |
No output schema declared.
No examples provided.
screenshot_page ~107
Capture viewport screenshot as base64 PNG. Set fullPage for the whole scrollable document.
| Name | Type | Req | Description |
|---|---|---|---|
| fullPage | boolean | – | Capture the whole scrollable document (default: false) |
| saveTo | boolean|string | – | Save the screenshot to a file instead of returning it as image data in the response. Pass a file path, an existing directory (generated file inside), or true (generated file under ~/.firefox-devtools… |
No output schema declared.
No examples provided.
select_page ~65
Select active tab by index, URL, or title. Index takes precedence.
| Name | Type | Req | Description |
|---|---|---|---|
| pageIdx | number | – | Tab index (0-based, most reliable) |
| title | string | – | Title substring (case-insensitive) |
| url | string | – | URL substring (case-insensitive) |
No output schema declared.
No examples provided.
set_download_behavior ~130
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.
| Name | Type | Req | Description |
|---|---|---|---|
| behavior | string | yes | 'allowed' saves downloads to `downloadFolder`, 'denied' cancels them, 'default' resets to the browser default |
| downloadFolder | string | – | Path to the folder where downloads should be stored, created if missing. Only used for behavior='allowed', where it defaults to ~/.firefox-devtools-mcp/output/downloads. Relative paths resolve agains… |
No output schema declared.
No examples provided.
set_logpoint ~98
Set a logpoint at a specific location. When execution reaches that line, the expression is evaluated and the result is stored without pausing. Use get_logpoint_results to retrieve collected values. Requires enable_debugger to have been called.
| Name | Type | Req | Description |
|---|---|---|---|
| expression | string | yes | JavaScript expression to evaluate each time the logpoint is hit. |
| line | number | yes | Line number (1-based). |
| url | string | yes | URL of the script. |
No output schema declared.
No examples provided.
set_network_cache ~118
Control the HTTP cache. Use behavior='bypass' so every request goes to the network — useful for performance measurement and for verifying a change that a cached asset would otherwise hide. Applies to the currently selected tab unless scope='global'. Persists until set back to 'default' or Firefox shuts down.
| Name | Type | Req | Description |
|---|---|---|---|
| behavior | string | yes | 'bypass' to skip the cache, 'default' to restore normal caching |
| scope | string | – | 'tab' (default) applies to the selected tab; 'global' applies browser-wide |
No output schema declared.
No examples provided.
set_viewport_size ~36
Set viewport dimensions in pixels.
| Name | Type | Req | Description |
|---|---|---|---|
| height | number | yes | Height in pixels |
| width | number | yes | Width in pixels |
No output schema declared.
No examples provided.
take_snapshot ~256
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.
| Name | Type | Req | Description |
|---|---|---|---|
| includeAll | boolean | – | Include all visible elements without relevance filtering. Useful for Vue/Livewire apps (default: false) |
| includeAttributes | boolean | – | Include ARIA attributes (default: false) |
| includeText | boolean | – | Include text (default: true) |
| maxDepth | number | – | Max tree depth |
| maxLines | number | – | Max lines (default: 100) |
| preview | number | – | Number of characters of the saved output to return inline as a preview when saveTo is used. Omit for no preview. |
| saveTo | boolean|string | – | Save the complete snapshot text to a file (ignores maxLines) instead of returning it inline. Pass a file path, an existing directory (generated file inside), or true (generated file under ~/.firefox-… |
| selector | string | – | CSS selector to scope snapshot to specific element (e.g., "#app") |
No output schema declared.
No examples provided.
type_text ~123
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.
| Name | Type | Req | Description |
|---|---|---|---|
| submitKey | string | – | Key to press after the text, such as "Enter" or "Tab". Same syntax as press_key. |
| text | string | yes | Text to type |
| uid | string | – | Focusable element UID from snapshot to focus before typing (default: the already focused element) |
No output schema declared.
No examples provided.
uninstall_extension ~55
Uninstall a Firefox extension using WebDriver BiDi webExtension.uninstall command. Requires the extension ID returned by install_extension or obtained from list_extensions.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Extension ID (e.g., "addon@example.com") |
No output schema declared.
No examples provided.
upload_file_by_uid ~41
Upload file to file input by UID.
| Name | Type | Req | Description |
|---|---|---|---|
| filePath | string | yes | Local file path |
| uid | string | yes | File input UID from snapshot |
No output schema declared.
No examples provided.
What is the Firefox DevTools MCP server?
Firefox DevTools MCP is listed in the public MCP registry as io.github.mozilla/firefox-devtools-mcp. Control and debug Firefox: navigate, fill forms, inspect network and console, profile. This page covers its npm package (@mozilla/firefox-devtools-mcp).
Is the Firefox DevTools MCP server safe to use?
Firefox DevTools MCP scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Firefox DevTools MCP server expose?
Firefox DevTools MCP exposes 48 tools: list_pages, new_page, navigate_page, select_page, close_page, and 43 more. Their descriptions and schemas cost roughly 4,192 tokens of context every time the server is loaded.
Is the Firefox DevTools MCP server still maintained?
Firefox DevTools MCP is still listed as active in the MCP registry. We last reached this channel on 24 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Firefox DevTools MCP server under?
Firefox DevTools MCP declares the MIT OR Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.