This is a port of chrome-devtools-mcp to Rust and gives your agent the ability to drive Chrome and Chromium based browsers.
I have plans to implement the W3C web driver spec to enable driving other browsers, but this is a good starting point for now.
This is distributed as a single binary with no runtime or external dependencies. Just download it, add it to your $PATH, register it in your harnesses, and never think about it again.
Download the binary from GitHub Releases, put it under $HOME/.local/bin and add it to your $PATH
# Linux AMD64 (Change for your platform)
curl -L --url https://github.com/alshdavid/browser-mcp/releases/latest/download/browser-mcp-linux-amd64.tar.gz | tar -xvzf - -C $HOME/.local/bin
# Add to PATH if not already there:
echo "\nexport \PATH=\$PATH:\$HOME/.local/bin\n" >> $HOME/.zshrc
echo "\nexport \PATH=\$PATH:\$HOME/.local/bin\n" >> $HOME/.bashrcOnce installed, run browser-mcp update and it will self-update.
# Launch a new Chrome instance (default)
browser-mcp stdio
# Launch headless
browser-mcp stdio --headless
# Use a specific Chrome binary
browser-mcp stdio --chrome-binary-path /usr/bin/chromium
# Attach to your running Chrome instead of launching one
browser-mcp stdio --auto-connect--auto-connect (alias --autoConnect) attaches to the Chrome you already have
open, signing in with your existing profile. Start Chrome at least once and
enable the remote debugging server at chrome://inspect/#remote-debugging; the
port Chrome writes to its profile's DevToolsActivePort file is what the flag
connects to. Chrome is left running when the server exits.
Starting the server does not start Chrome. The browser is launched, or attached to, on the first tool call that needs it, and that instance is then reused for the life of the process. A session that never calls a tool never opens a browser, and the first tool call pays the startup cost once.
Call list_pages to see the tabs that are already open, or new_page to open
one. The other page-scoped tools address a page by the id that either returns.
select_page marks a page as selected, which list_pages reports, and can bring
its tab to the front.