An MCP server that controls the Brave browser via Playwright, enabling navigation, interaction, content extraction, and automation tasks.
27 tools with mostly complete schemas and descriptions. Naming is verb-forward and clear (launch_browser, navigate, click). Descriptions are present and actionable (avg ~120 chars), exceeding the 10-char minimum. However, several tools lack parameter descriptions (e.g., launch_browser, close_browser have empty input {}), and output schemas are not formally documented. Error handling is minimal, tools return string responses with no guidance on recovery or error classification. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Parameter descriptions are good where present but inconsistent across the suite.
Clicks an element on the page. BEST PRACTICE: Call 'snapshot' first, then use the ref=N value from the snapshot. Example: snapshot shows '- tab "Videos" [ref=12]' → call click with selector='ref=12'. Also accepts CSS/XPath selectors, text-based selectors (e.g., 'text=Videos'), or plain text.
Closes the Brave browser and cleans up all resources.
Drags an element from source to target. Both accept CSS/XPath or ref=N from snapshot.
Extracts text content from an element. Accepts CSS/XPath selector or ref=N from snapshot.
Uploads one or more files to a file input element. Accepts CSS/XPath selector or ref=N from snapshot. Paths should be absolute file paths on the local machine.
Fills multiple form fields at once. Pass a dict of {selector: value} pairs. Selectors can be CSS/XPath or ref=N from snapshot. Example: {'ref=3': 'John', 'ref=5': 'john@email.com'}
No input schemas for 8 tools (launch_browser, close_browser, navigate_back, navigate_forward, refresh_page, get_page_info, page_summary, network_requests). These tools have empty {} input, violating the requirement that every parameter must have a type and description.
Output schemas are not documented. Tools return string responses with no formal schema definition. LLMs cannot plan downstream calls or extract structured data without knowing the response format.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Fills an input field instantly with the given text (clears existing content first). Accepts CSS/XPath selector or ref=N from snapshot.
Search for elements matching a text query and return them with ref=N IDs. Extremely efficient for finding specific buttons or links on complex pages.
Returns the current URL and page title.
Handles a JavaScript dialog (alert, confirm, prompt). action: 'accept' or 'dismiss'. text: optional input for prompt dialogs.
Hovers over an element. Useful for triggering tooltips or hover menus. Accepts CSS/XPath selector or ref=N from snapshot.
Launches the Brave browser. Must be called before any other tool.
Navigates to a URL (e.g., 'https://youtube.com'). Adds https:// if missing.
Navigates back to the previous page in history.
Navigates forward to the next page in history.
Returns the last 25 network requests with method, status, type, and URL. Useful for debugging loading issues or verifying API calls.
Returns a high-level summary of the page (title, description, headings). Use this first on a new page to get oriented before taking a full snapshot.
Presses a keyboard key. If selector is provided, focuses that element first. Key examples: Enter, Tab, Escape, ArrowDown, Control+a, Shift+Tab, Backspace. Selector accepts CSS/XPath or ref=N from snapshot.
Reloads the current page.
Resizes the browser viewport to the given width and height in pixels.
Right-clicks an element to open the context menu (Save image as, Copy link, etc.). BEST PRACTICE: Call 'snapshot' first, then use ref=N. Also accepts CSS/XPath selectors or text-based selectors.
Selects an option from a <select> dropdown by value or visible text. Accepts CSS/XPath selector or ref=N from snapshot.
Returns a simplified structure of the current page with ref=N identifiers. Args: selector: Optional CSS selector to scope the snapshot to a specific element. interactive_only: If True, skips structural elements (div, nav, section) and only returns interactive ones (links, buttons, inputs). USE THIS TO SAVE COMPUTE/CONTEXT on complex pages. !! IMPORTANT: You MUST call this tool (or find_elements) BEFORE trying to click or fill. After calling snapshot, find the element you need, then use its ref=N value.
Manages browser tabs. Actions: - 'list': list all open tabs with index numbers - 'new': open a new tab (optionally navigate to url) - 'close': close tab at tab_index (or current tab if -1) - 'switch': switch to tab at tab_index
Takes a screenshot of the current tab. Optionally provide a file path to save to and set full_page=True for the entire scrollable page. If no path is given, saves to screenshots/ folder with a timestamp.
Types text character-by-character into an element (simulates real typing). Accepts CSS/XPath selector or ref=N from snapshot. Delay is milliseconds between keystrokes (default 50).
Waits for an element to reach the specified state before continuing. States: 'visible', 'hidden', 'attached', 'detached'. Accepts CSS/XPath selector or ref=N from snapshot. Timeout is in milliseconds (default 30000).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Tools are marked READ_ONLY or WRITE in metadata but not in the MCP schema, preventing clients from applying safety policies.
Error handling is minimal. Tools return plain strings with no error classification (retryable, user-fixable, fatal) or recovery guidance. An LLM cannot determine whether to retry, ask the user, or abort.
No pagination support for list-like tools (tabs, network_requests). If these return large result sets, they will blow the context window. No limit parameter or next_cursor documented.