{"name":"io.github.mozilla/firefox-devtools-mcp","slug":"mozilla-firefox-devtools-mcp","title":"Firefox DevTools MCP","description":"Control and debug Firefox: navigate, fill forms, inspect network and console, profile.","url":"https://mcp.market/server/mozilla-firefox-devtools-mcp","rating":null,"grade":"A","score":86,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":61,"stars":431,"forks":64,"downloads_week":3150,"last_push_at":"2026-09-22T10:43:44.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/mozilla/firefox-devtools-mcp","website":"https://github.com/mozilla/firefox-devtools-mcp","version":"0.10.4","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@mozilla/firefox-devtools-mcp","version":"0.10.4","transport":{"type":"stdio"},"packageArguments":[{"description":"Tool modules to expose. Higher presets widen what the agent can do.","format":"string","default":"developer","choices":["slim","basic","developer"],"type":"named","name":"--tool-preset"}],"environmentVariables":[{"description":"Set to true to run Firefox without a visible window.","format":"boolean","name":"FIREFOX_HEADLESS"},{"description":"URL to open when the server starts.","format":"string","name":"START_URL"}]}],"tools":[{"name":"accept_dialog","description":"Accept browser dialog. Provide promptText for prompts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_console_messages","description":"Clear collected console messages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_downloads","description":"Clear the tracked downloads buffer.","write_action":false,"price_micros":0,"input_schema":null},{"name":"clear_snapshot","description":"Clear snapshot UIDs. Usually not needed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"click_by_uid","description":"Click element by UID. Set dblClick for double-click.","write_action":false,"price_micros":0,"input_schema":null},{"name":"close_firefox_session","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"close_page","description":"Close tab by index.","write_action":false,"price_micros":0,"input_schema":null},{"name":"console","description":"Read and clear console messages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"debugging","description":"Inspect scripts and set logpoints (Firefox 153+).","write_action":false,"price_micros":0,"input_schema":null},{"name":"dismiss_dialog","description":"Dismiss browser dialog.","write_action":false,"price_micros":0,"input_schema":null},{"name":"downloads","description":"Monitor and manage file downloads.","write_action":false,"price_micros":0,"input_schema":null},{"name":"drag_by_uid_to_uid","description":"Drag element to another (HTML5 drag events).","write_action":false,"price_micros":0,"input_schema":null},{"name":"enable_debugger","description":"Enable the JS debugger for the current page. Required before set_logpoint works. Requires Firefox 153+.","write_action":false,"price_micros":0,"input_schema":null},{"name":"evaluate_privileged_script","description":"Execute JS function in a privileged (chrome) browsing context. Requires MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 env var. Get context ids from list_privileged_contexts.","write_action":true,"price_micros":0,"input_schema":null},{"name":"evaluate_script","description":"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.","write_action":true,"price_micros":0,"input_schema":null},{"name":"fill_by_uid","description":"Fill text input/textarea by UID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"fill_form_by_uid","description":"Fill multiple form fields at once.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_firefox_info","description":"Get information about the current Firefox instance configuration, including binary path, environment variables, and output file location.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_firefox_output","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_firefox_prefs","description":"Get Firefox preference values via a privileged API. Requires MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_logpoint_results","description":"Get the results collected by a logpoint since it was set.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_network_request","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_page_text","description":"Get the visible text of the page (document.body.innerText). Caps at maxLength (default 20000 chars); saveTo saves the full text to a file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_script_source","description":"Get the source code of a JavaScript file loaded in the page. Requires enable_debugger to have been called.","write_action":false,"price_micros":0,"input_schema":null},{"name":"hover_by_uid","description":"Hover over element by UID.","write_action":false,"price_micros":0,"input_schema":null},{"name":"input","description":"Interact with the page via UID-based clicks, typing, key presses, drag, and uploads.","write_action":false,"price_micros":0,"input_schema":null},{"name":"install_extension","description":"Install a Firefox extension using WebDriver BiDi webExtension.install command. Supports installing from archive (.xpi/.zip), base64-encoded data, or unpacked directory.","write_action":false,"price_micros":0,"input_schema":null},{"name":"launch","description":"Restart Firefox under a different launch configuration.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_console_messages","description":"List console messages, filterable by level, time, text, source. Caps at limit (default 50); saveTo saves all matches to a file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_downloads","description":"List downloads tracked since startup, including status and saved file path.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_network_requests","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_pages","description":"List open tabs (index, title, URL). Selected tab is marked.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_privileged_contexts","description":"List privileged (privileged) browsing contexts. Requires MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 env var. Use restart_firefox with env parameter to enable.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_scripts","description":"List all JavaScript files currently loaded in the page. Requires enable_debugger to have been called.","write_action":false,"price_micros":0,"input_schema":null},{"name":"management","description":"Inspect Firefox options and logs, and close the browser.","write_action":false,"price_micros":0,"input_schema":null},{"name":"navigate_history","description":"Navigate history back/forward. UIDs become stale.","write_action":false,"price_micros":0,"input_schema":null},{"name":"navigate_page","description":"Navigate selected tab to URL.","write_action":false,"price_micros":0,"input_schema":null},{"name":"network","description":"List and inspect network requests, and control the HTTP cache.","write_action":false,"price_micros":0,"input_schema":null},{"name":"new_page","description":"Open new tab at URL. Returns tab index.","write_action":false,"price_micros":0,"input_schema":null},{"name":"pages","description":"Open, navigate, select, and close pages.","write_action":false,"price_micros":0,"input_schema":null},{"name":"prefs","description":"Get and set Firefox preferences.","write_action":false,"price_micros":0,"input_schema":null},{"name":"press_key","description":"Press a single key, optionally with modifiers, to submit, dismiss, navigate or trigger a shortcut. Not for entering text: use fill_by_uid instead.","write_action":false,"price_micros":0,"input_schema":null},{"name":"profiler","description":"Start, stop, and query the performance profiler.","write_action":false,"price_micros":0,"input_schema":null},{"name":"profiler_is_active","description":"Check whether the Firefox profiler is currently recording.","write_action":false,"price_micros":0,"input_schema":null},{"name":"profiler_start","description":"Start the Firefox profiler. Provide either a preset name or explicit recording options (entries, interval, features, threads). Cannot combine both. Valid presets: ….","write_action":false,"price_micros":0,"input_schema":null},{"name":"profiler_stop","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_logpoint","description":"Remove a previously set logpoint.","write_action":true,"price_micros":0,"input_schema":null},{"name":"resolve_uid_to_selector","description":"Resolve UID to CSS selector. Fails if the element is gone.","write_action":false,"price_micros":0,"input_schema":null},{"name":"restart_firefox","description":"Restart Firefox with different configuration. Allows changing binary path, environment variables, and other options. All current tabs will be closed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screencast","description":"Record screencasts of the page viewport (Firefox 154+).","write_action":false,"price_micros":0,"input_schema":null},{"name":"screencast_start","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screencast_stop","description":"Stop an in-progress screencast recording started with screencast_start and finalize the video file. Returns the path to the saved file.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot","description":"Capture screenshots of the page or specific elements.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_by_uid","description":"Capture element screenshot by UID as base64 PNG.","write_action":false,"price_micros":0,"input_schema":null},{"name":"screenshot_page","description":"Capture viewport screenshot as base64 PNG. Set fullPage for the whole scrollable document.","write_action":false,"price_micros":0,"input_schema":null},{"name":"script","description":"Evaluate arbitrary JavaScript in the page context.","write_action":false,"price_micros":0,"input_schema":null},{"name":"select_page","description":"Select active tab by index, URL, or title. Index takes precedence.","write_action":false,"price_micros":0,"input_schema":null},{"name":"select_privileged_context","description":"Select a privileged browsing context by ID and set WebDriver Classic context to \"chrome\" . Requires MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_download_behavior","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_firefox_prefs","description":"Set Firefox preferences at runtime a privileged API. Requires MOZ_REMOTE_ALLOW_SYSTEM_ACCESS=1 env var.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_logpoint","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_network_cache","description":"Control the HTTP cache. Use behavior='bypass' so every request goes to the network \\u2014 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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_viewport_size","description":"Set viewport dimensions in pixels.","write_action":false,"price_micros":0,"input_schema":null},{"name":"snapshot","description":"Capture accessibility/DOM snapshots and resolve UIDs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"take_snapshot","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"type_text","description":"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.","write_action":false,"price_micros":0,"input_schema":null},{"name":"uninstall_extension","description":"Uninstall a Firefox extension using WebDriver BiDi webExtension.uninstall command. Requires the extension ID returned by install_extension or obtained from list_extensions.","write_action":false,"price_micros":0,"input_schema":null},{"name":"upload_file_by_uid","description":"Upload file to file input by UID.","write_action":true,"price_micros":0,"input_schema":null},{"name":"utilities","description":"Handle dialogs, history navigation, and viewport sizing.","write_action":false,"price_micros":0,"input_schema":null},{"name":"webextension","description":"Install and uninstall web extensions.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":86,"grade":"A","scanned_at":"2026-09-22T11:49:47.709Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-22T11:49:47.665Z","components":{"code":{"score":20,"max":25,"notes":["3 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/index.js: …ode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"@mozilla/firefox-devtools-mcp","version":"0.10.4","found":true,"license":"MIT OR Apache-2.0","hasInstallScripts":false,"dependencyCount":5,"publishedAt":"2026-09-22T10:49:57.424Z","repositoryUrl":"git+https://github.com/mozilla/firefox-devtools-mcp.git","weeklyDownloads":3150}],"repo":{"found":true,"owner":"mozilla","repo":"firefox-devtools-mcp","archived":false,"pushedAt":"2026-09-22T10:43:44Z","stars":431,"forks":64,"openIssues":2,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/131524?v=4","ownerCreatedAt":"2009-09-26T08:22:18Z","license":"NOASSERTION"},"icon":{"url":"https://avatars.githubusercontent.com/u/131524?v=4&s=128","source":"github"},"presence":{"stars":431,"forks":64,"downloadsWeek":3150,"license":"NOASSERTION","lastPushAt":"2026-09-22T10:43:44.000Z","score":61}}}},"grade_history":[],"reviews":[]}