Public leaderboard

Public assessment

Playwright MCP (Microsoft, browser automation)

playwright-mcp · v1.62.0-alpha-1783623505000 · scanned

What changed in the harness

Selection accuracy 92→94, token cost up 15%, 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

22.9 / 30

22.9 out of 30
03Economics

18.0 / 20

18.0 out of 20
04Discoverability

13.1 / 20

13.1 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.

19 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
browser_close
no_return_description
Close the current page and release its resources. Returns nothing useful on success.
browser_resize
name_restates_behavior no_return_description
Set the browser window viewport size to the given width and height in pixels, which affects layout, responsive styling, and element visibility. Both values are required. Returns nothing useful on success.
browser_handle_dialog
no_return_description
Handle the currently active JavaScript dialog (alert, confirm, prompt, or beforeunload) by either accepting or dismissing it. Accept must be set; provide promptText only for prompt dialogs to type the response. Returns nothing useful on success.
browser_evaluate
no_return_description
Evaluate a JavaScript expression in the context of the page, optionally scoped to a target element. Functions can be user-provided such as `() => { /* code */ }` or `(element) => { /* code */ }` when an element is provided. The return value of the function is returned as text, or written to the given filename.
browser_file_upload
no_return_description
Trigger a file chooser and upload one or more files using the given absolute paths. If paths is omitted, the file chooser is cancelled. Returns nothing useful on success.
browser_fill_form
no_return_description
Fill multiple form fields at once using the provided field definitions, each referencing a target element with a human-readable name, field type (textbox, checkbox, radio, combobox, or slider), and value. Checkbox values must be `true` or `false`; combobox values are option text. Returns nothing useful on success.
browser_press_key
no_return_description
Press a key on the keyboard of the focused page, simulating either a named key such as `ArrowLeft` or `Enter`, or a character such as `a`. Useful for shortcuts, navigation, and confirming inputs. Returns nothing useful on success.
browser_type
no_return_description
Type or fill text into an editable target element. Optionally press Enter afterward to submit the text, and optionally type one character at a time to trigger page key handlers. Returns nothing useful on success.
browser_navigate
no_return_description
Navigate the current browser page to the given URL, waiting for the page to load. Returns nothing useful on success.
browser_navigate_back
no_return_description
Navigate the current page back to the previous entry in the browser history. Returns nothing useful on success.
browser_run_code_unsafe
name_restates_behavior no_return_description
Run an arbitrary Playwright code snippet in the Playwright server process to perform page interactions that aren't covered by other tools. The code is a JavaScript function invoked with a single `page` argument, e.g. `async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }`. Unsafe: this executes arbitrary JavaScript in the server process and is RCE-equivalent. The function's return value is returned, or loaded from `filename` if given.
browser_take_screenshot
no_return_description
Capture a screenshot of the current page viewport, optionally capturing the full scrollable page or a specific element. Use this only for visual inspection; use browser_snapshot to take actions. The image is returned in the requested format (png or jpeg) and scale (css or device pixels), or saved to the given filename.
browser_snapshot
no_return_description
Capture an accessibility snapshot of the current page (or a specific element via target) and return it as structured text describing the page's interactive elements, which is the recommended way to understand the page for taking actions. You can limit the snapshot tree depth, include each element's viewport-relative bounding box, or save the snapshot to a markdown file.
browser_click
no_return_description
Perform a click on the target element, optionally double-clicking, choosing the button (left, right, or middle), and pressing modifier keys. Returns nothing useful on success.
browser_drag
no_return_description
Perform a drag-and-drop operation from the start element to the end element, using the given target references. Returns nothing useful on success.
browser_hover
no_return_description
Move the mouse cursor over the target element on the page, which can trigger hover styles, menus, and tooltips. Returns nothing useful on success.
browser_select_option
no_return_description
Select one or more options in a dropdown target element by their values, which can be a single value or multiple values. Returns nothing useful on success.
browser_tabs
no_return_description
List, create, close, or select a browser tab using the given action (list, new, close, or select). For new tabs, optionally provide a url to navigate to; for close/select, use the tab index, closing the current tab if index is omitted. Listing returns the current tab information.
browser_wait_for
no_return_description
Wait for a condition on the page: the given text to appear, the given textGone to disappear, or a specified time in seconds to pass. Returns nothing useful on success.

Selection evidence

Confusable tool pairs.

1 pair where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
browser_network_requests browser_network_request high Names differ only by plurality and both describe 'network requests'. A task like 'get the network request details' or 'show me the headers/body of the network requests' is ambiguous: browser_network_requests only returns a numbered list, while browser_network_request returns full details but requires the index that network_requests prints. Vague phrasing like 'give me the request details' can lead the agent to pick the wrong member, especially before it realizes the cross-reference.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard