A side-by-side look at the Browser Controller and BRYG MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Browser Controller for browser automation work as a local process; choose BRYG for browser automation as a local process. You can also run both side by side in one mcpServers block.
browser_navigate, browser_tabs, browser_snapshot.browser_tabs, browser_new_tab, browser_close_tab.Rows where the two servers differ are marked.
| Spec | B Browser Controller | |
|---|---|---|
| Category | Browser Automation | Browser Automation |
| Quality signal | 59/100 · Good | 60/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | No auth required | Not declared |
| Pricing | Free | Not declared |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 7 | 0 |
| Directory activity | 0 views 0 installs 0 upvotes | 1 views 0 installs 0 upvotes |
| Tools | 17 | 43 |
| Full listing | View Browser Controller | View BRYG |
browser_navigate- `url` (required): an address (scheme optional: `https://` is added; `http://` for `localhost`, `127.0.0.1` and `[::1]`), or `back`, `forward`, `reload`.browser_tabs- `action`: `list` (default), `close` or `focus`. `close` and `focus` need `tabId`.browser_snapshot- `tabId` (required).browser_text- `tabId` (required); `target` (the element); `maxChars` (20000; 100–100000).browser_screenshot- `tabId` (required); `target` (crop to the element's box); `region` (`{x, y, width, height}` in CSS px, crop to a rectangle).browser_inspect_element- `tabId`, `target` (required).browser_click- `tabId`, `target` (required; a point `x,y` is allowed).browser_type- `tabId` (required); `target`; `text`; `key`; `clear` (false); `submit` (false). Give at least one of `text`, `key`, `clear` or `submit`.browser_fill- `tabId` (required); `fields` (1–50 entries of `{target, value}`; `value` is a string, a number, a boolean or an array of strings).browser_scroll- `tabId` (required); `target`; `dy` and `dx` (pixels).browser_wait- `tabId` (required); exactly one of `target`, `url` or `ms`; `gone` (false; with `target`); `timeout` (10000; 1–50000).browser_evaluate- `tabId`, `expression` (required); `timeout` (5000; 1000–30000).browser_tabsList tabs across all browsers (chrome / edge) with ids, grouped by browser and window.browser_new_tabOpen a new tab (optionally at url); it becomes the current tab. browser: chrome / edge (default: the current browser; launched automatically if not running). window: "current" (default: the window of the current tab), "new" (a new window), or a window id from browser_tabs. isolated=true opens a new window with its own cookies / login state, so different accounts can be signed in at once (gone when the browser closes). Afterwards any tool given that page id is routed to its browser automatically.browser_close_tabClose the given tab.browser_activate_tabBring the given tab to the foreground.browser_navigateNavigate to a URL.browser_reloadReload the page.browser_go_backGo back in history.browser_go_forwardGo forward in history.browser_page_infoReturn url/title/viewport/scroll.browser_snapshotAccessibility-tree snapshot; interactive elements are tagged [ref=N]. On large pages use interactive_only=true (interactive elements only) or query (only lines containing the string) to save tokens; ref numbers stay stable under filtering.browser_click_textClick the element with the given visible text (text-based targeting is more reliable than coordinates; great for cookie banners, popups and buttons, e.g. 'OK').browser_login_fillFill login credentials without exposing them to the conversation. Pass credsFile (path to a credentials file: JSON / key=value / two lines / one line) or user+pass directly; visible username/password fields are auto-detected (override with *Selector). Fills only, never submits - press the login button with click_text afterwards.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"browser-controller": {
"command": "npx",
"args": [
"-y",
"browser-controller"
]
}
}
}
{
"mcpServers": {
"bryg": {
"command": "npx",
"args": [
"-y",
"bryg-mcp"
]
}
}
}