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 |
Capabilities
Features and capabilities supported by this server
| 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 | |
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/VitexSoftware/mcp-server-webdriver'
If you have feedback or need assistance with the MCP directory API, please join our Discord server