invisible_playwright_mcp **Other AI browser agents get captchas. This one is invisible to anti-bots.**
--- ## Two ways to use this browser agent ### 1. From your assistant, over MCP Windows, in PowerShell: ```powershell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" $env:Path = "$env:USERPROFILE\.local\bin;$env:Path" ``` Linux: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh source $HOME/.local/bin/env ``` Then install it in your assistant. **Claude Code:** ```bash claude plugin marketplace add feder-cr/invisible_playwright_mcp claude plugin install invisible-playwright-mcp@feder-cr ``` **Codex:** ```bash codex plugin marketplace add feder-cr/invisible_playwright_mcp codex plugin add invisible-playwright-mcp@feder-cr ``` **Gemini CLI:** ```bash gemini extensions install https://github.com/feder-cr/invisible_playwright_mcp ``` ### 2. Standalone: the web UI We bring the interface, you bring an [OpenRouter](https://openrouter.ai) key. Chat on the left, the live browser on the right. Windows, in PowerShell: ```powershell powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" $env:Path = "$env:USERPROFILE\.local\bin;$env:Path" uvx invisible-playwright-mcp ui --openrouter-key sk-or-... ``` Linux: ```bash curl -LsSf https://astral.sh/uv/install.sh | sh source $HOME/.local/bin/env uvx invisible-playwright-mcp ui --openrouter-key sk-or-... ``` Then open **http://127.0.0.1:8765** and type the same thing. --- ## What to ask a web browsing agent Anything that needs real web automation: a browser rather than an API, and a person's judgement about what is on the page. > Go to ``. One way, Milan to Lisbon, economy, one checked bag, > one adult. Check every date from the 12th to the 16th of next month, one at a > time, and read the cheapest fare for each day. The date field is a calendar > widget, so click the days rather than typing them. If a date has no > availability, say so. Do not guess a number. It drives the page the way a person would: the pointer moves, keys are pressed. ## Options: proxy, profile, seed - **`--openrouter-key`** Your key, or the `OPENROUTER_API_KEY` variable. - **`--model`** An OpenRouter model id, or `INVISIBLE_MCP_MODEL`. Defaults to `z-ai/glm-5.3-flash`. - **`--proxy`** Optional. `http://user:pass@proxy.example.com:8080` or `socks5://proxy.example.com:1080`. Host and port are both required. The timezone, locale and egress follow it. - **`--binary`** An engine binary you already have. It must be the build the seal pins, or startup refuses: this skips the download, not the version check. - **`--seed`** An integer. Same seed, same browser identity, every run. - **`--profile-dir`** A directory to keep the profile in, so logins and cookies survive restarts. - **`--headed`** Show the browser window. The interface shows you the page anyway. - **`--host`, `--port`** `127.0.0.1` and `8765`. Changing the host exposes an interface that has no authentication. ### A `.env` beside the command Rather than retyping the key and the binary path, put them in a `.env` in the directory you run from: ``` OPENROUTER_API_KEY=sk-or-... STEALTHFOX_BINARY=/path/to/firefox ``` It is read at startup, and on the way in it **never overrides** something already set, so the order is `--flag` > the environment > `.env` > the default. Only the directory you are in is read - there is no search upwards, so running from a subfolder cannot silently pick up a different key. The startup line names the variables it applied and never prints their values. Passing `--openrouter-key` puts the key in your shell history, and on Linux in the process list. `OPENROUTER_API_KEY` in the environment or in a `.env` avoids both. ## The wiki: AI browser-agent guides The reading room around the agent lives in the [wiki](https://github.com/feder-cr/invisible_playwright_mcp/wiki): the [AI browser-agent landscape: browser-use, Operator-style and computer-use agents compared](https://github.com/feder-cr/invisible_playwright_mcp/wiki/guides-alternatives-and-comparisons), [what to check when an agent gets blocked](https://github.com/feder-cr/invisible_playwright_mcp/wiki/why-does-my-ai-agent-get-blocked), and [what happened to OpenAI Operator](https://github.com/feder-cr/invisible_playwright_mcp/wiki/is-openai-operator-still-available), among others. Worked examples, transcripts and their outputs live in [articles/](https://github.com/feder-cr/invisible_playwright_mcp/tree/main/articles). ## The rest of the family: engine, core The MCP server from option 1 ships inside this package: `invisible_playwright_mcp` with no subcommand is the server, `invisible-playwright-mcp ui` the interface. Its config blocks for clients that take a file, its settings and its tools are on the wiki page [The MCP server](https://github.com/feder-cr/invisible_playwright_mcp/wiki/mcp-server). - **[invisible_playwright](https://github.com/feder-cr/invisible_playwright)** The engine, as a Python library, for writing code instead of prompts. The API is Playwright's. - **[invisible_core](https://github.com/feder-cr/invisible_core)** Seed to fingerprint to preferences, proxy and geolocation. ## Using it responsibly This automates a browser under your control. Read the terms of the sites you point it at, respect their rate limits, and do not submit anything a human has not read. ## Privacy Policy This browser agent runs on your machine and has no server of its own. What leaves your computer, and to whom: - **The sites you visit** see the browser, as they would any Firefox. - **Your model provider.** The web UI sends the conversation and what the agent reads on the page to OpenRouter under your key. Over MCP, the client you plugged it into does the same with whichever model it uses. - **GitHub.** The engine is downloaded from a GitHub release the first time the server or the interface starts, and a GeoIP database is when a proxy is set. Each browser launch also fetches a one-line counter file from a GitHub release, which is how launches are counted: the request carries no identifier and nothing of yours, and GitHub sees what any HTTPS request shows, your IP address. Nothing else is collected and nothing is sent to the author. Sessions, profiles and screenshots are stored locally, under `INVISIBLE_MCP_HOME` if set and otherwise in the application-data directory of your system, and are yours to delete; nothing is retained anywhere else. Questions go to the [issues](https://github.com/feder-cr/invisible_playwright_mcp/issues). ## License [MIT](https://github.com/feder-cr/invisible_playwright_mcp/blob/main/LICENSE). Everything distributed before 2 September 2026 was released under AGPL-3.0 and stays under it.