YE

YetiBrowser Open-Source Browser MCP Server

Automate browser workflows with YetiBrowser's open-source MCP server, connecting a Node backend and Chrome/Firefox extensions for local, auditable automation.

Quick Install
npx yetibrowser-mcp

Overview

YetiBrowser MCP Server is an open-source implementation of a local Model Context Protocol (MCP) server that connects a Node.js backend with browser extensions for Chrome and Firefox. It enables developers to automate and control browser workflows locally, while keeping all traffic and logs on the developer’s machine for auditability and privacy. The server acts as an intermediary so language models, automations, or backend services can request browser interactions (open a page, run scripts, capture screenshots, etc.) through a standardized, auditable interface.

This architecture is useful when you need dynamic web scraping, RPA-style automation, or model-driven browsing where executing actions in a real browser (rather than a headless scraper) is important. By combining a lightweight Node server with a browser extension, YetiBrowser makes it possible to use the full rendering and extension APIs of Chrome/Firefox while keeping control and logging within your infrastructure.

Features

  • Local MCP-compatible HTTP server for connecting model tooling to browsers
  • Integrates with Chrome and Firefox via unpacked extensions
  • Auditable action logs and optional HAR captures for traceability
  • Common browser tooling: open URL, evaluate JS, click, fill forms, screenshot, get DOM
  • Simple Node.js deployment: git clone, npm install, npm start
  • Configurable CORS and API keys for local network setups
  • Designed for local-first security: no external cloud required

Installation / Configuration

Clone and install:

git clone https://github.com/yetidevworks/yetibrowser-mcp.git
cd yetibrowser-mcp
npm install
npm run build

Start the server (example using environment variables):

PORT=3000
API_KEY=my-secret-key
LOG_DIR=./logs
npm start

Or run directly via Node (development):

node src/server.js --port 3000 --apiKey my-secret-key

Example configuration file (config.json):

{
  "port": 3000,
  "host": "127.0.0.1",
  "apiKey": "my-secret-key",
  "allowedOrigins": ["http://localhost:8080"],
  "logDir": "./logs",
  "captureHar": true
}

Key environment/configuration options:

Variable / FieldPurpose
PORTTCP port the MCP server listens on (default 3000)
API_KEYShared secret to authenticate clients/extensions
HOSTBind address (default 127.0.0.1)
ALLOWED_ORIGINSCORS origins allowed for web clients
LOG_DIRDirectory where action logs and HAR files are stored
CAPTURE_HAREnable saving HAR files for requests (true/false)

Browser extension setup:

  • Load the extension in Chrome/Firefox as an unpacked extension (developer mode).
  • Open the extension options and set the MCP server URL, e.g. http://localhost:3000 and the API key.
  • Grant required permissions (tabs, activeTab, webRequest if HAR capture is enabled).

Available Tools / Resources

The server exposes a set of browser-focused tools (actions) that clients can request. Typical tools include:

  • open_page: Open a URL in a new or existing tab
  • evaluate_js: Run arbitrary JavaScript in the page context and return the result
  • click_selector: Click the first element matching a CSS selector
  • fill_form: Fill input fields and submit a form
  • screenshot: Capture a PNG/JPEG of the visible page or a specific element
  • dom_snapshot: Return the serialized DOM or selected node HTML
  • download_resource: Save resources (images, PDFs) linked on a page
  • capture_har: Record network requests into a HAR file for auditing

Resources:

  • Extension source (Chrome/Firefox) — configured to talk to the MCP server
  • Logs and HAR files are stored locally in LOG_DIR for auditing
  • Example Node client snippets (see Use Cases)

Use Cases

  1. Dynamic web scraping of single-page apps
  • Problem: Static scrapers miss data rendered by JavaScript.
  • Solution: Use the MCP server to open the page in a real browser, wait for data to render, run evaluate_js to extract structured data, then save outputs and logs locally.
  1. Automated login and data extraction for internal dashboards
  • Problem: Internal dashboards require a real browser session and credentials.
  • Solution: Use the extension to reuse browser session cookies, request the server to open the dashboard and run scripted interactions (fill_form, click_selector) while keeping logs for compliance.
  1. Model-driven browsing (LLM-assisted workflows)
  • Problem: LLMs can suggest browser actions but need a safe, auditable bridge to execute them.
  • Solution: Integrate the MCP server with your model orchestration so model-suggested tools (open_page, evaluate_js) are executed locally and recorded, enabling traceability and human review.
  1. Regression testing and visual diffs
  • Problem: UI changes require frequent verification.
  • Solution: Automate test scenarios via the MCP server and capture screenshots / HARs for each run, then compare outputs across runs.

Example Node client (HTTP) to open a page and take a screenshot:

curl -X POST http://localhost:3000/actions \
  -H "Authorization: Bearer my-secret-key" \
  -H "Content-Type: application/json" \
  -d '{
    "tool": "open_page",
    "args": {"url": "https://example.com", "newTab": true}
  }'
# then
curl -X POST http://localhost:3000/actions \
  -H "Authorization: Bearer my-secret-key" \
  -H "Content-Type: application/json" \
  -d '{
    "tool": "screenshot",
    "args": {"selector": "body", "format": "png"}
  }' --output page.png

Notes:

  • Keep the server behind a firewall or bind to localhost when used locally.
  • Rotate API keys and store logs in an access-controlled location for sensitive workflows.

This setup provides a simple, auditable bridge between programmatic tooling or LLMs and real browser instances, suitable for scraping, automation, testing, and model-in-the-loop browsing tasks.