Bruster is an open-source Rust browser automation tool and Model Context Protocol (MCP) server. Control native webviews from AI agents, Python scripts, or your own test runner through MCP or a JSON-lines API. No Node.js required.
Documentation · MCP setup · Compare with Playwright · Benchmarks · Releases
Navigate pages, inspect the DOM, fill forms, take screenshots, and manage tabs and persistent sessions on macOS (WKWebView), Linux (WebKitGTK), and Windows (WebView2). Bruster fits native-webview scripts, focused smoke tests, and agent-driven workflows; bring your own assertions and test runner.
For AI tools: documentation index · full CLI and API reference.
Scripted MCP session. Try the demo.
On macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/aliilyas/bruster/main/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"Linux also needs WebKitGTK 4.1. On Ubuntu or Debian:
sudo apt install libwebkit2gtk-4.1-0Without a desktop display, also install xvfb and xauth.
Other Linux distributions.
On Windows, download an archive from Releases and install the WebView2 runtime.
The Docker image includes the Linux browser runtime and virtual display for amd64 and arm64:
docker run --rm -i ilyastmn/bruster:latestStarts an MCP server over stdio. Docker client setup.
Add this server to Claude Desktop's claude_desktop_config.json or Cursor's .cursor/mcp.json:
{
"mcpServers": {
"bruster": {
"command": "bruster",
"args": ["--mcp", "--quiet"]
}
}
}Use the executable's absolute path if your client cannot find bruster.
Add --visible to watch the browser or --profile ./profile to save cookies and storage.
Setup for other clients and troubleshooting.
Run bruster, then send requests on stdin, waiting for each response before the next request:
{"id":1,"method":"navigate","params":{"url":"https://example.com"}}
{"id":2,"method":"snapshot","params":{"format":"text"}}
{"id":3,"method":"screenshot","params":{"path":"example.png"}}
{"id":4,"method":"close"}Responses carry the matching id; page events also arrive on stdout.
Protocol and API reference.
Bruster uses WKWebView on macOS, WebKitGTK on Linux, and WebView2 on Windows. Input events are synthetic; cross-origin iframes and OS-level controls aren't supported. See the full limitations when choosing a browser backend.
Build with cargo build --release --locked.
See Contributing for dependencies, tests, and documentation changes.
