Public leaderboard

Public assessment

freema/firefox-devtools-mcp (@mozilla/firefox-devtools-mcp)

mozilla-firefox-devtools-mcp · v0.9.15 · scanned

What changed in the harness

Selection accuracy 93→100, token cost up 12%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

19.6 / 30

19.6 out of 30
03Economics

18.3 / 20

18.3 out of 20
04Discoverability

13.4 / 20

13.4 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

24 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
list_pages
no_return_description
List all open browser tabs, showing each tab's index, title, and URL, with the currently selected tab marked. Returns this list of tabs.
navigate_page
no_return_description
Navigate the currently selected tab to the given URL, waiting for the page to load. Returns confirmation once navigation completes.
select_page
no_return_description
Select which open tab is active, matched by index, URL substring, or title substring (index takes precedence when multiple are given). Returns the selected tab's index, title, and URL.
close_page
no_return_description
Close the tab at the given index. Returns confirmation that the tab was closed.
take_snapshot
no_return_description
Capture a DOM snapshot of the page, assigning stable UIDs to elements for use with other tools; retake after navigation since UIDs go stale. Returns the snapshot as text, or, when saveTo is set, saves it to a file and returns its path plus an optional preview.
resolve_uid_to_selector
name_restates_behavior no_return_description
Look up the CSS selector for an element previously captured in a snapshot, for use with tools outside the UID-based API (e.g. evaluate_script). Returns the CSS selector string; fails if the UID is stale, such as after a new snapshot or navigation.
clear_snapshot
name_restates_behavior no_return_description
Discard the cached UID-to-element mappings from the last snapshot; rarely needed since take_snapshot already replaces the cache each time it runs. Returns confirmation once the cache is cleared.
click_by_uid
no_return_description
Click the element identified by a UID from the last snapshot; set dblClick to perform a double-click instead of a single click. Returns confirmation once the click is dispatched.
hover_by_uid
name_restates_behavior no_return_description
Move the pointer over the element identified by a UID from the last snapshot, useful for triggering hover-revealed UI like tooltips or menus. Returns confirmation once the hover is dispatched.
fill_by_uid
name_restates_behavior no_return_description
Set the value of a text input or textarea identified by a UID from the last snapshot, replacing its current contents. Returns confirmation once the value is set.
drag_by_uid_to_uid
no_return_description
Drag the element identified by fromUid and drop it on the element identified by toUid, dispatching native HTML5 drag-and-drop events. Returns confirmation once the drag-and-drop sequence completes.
fill_form_by_uid
no_return_description
Fill several form fields in one call, given a list of {uid, value} pairs for elements from the last snapshot. Returns confirmation once all fields are filled.
upload_file_by_uid
name_restates_behavior no_return_description
Attach a local file at filePath to a file input element identified by a UID from the last snapshot. Returns confirmation once the file is attached.
screenshot_page
name_restates_behavior no_return_description
Capture a screenshot of the current page viewport, for visually verifying page state or layout. Returns the image as base64-encoded PNG data, or, when saveTo is set, saves it to a file and returns its path.
screenshot_by_uid
name_restates_behavior no_return_description
Capture a screenshot of just the element identified by a UID from the last snapshot, for visually verifying a specific component. Returns the image as base64-encoded PNG data, or, when saveTo is set, saves it to a file and returns its path.
list_downloads
no_return_description
List downloads tracked since the browser session started, optionally filtered by status or URL substring. Returns each matching download's status, URL, and saved file path, as text or JSON depending on format.
clear_downloads
name_restates_behavior no_return_description
Reset the in-memory list of tracked downloads returned by list_downloads, without affecting files already saved to disk. Returns confirmation once cleared.
set_download_behavior
no_return_description
Control whether downloads are saved automatically, canceled, or handled by the browser default, bypassing the native save-file dialog; requires a recent Firefox build. Returns confirmation of the behavior now in effect.
dismiss_dialog
name_restates_behavior no_return_description
Dismiss (cancel) any currently open browser dialog, such as an alert, confirm, or prompt. Returns confirmation once the dialog is dismissed.
navigate_history
no_return_description
Move the selected tab back or forward in its browsing history; note that any UIDs from a prior snapshot become stale afterward. Returns confirmation once navigation completes.
set_viewport_size
no_return_description
Resize the browser viewport to the given width and height in pixels, useful for testing responsive layouts. Returns confirmation of the new viewport size.
restart_firefox
no_return_description
Restart Firefox, optionally changing the binary path, profile, environment variables, headless mode, startup URL, or preferences; all current tabs are closed in the process. Returns confirmation once Firefox has restarted with the new configuration.
install_extension
no_return_description
Install a Firefox extension from an archive (.xpi/.zip), base64-encoded data, or an unpacked directory, via WebDriver BiDi. Returns the installed extension's ID, needed later for uninstall_extension.
evaluate_script
no_return_description
Execute a JavaScript function in the page context, optionally passing snapshot UIDs as arguments; prefer the dedicated UID tools for standard interactions. Returns the function's result as JSON, or, when saveTo is set, saves it to a file and returns its path plus an optional preview.

Selection evidence

Confusable tool pairs.

9 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
fill_by_uid fill_form_by_uid high Both fill form fields by UID; an agent asked to 'fill in the form' could pick the single-field fill_by_uid when multiple fields are involved, or vice versa for a single field, since both accept uid/value pairs and names only differ by 'form'.
click_by_uid hover_by_uid low Both act on an element by UID; a task like 'trigger the dropdown menu' could be ambiguous between hover (to reveal) and click, though the verbs themselves are distinct enough to usually disambiguate.
screenshot_page screenshot_by_uid medium A request like 'take a screenshot of the button' could be fulfilled by either capturing the whole page or the specific element by UID, especially if the agent hasn't taken a snapshot yet and defaults to the page-level tool.
accept_dialog dismiss_dialog low Both handle browser dialogs, but 'accept' vs 'dismiss' are semantically opposite and a natural task ('close the dialog') could be misread as either action depending on user intent, though wording usually distinguishes them.
install_extension uninstall_extension low Opposite operations on extensions; unlikely genuine confusion since verbs are clear, but a vague task like 'remove the extension I just installed' could momentarily lead an agent to reference the wrong tool if extension ID handling is unclear.
list_pages list_downloads low Both are 'list_*' tools returning enumerable state; a vague task like 'show me what's open' is unlikely to be confused but naming pattern similarity could cause a momentary mismatch in low-context agents.
get_firefox_output get_firefox_info medium Both retrieve Firefox-related data with similar names; a task like 'get Firefox details' or 'check Firefox status' could plausibly be routed to either the runtime output/logs tool or the configuration info tool.
clear_snapshot clear_downloads low Both are 'clear_*' cache-clearing tools but operate on unrelated data (DOM snapshot vs downloads list); shared 'clear' verb could cause a vague 'clear that' request to be misrouted in rare cases.
navigate_page navigate_history low Both involve navigation; a task like 'go back' vs 'go to URL X' are usually distinguishable, but 'navigate' phrasing overlap could cause minor confusion for ambiguous instructions like 'navigate back to the previous page'.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard