firefox-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FIREFOX_MCP_PORT | No | Port for the WebDriver BiDi remote agent and MCP server. Overrides the default 9222 for both the Firefox launcher and the server. | 9222 |
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| tabs_contextA | List Firefox tabs (id, url, title, active). Call this first; tab ids are stable while the server runs. |
| tabs_createA | Open a new tab, optionally navigating to a URL. Returns its tab id. |
| tabs_closeC | Close a tab. |
| tabs_activateB | Bring a tab to the front. |
| navigateA | Navigate a tab to a URL, or 'back' / 'forward'. Waits for the load event (45 s cap). |
| resize_viewportA | Set the tab's viewport size in CSS pixels (e.g. 390x844 for phone). |
| screenshotB | Screenshot the visible viewport as PNG. |
| read_pageA | List page elements with refs for click/type/form_input. filter=interactive (default) lists controls and links; filter=all adds headings and text. Crosses into iframes (refs prefixed fN:). |
| findA | Find elements by text, label, placeholder, id, name or href (case-insensitive regex), or by CSS selector. Returns up to 20 refs per frame. |
| get_page_textA | Visible text of the page (innerText), including frames. Up to ~80k chars per frame. |
| evaluateA | Evaluate a JavaScript expression in the page (top frame by default) and return its value. Use |
| clickA | Click an element by ref (scrolled into view first) or at viewport coordinates. count=2 double-clicks, count=3 triple-clicks (select paragraph). modifiers like 'shift' or 'cmd+shift'. |
| hoverA | Move the mouse over an element (by ref) or a point, to reveal menus and tooltips. |
| dragC | Drag with the left mouse button from one point to another. |
| typeA | Type text with real key events into the focused element, or into |
| press_keyA | Press keys: 'Enter', 'Tab', 'Escape', 'ArrowDown', 'cmd+a', 'shift+Tab', or several space-separated ('Backspace Backspace Enter'). repeat repeats the whole sequence. |
| form_inputA | Set a form control's value directly (fires input/change): text/textarea, select (option text or value), checkbox/radio (true/false), contenteditable. Prefer |
| scrollB | Scroll with the mouse wheel at a point (default viewport centre) or over a ref. amount = wheel ticks of 100px. |
| scroll_toA | Scroll an element (by ref) into the centre of the viewport. |
| waitA | Wait N seconds (max 10) for the page to settle. |
| read_consoleA | Console messages and uncaught errors buffered since the server connected. |
| read_networkB | Network requests buffered since the server connected: method, status, mime, url. |
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 22 tools
Each tool targets a distinct browser automation concern—tab management, navigation, element discovery, input, scrolling, and diagnostics—so an agent can reliably select the right one. Even similar tools like read_page and find have clear separation: one lists elements, the other searches by selector/text. No two tools appear to do the same job.
Naming is readable but mixes conventions: tabs_* forms a clear prefix group, read_* and get_* group read operations, while interaction tools use bare verbs like click, type, scroll, and hover. This category-based pattern is understandable but not a uniform verb_noun convention.
At 22 tools, the set is comprehensive but on the heavy side, falling into the borderline range for a single server. Most tools are individually justified for browser automation, yet some input-related tools (type, form_input, press_key) could potentially be consolidated.
The surface covers tab lifecycle, navigation, element interaction, scrolling, screenshots, scripting, and diagnostics, which is strong coverage for browser automation. Minor gaps like explicit cookie management, file upload, or waiting for a specific element exist, but agents can work around them with evaluate and wait.