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.
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/envAs 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_mcpRunning 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:
--modeltakes an OpenRouter model id orINVISIBLE_MCP_MODEL. The default isz-ai/glm-5.3-flash.--proxyacceptshttp://user:pass@host:portorsocks5://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-dirkeeps logins and cookies across restarts.--binarypoints at an existing engine binary. The engine is Firefox-based (STEALTHFOX_BINARY).--headedshows the browser window.--hostand--portset 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/firefoxFor 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.
--binarymust 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
--hostfrom127.0.0.1exposes an interface with no authentication. - Key leakage.
--openrouter-keylands in shell history, and on Linux in the process list. Use the environment variable or.envinstead. - 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_HOMEor 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
Related in mcp

OKX Agent Trade Kit (okx-trade-mcp / okx-trade-cli)
