{"slug": "bruster-rust-browser-automation-tool-and-mcp", "title": "Bruster – Rust browser automation tool and MCP", "summary": "Bruster, an open-source browser automation tool and Model Context Protocol (MCP) server written in Rust, has been released by developer aliilyas, letting AI agents, Python scripts, and test runners control native webviews on macOS (WKWebView), Linux (WebKitGTK), and Windows (WebView2) without Node.js. Bruster ships a built-in runner for a line-oriented `.bru` test DSL, a JSON-lines API, a Docker image for amd64 and arm64, and MCP configuration for Claude Desktop and Cursor, with install scripts for macOS and Linux. The release matters for developers building agent-driven workflows or smoke tests who want browser control through MCP or a lightweight native-webview stack instead of Playwright's Node.js dependency.", "body_md": "**Bruster is an open-source Rust browser automation tool and Model Context\nProtocol (MCP) server.** Control native webviews from AI agents, Python scripts,\nor your own test runner through MCP or a JSON-lines API. No Node.js required.\n\n[Documentation](https://aliilyas.github.io/bruster/docs/) ·\n[UI testing](https://aliilyas.github.io/bruster/testing/) ·\n[MCP setup](https://aliilyas.github.io/bruster/mcp/) ·\n[Compare with Playwright](https://aliilyas.github.io/bruster/compare/) ·\n[Benchmarks](https://aliilyas.github.io/bruster/benchmarks/) ·\n[Releases](https://github.com/aliilyas/bruster/releases/latest)\n\nNavigate pages, inspect the DOM, fill forms, take screenshots, and manage tabs\nand persistent sessions on macOS (WKWebView), Linux (WebKitGTK), and Windows\n(WebView2). Bruster fits native-webview scripts, focused smoke tests, and\nagent-driven workflows. Run `.bru` tests with the built-in runner or use your own.\n\nFor AI tools: [documentation index](https://aliilyas.github.io/bruster/llms.txt) ·\n[full CLI and API reference](https://aliilyas.github.io/bruster/llms-full.txt).\n\nScripted MCP session with real WebKitGTK captures. [Try the demo](https://github.com/aliilyas/bruster/blob/main/launch/README.md#try-the-demo).\n\nOn macOS and Linux:\n\n```\ncurl -fsSL https://raw.githubusercontent.com/aliilyas/bruster/main/install.sh | sh\nexport PATH=\"$HOME/.local/bin:$PATH\"\n```\n\nLinux also needs WebKitGTK 4.1. On Ubuntu or Debian:\n\n```\nsudo apt install libwebkit2gtk-4.1-0\n```\n\nWithout a desktop display, also install `xvfb` and `xauth`.\n[Other Linux distributions](https://aliilyas.github.io/bruster/docs/#linux).\n\nOn Windows, download an archive from [Releases](https://github.com/aliilyas/bruster/releases/latest)\nand install the [WebView2 runtime](https://developer.microsoft.com/en-us/microsoft-edge/webview2/).\n\nThe [Docker image](https://hub.docker.com/r/ilyastmn/bruster) includes the Linux\nbrowser runtime and virtual display for amd64 and arm64:\n\n```\ndocker run --rm -i ilyastmn/bruster:latest\n```\n\nStarts an MCP server over stdio. [Docker client setup](https://aliilyas.github.io/bruster/mcp/#docker).\n\nAdd this server to Claude Desktop's `claude_desktop_config.json` or Cursor's `.cursor/mcp.json`:\n\n```\n{\n  \"mcpServers\": {\n    \"bruster\": {\n      \"command\": \"bruster\",\n      \"args\": [\"--mcp\", \"--quiet\"]\n    }\n  }\n}\n```\n\nUse the executable's absolute path if your client cannot find `bruster`.\nAdd `--visible` to watch the browser or `--profile ./profile` to save cookies and storage.\n\n[Setup for other clients and troubleshooting](https://aliilyas.github.io/bruster/mcp/).\n\nRun `bruster`, then send requests on stdin, waiting for each response before the next request:\n\n```\n{\"id\":1,\"method\":\"navigate\",\"params\":{\"url\":\"https://example.com\"}}\n{\"id\":2,\"method\":\"snapshot\",\"params\":{\"format\":\"text\"}}\n{\"id\":3,\"method\":\"screenshot\",\"params\":{\"path\":\"example.png\"}}\n{\"id\":4,\"method\":\"close\"}\n```\n\nResponses carry the matching `id`; page events also arrive on stdout.\n[Protocol and API reference](https://github.com/aliilyas/bruster/blob/main/docs/reference.md#protocol).\n\nBruster includes a compact, line-oriented DSL for repeatable UI checks. It handles\nbrowser startup, waits, assertions, and failure evidence so you can focus on the\nflow being tested. Write a `login.bru` file:\n\n```\nbase_url \"http://localhost:3000\"\n\ntest \"opens the dashboard\"\n  navigate \"/login\"\n  fill \"#email\" \"tester@example.com\"\n  fill \"#password\" \"test-password\"\n  click \"button[type=submit]\"\n  expect url \"/dashboard\"\n  expect text \"h1\" \"Dashboard\"\nend\n```\n\nRun `bruster test login.bru`. Assertions retry until their deadline; each test\ngets a fresh browser and profile. Failures include source lines, screenshots,\nand page diagnostics. The runner writes a JSON report and returns a nonzero exit\ncode on failure. No Node.js or Python is needed to run tests.\n\nUse `before_each` for shared setup and `--base-url` to run the same tests against\nanother environment. The time savings are in authoring and debugging tests.\n\nThe runner is available in source builds from `main`; older release binaries may\nnot include `bruster test` yet.\n\nBruster uses WKWebView on macOS, WebKitGTK on Linux, and WebView2 on Windows.\nInput events are synthetic; cross-origin iframes and OS-level controls aren't supported.\nSee the [full limitations](https://github.com/aliilyas/bruster/blob/main/docs/reference.md#limits) when choosing a browser backend.\n\nBuild with `cargo build --release --locked`.\nSee [Contributing](https://github.com/aliilyas/bruster/blob/main/CONTRIBUTING.md) for dependencies, tests, and documentation changes.\n\n[Dependency security checks](https://github.com/aliilyas/bruster/blob/main/docs/dependency-security.md): daily RustSec,\ncargo-deny, OSV-Scanner, and Trivy scans, plus Dependabot and Socket setup.", "url": "https://wpnews.pro/news/bruster-rust-browser-automation-tool-and-mcp", "canonical_source": "https://github.com/aliilyas/bruster", "published_at": "2026-11-05 23:38:37+00:00", "updated_at": "2026-11-05 23:50:23.915370+00:00", "lang": "en", "topics": ["ai-agents", "agent-protocols", "developer-tools", "ai-tools"], "entities": ["Bruster", "aliilyas", "Model Context Protocol", "Claude Desktop", "Cursor", "WKWebView", "WebKitGTK", "WebView2"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/bruster-rust-browser-automation-tool-and-mcp", "markdown": "https://wpnews.pro/news/bruster-rust-browser-automation-tool-and-mcp.md", "text": "https://wpnews.pro/news/bruster-rust-browser-automation-tool-and-mcp.txt", "jsonld": "https://wpnews.pro/news/bruster-rust-browser-automation-tool-and-mcp.jsonld"}}