A MCP server tailored for browser use, enabling browser-based access to MCP functionality. It exposes a browser-friendly interface and tooling to operate MCP-server features within a web context.
🛠️ Key Features
Browser-oriented MCP server for browser use access
GUI operator and GUI agent support
Multimodal and vision-oriented capabilities
Integrates with agent, vlm, and computer-use workflows
🚀 Use Cases
Browser-based MCP server experiments and demonstrations
GUI-driven MCP server management and operation
Multimodal agent interactions within a browser environment
⚡ Developer Benefits
Clear browser-use MCP server implementation reference
Topics indicate alignment with GUI-operator, UI-TARS, and agent workflows
Readme excerpt provides quick-start and installation cues
⚠️ Limitations
Limited details in the excerpt; exact architecture and runtime requirements are not specified
May require additional repository sources for full setup instructions
A fast, lightweight Model Context Protocol (MCP) server that empowers LLMs with browser automation via Puppeteer’s structured accessibility data, featuring optional vision mode for complex visual understanding and flexible, cross-platform configuration.
image
Key Features
⚡ Fast & lightweight. Utilizes Puppeteer's label index, not pixel-based input and accessibility DOM tree.
👁️ Vision Mode Support. Optional visual understanding capabilities for complex layouts and visual elements when structured data isn't sufficient.
🤖 LLM-optimized. No vision models needed, operates purely on structured data, less context reducing context token usage.
🧩 Flexible Runtime Configuration. Customize viewport size, coordinate system factors, and User-Agent at runtime via HTTP headers.
🌐 Cross-Platform & Extensible. Support for remote and local browsers, the use of a custom browser engine.
Requirements
Node.js 18 or newer
VS Code, Cursor, Windsurf, Claude Desktop or any other MCP client
Getting started
Local (Stdio)
First, install the Browser MCP server with your client. A typical configuration looks like this:
You can also install the Browser MCP server using the VS Code CLI:
bash
# For VS Code
code --add-mcp '{"name":"browser","command":"npx","args":["@agent-infra/mcp-server-browser@latest"]}'
After installation, the Browser MCP server will be available for use with your GitHub Copilot agent in VS Code.
Install in Cursor
Go to Cursor Settings -> MCP -> Add new MCP Server. Name to your liking, use command type with the command npx @agent-infra/mcp-server-browser. You can also verify config or add command like arguments via clicking Edit.
At the same time, use --port $your_port arg to start the browser mcp can be converted into SSE and Streamable HTTP Server.
bash
# normal run remote mcp server
npx @agent-infra/mcp-server-browser --port 8089
# run with DISPLAY environment for VNC or other virtual display
DISPLAY=:0 npx @agent-infra/mcp-server-browser --port 8089
You can use one of the two MCP Server remote endpoint:
{
"mcpServers": {
"browser": {
"type": "streamable-http", // If there is MCP Client support"url": "http://127.0.0.1::8089/mcp"
}
}
}
In-memory call
If your MCP Client is developed based on JavaScript / TypeScript, you can directly use in-process calls to avoid requiring your users to install the command-line interface to use Browser MCP.
Browser MCP server supports following arguments. They can be provided in the JSON configuration above, as a part of the "args" list:
code
> npx @agent-infra/mcp-server-browser@latest -h
-V, --version output the version number
--browser <browser> browser or chrome channel to use, possible values: chrome, edge, firefox.
--cdp-endpoint <endpoint> CDP endpoint to connect to, for example "http://127.0.0.1:9222/json/version"
--ws-endpoint <endpoint> WebSocket endpoint to connect to, for example "ws://127.0.0.1:9222/devtools/browser/{id}"
--executable-path <path> path to the browser executable.
--headless run browser in headless mode, headed by default
--host <host> host to bind server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
--port <port> port to listen on for SSE and HTTP transport.
--proxy-bypass <bypass> comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com"
--proxy-server <proxy> specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080"
--user-agent <ua string> specify user agent string
--user-data-dir <path> path to the user data directory.
--viewport-size <size> specify browser viewport size in pixels, for example "1280, 720"
--output-dir <path> path to the directory for output files
--vision Run server that uses screenshots (Aria snapshots are used by default)
-h, --help display help for command
Runtime Configuration
The browser runtime requires configuration for Viewport Size, Vision Model Coordinate Factors, and User Agent. These can be passed through corresponding HTTP headers:
Header
Description
x-viewport-size
Browser viewport size, format: width,height separated by comma
x-vision-factors
Vision model coordinate system factors, format: x_factor,y_factor separated by comma
x-user-agent
User Agent string, defaults to system User Agent if not specified
We have unified the deployment of VNC and MCP under a single URL endpoint, The Dockerfile and DockerHub image will be published together! video
API
Tools
Tool Name
Description
Parameters
browser_click
Click an element on the page, before using the tool, use browser_get_clickable_elements to get the index of the element, but not call browser_get_clickable_elements multiple times
index (number, optional): Index of the element to click
browser_close
Close the browser when the task is done and the browser is not needed anymore
Fill out an input field, before using the tool, Either 'index' or 'selector' must be provided
selector (string, optional): CSS selector for input field, priority use index, if index is not provided, use selector index (number, optional): Index of the element to fill value (string, required): Value to fill clear (boolean, optional): Whether to clear existing text before filling
browser_get_clickable_elements
Get the clickable or hoverable or selectable elements on the current page, don't call this tool multiple times
browser_get_download_list
Get the list of downloaded files
browser_get_markdown
Get the markdown content of the current page
browser_get_text
Get the text content of the current page
browser_go_back
Go back to the previous page
browser_go_forward
Go forward to the next page
browser_hover
Hover an element on the page, Either 'index' or 'selector' must be provided
index (number, optional): Index of the element to hover selector (string, optional): CSS selector for element to hover
browser_navigate
Navigate to a URL
url (string, required):
browser_new_tab
Open a new tab
url (string, required): URL to open in the new tab
browser_press_key
Press a key on the keyboard
key (string, required): Name of the key to press or a character to generate, such as Enter, Tab, Escape, Backspace, Delete, Insert, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, ArrowLeft, ArrowRight, ArrowUp, ArrowDown, PageUp, PageDown, Home, End, ShiftLeft, ShiftRight, ControlLeft, ControlRight, AltLeft, AltRight, MetaLeft, MetaRight, CapsLock, PrintScreen, ScrollLock, Pause, ContextMenu
browser_read_links
Get all links on the current page
browser_screenshot
Take a screenshot of the current page or a specific element
name (string, optional): Name for the screenshot selector (string, optional): CSS selector for element to screenshot index (number, optional): index of the element to screenshot width (number, optional): Width in pixels (default: viewport width) height (number, optional): Height in pixels (default: viewport height) fullPage (boolean, optional): Full page screenshot (default: false) highlight (boolean, optional): Highlight the element
browser_scroll
Scroll the page
amount (number, optional): Pixels to scroll (positive for down, negative for up), if the amount is not provided, scroll to the bottom of the page
browser_select
Select an element on the page with index, Either 'index' or 'selector' must be provided
index (number, optional): Index of the element to select selector (string, optional): CSS selector for element to select value (string, required): Value to select
browser_switch_tab
Switch to a specific tab
index (number, required): Tab index to switch to
browser_tab_list
Get the list of tabs
browser_vision_screen_capture
Take a screenshot of the current page for vision mode
browser_vision_screen_click
Click left mouse button on the page with vision and snapshot, before calling this tool, you should call browser_vision_screen_capture first only once, fallback to browser_click if failed
factors (array, optional): Vision model coordinate system scaling factors [width_factor, height_factor] for coordinate space normalization. Transformation formula: x = (x_model * screen_width * width_factor) / width_factor y = (y_model * screen_height * height_factor) / height_factor where x_model, y_model are normalized model output coordinates (0-1), screen_width/height are screen dimensions, width_factor/height_factor are quantization factors, If the factors are unknown, leave it blank. Most models do not require this parameter. x (number, required): X pixel coordinate y (number, required): Y pixel coordinate