Public leaderboard

Public assessment

ofershap/real-browser-mcp (real-browser-mcp)

real-browser-mcp · v1.2.0 · scanned

What changed in the harness

Selection accuracy 90→86, 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.0 / 30

22.0 out of 30
03Economics

19.2 / 20

19.2 out of 20
04Discoverability

11.3 / 20

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

15 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_navigate
name_restates_behavior no_return_description
Loads the given URL in the active browser tab and resolves when navigation is considered complete. Use waitUntil 'domcontentloaded' to return sooner on heavy or media-rich pages, or the default 'load' when you need the full page load finished.
browser_click
params_unexplained no_return_description
Clicks an element identified by a snapshot ref (e.g. "e12") or a CSS selector. Use button to choose which mouse button to press (left, right, or middle) and doubleClick to perform a double click instead of a single click (e.g. to trigger interactions that require it). Resolves once the click event has been dispatched.
browser_type
no_return_description
Types the given text into an input element identified by a snapshot ref or CSS selector, optionally clearing the field first when clear is true. Use this to fill forms, search boxes, or text areas. Resolves once the text has been entered.
browser_scroll
params_unexplained no_return_description
Scrolls the page or a specific element identified by selector. Use direction to choose scroll direction (up, down, left, or right) with amount as the pixel distance, or scroll to a specific element via toElement or a named position (top/bottom). Works with virtual scroll containers used by social media sites. Resolves once the scroll has been performed.
browser_press_key
no_return_description
Presses a keyboard key or combination (e.g. Enter, Escape, Tab, ArrowDown, or 'a'), optionally holding modifier keys (ctrl, alt, shift, meta) for shortcuts like Ctrl+A or Cmd+C. Use ref or selector to focus an element first if needed. Resolves once the key press has been dispatched.
browser_wait
no_return_description
Waits until an element (selector) reaches the given state (visible, hidden, or attached) within the timeout, or waits a fixed delay in ms if delay is set. Use this for SPAs and dynamically loaded content before taking further actions. Resolves when the condition is met or the timeout expires.
browser_screenshot
params_unexplained no_return_description
Captures a screenshot of the currently visible page area and returns the image. Use format to choose PNG (default) or JPEG, and quality to set JPEG compression (0-100, ignored for PNG).
browser_console
no_return_description
Reads the console messages (log, warn, error) emitted by the page and returns them, optionally clearing the message list after reading when clear is true. Use this to inspect page errors or debug output.
browser_network
no_return_description
Reads the network requests made by the page and returns them, optionally filtered by a URL regex pattern (filter). Set clear to clear the captured requests after reading. Use this to inspect API calls, failed requests, or page traffic.
browser_tabs
no_return_description
Manages browser tabs. Use action to list open tabs, create a new tab (supply url), close an existing tab (supply tabId), or focus a tab (supply tabId). Resolves with the current or updated list of tabs after the action completes.
browser_text
no_return_description
Extracts and returns the raw text content of the whole page or of the element matched by selector, truncated to maxLength characters. Use this to read visible page content for scraping or verification.
browser_hover
no_return_description
Moves the mouse cursor over an element identified by a snapshot ref or CSS selector to trigger tooltips, dropdown menus, or hover states. Resolves once the hover has been performed.
browser_select
no_return_description
Selects an option from a dropdown/select element identified by a snapshot ref or CSS selector. Choose the option by its value, its visible label, or its 0-based index. Resolves once the selection has been made.
browser_click_text
no_return_description
Clicks an element by its visible text content, matched as a substring (or exact match when exact is true) against the first line of each element's text. Use index to pick among multiple matches. Works on React dropdowns, portals, and overlays that may not appear in snapshots and is CSP-safe (no eval). Resolves once the click has been dispatched.
browser_handle_dialog
no_return_description
Handles a JavaScript dialog (alert, confirm, or prompt) that is blocking page interaction by accepting or dismissing it via action, optionally entering text for prompt() dialogs via promptText. Resolves once the dialog has been handled and the page is unblocked.

Selection evidence

Confusable tool pairs.

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

Tool A Tool B Confidence Why they collide
browser_click browser_click_text high Both tools perform a click and differ only in locator strategy (ref/CSS selector vs visible text). A task like 'click the button labeled Submit' or 'click the element containing Add to cart' fits both definitions exactly, so an agent could reach for browser_click and need a ref/selector it lacks, or for browser_click_text when a selector was intended.
browser_text browser_click_text medium The names are nearly identical and both mention text/element. A task phrased as 'get the text on the Sign in button' maps to browser_text, while 'click the element with text Sign in' maps to browser_click_text; an agent could misroute a 'select/act on the text X' instruction to the reading tool instead of the clicking tool.
browser_hover browser_select medium Both definitions explicitly reference dropdowns: hover describes triggering 'dropdown menus' and select describes 'dropdown/select element'. A task like 'use the dropdown to pick France' could lead an agent to hover (thinking it performs the interaction) instead of calling select, or to call select when hovering was needed to open the menu first.
browser_click browser_evaluate low browser_evaluate is defined as covering 'any operation not covered by other tools', so a task like 'click the button programmatically via JS' or a click that keeps failing with normal tools could prompt an agent to dispatch a synthetic click (el.click()) through evaluate instead of browser_click.
browser_find browser_evaluate low Finding elements overlaps: browser_find locates elements via natural language, while browser_evaluate is explicitly for 'DOM queries'. A task like 'find all buttons on the page' or 'count the matching elements' fits both, so an agent could pick evaluate with document.querySelectorAll where the find tool was intended, or vice versa.
browser_console browser_evaluate low The word 'console' in browser_console is a trap: a task like 'run this JavaScript in the console' or 'log X to the console' involves executing JS (browser_evaluate), but the matching name could pull the agent to the message-reading tool browser_console instead of the evaluation tool.
browser_press_key browser_handle_dialog low Dialog handling overlaps with keyboard input: a task like 'press Enter to dismiss the alert' or 'accept the popup' could plausibly be satisfied by browser_press_key (Enter) or by browser_handle_dialog (accept), since dialogs block interaction until handled and a key press is a common user-level way to describe that.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard