MCP server for browser automation via Vercel's agent-browser CLI
Runs on your machine from its package; the steps are below.
At most: moves money, runs code or commands, deletes data, or sends messages for you.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally
This server runs on your machine over stdio, but its source registry didn't list a distribution package. Check the source repository for setup instructions.
Status: Beta — CLI wrapper is covered by unit tests and a fake-browser stdio smoke test. Cookie restore across a real Chromium restart is still a manual check.
Let LLMs drive a real browser. This MCP server wraps agent-browser (Vercel Labs) so any MCP client can navigate, fill forms, click, snapshot the accessibility tree, and screenshot.
It is not Grok's web_search / open_page. Those fetch documents. This one runs Chromium. Use search to find a URL, then browser_navigate.
cargo install agent-browser
agent-browser install
Call browser_doctor if anything is missing.
cargo build --release
Binary: target/release/mcp-server-agent-browser
cargo test
./tests/test-stdio.sh
Real Chromium login-restore is not in CI. After a headed login, restart the MCP process and confirm the next browser_navigate is still logged in.
MCP client (stdio):
{
"mcpServers": {
"agent-browser": {
"command": "/path/to/mcp-server-agent-browser"
}
}
}
Optional TOML at ~/.config/mcp-server-agent-browser/config.toml (see config.example.toml). Missing file uses defaults. Override the path with MCP_AGENT_BROWSER_CONFIG.
| Setting | Default | Meaning |
|---|---|---|
headed | false | Show a window. Launch-time only; browser_close first if a headless daemon is already up. Also AGENT_BROWSER_HEADED=1. |
persist | true | Bare --restore per session_id (default session key default) plus --namespace mcp-server. |
keep_daemon | false | If false, MCP exit runs close so restore state is saved and Chrome does not leak. |
namespace | mcp-server | Isolates this MCP's daemon sockets and restore files from a human using the CLI. |
command_timeout_secs | 120 | Wrapper timeout. Playwright's own 25s action timeout is left alone (CLI IPC is ~30s). |
idle_timeout | 1h | Daemon idle shutdown. Use "0" with keep_daemon = true. |
download_dir | ~/Downloads | --download-path. ~ is expanded. |
profile | unset | Optional persistent Chrome user-data dir. Not your daily Chrome profile. |
encryption_key_file | unset | Sets AGENT_BROWSER_ENCRYPTION_KEY. Restore files are credentials; plaintext unless this is set. |
AGENT_BROWSER_PATH | agent-browser | CLI binary. |
allowed_domains is optional. Localhost is allowed unless you set a list that excludes it.
Same interaction set as before (navigate, click, type, snapshot, screenshot, cookies, eval, CDP, sessions), plus:
browser_doctor — CLI, config, persist, headed/DISPLAY, daemon guess. Does not launch Chrome.browser_get_text pattern — regex over page text with two lines of context.browser_wait — load / url / text as well as a selector.Typical loop:
browser_navigatebrowser_snapshot (-i for interactive)browser_click / browser_fill with @refsbrowser_screenshot if you need pixelsWith persist = true (default), each session saves cookies and localStorage on close and on the CLI's autosave interval. State lives under ~/.agent-browser/, namespaced to mcp-server. Isolated session_ids do not share a restore key.
Headed login once, browser_close or exit the MCP, start again. The next navigate should restore that session.
A killed MCP process may leave the daemon running. browser_doctor reports that. Idle shutdown still saves if persist is on.
agent-browser (Playwright). No search.agent-browser install's browser or executable_path./tmp, or under download_dir.MIT