Browser MCP Server

Puppeteer-powered browser control that drives pages from the accessibility tree instead of pixels.

Local + remotestdiossestreamable-httpTypeScriptApache-2.0★ 38.4k

What is the Browser MCP Server?

ByteDance's agent-infra browser server automates Chrome, Edge or Firefox through Puppeteer using indexed accessibility data, with optional vision mode.

Configuration

Node.js 18 or newer and an MCP-compatible client. Headless Linux hosts need a virtual display if you run the browser headed.

More MCP options

Compare MCP servers by category, or browse hosted MCP servers if you prefer an endpoint over a local process.

Maintainer setup documentation.

What you can do with it

Structured scraping without a parser

Point the agent at a listing page, pull it as Markdown, and let the model extract fields — no CSS selectors to maintain when the site redesigns.

End-to-end flow testing

Walk a signup or checkout journey by index, assert on the text that appears, and capture a screenshot at each step for the report.

Shared remote browser for a team of agents

Start the server with --port and DISPLAY set inside a container, then have several clients connect over streamable HTTP with per-request viewport headers.

Embedding a browser in a TypeScript agent

Use createServer() with InMemoryTransport so your own Node application ships browser tools without asking users to install a CLI.

Recorded tools

Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.

ToolWhat it does
browser_navigateOpen a URL in the current tab.
browser_get_clickable_elementsReturn the clickable, hoverable and selectable elements on the page with the indices other tools accept.
browser_clickClick an element by its index from the clickable-elements listing.
browser_form_input_fillFill an input field by index or CSS selector, optionally clearing it first.
browser_selectSelect a value in a dropdown by index or selector.
browser_hoverHover an element by index or selector.
browser_press_keySend a keyboard key such as Enter, Tab or an arrow key.
browser_scrollScroll the page by a pixel amount, or to the bottom when no amount is given.
browser_get_markdownReturn the current page rendered as Markdown.
browser_get_textReturn the plain text content of the current page.
browser_read_linksList every link on the current page.
browser_screenshotCapture the page or a single element, with options for size, full page and highlighting.
browser_evaluateExecute JavaScript in the page context.
browser_new_tabOpen a URL in a new tab.
browser_switch_tabSwitch to a tab by index.
browser_tab_listList the open tabs.
browser_close_tabClose the active tab.
browser_go_backNavigate back in history.
browser_go_forwardNavigate forward in history.
browser_get_download_listList files downloaded during the session.
browser_vision_screen_captureTake a screenshot intended for vision-mode coordinate clicking.
browser_vision_screen_clickClick at x/y coordinates produced by a vision model, with optional coordinate scaling factors.
browser_closeShut the browser down when the task is finished.

How to install the Browser MCP Server

{
  "mcpServers": {
    "browser": {
      "command": "npx",
      "args": ["@agent-infra/mcp-server-browser@latest"]
    }
  }
}

Configuration

Node.js 18 or newer and an MCP-compatible client. Headless Linux hosts need a virtual display if you run the browser headed.

VariableDescriptionRequired
DISPLAYX display to use when running headed on a headless Linux host, typically alongside a VNC or virtual framebuffer setup.e.g. :0Optional

Example prompts to try

  • “Open this product page, list every visible pricing tier and what each one includes, then take a full-page screenshot.”
  • “Log into the demo site with these test credentials and tell me what the dashboard shows after the first load.”
  • “Search this documentation site for 'rate limit' and give me the page content as Markdown.”
  • “Fill out the contact form with the details below, submit it, and report back what confirmation message appears.”

Frequently asked questions

No. By default it operates entirely on Puppeteer's accessibility snapshot and an element index, so text-only models can drive it. Vision mode is opt-in with the --vision flag and only makes sense when a layout genuinely cannot be understood from structured data.