Skip to main content
Glama

browser-mcp β€” beri AI agent Anda browser sungguhan πŸŒπŸ€–

MCP server standalone yang memberi AI agent (opencode, Claude Code/Desktop, Cursor, Cline, dsb) kemampuan browser penuh via Chromium lokal + CDP:

  • πŸ‘οΈ Lihat halaman β€” snapshot DOM compact (mata utama AI), screenshot, visual grounding (x,y), combined view

  • πŸ–±οΈ Aksi manusiawi β€” klik/type/keys/scroll + hover/move/dblclick/rightclick/drag (easing+jitter, lolos slider GeeTest)

  • πŸ•·οΈ Recon otonom β€” spider BFS in-scope, ekstraktor API/GraphQL ala LinkFinder, HAR-lite, console hook, probe introspeksi GraphQL

  • πŸ” Auth 2-akun β€” vault attacker/victim untuk differential testing (IDOR/priv-esc), password ter-redact di audit

  • πŸ› οΈ Burp-like first-class β€” intercept (request+response), repeater, intruder sniper, match-replace, scope allowlist, collaborator OOB

  • πŸ›‘οΈ Aman by default β€” scope check di semua navigasi/HTTP keluar, audit audit.jsonl dengan redact kredensial

  • πŸ“¦ Zero-deployment hell β€” 1 repo, stdlib + websocket-client saja, backend CDP di-vendor (vendor_browser_local.py), tanpa binary global

47 tools. 1 perintah install. Browser tetap di mesin Anda β€” tidak ada cloud, tidak ada data keluar.


Demo 30 detik

git clone https://github.com/eye-fox/browser-mcp.git
cd browser-mcp
./install.sh
# restart opencode / AI client Anda, lalu suruh agent:
# "launch browser-mcp session demo, scope ke example.com, navigate, snapshot"
python3 examples/quickstart.py   # tanpa LLM: bukti end-to-end lewat stdio

Related MCP server: Chrome DevTools MCP

Cara kerja

flowchart LR
    Agent["AI agent"] -- "MCP stdio<br/>JSON-RPC" --> Server["server.py"]
    Server -- "subprocess" --> Vendor["vendor_browser_local.py"]
    Vendor -- "CDP ws://" --> Chrome["Chromium lokal"]
    Server --- Scope["scope.json<br/>allowlist/blocklist"]
    Server --- Audit["audit.jsonl<br/>redacted"]
    Server --- Vault["auth_vault.json<br/>2 akun, 600"]
    Server --- Sessions["sessions.json<br/>sessionId β†’ cdp_url"]

Syarat

Kebutuhan

Versi

Cek

Python

β‰₯ 3.9

python3 --version

websocket-client

β‰₯ 1.8.0

python3 -c "import websocket" (auto-install via install.sh)

Chromium/Chrome

baru

which chromium (Debian: sudo apt install chromium)

Install

./install.sh

Script melakukan: cek python β†’ install websocket-client β†’ deteksi chromium (auto-patch BROWSER di vendor) β†’ chmod +x β†’ init scope.json / auth_vault.json (600) / sessions.json / audit.jsonl dari .example β†’ auto-register ke ~/.config/opencode/opencode.json β†’ smoke test tools/list (harus β‰₯40 tools).

Opsi:

./uninstall.sh   # hapus entri MCP + matikan daemon, repo tidak dihapus

Config manual (non-opencode)

Claude Desktop / Cursor / Cline (mcp.json / claude_desktop_config.json):

{
  "mcpServers": {
    "browser-mcp": {
      "command": "python3",
      "args": ["/ABSOLUTE/PATH/browser-mcp/server.py"]
    }
  }
}

Template siap copy: mcp.json.example. Untuk opencode mentah: opencode.json.snippet.

Struktur repo

browser-mcp/
β”œβ”€β”€ install.sh              # setup full: deps + chromium detect + opencode register + smoke test
β”œβ”€β”€ uninstall.sh            # cabut entri MCP + kill daemon
β”œβ”€β”€ server.py               # MCP stdio server (47 tools, scope+audit+redact)
β”œβ”€β”€ vendor_browser_local.py # backend CDP Chromium (stealth, intercept, cookies, dsb) β€” di-vendor
β”œβ”€β”€ requirements.txt        # websocket-client saja
β”œβ”€β”€ SKILL.md                # instruksi agent (copy ke skill-dir bila perlu)
β”œβ”€β”€ scope.json.example      # -> scope.json (allowlist; default disabled)
β”œβ”€β”€ auth_vault.json.example # -> auth_vault.json (chmod 600)
β”œβ”€β”€ opencode.json.snippet   # referensi config opencode
β”œβ”€β”€ mcp.json.example        # referensi config generik MCP
β”œβ”€β”€ examples/quickstart.py  # e2e tanpa LLM: launchβ†’scopeβ†’navigateβ†’snapshotβ†’close
β”œβ”€β”€ scripts/smoke_test.py   # initialize + tools/list, exit 0 bila β‰₯40 tools
β”œβ”€β”€ LICENSE (MIT)
└── .gitignore (melindungi audit/sessions/vault asli)

