Vibium

Browser control over MCP for coding agents: navigate, fill forms, read pages, screenshot

By Vibium Go Local · stdio Browser automationTesting

57 popularity score ★ 3.0k ↓ 1.4k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude CodeTerminal
claude mcp add vibium -- npx -y vibium mcp
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "vibium": {
      "command": "npx",
      "args": [
        "-y",
        "vibium",
        "mcp"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "vibium": {
      "command": "npx",
      "args": [
        "-y",
        "vibium",
        "mcp"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "vibium": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "vibium",
        "mcp"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.vibium]
command = "npx"
args = ["-y", "vibium", "mcp"]
Gemini CLITerminal
gemini mcp add --scope user vibium npx -- -y vibium mcp

Settings 6

VIBIUM_ENGINE Optional: Browser to launch: chrome or firefox. Default chrome.
Set together: firefox
VIBIUM_ENGINE_CHANNEL Optional: Firefox channel: release or beta. Firefox only.
VIBIUM_ENGINE_PATH Optional: Path to a Firefox build to use. Firefox only.
VIBIUM_ENGINE_VERSION Optional: Firefox version to use. Firefox only.
Set together: remote
VIBIUM_CONNECT_URL Optional: Remote WebDriver endpoint to use instead of a local browser.
VIBIUM_CONNECT_API_KEY secret Optional: Sent as a Bearer token to the endpoint in VIBIUM_CONNECT_URL.

What it does

Vibium is a browser automation project built around one Go binary. The same program works as a command-line tool, backs client libraries for JavaScript, Python and Java, and runs as a local MCP server when started with `vibium mcp`. In that mode it speaks to the assistant over stdio and drives a real Chrome window on your machine through WebDriver BiDi, the W3C standard, rather than the Chrome DevTools Protocol. Firefox works too.

The npm release you get today (26.8.21) registers 52 tools in its schema file. Most of them are plain page actions. The assistant can open and switch tabs, click, type, fill and select, tick boxes, scroll and press keys. It can also read text, HTML, attribute values and the accessibility tree, and save screenshots or PDFs. A set of eight page_clock tools fakes the page's timers and timezone, which helps when testing anything time-based. `browser_map` gives each interactive element a short @ref such as @e3, so later clicks and fills can point at it without a CSS selector.

The project's README now leads with Run and Check, two AI-backed commands that carry out a goal or judge a claim in the browser. Those are not in the 26.8.21 tool list. The README says they need the development build plus your own model provider settings.

If VIBIUM_CONNECT_URL is set, it attaches to a remote WebDriver endpoint instead of starting a local browser.

What it needs

RuntimeNode.js 18+
Runs onmacOS, Windows, Linux
Also
  • Chrome for Testing, downloaded on first use (Firefox optional)

npx fetches the package, which pulls a prebuilt binary for your platform. The README lists Linux x64, macOS Intel and Apple Silicon, and Windows x64, and the package also carries a Linux arm64 build. If the Chrome download fails, `npx -y vibium install` fetches it again.

Limits

  • Early release Run and Check (vibium_run, vibium_check) are not in the 26.8.21 release. The README says they need the development build and an AI provider setup.
  • Limit Screenshots go to ~/Pictures/Vibium (Pictures\Vibium on Windows) by default. Change it with --screenshot-dir, or pass "" to return them inline only.
  • Limit Tools are discovered at startup, so a changed setup needs a new assistant session.
  • Platform On macOS the downloaded chromedriver can raise a Gatekeeper warning that you clear by hand with xattr.
  • Not covered VIBIUM_ENGINE_CHANNEL, VIBIUM_ENGINE_PATH and VIBIUM_ENGINE_VERSION only work with Firefox. With Chrome it refuses to start if any is set.
  • Not covered No cookie, file upload, download or session recording tools in this release.

Run and Check are described by the README as needing the development build and AI configuration, with their own published limitations. Tool lists are read only at startup, so changes need a new assistant session. Screenshots from the MCP server go to ~/Pictures/Vibium by default, not the project folder. On macOS the downloaded chromedriver can trip a Gatekeeper warning that must be cleared by hand. Platforms other than the four listed are not supported.

Who it suits

Suits developers who want an assistant to open and operate their own web app in a real browser on their machine, for example to see that a change works, and who like a WebDriver BiDi driver that also runs Firefox. The browser tools need no account or key. The fake clock tools make it handy for checking timers and time zones. Pick something else if you want a hosted browser with nothing installed, or only need page text: this starts a full browser, visible unless --headless is given, and its tools click, submit forms and run JavaScript. If you came for the Run and Check commands the README describes, note they are not in the current npm release.

Tools 52

18 only read, 34 change things. A ? marks an optional parameter.

browser_start changes
Starts a browser session, with optional headless mode and Chrome or Firefox engineheadless?: booleanengine?: enumchannel?: enum
browser_navigate changes
Opens a URL in the current pageurl: string
browser_click changes
Clicks an element by CSS selector once it is visible and enabledselector: stringtimeout?: number
browser_type changes
Types text into an elementselector: stringtext: stringtimeout?: number
browser_screenshot changes
Captures the viewport or full page, optionally with numbered element labels, and saves it to the screenshot folderfilename?: stringfullPage?: booleanannotate?: boolean
browser_find
Finds one element by CSS, XPath, role, text, label, placeholder, test id, alt or titleselector?: stringrole?: stringtext?: stringlabel?: stringplaceholder?: stringtestid?: stringxpath?: stringalt?: stringtitle?: stringtimeout?: number
browser_evaluate changes
Runs a JavaScript expression in the page and returns the resultexpression: string
browser_stop changes
Ends the browser session
browser_get_html
Reads the inner or outer HTML of the page or an elementselector?: stringouter?: boolean
browser_find_all
Lists elements matching a CSS selector, 10 by defaultselector: stringlimit?: number
browser_wait
Waits for an element to be attached, visible or hiddenselector: stringstate?: enumtimeout?: number
browser_new_page changes
Opens a new tab, optionally at a URLurl?: string
browser_list_pages
Lists open tabs with their addresses
browser_switch_page changes
Switches to a tab by index or part of its addressindex?: numberurl?: string
browser_close_page changes
Closes a tab, the current one by defaultindex?: number
browser_hover changes
Moves the pointer over an elementselector: stringtimeout?: number
browser_select changes
Picks an option in a select box by valueselector: stringvalue: stringtimeout?: number
browser_scroll changes
Scrolls the page or an element in a given directiondirection?: enumamount?: numberselector?: string
browser_keys changes
Sends a key or key combinationkeys: string
browser_get_text
Reads the text of the page or an elementselector?: string
browser_get_url
Returns the current address
browser_get_title
Returns the page title
browser_a11y_tree
Returns the accessibility tree of the pageeverything?: boolean
page_clock_install changes
Replaces the page clock and timers with a fake one, optionally with a start time and timezonetime?: numbertimezone?: string
page_clock_fast_forward changes
Jumps the fake clock ahead, firing each due timer onceticks: number
page_clock_run_for changes
Advances the fake clock and runs every timer that falls dueticks: number
page_clock_pause_at changes
Moves the fake clock to a time and holds it theretime: number
page_clock_resume changes
Lets the fake clock run in real time again
page_clock_set_fixed_time changes
Freezes Date.now() at one value while timers keep runningtime: number
page_clock_set_system_time changes
Sets Date.now() without firing timerstime: number
page_clock_set_timezone changes
Overrides the browser timezone, or resets it with an empty stringtimezone: string
browser_fill changes
Clears an input and enters new textselector: stringtext: stringtimeout?: number
browser_press changes
Presses a key on an element or on whatever has focuskey: stringselector?: string
browser_back changes
Goes back in history
browser_forward changes
Goes forward in history
browser_reload changes
Reloads the page and waits for it to load
browser_get_value
Reads the current value of a form fieldselector: string
browser_get_attribute
Reads one attribute of an elementselector: stringattribute: string
browser_is_visible
Reports whether an element is visibleselector: string
browser_check changes
Ticks a checkbox or radio button if it is not already tickedselector: stringtimeout?: number
browser_uncheck changes
Unticks a checkbox if it is tickedselector: stringtimeout?: number
browser_scroll_into_view changes
Scrolls an element to the middle of the screenselector: stringtimeout?: number
browser_wait_for_url
Waits until the address contains given textpattern: stringtimeout?: number
browser_wait_for_load
Waits for the page to finish loadingtimeout?: number
browser_sleep
Pauses for a number of milliseconds, up to 30000ms: number
browser_map
Lists interactive elements with short @refs that other tools accept as selectorsselector?: string
browser_diff_map
Shows elements added or removed since the last map
browser_pdf changes
Saves the current page as a PDF filefilename?: string
browser_highlight changes
Outlines an element in red for three secondsselector: string
browser_dblclick changes
Double-clicks an element by selector or @refselector: stringtimeout?: number
browser_focus changes
Gives focus to an elementselector: stringtimeout?: number
browser_count
Counts elements matching a CSS selectorselector: string

Similar servers