Skip to content

Back to the catalog

feder-cr/invisible_playwright_mcp
github.comrepo

feder-cr/invisible_playwright_mcp

invisible_playwright_mcp is an MCP server (and companion Python library, invisible_playwright) that wraps Playwright so an LLM agent can operate a real browser like a human: clicking, typing, scrolling and reading page content, useful for tasks like checking flight fares across a date range where no API exists. It ships a standalone chat+live-browser UI driven by any OpenRouter model, installs as a plugin for Claude Code, Codex and Gemini CLI, and exposes stealth/identity controls (seed-based browser fingerprint, proxy-derived timezone/locale/geolocation, persistent profile directories) via its invisible_core component.

TL;DR An MCP server that gives LLM agents a real, human-like Playwright-driven browser, with a built-in OpenRouter chat UI and plugin support for Claude Code, Codex and Gemini CLI.
Document

How to use it

There are two entry points from one package. Both need uv, and the page gives its installers first.

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
$env:Path = "$env:USERPROFILE\.local\bin;$env:Path"

Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

As a plugin in your assistant:

claude plugin marketplace add feder-cr/invisible_playwright_mcp
claude plugin install invisible-playwright-mcp@feder-cr

codex plugin marketplace add feder-cr/invisible_playwright_mcp
codex plugin add invisible-playwright-mcp@feder-cr

gemini extensions install https://github.com/feder-cr/invisible_playwright_mcp

Running invisible_playwright_mcp with no subcommand starts the MCP server. Config blocks for file-configured clients, and the tool list, are on the wiki page "The MCP server", not in the README.

Standalone UI (chat on the left, live browser on the right), served at http://127.0.0.1:8765:

uvx invisible-playwright-mcp ui --openrouter-key sk-or-...

Flags for the UI:

  • --model takes an OpenRouter model id or INVISIBLE_MCP_MODEL. The default is z-ai/glm-5.3-flash.
  • --proxy accepts http://user:pass@host:port or socks5://host:port. Host and port are both required. Timezone, locale and egress follow the proxy.
  • --seed <int> gives the same browser identity on every run.
  • --profile-dir keeps logins and cookies across restarts.
  • --binary points at an existing engine binary. The engine is Firefox-based (STEALTHFOX_BINARY).
  • --headed shows the browser window.
  • --host and --port set where the UI listens.

Configuration resolves in this order: --flag > environment > .env > default. Only the .env in the current directory is read; there is no upward search. Values in .env never override variables that are already set. The startup line names the variables it applied but never prints their values:

OPENROUTER_API_KEY=sk-or-...
STEALTHFOX_BINARY=/path/to/firefox

For code instead of prompts, invisible_playwright exposes the engine as a Python library with Playwright's API. invisible_core maps a seed to a fingerprint and preferences, and handles proxy and geolocation.

Limits

  • Pinned engine. --binary must be the exact build the "seal" pins, or startup refuses. The flag skips the download, not the version check.
  • No authentication on the UI. Changing --host from 127.0.0.1 exposes an interface with no authentication.
  • Key leakage. --openrouter-key lands in shell history, and on Linux in the process list. Use the environment variable or .env instead.
  • Network traffic. The page lists what leaves the machine:
flowchart LR
  A[Local agent + browser] --> S[Visited sites: see a normal Firefox]
  A --> M[Model provider]
  M -->|web UI| O[OpenRouter, your key]
  M -->|MCP| C[Host client's model]
  A --> G[GitHub releases]
  G --> E[Engine download, first start]
  G --> I[GeoIP DB, if proxy set]
  G --> K[Counter file, every launch]
  • Page content the agent reads goes to the model provider.
  • Every browser launch fetches a counter file from GitHub. It carries no identifier, but GitHub sees your IP.
  • Sessions, profiles and screenshots stay local under INVISIBLE_MCP_HOME or the OS app-data directory. Nothing is sent to the author.
  • Licence. The project is now MIT. Everything distributed before 2 September 2026 was released under AGPL-3.0 and stays under it, so check which version you vendor.
  • Usage terms. The authors ask you to respect site terms and rate limits, and not to submit anything a human has not read.
  • No measurements. The README makes no detection-evasion or success-rate claims. The "stealth" framing is unmeasured on this page.

Organisations named here

  • GitHub
  • OpenRouter
  • Z.ai
  • OpenAI
  • Claude Code

Technologies named here

  • GLM 5.3 Flash
  • invisible_playwright_mcp
  • invisible_playwright
  • invisible_core
  • OpenRouter
  • Claude Code
  • Codex
  • Gemini CLI
  • uv / uvx
  • Playwright
  • Model Context Protocol
  • Python

Techniques named here

  • Seed-based browser identity
  • Proxy-derived locale/timezone/egress
  • Human-like browser driving
  • Config precedence layering