MCP server that drives a Chromium browser (Yandex Browser, Chrome, Edge) through the YX Bridge extension: read open pages, manipulate DOM, run JS, screenshots, media, raw CDP, translation control, browser UI automation, and browsing statistics. 250+ tools.
YX Bridge exposes 22 browser automation tools with consistent naming (browser_* prefix) and reasonable descriptions (avg ~150 chars). All tools have input schemas with proper JSON Schema structure. However, parameter descriptions are sparse, most lack detail on constraints, formats, or valid ranges. Output schemas are undocumented; LLMs cannot predict response structure. Error handling is absent from visible code. No tool annotations (readOnlyHint/destructiveHint). Composition is sound (each tool does one thing), but parameter reuse across tools (tabId) lacks consistency in how it's described across different tools.
Make a tab active in its window; focusWindow=false keeps the user's current window in front.
Return the currently active tab.
Go back in a tab's history.
Click the Nth element matching a CSS selector (dispatches pointer/mouse events + click()).
Close a tab by id.
Search the page's visible text for a substring; returns total count and snippets with surrounding context.
List forms and their fields (password values masked).
Output schemas undocumented. LLMs cannot predict response structure (fields, types, pagination). Tools like browser_list_tabs, browser_query, browser_forms return complex objects with no schema guidance.
Parameter descriptions lack constraint details. 'limit' appears in 5+ tools with no min/max bounds (e.g., browser_query limit default 50, browser_links limit default 200). 'maxChars' lacks guidance on truncation behavior.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe read-only tools from destructive ones (browser_click, browser_type, browser_close_tab). Agents may retry destructive operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
Get HTML of the whole document or of the first element matching a CSS selector.
Get url, title and the visible text (innerText) of a page. Best first look at any tab. `translated: maybe` means Yandex auto-translate probably rewrote the text; pass original=true to re-fetch the page HTML (with the page's cookies) and return the untranslated text (server-rendered content only), or call browser_translation mode=off.
List unique links (href + text) on the page.
List all open tabs (id, windowId, url, title, active).
Navigate a tab to a URL and wait for load.
Open a new tab with the given URL (in the work window if one is set, else the current window; windowId overrides).
querySelectorAll on the page: returns tag, id, class, text, href/src/value, bounding rect, visibility and requested attributes for each match.
Reload a tab.
Choose an option in a <select> by value (default) or by visible text (byText=true). Fires input/change.
Check whether the browser extension is connected; returns extension version and tabs with CDP attached.
Extract HTML tables as arrays of rows (headers detected from <thead>).
Control Yandex Browser auto-translation. mode=off blocks it for all future page loads (registers a content script that sets translate=no on the root element). mode=on allows it. mode=status returns the current setting. mode=get_settings / mode=set_settings / mode=apply_settings interact with the browser's translation settings (language pairs, etc.).
Type text into an input/textarea/contenteditable matched by selector. Fires input/change events (React/Vue-friendly). clear=true replaces, submit=true presses Enter / submits the form.
Wait until a CSS selector and/or a text appears on the page (after navigation, clicks, AJAX). Returns found:true/false.
Choose a 'work window' so the agent does not disturb the window the user is using: mode=least_tabs picks another window with the fewest tabs (creates one if there is only one window), mode=new opens a fresh window, or pass a windowId number; mode=clear resets; mode=status shows. While set, browser_open_tab/open_urls open there and tools without tabId use that window's active tab. Call this at the start of a session when the user is busy in their own window.
Error handling absent from visible code. No recovery guidance, retryability classification, or actionable error messages. Agents cannot distinguish transient failures (timeout) from permanent ones (tab not found).
Inconsistent parameter naming across tools. 'tabId' is optional in most tools (defaults to active tab) but required in browser_close_tab. No enum constraints on mode parameters (browser_work_window mode accepts string|number with free-form values).