stealth-browser-mcp
stealth-browser-mcp
Un servidor MCP que ofrece a un asistente de IA un navegador Chrome real que mantiene la sesión iniciada.
La mayoría de las herramientas de automatización de navegador entregan al modelo un navegador nuevo y vacío. Esta, en cambio, utiliza un perfil de Chrome persistente, así que una vez que has iniciado sesión en un sitio tú mismo — con el 2FA, CAPTCHA o aprobación de dispositivo que sea — el modelo puede seguir usando esa sesión en ejecuciones posteriores sin llegar a ver tu contraseña.
Para los sitios que no toleran un inicio de sesión automatizado, añade dos vías de escape: credenciales obtenidas del Keychain de macOS en el momento de rellenar, y passkeys WebAuthn reproducidas mediante el autenticador virtual de Chrome.
[!WARNING] Esta es una herramienta poderosa. Da a un modelo de lenguaje control sobre un navegador con tus sesiones activas, y es capaz de escribir tus contraseñas guardadas en páginas que el modelo elija. Lee SECURITY.md y Uso responsable antes de usarla con cualquier cosa que te importe.
Contenido
Related MCP server: agent-browser-mcp
Cómo funciona
MCP client (Claude Code, Claude Desktop, Cursor, …)
│
│ JSON-RPC over stdio
▼
┌───────────────────────────┐
│ stealth-browser-mcp │
│ 16 tools, one browser │
└─────┬───────────────┬─────┘
│ │
credentials │ │ CDP + Puppeteer
▼ ▼
┌───────────────────┐ ┌───────────────────────┐
│ macOS Keychain │ │ Google Chrome │
│ stealth-mcp:* │ │ + stealth plugin │
│ passwords, │ │ + WebAuthn virtual │
│ passkey material │ │ authenticator │
└───────────────────┘ └───────────┬───────────┘
│
▼
┌─────────────────────────┐
│ Persistent profile dir │
│ cookies · localStorage │
│ IndexedDB · sessions │
└─────────────────────────┘Hay tres elementos clave:
Persistencia. El navegador se lanza contra un
userDataDirfijo en lugar de uno desechable. Al iniciar sesión una vez de forma interactiva, las cookies sobreviven en todas las ejecuciones posteriores — desaparece el motivo habitual por el que la automatización falla en sitios reales.Sigilo:
puppeteer-extra-plugin-stealthcubre las marcas de automatización más conocidas, y el servidor suma algunas más:navigator.webdriverno está definido,window.chrome.runtimeestá presente,HeadlessChromese elimina del user agent y se activa--disable-blink-features=AutomationControlled. Los clics mueven el ratón por una trayectoria hasta llegar a un punto con variación dentro del objetivo; la escritura se hace carácter a carácter con intervalos de 30–100 ms.Reutilización de sesión en lugar de creación de sesión: El diseño busca evitar automatizar los inicios de sesión por completo. El autocompletado del Keychain y la reproducción de passkeys existen para los casos en los que no se puede evitar.
Requisitos
Node.js 18 o superior
Google Chrome: El Chromium integrado de Puppeteer funciona, pero una compilación real de Chrome es notablemente menos detectable.
macOS, si quieres las funciones de Keychain y passkeys. El resto — navegación, extracción, capturas de pantalla, perfil persistente — es multiplataforma. La capa Keychain invoca
/usr/bin/securityy fallará en otras plataformas; las herramientas del navegador no la utilizan.
Instalación
git clone https://github.com/lauyuen/stealth-browser-mcp.git
cd stealth-browser-mcp
npm installOpcionalmente, copia y edita el archivo de entorno de ejemplo:
cp .env.example .envConfirma que el navegador se lanza y que las técnicas de evasión están activas:
npm run check-stealthConectar con un cliente MCP
El servidor usa stdio. Señala a la ruta absoluta de src/server.js desde tu cliente.
Claude Code
claude mcp add stealth-browser -- node /absolute/path/to/stealth-browser-mcp/src/server.jsClaude Desktop — ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"stealth-browser": {
"command": "node",
"args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"]
}
}
}Cualquier otro cliente MCP — El mismo formato, con una configuración adicional opcional para el perfil:
{
"mcpServers": {
"stealth-browser": {
"command": "node",
"args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"],
"env": {
"BROWSER_PROFILE_DIR": "/absolute/path/to/a/private/profile/dir"
}
}
}
}Reinicia el cliente a después. browser_status es la forma más rápida de confirmar que la conexión está activa.
El primer inicio de sesión
Antes de que el modelo pueda usar un sitio, siembra el perfil tú mismo:
npm run login -- https://example.comSe abre una ventana visible de Chrome con el mismo perfil que usará el servidor MCP. Inicia sesión con normalidad — gestores de contraseñas, avisos de 2FA, CAPTCHA, “recuerdar este dispositivo”, todo. Pulsa Enter en la terminal cuando termines y la sesión se guardará en disco.
Cada ejecución posterior del MCP hereda esa sesión. Repite el proceso por sitio. Las sesiones caducan según la programación del sitio, así que vuelve a ejecutarlo cuando el sitio cierre tu sesión.
Referencia de herramientas
Navegación e interacción
Tool | Argumentos | Nota |
|
|
|
|
| Lleva el elemento a la vista y luego mueve el ratón a un punto con variación dentro de él antes de pulsar. |
|
| Escribe carácter a carácter con retrasos aleatorios. |
|
|
|
|
| Espera un elemento, aplica una pausa o hace ambas cosas. |
Lectura de la página
Herramienta | Argumentos | Notas |
|
| Elimina scripts y estilos; devuelve texto así como enlaces y campos de formulario estructurados. Es lo más barato para que un modelo lea una página. |
|
|
|
|
| Devuelve un PNG como contenido de imagen MCP. |
|
| Ejecuta JavaScript en el contexto de la página y devuelve el resultado. Ver la advertencia en SECURITY.md. |
Sesión y autenticación
Herramienta | Argumentos | Notas |
|
| Lee la contraseña del Keychain y la escribe. El secreto nunca se expone al modelo. |
|
| Escribe en el Keychain bajo el prefijo |
|
| Con ambos argumentos, inyecta una passkey almacenada. Con ninguno, adjunta un autenticador vacío listo para el registro. |
|
| Captura una credencial recién registrada y la guarda. |
Ciclo de vida del navegador
Herramienta | Argumentos | Notas |
| — | Estado de la conexión, número de pestañas, URL actual, ruta del perfil, y si hay un autenticador conectado. |
|
| Reabre la sesión actual en una ventana visible para que puedas resolver un CAPTCHA o aprobar un 2FA manualmente, y luego devuelve el control. |
| — | Cierra correctamente y guarda los datos de la sesión en disco. |
El navegador se ejecuta de forma headless en el modo cabeza o defaults y se reutiliza entre llamadas. browser_open_interactive_window es la única herramienta que lo muestra en una ventana visible.
Guardar credenciales en el Keychain
Las contraseñas se guardan en el Keychain de macOS bajo el prefijo de servicio stealth-mcp: — nunca en un archivo de este repositorio ni en el contexto del modelo.
npm run keychain set github you@example.com # prompts; input is not echoed
npm run keychain get github you@example.com # confirms presence, prints length only
npm run keychain delete github you@example.comEl modelo ejecuta entonces un alto inicio de sesión sin conocer el secreto:
GXP10
`service` es una etiqueta arbitraria que eliges tú — solo tiene que coincidir entre la CLI y la llamada a la herramienta.
También puedes pasar la contraseña como argumento final de CLI para la escritión de scripts, pero quedará en el historial de tu shell y en la lista de procesos, por lo que el comando te avisa cuando lo haces.
## Passkeys
Chrome expone un [WebAuthn virtual del que habla el Protocolo DevTools](https://chromedevtools.github.io/devtools-protocol/tot/WebAuthn/) — un autenticador de software pensado para probar flujos WebAuthn. Este servidor lo maneja y conserva el material de claves resultante en el Keychain para que supere el ciclo de la terapia.
**Registrar una passkey de automatización**
1. Llama a `passkey_enable_virtual_authenticator` sin argumentos.
2. Navega al flujo del sitio para “añadir una passkey” y complétalo. El autenticador virtual responde al desafío; no aparece ninguna solicitud del sistema.
3. Llama a `passkey_save_registration` con `rpId` del sitio y tu cuenta.
**Usarla más tarde**
Llama a `passkey_enable_virtual_authenticator` con `rpId` y `account` para inyectar la credencial antes de navegar, y el sitio te autenticará sin muestra ninguna pregunta.
> \[!CAUTION]
> Una passkey retenida de esta forma es un archivo, no una clave física. Puede copiarse, que es exactamente lo que las passkeys reales tratan de evitar. Registra con este método solo passkeys de automatización. No lo uses con la passkey que protege tu correo, tu banco o cualquier otra cosa cuya pérdida te importaría.
## Configuración
Toda la configuración se hace mediante variables de entorno, la extensión del proceso o de un archivo `.env`. Consulta [.env.example](.env.example).
| Qué la controla | Valor por defecto | Propósito |
|--------------------------- | -------------------------------------- | --------------------------------------------------------------------------------- |
| `BROWSER_PROFILE_DIR` | `~/.config/stealth-browser-mcp/profile` | Perfil persistente de Chrome. Contiene sesiones reales — mantenlo privado y fuera del control de versiones. |
| `CHROME_EXECUTABLE_PATH` | Valor por defecto de la plataforma | Binario de Chrome a controlar. Si la ruta no existe, intentará con Chromium de Puppete. |
| `NAV_TIMEOUT` | `45000` | Tiempo de espera de navegación y selección, en milisegundos. |
Los indicadores de lanzamiento de Chrome y la ventana gráfica predeterminada de 1280×800 están en [`src/config.js`](src/config.js). Varios de esos indicadores intercambian seguridad por compatibilidad; [SECURITY.md](SECURITY.md#known-weakenings) explica cuáles y por qué deberías eliminar algunos.
## Verificar el sigilo
GXP11
Informa de `navigator.webdriver`, `window.chrome`, `window.chrome.runtime`, el número de plugins, `navigator.languages` y el user agent efectivo, y luego imprime el perfil resuelto y las rutas de Chrome.
Para una comprobación más exigente, apunta el navegador a una página de fingerprinting — por ejemplo `bot.sannysoft.com` o `abrahamjuliot.github.io/creepjs` — con `browser_navigate` seguido de `browser_screenshot`.
Ninguna configuración de stealth es indetectable. Los sitios bien defendidos combinan el fingerprinting con análisis de comportamiento, reputación de IP e historial de cuenta, y seguirán detectando la automatización. Trátalo como «no activa las comprobaciones obvias», no como invisibilidad.
## Solución de problemas
**«Failed to launch the browser process» / perfil bloqueado.** Chrome permite un proceso por directorio de perfil. Cierra cualquier Chrome que hayas iniciado manualmente contra el mismo directorio. El servidor elimina los archivos de bloqueo `Singleton*` obsoletos al iniciarse y se reconectará a una instancia activa a través de su puerto DevTools, pero un Chrome en ejecución que sea el propietario del perfil gana.
**Un sitio cierra la sesión del modelo o lo bloquea.** La sesión almacenada ha caducado. Vuelve a ejecutar `npm run login -- <url>`.
**Los selectores no coinciden.** Llama a `browser_extract_html` con un selector concreto y deja que el modelo lea el marcado real en lugar de adivinar. Las aplicaciones de una sola página suelen montar los inputs tarde — usa `browser_wait_for` primero.
**Aparece un CAPTCHA.** Llama a `browser_open_interactive_window`, resuélvelo tú mismo y continúa. El estado resuelto persiste en el perfil.
**Errores de Keychain en Linux o Windows.** Es de esperar — esa capa es solo de macOS. Las herramientas de navegador funcionan en todas partes; las de credenciales y passkeys no.
## Uso responsable
Este proyecto existe para permitir que un asistente actúe en sitios *en los que ya tienes una cuenta*, usando sesiones *que tú mismo has establecido*. Ese es el alcance previsto, y el diseño de perfil persistente lo refleja.
La automatización de anti-detección y credenciales obviamente puede dirigirse a otros fines. Antes de ejecutarla contra un sitio, ten en cuenta:
* **Los términos de servicio del sitio.** Muchos prohíben el acceso automatizado por completo. Evadir una defensa contra bots puede incumplir un contrato que aceptaste y, en algunas jurisdicciones, el acceso no autorizado conlleva responsabilidad penal. Poder eludir un control no es un permiso para hacerlo.
* **Consentimiento.** Automatiza cuentas que te pertenezcan, o sobre las que tengas autorización por escrito para actuar. Las credenciales de otra persona en tu Keychain no son consentimiento.
* **Carga.** Limita tu propia frecuencia de peticiones. Respeta `robots.txt` cuando corresponda. La automatización que le cuesta dinero real a un sitio es una buena forma de conseguir que la técnica se prohíba para todos.
* **Datos de otras personas.** Las páginas que lee el modelo fluyen hacia el proveedor de tu cliente MCP. No canalices información personal de terceros a través de él.
Las contribuciones que existan principalmente para derrotar las protecciones de un sitio específico, recolectar credenciales o ampliar el abuso no se fusionarán.
## Licencia
[MIT](LICENSE) © Yuen LauMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI agents to authenticate with websites using a real Chromium browser with anti-detection measures and human-in-the-loop support for captchas and 2FA. Features stealth browsing, human-like interactions, and persistent session storage to automate and resume login workflows.
- AlicenseBqualityFmaintenanceEnables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.20239MIT
- AlicenseNot gradedqualityCmaintenanceLets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.131MIT
- AlicenseAqualityBmaintenanceGives your AI agent a persistent browser identity with anti-detection, credential vault, and multi-persona support for automated web browsing, login, and signup.318MIT
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Stealth web browser for agents: search, fetch, click and type through persistent sessions over MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/lauyuen/stealth-browser-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server