Skip to main content

Firefox Browser MCP — Server

An MCP server that lets an LLM client drive a real Firefox browser — every tab, its DOM, arbitrary CSS selectors, and its network/API traffic. It talks to the companion firefox-extension/ WebExtension over a local WebSocket bridge.

MCP client (Claude Desktop, etc.)
        │  stdio (MCP)
        ▼
firefox-browser-mcp  ──ws://127.0.0.1:9010──►  Firefox extension  ──►  All tabs

Run with uvx

uvx --from ./mcp-server firefox-browser-mcp

Once published to PyPI: uvx firefox-browser-mcp.

CLI options

Connection settings can be passed as arguments (they override the FBMCP_* env vars):

uvx firefox-browser-mcp --host 127.0.0.1 --port 9010 --log-level INFO
uvx firefox-browser-mcp --version
uvx firefox-browser-mcp --help
Flag Default Env fallback
--host 127.0.0.1 FBMCP_HOST
--port 9010 FBMCP_PORT
--log-level INFO FBMCP_LOG_LEVEL

The Firefox extension connects to this bridge; use the extension popup's Enable/Disable toggle to turn the connection on or off.

Configure your MCP client

{
  "mcpServers": {
    "firefox-browser": {
      "command": "uvx",
      "args": ["--from", "/absolute/path/to/mcp-server", "firefox-browser-mcp"]
    }
  }
}

Targeting tabs

Every tab has a stable numeric id (plus title and url). Get them with browser_list_tabs. Most tools accept an optional tab argument:

tab value Meaning
omitted the currently active tab
123 / "123" the tab whose id is 123
"github.com" first tab whose url contains it
"Inbox" first tab whose title contains it

Environment variables

Variable Default Description
FBMCP_HOST 127.0.0.1 WebSocket bridge host
FBMCP_PORT 9010 WebSocket bridge port
FBMCP_LOG_LEVEL INFO Python logging level

If you change the port, update the bridge URL in the extension popup.

Tools

Tabsbrowser_list_tabs (id/title/url of every tab, all windows), browser_select_tab, browser_new_tab, browser_close_tab.

Navigationbrowser_navigate, browser_go_back, browser_go_forward, browser_reload.

Inspection & extractionbrowser_snapshot (accessibility tree with ref ids), browser_query (any CSS selector → refs, text, attributes, html), browser_get_text, browser_get_html, browser_get_attribute, browser_eval (run JS and return the result), browser_get_url, browser_screenshot, browser_get_console_logs.

Network / APIbrowser_get_network (captured requests with method, url, status, content-type, request & response bodies), browser_clear_network.

Interactionbrowser_click, browser_type, browser_hover, browser_select_option, browser_press_key, browser_scroll, browser_wait. Interaction tools accept either a ref (from snapshot/query) or a CSS selector.

Statusbrowser_status.

Examples (what an agent can do)

  • "List my tabs, then read the article in the tab with 'wikipedia' in its url": browser_list_tabsbrowser_get_text(tab="wikipedia").
  • "Grab all product prices": browser_query(selector=".price") or browser_eval(script="return Array.from(document.querySelectorAll('.price')).map(e=>e.textContent)").
  • "Show the API calls this page made": browser_get_network(filter="xmlhttprequest") (includes JSON response bodies).
  • "Log into the form": browser_type(selector="#email", text=...), browser_type(selector="#password", text=..., submit=True).

Development

cd mcp-server
uv venv && source .venv/bin/activate
uv pip install -e .
python -m firefox_browser_mcp.server

Release files for firefox-browser-mcp 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for firefox-browser-mcp 0.2.0
File Size Uploaded
firefox_browser_mcp-0.2.0.tar.gz 9.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for firefox-browser-mcp 0.2.0
File Interpreter ABI Platform
firefox_browser_mcp-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 20.2 kB

Release files / firefox_browser_mcp-0.2.0.tar.gz

Download URL firefox_browser_mcp-0.2.0.tar.gz
Size 9.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c38988be97e291b64a1147e01ed12245e31cdde0f88b52dd0319dac2ea067c6f
BLAKE2b-256 checksum
How to use checksums
b87dcd85fd79335214f64f16b14cf1c066c5ec1f9ecd0c02eb541e2281f664d0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.14

Release files / firefox_browser_mcp-0.2.0-py3-none-any.whl

Download URL firefox_browser_mcp-0.2.0-py3-none-any.whl
Size 10.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f61e446fa234e89682168ef2be47d8304acee5dc9cc56a4562f9b30bf1afccad
BLAKE2b-256 checksum
How to use checksums
24593a4c3d85855699aa947c00c07735fc1f359ea24eea2ddf52378c8b4534bd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page