Skip to main content
Glama
sthbryan

browser-mcp

by sthbryan

@sthbryan/browser-mcp

Model Context Protocol server for real browser automation — Puppeteer + stealth, system browsers first.

Sibling to obscura-mcp-server: use Obscura for light scrape/text; use browser-mcp when you need pixels / JS render / stealth search.

npm: @sthbryan/browser-mcp

Tools

screenshot

Capture a page with device templates or a custom size.

{
  "url": "https://example.com",
  "template": "mobile",
  "fullPage": false,
  "format": "png"
}

Templates: mobile (390×844), tablet (768×1024), desktop (1440×900), custom (+ width/height).

fetch_page

Fetch a URL after JS render as html, markdown, or text.

{ "url": "https://example.com", "type": "markdown", "template": "desktop" }

Web search with stealth. Engines: DuckDuckGo Lite → DDG HTML → Brave.

{ "query": "rust headless browser", "limit": 5 }

query

Extract data with CSS selectors and/or text filters.

{ "url": "https://example.com", "selector": "h1" }
{ "url": "https://example.com", "selector": "a", "attribute": "href", "limit": 10 }

Browser resolution (lightweight)

No Chromium download on install. At runtime, in order:

  1. BROWSER_MCP_EXECUTABLE_PATH if set

  2. System apps: Chrome → Chromium → Brave → Edge (override with BROWSER_MCP_BROWSER)

  3. Local caches (Playwright/Puppeteer already on disk)

  4. Last resort: download Chrome to ~/.cache/browser-mcp (disable with BROWSER_MCP_ALLOW_DOWNLOAD=0)

Always headless + puppeteer-extra-plugin-stealth.

Install (MCP client)

{
  "mcpServers": {
    "browser-mcp": {
      "command": "bunx",
      "args": ["-y", "@sthbryan/browser-mcp"]
    }
  }
}

Tool filter:

bunx @sthbryan/browser-mcp --tools=screenshot
bunx @sthbryan/browser-mcp --tools=search,query

See INSTALL.md.

Requirements

  • Node 18+ or Bun

  • A Chromium-based browser installed (recommended): Chrome / Brave / Edge

export BROWSER_MCP_BROWSER=brave
export BROWSER_MCP_EXECUTABLE_PATH=/path/to/chrome
export BROWSER_MCP_ALLOW_DOWNLOAD=0
export BROWSER_MCP_ALLOW_PRIVATE=1

Release / publish

CI (same pattern as obscura): on every PR/main push → lint, test, smoke, build.
On tag v* → publish to npm + GitHub Release.

# 1) Ensure GitHub secret NPM_TOKEN (classic publish token for @sthbryan)
# 2) From a clean main branch:
bun run release          # tags current package.json (0.1.0) and pushes
bun run release patch    # bump + tag + push
bun run release --no-push

Tag must match package.json version (e.g. v0.1.00.1.0).

Architecture

MCP Client ──stdio──► browser-mcp
                          │
                          ▼
              resolve system browser
              (Chrome/Brave/Edge/…)
                          │
                          ▼
            puppeteer-core + stealth
                          │
              ┌───────────┴───────────┐
              ▼                       ▼
         screenshot              search
         fetch_page              (DDG→Brave)
         query

Development

bun install
bun test
bun run smoke
bun run check
bun run build

License

MIT

-
license - not tested
-
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sthbryan/browser-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server