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 MCP server?

ByteDance's agent-infra browser server automates Chrome, Edge or Firefox through Puppeteer using indexed accessibility data, with optional vision mode. The browser mcp mcp server wraps that behind the Model Context Protocol, so an assistant can use it through 23 defined tools rather than through you.

What it actually does

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

Adding it to your client

The server ships on npm as @agent-infra/mcp-server-browser, so your MCP client can launch it on demand — there is no separate build step. Add the server block to your client's configuration, restart it, and the tools register themselves.

Its toolset

Everything the assistant can do here goes through one of these:

  • browser_navigate — Open a URL in the current tab
  • browser_get_clickable_elements — Return the clickable, hoverable and selectable elements on the page with the indices other tools accept
  • browser_click — Click an element by its index from the clickable-elements listing
  • browser_form_input_fill — Fill an input field by index or CSS selector, optionally clearing it first
  • browser_select — Select a value in a dropdown by index or selector
  • browser_hover — Hover an element by index or selector
  • browser_press_key — Send a keyboard key such as Enter, Tab or an arrow key
  • browser_scroll — Scroll the page by a pixel amount, or to the bottom when no amount is given
  • browser_get_markdown — Return the current page rendered as Markdown
  • browser_get_text — Return the plain text content of the current page
  • browser_read_links — List every link on the current page
  • browser_screenshot — Capture the page or a single element, with options for size, full page and highlighting

Configuration

You will need one environment variable: DISPLAY. Keep credentials in your client's env block or a secrets manager rather than in a file you might commit.

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

Caveats

  • It runs with your machine's permissions. That is convenient and also the reason to think about what you point it at before you approve a tool call.
  • With 23 tools registered it takes up a noticeable share of the context window; turn it off in projects that never touch Browser MCP.
  • MCP clients confirm each tool call by default. Leave that on until you have watched what the browser mcp mcp server does with a few real requests.

When to reach for it

Among the browser automation options, the useful question is rarely "what can it do" but "what does it cost you to run" — permissions, credentials, and how much of your context its toolset consumes. Browser MCP's toolset — browser_navigate, browser_get_clickable_elements, browser_click and 20 more — is a fair guide to whether it matches your workflow. It is maintained by ByteDance (agent-infra); worth a glance at recent repository activity before you build anything load-bearing on it.

This entry was verified against Browser MCP's own documentation before publication; SyncDev keeps the directory reviewed rather than auto-generated.

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.

Available tools

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 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.