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
Tabs — browser_list_tabs (id/title/url of every tab, all windows),
browser_select_tab, browser_new_tab, browser_close_tab.
Navigation — browser_navigate, browser_go_back, browser_go_forward,
browser_reload.
Inspection & extraction —
browser_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 / API — browser_get_network (captured requests with method, url,
status, content-type, request & response bodies), browser_clear_network.
Interaction — browser_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.
Status — browser_status.
Examples (what an agent can do)
- "List my tabs, then read the article in the tab with 'wikipedia' in its url":
browser_list_tabs→browser_get_text(tab="wikipedia"). - "Grab all product prices":
browser_query(selector=".price")orbrowser_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)
| File | Size | Uploaded | |
|---|---|---|---|
| firefox_browser_mcp-0.2.0.tar.gz | 9.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|