mcp-server-webdriver
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FIREFOX_BINARY | No | Path to a custom Firefox executable | |
| GECKODRIVER_PATH | No | Absolute path to geckodriver binary (highest priority) | |
| GECKODRIVER_AUTO_INSTALL | No | Set to false to disable webdriver-manager fallback | true |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| browser_openA | Open URL in Firefox. Starts a new browser session if none is running. With enable_bidi=True (default) the session automatically captures: • All JavaScript exceptions (file, line, column, stack trace) • All console.* output (log / warn / error / info / debug) • All network requests with status codes and durations To test responsive / mobile layouts pass width + height (and optionally user_agent): width=390 height=844 — iPhone 14 width=375 height=667 — iPhone SE width=360 height=800 — Samsung Galaxy S21 width=768 height=1024 — iPad width=1280 height=800 — laptop geckodriver sources (priority order):
|
| browser_closeA | Close the browser session. All buffered DevTools data is discarded. |
| browser_statusA | Session state, geckodriver info, BiDi status and buffer sizes. |
| browser_set_viewportA | Resize the browser viewport to test responsive / mobile layouts. Call this at any point during a session to switch between breakpoints. Common presets: 390×844 — iPhone 14 375×667 — iPhone SE 360×800 — Samsung Galaxy S21 768×1024 — iPad 1280×800 — laptop 1920×1080 — desktop full-HD |
| devtools_reportA | MAIN DIAGNOSTIC TOOL — returns a complete DevTools report in one call: • js_errors — all JavaScript exceptions with file, line, column, stack • console_errors — console.error() and console.warn() output • failed_resources — CSS / JS / images / fonts that returned 4xx/5xx or failed to load • slow_resources — requests that took longer than 2 s Use this after navigating to a page or after triggering a UI action. Equivalent to opening DevTools and checking the Console + Network tabs. |
| devtools_js_errorsA | Return all JavaScript exceptions captured since browser_open. Each entry contains: ts — ISO 8601 timestamp type — error type (e.g. 'TypeError', 'ReferenceError') text — error message url — source file URL line — line number in source file column — column number stack — full stack trace This is the primary tool for finding which JS file and line causes a bug. |
| devtools_consoleA | Return buffered browser console messages. Each entry: ts, level, text, url (source file), line. Covers console.log / warn / error / info / debug. |
| devtools_network_failedA | Return network requests that FAILED — 4xx / 5xx status or DNS / connection errors. This is how the agent detects broken CSS files, missing JS bundles, unavailable fonts, or failed API calls that cause layout or functionality issues. Each entry: ts, method, url, type, status (0 = connection failed), duration_ms, failed (bool), error (error description). |
| devtools_network_allA | Return all captured network requests with filtering options. Useful for auditing which CSS/JS files are loaded, checking API response times, or finding resources that are unexpectedly missing from the page. Use limit= to avoid overwhelming the context window on busy pages. |
| devtools_clearA | Clear all buffered console, JS error, and network entries. Call this before navigating to a new page to get a clean baseline, so subsequent devtools_* calls only reflect the new page's activity. |
| devtools_enable_bidiA | Attach (or re-attach) WebDriver BiDi listeners to the running session. Use if the session was opened with enable_bidi=False, or if listeners were lost after a page crash. |
| browser_screenshotA | Take a PNG screenshot for visual / layout / CSS diagnosis. Capture the full page to spot broken layout, or pass a CSS selector to isolate a specific component (header, nav, modal…). The agent can use this to identify misaligned elements, invisible text, broken flex/grid layouts, or unstyled components. |
| devtools_computed_cssA | Return computed (final applied) CSS properties of an element. Use this to understand why an element looks wrong: • Is it display:none or visibility:hidden? • What color / font is actually applied? • Is a CSS variable resolving correctly? • Are grid/flex dimensions what you expect? Returns a dict of {property: computed_value}. |
| devtools_element_infoA | Return detailed info about a DOM element for debugging: • outerHTML — the element's markup (first 4000 chars) • bounding_box — position and size on screen (x, y, width, height) • visible — whether the element is actually visible • in_viewport — whether it's within the visible scroll area • attributes — all HTML attributes • aria — ARIA role, name, label, disabled, hidden • child_count — number of child elements • text_content — visible text (first 500 chars) Use this to diagnose elements that should be visible but aren't, or to understand the structure around a broken component. |
| devtools_css_variablesA | Return CSS custom properties (variables) defined on :root. Helps diagnose theming issues: missing tokens, wrong colour values, variables that weren't loaded because a CSS file failed to fetch. |
| devtools_performanceA | Return page performance timing from the browser Navigation Timing API. navigation — key milestones for the current page load: ttfb_ms — Time to First Byte (server latency) dom_loaded_ms — DOMContentLoaded (page parsed, defer scripts done) load_ms — full load event (all resources fetched) dns_ms — DNS lookup duration connect_ms — TCP/TLS connection duration request_ms — time from request sent to last response byte transfer_size — response body size in bytes resources (when include_resources=True) — per-asset breakdown: name, type, duration_ms, transfer_size, start_time Use this to identify slow pages, expensive assets, or server latency. Complements devtools_network_all which captures requests via BiDi listeners. |
| browser_get_titleA | Return the of the current page. |
| browser_get_urlA | Return the current URL. |
| browser_get_sourceA | Return the full HTML source of the current page. |
| browser_get_textA | Get visible text content of the page or a specific element. |
| browser_get_attributeA | Return the value of an HTML attribute on an element. |
| browser_clickC | Click an element. |
| browser_fillC | Type text into an input field. |
| browser_upload_fileA | Upload a local file through a element. Works even when the file input is visually hidden (the common pattern of hiding the native input and styling a custom button over it). The file must exist on the machine running the MCP server. |
| browser_selectA | Select an in a dropdown. |
| browser_execute_jsA | Execute JavaScript and return the result as JSON (falls back to str for non-serialisable values). |
| browser_waitA | Wait until an element satisfies a condition: visible, clickable, present in DOM, or contains text. |
| browser_navigateA | Navigate to a URL in the existing session (keeps BiDi listeners active). |
| browser_backA | Navigate back. |
| browser_forwardB | Navigate forward. |
| browser_refreshA | Reload the current page. |
| browser_switch_frameB | Switch into an or back to the main document. |
| browser_scrollA | Scroll the page or scroll an element into view. • Pass a CSS selector to scroll that element into view (smoothly). • Pass x/y to jump the page to absolute scroll coordinates. • Pass by=true with x/y to scroll relative to the current position (e.g. y=500 scrolls down 500 px). • No arguments scrolls to the top of the page. |
| browser_press_keyA | Send a keyboard key press to an element or the currently focused element. Useful for submitting forms (enter), moving focus (tab), closing modals (escape), or triggering keyboard-driven UI components. |
| browser_hoverA | Move the mouse over an element (hover). Triggers CSS :hover states and any mouseenter/mouseover event listeners — essential for dropdown menus, tooltips, and hover-activated controls. |
| browser_find_elementsA | Return a list of all elements matching a CSS selector. Each entry contains: index, tag, text (first 200 chars), id, class, href, src, value, type, name, visible, and aria-label. Useful for enumerating links, buttons, inputs, or any repeated component. |
| browser_accept_dialogA | Accept (click OK on) a JavaScript dialog: alert(), confirm(), or prompt(). Call this when a browser action triggers a dialog that blocks further interaction. |
| browser_dismiss_dialogA | Dismiss (click Cancel on) a JavaScript confirm() or prompt() dialog, or close an alert(). |
| browser_get_cookiesA | Return all cookies for the current page as a list of dicts. Each entry: name, value, domain, path, secure, httpOnly, expiry. Useful for inspecting authentication state or session tokens. |
| browser_set_cookieA | Set a cookie on the current page. Useful for injecting auth tokens or session cookies without going through a login flow. The browser must already be on a page in the target domain. |
| browser_get_storageA | Read from localStorage or sessionStorage. Returns all key→value pairs when no key is given, or {key: value} for a single key (value is null if the key does not exist). Useful for inspecting auth tokens, cached API responses, feature flags, or any client-side state stored in web storage rather than cookies. |
| browser_set_storageA | Write a key→value pair to localStorage or sessionStorage. Useful for injecting auth tokens, feature flags, or test fixtures directly into web storage without going through a login or setup flow. |
| browser_clear_storageA | Remove one key or clear all entries from localStorage or sessionStorage. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 43 tools
Most tools target a distinct resource or action, and the browser_* vs devtools_* prefixes make intent clear. The main overlap is devtools_report, which aggregates what devtools_js_errors, devtools_console, and devtools_network_failed already expose, but their overview-vs-focused relationship is explained well enough.
Names are snake_case and follow a readable prefix pattern: browser_<verb-like action> and devtools_<inspection/data>. Minor deviations like browser_status, browser_screenshot, and the noun-style devtools_* names keep it from being fully verb_noun, but the convention is predictable.
43 tools is above the 25+ threshold and creates a heavy selection surface for an agent, even though the webdriver domain is broad. Some devtools_* getters could be consolidated, and the set would benefit from tighter scoping or splitting browser and devtools concerns.
The surface covers navigation, interaction, waiting, frames, dialogs, cookies/storage, screenshots, and detailed devtools diagnostics. Notable gaps like multi-tab/window management and drag-and-drop are missing, but most core webdriver workflows are fully supported.