scope.json, auth_vault.json, sessions.json, audit.jsonl adalah runtime β€” tidak ikut ke git (lihat .gitignore). Yang dipublish hanya .example.

Pakai di agent (pola baku)

  1. mcp_browser_launch {"sessionId":"s1"} β†’ simpan sessionId

  2. mcp_scope_set {"allowed":["target.com"],"enabled":true}

  3. mcp_browser_spider {"sessionId":"s1","startUrl":"https://target.com","maxPages":20,"depth":2}

  4. Per halaman menarik: mcp_browser_js_endpoints + mcp_browser_console + mcp_browser_network_har

  5. mcp_browser_snapshot β†’ mcp_browser_click/type (wait:"idle") β†’ snapshot lagi β†’ mcp_browser_eval verifikasi value

  6. Auth differential: mcp_auth_vault set victim/attacker, switch bergantian

  7. Intercept hanya saat tahu momennya: mcp_intercept_set(pattern) β†’ aksi pemicu β†’ mcp_intercept_poll langsung β†’ mcp_intercept_continue (forward|drop|modify|fulfill, id:"all" untuk lepas semua)

  8. mcp_repeater_send (replay tanpa browser) β†’ mcp_intruder_fuzz (wordlist inline, auto URL-encode) β†’ mcp_browser_graphql probe β†’ mcp_collaborator_start/poll untuk OOB

  9. mcp_history_list + HAR review β†’ mcp_browser_close

Aturan detail + 47 tools: lihat SKILL.md.

Tips anti-nyangkut (dari pengalaman)

  • Tombol tak ada di elements β†’ mcp_browser_submit(formId) atau keys Enter.

  • CAPTCHA gambar/checkbox β†’ mcp_browser_ground, klik via x,y dari gambar.

  • Slider GeeTest / canvas β†’ mcp_browser_view lalu mcp_browser_drag(x1,y1,x2,y2).

  • Session Connection refused / hang setelah intercept β†’ mcp_browser_recover atau attach sessionId baru, jangan retry session yang wedge.

  • poll harus langsung setelah trigger β€” eval-fetch yang menunggu = wedge.

Keamanan

  • Scope allowlist ditegakkan di navigate, repeater_send, intruder_fuzz, graphql. Default scope.json.example = disabled agar demo jalan; aktifkan sebelum hunting target nyata.

  • audit.jsonl: key sensitif (password/token/secret/cookie/api-key/bearer) di-redact + body dipotong 500 char. Jangan commit file runtime.

  • Vault 600. Jangan taruh kredensial asli di .example.

  • Hanya pakai terhadap target yang Anda punya izin uji.

Publish ke GitHub (checklist)

cd browser-mcp
# pastikan tidak ada secret bocor:
grep -ri "password\|token\|api.key\|bearer" --include="*.py" --include="*.md" --include="*.json" --include="*.sh" . | grep -v example | grep -v REDACT || echo "bersih"
git init && git add . && git commit -m "browser-mcp standalone v0.4.0" && git branch -M main
gh repo create browser-mcp --public --source=. --push

Troubleshooting

Gejala

Obat

websocket import error

pip3 install websocket-client

chromium not found

sudo apt install chromium / brew install --cask chromium, lalu ./install.sh ulang

MCP tidak muncul di client

restart client; pastikan path server.py absolut; python3 scripts/smoke_test.py harus PASS

Connection refused / session wedged

mcp_browser_recover atau launch reuse:false / attach sessionId baru

stop intercept hang

server sudah auto-lepas paused + timeout 10 dtk; bila wedge, attach session baru dan abandon lama

Lisensi

MIT β€” lihat LICENSE.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI coding assistants to control and inspect a live Chrome browser for automation, debugging, performance analysis, network monitoring, and DOM interaction through Chrome DevTools Protocol.
    3,204,746 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI agents to operate an isolated local Chromium browser through MCP, with semantic snapshots, ref-based actions, search, research, crawling, and CDP access.
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to securely control a user's existing Chrome profile locally, providing typed browser actions, form and editor support, WordPress workflows, terminal automation, and Figma inspection with policy-based authorization and redacted auditing.
    MIT