BrowserTools MCP
Streams console, network, screenshots and Lighthouse audits from your own Chrome tabs to an MCP client
Browser control over MCP for coding agents: navigate, fill forms, read pages, screenshot
By Vibium Go Local · stdio Browser automationTesting
57 popularity score ★ 3.0k ↓ 1.4k/wk
Opens the app, which asks before it adds the server.
claude mcp add vibium -- npx -y vibium mcp{
"mcpServers": {
"vibium": {
"command": "npx",
"args": [
"-y",
"vibium",
"mcp"
]
}
}
}{
"mcpServers": {
"vibium": {
"command": "npx",
"args": [
"-y",
"vibium",
"mcp"
]
}
}
}{
"servers": {
"vibium": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"vibium",
"mcp"
]
}
}
}[mcp_servers.vibium]
command = "npx"
args = ["-y", "vibium", "mcp"]gemini mcp add --scope user vibium npx -- -y vibium mcpVIBIUM_ENGINE |
Optional: Browser to launch: chrome or firefox. |
|---|---|
| Set together: firefox | |
VIBIUM_ENGINE_CHANNEL |
Optional: Firefox channel: release or beta. Firefox only. |
VIBIUM_ENGINE_PATH |
Optional: Path to a Firefox build to use. Firefox only. |
VIBIUM_ENGINE_VERSION |
Optional: Firefox version to use. Firefox only. |
| Set together: remote | |
VIBIUM_CONNECT_URL |
Optional: Remote WebDriver endpoint to use instead of a local browser. |
VIBIUM_CONNECT_API_KEY secret |
Optional: Sent as a Bearer token to the endpoint in VIBIUM_CONNECT_URL. |
Vibium is a browser automation project built around one Go binary. The same program works as a command-line tool, backs client libraries for JavaScript, Python and Java, and runs as a local MCP server when started with `vibium mcp`. In that mode it speaks to the assistant over stdio and drives a real Chrome window on your machine through WebDriver BiDi, the W3C standard, rather than the Chrome DevTools Protocol. Firefox works too.
The npm release you get today (26.8.21) registers 52 tools in its schema file. Most of them are plain page actions. The assistant can open and switch tabs, click, type, fill and select, tick boxes, scroll and press keys. It can also read text, HTML, attribute values and the accessibility tree, and save screenshots or PDFs. A set of eight page_clock tools fakes the page's timers and timezone, which helps when testing anything time-based. `browser_map` gives each interactive element a short @ref such as @e3, so later clicks and fills can point at it without a CSS selector.
The project's README now leads with Run and Check, two AI-backed commands that carry out a goal or judge a claim in the browser. Those are not in the 26.8.21 tool list. The README says they need the development build plus your own model provider settings.
If VIBIUM_CONNECT_URL is set, it attaches to a remote WebDriver endpoint instead of starting a local browser.
| Runtime | Node.js 18+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Also |
|
npx fetches the package, which pulls a prebuilt binary for your platform. The README lists Linux x64, macOS Intel and Apple Silicon, and Windows x64, and the package also carries a Linux arm64 build. If the Chrome download fails, `npx -y vibium install` fetches it again.
Run and Check are described by the README as needing the development build and AI configuration, with their own published limitations. Tool lists are read only at startup, so changes need a new assistant session. Screenshots from the MCP server go to ~/Pictures/Vibium by default, not the project folder. On macOS the downloaded chromedriver can trip a Gatekeeper warning that must be cleared by hand. Platforms other than the four listed are not supported.
Suits developers who want an assistant to open and operate their own web app in a real browser on their machine, for example to see that a change works, and who like a WebDriver BiDi driver that also runs Firefox. The browser tools need no account or key. The fake clock tools make it handy for checking timers and time zones. Pick something else if you want a hosted browser with nothing installed, or only need page text: this starts a full browser, visible unless --headless is given, and its tools click, submit forms and run JavaScript. If you came for the Run and Check commands the README describes, note they are not in the current npm release.
18 only read, 34 change things. A ? marks an optional parameter.
browser_start changesheadless?: booleanengine?: enumchannel?: enumbrowser_navigate changesurl: stringbrowser_click changesselector: stringtimeout?: numberbrowser_type changesselector: stringtext: stringtimeout?: numberbrowser_screenshot changesfilename?: stringfullPage?: booleanannotate?: booleanbrowser_findselector?: stringrole?: stringtext?: stringlabel?: stringplaceholder?: stringtestid?: stringxpath?: stringalt?: stringtitle?: stringtimeout?: numberbrowser_evaluate changesexpression: stringbrowser_stop changesbrowser_get_htmlselector?: stringouter?: booleanbrowser_find_allselector: stringlimit?: numberbrowser_waitselector: stringstate?: enumtimeout?: numberbrowser_new_page changesurl?: stringbrowser_list_pagesbrowser_switch_page changesindex?: numberurl?: stringbrowser_close_page changesindex?: numberbrowser_hover changesselector: stringtimeout?: numberbrowser_select changesselector: stringvalue: stringtimeout?: numberbrowser_scroll changesdirection?: enumamount?: numberselector?: stringbrowser_keys changeskeys: stringbrowser_get_textselector?: stringbrowser_get_urlbrowser_get_titlebrowser_a11y_treeeverything?: booleanpage_clock_install changestime?: numbertimezone?: stringpage_clock_fast_forward changesticks: numberpage_clock_run_for changesticks: numberpage_clock_pause_at changestime: numberpage_clock_resume changespage_clock_set_fixed_time changestime: numberpage_clock_set_system_time changestime: numberpage_clock_set_timezone changestimezone: stringbrowser_fill changesselector: stringtext: stringtimeout?: numberbrowser_press changeskey: stringselector?: stringbrowser_back changesbrowser_forward changesbrowser_reload changesbrowser_get_valueselector: stringbrowser_get_attributeselector: stringattribute: stringbrowser_is_visibleselector: stringbrowser_check changesselector: stringtimeout?: numberbrowser_uncheck changesselector: stringtimeout?: numberbrowser_scroll_into_view changesselector: stringtimeout?: numberbrowser_wait_for_urlpattern: stringtimeout?: numberbrowser_wait_for_loadtimeout?: numberbrowser_sleepms: numberbrowser_mapselector?: stringbrowser_diff_mapbrowser_pdf changesfilename?: stringbrowser_highlight changesselector: stringbrowser_dblclick changesselector: stringtimeout?: numberbrowser_focus changesselector: stringtimeout?: numberbrowser_countselector: string