A side-by-side look at the Firefox DevTools MCP and Gecko MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Firefox DevTools MCP for browser automation work as a local process; choose Gecko MCP for browser automation as a local process. You can also run both side by side in one mcpServers block.
list_pages, new_page, navigate_page.list_tabs, open_tab, get_active_tab.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 69/100 · Great | 57/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | Not declared | Not declared |
| Pricing | Not declared | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 506 | 2 |
| Directory activity | 2 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 35 | 41 |
| Full listing | View Firefox DevTools MCP | View Gecko MCP |
list_pagesList open tabs (index, title, URL). Selected tab is marked.new_pageOpen new tab at URL. Returns tab index.navigate_pageNavigate selected tab to URL.select_pageSelect active tab by index, URL, or title. Index takes precedence.close_pageClose tab by index.get_page_textGet the visible text of the page (document.body.innerText). Caps at maxLength (default 20000 chars); saveTo saves the full text to a file.take_snapshotCapture DOM snapshot with stable UIDs. A UID stays valid across snapshots until its element is removed or the page navigates. Output caps at maxLines (default 100); scope with selector or dump the full tree with saveTo.resolve_uid_to_selectorResolve UID to CSS selector. Fails if the element is gone.clear_snapshotClear snapshot UIDs. Usually not needed.click_by_uidClick element by UID. Set dblClick for double-click.hover_by_uidHover over element by UID.fill_by_uidFill text input/textarea by UID.list_tabsList all open tabs in Floorp (title, URL, browserId, and whether each is active or pinned). Use the browserId to target other tools.open_tabOpen a URL in a new Floorp tab.get_active_tabReturn the active tab's title, URL and browserId. Note: with multiple browser windows open, 'active' is ambiguous — prefer the browserId returned by open_tab, or pick from list_tabs.navigate_tabNavigate a tab to a new URL. Targets the active tab unless a browserId is given.close_tabClose a tab by its browserId (from list_tabs).read_pageRead a tab's content. Returns clean Markdown by default; can also return raw HTML or the accessibility tree. Output is capped (default 25 KB) to protect the context — to LOCATE a specific element use `find` (cheaper) instead. Targets the active tab unless a browserId is given.screenshotTake a screenshot of a tab and return it as a PNG image. Targets the active tab unless a browserId is given.findLocate elements on a tab by visible text and/or tag and get a ready-to-use CSS `selector` for each — one fast call that searches the page server-side and returns ~1 KB instead of the whole HTML. Use this INSTEAD of read_page to find a button, link, or field, then pass the returned selector straight to click/type/etc. Provide `text`, `tag`, or both. Active tab unless browserId given.clickClick an element by CSS selector OR by a `ref` (fingerprint) from `snapshot`. Auto-scrolls the element into view first (fixes off-screen 'not actionable'). Targets the active tab unless a browserId is given.snapshotCapture a structured snapshot of a tab: clean Markdown with inline fingerprint refs (`<!--fp:...-->`) and an 'Element Selector Map' (fp | tag | text). Use this instead of read_page+grep to locate elements, then pass a `ref` to `click`. Targets the active tab unless a browserId is given.type_textType text into an input or textarea by CSS selector (clears it first by default). Targets the active tab unless a browserId is given.fill_formFill multiple form fields at once. `fields` maps CSS selectors (or field names) to values. Targets the active tab unless a browserId is given.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"firefox-devtools-mcp": {
"command": "npx",
"args": [
"-y",
"@mozilla/firefox-devtools-mcp@latest"
]
}
}
}
{
"mcpServers": {
"gecko-mcp": {
"command": "npx",
"args": [
"-y",
"gecko-mcp"
]
}
}
}