In-depth architectural comparison of the BrowserTap MCP and Firefox Devtools MCP MCP servers. Compare execution transports, security boundaries, tool capabilities, quality scores, and ready-to-paste client installation snippets for Claude, Cursor, Windsurf, and VS Code.
At a Glance & Executive Verdict
BrowserTap MCP
Browser Automation · Local stdio
Quality: 53/100 (Good) | Auth: No auth required
Firefox Devtools MCP
Browser Automation · Local stdio
Quality: 65/100 (Great) | Auth: No auth required
Verdict Summary: Choose BrowserTap MCP if you need specialized Browser Automation tools running via a local process. Choose Firefox Devtools MCP if your workspace requires Browser Automation integration with local subprocess execution. Both servers can be configured concurrently in your client's mcpServers manifest.
Which MCP Server Should You Choose?
Choose BrowserTap MCP when:
You need dedicated capabilities in the Browser Automation domain.
You prefer local stdio subprocess transport architecture.
Your security boundary fits: No auth required (Free / Open Source).
report `package_version`, `bridge_version`, `extension_version`, `protocol_version`, connection state, ports, tabs, and the required recovery action. A missing bridge listener is started automatically when spawning is enabled; `restart_bridge_required=true` means a bridge that is still running must…
get_automation_profile
inspect whether the current MCP process uses `lab` or `safe`.
set_automation_profile
switch the current MCP process between `lab|safe`; the override is not persisted and does not reload the extension.
list_tabs
list connected tabs under `data.tabs`, including their full session handles and `browser` fields. Answers while another tool is still running; `default_session_id` is this request's snapshot of the MCP process default and `default_session_settled=true`. Parallel agents should still pass an explicit…
list_all_tabs
Ready-to-Paste Client Configurations
Paste either (or both) of these JSON server blocks into your client config file (e.g. claude_desktop_config.json or ~/.cursor/mcp.json).
BrowserTap MCP is categorized under Browser Automation and uses a local stdio subprocess. In contrast, Firefox Devtools MCP belongs to Browser Automation using local stdio subprocess. Select BrowserTap MCP when you need capabilities focused on browser automation and Firefox Devtools MCP when you require tools for browser automation.
*(no tab needed)* list every open tab, including `chrome-extension://` pages that `list_tabs` hides. Those never become sessions, so they have no session id; drive them with `cdp_command(tab_id=...)`.
switch_tab
set this MCP process's *target* tab for later calls. A `url_pattern` must match exactly one tab; if several match, select one with its full `session_id`. A `browser` filter matching multiple profiles also requires an explicit `session_id`. It does **not** raise the tab or focus the browser: `activa…
activate_tab
bring a tab to the foreground and focus its window. This is the explicit way to raise a tab, and the only one that does not involve approving physical input. Check `on_screen` in the reply: BTAP first asks Windows to restore a minimised browser, but `on_screen=false` means visibility still could no…
open_url
navigate the current tab. Global behavior remains `dismiss`; lab automatically accepts beforeunload on configured shell/IDE hosts. If the extension's `navigate` route is unavailable on a heavy SPA, BTAP falls back to `Page.navigate`. A CDP result with `isDownload=true` returns `{type:"download",sta…
download_file
download an HTTP(S) URL through Chrome's native download manager, using that browser profile's cookies and authenticated session. It waits by default and returns `status="completed"` plus a verified absolute `path`; interrupted downloads return `failed`, while a timeout or `wait=false` returns `in_…
open_new_tab
open a background tab in this MCP process's selected browser/profile, unless `session_id` or `client_id` selects another. Creates a unique `operation_id` and waits a bounded time for exact session/generation registration; pass `active=true` for foreground work. Returns `{operation_id,tab_id,session…
close_tabs
*(no tab needed)* accept native numeric tab ids or full `client:tabId` session ids, including `chrome-extension://` tabs. The default `only_if_agent_owned=true` requires the `owner_id` returned by `open_new_tab` and verifies the current lifecycle generation before closing, so pre-existing user tabs…
scan_page
read the page as simplified HTML or text. Returns `links` mapping each `#rN` ref in the content to its absolute URL, and `offscreen` + `hint` when content was left outside the viewport. A background tab may report viewport height zero; ordinary DOM/text/API work still continues there, and only visu…
+39 more tools listed on main page
Firefox Devtools MCP Tools (34)
list_pages
List open tabs (index, title, URL). Selected tab is marked.
new_page
Open new tab at URL. Returns tab index.
navigate_page
Navigate selected tab to URL.
select_page
Select active tab by index, URL, or title. Index takes precedence.
close_page
Close tab by index.
get_page_text
Get the visible text of the page (document.body.innerText). Caps at maxLength (default 20000 chars); saveTo saves the full text to a file.
take_snapshot
Capture 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_selector
Resolve UID to CSS selector. Fails if the element is gone.
clear_snapshot
Clear snapshot UIDs. Usually not needed.
click_by_uid
Click element by UID. Set dblClick for double-click.