Leapfrog
MCP de navegador multisesión para agentes de IA: modo sigiloso, agrupación de sesiones, humanización, 10 veces menos tokens que Playwright
Documentación
Leapfrog
MCP de navegador multi-sesión para agentes de IA.
36 herramientas. 15 sesiones paralelas. Sigilo. HUD. Auto-mejora. Hasta 10 veces menos tokens.
npm i leapfrog-mcp | Funciona con Claude Code, Cursor, Windsurf
El Problema
Playwright MCP envía ~14,000 tokens por una página con mucho contenido como Hacker News. La mayor parte es ruido. Tu ventana de contexto se llena. Tu agente se confunde. Y tú pagas por ello.
Leapfrog envía ~1,400 tokens. Misma página. Misma información. Hasta 10 veces menos ruido.
┌─────────────────────────────────────────────────────┐
│ Playwright MCP │
│ ████████████████████████████████████████ ~14,000 │
│ │
│ Leapfrog │
│ █████ ~1,400 │
└─────────────────────────────────────────────────────┘
tokens per page (Hacker News, real test)
El ahorro varía de 2 a 10 veces según la complejidad de la página. Las páginas con mucho contenido obtienen las mayores ganancias. Los formularios densos, las menores. La mediana en sitios reales es de ~4-5x.
Inicio Rápido
npx leapfrog-mcp --doctor # verify everything works
npx leapfrog-mcp --stealth-audit # test all 19 stealth patches
npx leapfrog-mcp --config # print MCP config to paste
Añádelo a ~/.mcp.json (Claude Code) o a la configuración MCP de tu editor:
{
"leapfrog": {
"command": "npx",
"args": ["-y", "leapfrog-mcp"],
"env": {
"LEAP_MAX_SESSIONS": "15",
"LEAP_TILE": "true",
"LEAP_HUD": "true",
"LEAP_AUTO_CONSENT": "true"
}
}
}
Leapfrog usa playwright-core (15MB) en lugar de playwright (1.6GB) y no incluye un navegador. O bien:
- Configura
LEAP_CHANNEL=chromepara usar tu Chrome/Chromium instalado (recomendado) - O ejecuta
npx playwright-core install chromiumpara instalar el binario de Chromium incluido - O configura
LEAP_CDP_ENDPOINTpara conectarte a una instancia de Chrome ya en ejecución
Matriz de Funciones
| Leapfrog | Playwright MCP | agent-browser | |
|---|---|---|---|
| Tokens por página | ~1,200-2,500 | ~3,800-15,000 | ~300 |
| Sesiones paralelas | 15 | 1 | 1 |
| Aislamiento de sesión | Sí | No | No |
| Multi-pestaña / popups | Sí | No | No |
| Intercepción de red | Sí | No | No |
| Captura de consola | Sí | Sí | No |
| Sigilo / anti-bot | Sí | No | No |
| Espera inteligente (5 tipos) | Sí | Básica | No |
| Recuperación de fallos | Sí | No | No |
| Acciones por lotes (100/llamada) | Sí | No | No |
| Inyección de script de inicio | Sí | Sí | No |
| Arrastrar / subir / redimensionar | Sí | Sí | No |
| Proxy por sesión | Sí | No | No |
| Humanización (opt-in) | Sí | No | No |
| Reutilización de perfil de autenticación | Sí | No | No |
| Persistencia de cookies | Sí | No | No |
| Clasificación de páginas (18) | Sí | No | No |
| Memoria de sesión | Sí | No | No |
| Inteligencia API | Sí | No | No |
| Espera adaptativa + reintento automático | Sí | No | No |
| Auto-resolución de CAPTCHA | Sí | No | No |
| Auto-mejora (9 dimensiones) | Sí | No | No |
| Grabar / reproducir | Sí | No | No |
| Extracción de paginación | Sí | No | No |
| Instantáneas incrementales (diff) | Sí | No | No |
| CLI de auto-prueba de sigilo | Sí | No | No |
| Protección SSRF | Sí | No | No |
Sigilo
Leapfrog incluye 19 parches anti-detección activados por defecto (LEAP_STEALTH=true). Cuatro modos:
true(por defecto) — los 19 parches activospassive— elimina solo las señales de automatización (webdriver, HeadlessChrome). NO falsifica la identidad (WebGL, fuentes, audio). Mejor para sitios donde la confianza importa más que la evasión.auto— el bandido EXP3 por dominio selecciona la configuración de sigilo óptima según lo que ha funcionado antesfalse— sin parches de sigilo
Estos cubren los vectores que los servicios de fingerprinting como CreepJS y fingerprint-pro realmente verifican:
- Marcas de Client Hints (elimina HeadlessChrome)
navigator.webdriverforzado aundefined- Proveedor/renderizador WebGL (reemplaza SwiftShader con cadenas GPU reales)
- RTT de conexión (no cero)
- Tiempo de descarte de alertas (retraso a velocidad humana)
- Desplazamiento de altura exterior/interior de la ventana
- Población de la matriz de tipos MIME
- Inferencia de plataforma desde el user agent
- Emulación de
chrome.app - Protección de iframe
contentWindow - Suplantación de códecs multimedia (
canPlayType) - Anulación de
document.hasFocus() - Eliminación de comentarios de URL de origen
- Coexistencia de UA personalizado + sigilo (los user agents personalizados ya no desactivan el contexto de sigilo)
- Detección de CDP
Runtime.enable(filtroError.prepareStackTrace) - Suplantación de la API de Permisos (más de 20 tipos de permisos)
- Ruido de fingerprinting de AudioContext (
getChannelData/getFloatFrequencyData) - Prevención de fugas de IP WebRTC (filtrado de candidatos ICE)
- Suplantación de fingerprinting por enumeración de fuentes
Control de sigilo por sesión: pasa stealth: false en session_create para desactivarlo en una sesión específica.
Humanización (Experimental)
Configura LEAP_HUMANIZE=true para habilitar la interacción del navegador similar a la humana. Esto es opt-in y añade latencia a cambio de un comportamiento más realista. Seis módulos:
- Mouse — Trayectorias de curvas Bezier con temporización de la Ley de Fitts y micro-temblores
- Escritura — Retrasos log-normales entre teclas (mediana de 200ms), tiempo de pulsación, velocidad consciente de bigramas, escritura con solapamiento
- Scroll — Simulación inercial con aceleración y decaimiento de momento (física de touchpad/rueda de ratón)
- Pausa — Retrasos de "pensamiento" entre acciones que simulan brechas cognitivas
- Fingerprint — Generación coherente de fingerprint del navegador (plataforma, memoria del dispositivo, GPU, zona horaria)
- Utils — Primitivas matemáticas compartidas (gaussiana Box-Muller, distribuciones)
Clasificación de Páginas
Cada llamada a navigate y snapshot clasifica automáticamente el tipo de página mediante puntuación ponderada de señales (sin necesidad de LLM). 18 tipos:
login · search-results · product · product-list · checkout · article · dashboard · form · error · challenge · landing · documentation · profile · media · feed · qa · ecommerce · unknown
La clasificación impulsa una extracción de instantáneas más inteligente: las páginas de inicio de sesión muestran campos de formulario, los artículos muestran contenido, los paneles muestran elementos interactivos.
Inteligencia del Harness
El harness rastrea cada acción en una sesión y clasifica los resultados:
- Clasificación de resultados de acciones —
SUCCESS,SILENT_CLICK,NAVIGATION,WRONG_ELEMENT,BLOCKED,ERROR,PENDING - Detección de redirección de bots — detecta cuando un sitio redirige a una página de desafío o bloqueo después de una acción
- Detección de bucles — advierte cuando el agente está atascado haciendo clic en el mismo elemento, rebotando entre URLs o repitiendo acciones
- Memoria de sesión — la herramienta
session_memoryrecuerda acciones después de la compresión de la ventana de contexto
Persistencia de Cookies
Los perfiles de navegador persistentes ahora usan context.cookies() + addCookies() en lugar de storageState(), que devuelve vacío en contextos persistentes. El estado de autenticación sobrevive entre sesiones.
Espera Adaptativa + Escalada de Sigilo
Navigate reintenta automáticamente con estrategias de respaldo cuando las páginas no cargan:
- Prueba
load(el más rápido) — si está vacío, reintenta connetworkidle(límite de 10s) - Si
networkidleagota el tiempo (Amazon, sitios con muchos anuncios), recurre adomcontentloaded - Si está bloqueado/desafiado, escala el sigilo: retrasos aleatorios → espera el desafío JS → rota la sesión con un fingerprint nuevo
- Las sesiones de perfil (autenticadas) nunca ven destruida su sesión — limitadas estrictamente al Nivel 2
Exclúyete con autoRetry: false en navigate. Controla la escalada máxima con maxRetryLevel (0-5, por defecto 3).
Grabar / Reproducir
Exporta el historial de acciones de una sesión como una grabación reproducible y luego reprodúcela en nuevas sesiones:
session_export— crea JSON parametrizado o script de Playwright a partir del historial de sesión. Las referencias@eNse resuelven a selectores CSS estables. Auto-detecta correos electrónicos, contraseñas y URLs como{{placeholders}}.session_replay— reproduce una grabación con anulaciones de parámetros. SoportaonError: 'stop'o'skip'.
Convierte flujos de trabajo puntuales del agente en automatizaciones reutilizables.
Extracción de Paginación
Extrae datos de múltiples páginas en una sola llamada de herramienta:
- Click-next — auto-detecta botones "Siguiente", enlaces de paginación, botones "Cargar más"
- Scroll infinito — desplaza y espera contenido nuevo mediante comparación de hash del DOM
- Patrón de URL — incrementa
?page={page}o patrones personalizados
Reemplaza 3-4 llamadas de herramienta por página. Límite: 50 páginas, 100K caracteres totales. Se detiene en: sin botón siguiente, página vacía, contenido duplicado o detección de bot.
Instantáneas Incrementales
La herramienta diff devuelve solo lo que cambió desde la última instantánea: adiciones, eliminaciones, cambios. Ahorro masivo de tokens para flujos de monitoreo y sondeo.
Superposiciones HUD (LEAP_HUD=true)
Cuando se ejecuta con interfaz gráfica, Leapfrog superpone retroalimentación visual en cada sesión:
- Onda de clic — círculo verde expansivo en las coordenadas del clic (solo acciones del agente)
- Zoom al objetivo — el navegador hace zoom a 1.15x sobre el elemento clicado brevemente para que los agentes (y humanos) puedan rastrear visualmente lo que sucede en ventanas en mosaico
- Scroll al objetivo — scrollIntoView antes de los clics para que puedas ver lo que el agente está a punto de hacer clic
Mínimo por diseño. Sin bordes, sin barras de estado, sin superposición de cursor: solo la retroalimentación que importa.
Mosaico Multi-Terminal (LEAP_TILE=true)
Múltiples instancias de Leapfrog comparten la pantalla mediante coordinación basada en archivos. Cada instancia rastrea sus propias ventanas y un TilesCoordinator asigna ranuras de cuadrícula globales: sin superposición, sin disposición manual. Configura LEAP_TILE=true (o LEAP_TILE=master para la instancia principal). El espaciado entre mosaicos es configurable con LEAP_TILE_PADDING (por defecto 8px).
Intervención Humana
Leapfrog auto-detecta situaciones que necesitan un humano: CAPTCHAs, formularios de inicio de sesión, redirecciones OAuth, desafíos de Cloudflare — e intenta auto-resolverlas antes de pausar.
- Auto-resuelve primero: hace clic en casillas de reCAPTCHA, botones de verificación de Cloudflare, botones genéricos de verificar/continuar, luego un segundo intento — todo antes de pedir ayuda
- Solucionadores externos: configura
LEAP_CAPTCHA_PROVIDER+LEAP_CAPTCHA_API_KEYpara la integración con CapSolver, 2Captcha o NopeCHA - Aprende lo que funciona: recuerda qué método de resolución funcionó por dominio y prueba primero el método conocido en la siguiente visita
- Detecta reCAPTCHA, hCaptcha, Turnstile, formularios de inicio de sesión, redirecciones OAuth, desafíos de Cloudflare
- El título de la pestaña cambia a "NEEDS HUMAN" cuando se necesita intervención
- Herramienta
wait_for_human— el agente la llama cuando está atascado, bloquea hasta que la resuelvas o navegues más allá
Cierre Automático de Consentimiento de Cookies (LEAP_AUTO_CONSENT=true)
Descarta automáticamente los banners de consentimiento de cookies en 10 frameworks (OneTrust, CookieBot, TrustArc, Quantcast, Didomi, Cookielaw, Osano, Usercentrics, + genérico) además de un respaldo por coincidencia de texto. Caché de selectores por dominio para reproducción instantánea en la siguiente visita.
Trazado (LEAP_TRACE=true)
Trazado de Playwright por sesión con capturas de pantalla + instantáneas DOM. Exporta archivos ZIP visibles en trace.playwright.dev mediante la herramienta session_export_trace. Se guarda automáticamente al destruir la sesión.
Auto-Mejora
Leapfrog aprende de cada visita. El conocimiento por dominio persiste en ~/.leapfrog/domains/{domain}.json — 9 dimensiones, todo automático:
| # | Dimensión | Qué hace |
|---|---|---|
| 1 | Estrategias de espera | Aprende el método de espera óptimo por dominio (networkidle vs domcontentloaded vs load) + promedio móvil de tiempos |
| 2 | Niveles de sigilo | Auto-escala 0→3 cuando se detectan bloqueos (2+ bloqueos en 1 hora). Comienza en el nivel aprendido en la siguiente visita |
| 3 | Selectores de consentimiento | Recuerda los selectores de descarte de banners de cookies, auto-clic en la siguiente visita |
| 4 | Resolución de desafíos | Registra qué método de CAPTCHA funcionó (casilla de reCAPTCHA, verificación de Cloudflare, etc.), prueba primero el método conocido |
| 5 | Supresión de elementos estables | Identifica elementos de nav/footer/sidebar vistos en 3+ visitas, los suprime de las instantáneas (30-40% de ahorro de tokens en dominios maduros) |
| 6 | Sanación de selectores | Recuerda fingerprints de elementos → selectores, sana referencias rotas entre visitas |
| 7 | Caché de endpoints API | Los endpoints API descubiertos persisten entre sesiones |
| 8 | Mapas de calor de interacción | Rastrea qué elementos usan realmente los agentes, suprime elementos no tocados (próximamente) |
| 9 | Selección de estrategia | Bandido adversarial (EXP3) para optimización de configuración de sigilo. Usa LEAP_STEALTH=auto para habilitarlo. |
Expulsión LRU en 500 dominios. Inspecciona con la herramienta domain_knowledge.
Refuerzo SSRF
La validación de URL bloquea IPs codificadas en hexadecimal (0x7f000001), notación octal (0177.0.0.1), rangos CGNAT (100.64.0.0/10) y cadenas de redirección que resuelven a direcciones internas. Localhost y 127.0.0.0/8 están permitidos por defecto para flujos de desarrollo local — establece LEAP_BLOCK_LOCALHOST=true para bloquearlos.
El ecosistema
Leapfrog utiliza metáforas de estanque para mantener las cosas memorables. Tu agente es la rana.
| Concepto | Término Leapfrog | Qué significa |
|---|---|---|
| Sesiones | Estanques | Contextos de navegador aislados: cookies, almacenamiento, estado |
| Pestañas | Hojas de lirio | Donde aterriza la rana dentro de un estanque |
| Navegar | Salto | Saltar a una URL y obtener una instantánea compacta |
| Instantáneas | Superficie | Lo que ves en la superficie: referencias @eN interactivas |
| Tráfico de red | Ondulación | Solicitudes HTTP que fluyen bajo la superficie |
| Errores de consola | Croar | Algo salió mal en el navegador |
| Modo sigiloso | Camuflaje | Parches de evasión anti-bots |
Los 36 herramientas
Gestión de estanques (11)
| Herramienta | Qué hace |
|---|---|
session_create | Abrir un nuevo estanque: cookies aisladas, estado, viewport, locale, zona horaria, sigilo, proxy |
session_destroy | Vaciar un estanque y liberar la ranura |
session_list | Ver todos los estanques activos con URLs y tiempos de inactividad |
session_save_profile | Guardar el estado de autenticación en disco para futuros estanques |
session_list_profiles | Listar perfiles de autenticación guardados |
pool_status | Estadísticas del pool, memoria, tiempo de actividad |
session_health | ¿Está sano el estanque? ¿Navegador conectado, página receptiva? |
profile_list | Listar perfiles de navegador persistentes guardados |
profile_delete | Eliminar un perfil de navegador persistente guardado y sus datos |
profile_import_from_chrome | Importar cookies y estado de un perfil de Chrome instalado |
profile_warm | Precalentar un perfil cargando URLs clave para establecer cookies/estado |
Navegación e instantáneas (12)
| Herramienta | Qué hace |
|---|---|
navigate | Saltar a una URL, devolver una instantánea @eN compacta. Espera adaptativa y escalada de sigilo integradas. |
snapshot | Releer la superficie (limitar con selector CSS) |
diff | Instantánea incremental: devuelve solo lo que cambió desde la última instantánea |
act | Hacer clic, rellenar, escribir, marcar, seleccionar, presionar, desplazarse, pasar el cursor, mover el ratón, arrastrar, subir, redimensionar, atrás, adelante |
batch_actions | Hasta 100 acciones secuenciales en una sola llamada MCP: elimina la sobrecarga de ida y vuelta |
paginate | Extraer datos de múltiples páginas en una sola llamada (clic-siguiente, desplazamiento, patrón de URL) |
add_init_script | Inyectar JS que se ejecuta antes de cada carga de página, persiste entre navegaciones |
wait_for | Esperar a elemento / texto / inactividad de red / navegación / expresión JS |
screenshot | Capturar PNG (página completa o elemento) |
extract | Extraer texto, HTML, título, URL o evaluar JS |
session_memory | Recordar acciones realizadas en esta sesión: recupera contexto después de la compresión |
session_export | Exportar historial de sesión como grabación JSON reproducible o script de Playwright |
Gestión de pestañas (3)
| Herramienta | Qué hace |
|---|---|
tabs_list | Listar todas las hojas en un estanque |
tab_switch | Saltar a otra hoja (-1 para el popup más reciente) |
tab_close | Cerrar una hoja (no se puede cerrar la última) |
Inteligencia del agente (3)
| Herramienta | Qué hace |
|---|---|
wait_for_human | Pausar para intervención humana: bloquea hasta que el usuario haga clic en Hecho en la superposición @..@ |
domain_knowledge | Inspeccionar lo que Leapfrog ha aprendido sobre un dominio (estrategias de espera, niveles de sigilo, endpoints) |
session_export_trace | Exportar un ZIP de traza de Playwright: visible en trace.playwright.dev |
Inteligencia de red y API (7)
| Herramienta | Qué hace |
|---|---|
network_log | Ver tráfico HTTP: filtrar por URL, método, estado, tipo de contenido |
console_log | Leer la salida de la consola del navegador, filtrada por nivel |
network_intercept | Bloquear, simular o registrar solicitudes por patrón de URL |
api_discover | Listar las APIs JSON que ha llamado la página, clasificadas por categoría (datos, seguimiento, autenticación, CDN, anuncios) |
api_export | Generar una especificación OpenAPI v3 a partir del tráfico de API observado |
execute | Ejecutar un script de Playwright en un entorno aislado: reemplaza de 5 a 20 viajes de ida y vuelta MCP secuenciales |
session_replay | Reproducir una grabación en la sesión actual con anulaciones de parámetros |
Variables de entorno
| Variable | Predeterminado | Descripción |
|---|---|---|
LEAP_MAX_SESSIONS | 15 | Máximo de sesiones concurrentes |
LEAP_IDLE_TIMEOUT | 1800000 | Tiempo de espera de inactividad de sesión en ms (30 min). Establece 0 para deshabilitar. |
LEAP_HEADLESS | true | Establece false para ver el navegador |
LEAP_HEADED | false | Establece true para ver el navegador (alternativa positiva a LEAP_HEADLESS) |
LEAP_CHANNEL | (chromium incluido) | Establece chrome para usar tu Chrome instalado |
LEAP_CDP_ENDPOINT | (ninguno) | Conectar a una instancia de Chrome en ejecución (por ejemplo, http://localhost:9222) |
LEAP_EXTENSIONS | (ninguno) | Rutas separadas por comas para extensiones de navegador a cargar |
LEAP_ALLOW_JS | true | Permitir evaluación de JS en extract y wait_for |
LEAP_STEALTH | true | Modo sigiloso: true | passive | auto | false. Ver sección Sigilo. |
LEAP_STEALTH_PROFILES | false | Habilitar parches de sigilo en sesiones de perfil (autenticadas) |
LEAP_CDP_STEALTH | true | Evasión de detección de CDP (filtrado Runtime.enable) |
LEAP_HUMANIZE | false | Experimental. Movimiento de ratón similar al humano, cadencia de escritura y comportamiento de desplazamiento. |
LEAP_ALLOW_EXECUTE | true | Permitir la herramienta execute (scripts de Playwright en espacio aislado) |
LEAP_BLOCK_LOCALHOST | false | Bloquear localhost/127.x.x.x (permitido por defecto para desarrollo local) |
LEAP_PROFILES_DIR | ~/.leapfrog/chrome-profiles | Directorio para perfiles de navegador persistentes |
LEAP_TILE | false | Mosaico de sesiones en una cuadrícula (true | master | false) |
LEAP_TILE_PADDING | 8 | Relleno entre ventanas en mosaico (px) |
LEAP_MULTI_TILE | false | Coordinación de mosaico multi-terminal entre instancias de Leapfrog |
LEAP_SCREEN_WIDTH | (automático) | Ancho de pantalla explícito para cálculos de mosaico |
LEAP_SCREEN_HEIGHT | (automático) | Alto de pantalla explícito para cálculos de mosaico |
LEAP_HUD | false | Hacer clic en onda, zoom al objetivo, desplazarse al objetivo en acciones del agente |
LEAP_AUTO_CONSENT | true | Cerrar automáticamente los banners de consentimiento de cookies (10 frameworks + respaldo) |
LEAP_TRACE | false | Trazado de Playwright por sesión (capturas de pantalla + instantáneas DOM) |
LEAP_RECORD | false | Grabación de sesión (exportación de historial de acciones) |
LEAP_REBROWSER | false | Habilitar integración de Rebrowser |
LEAP_AUTO_WARM | false | Precalentar perfiles automáticamente cargando URLs clave al crear la sesión |
LEAP_CAPTCHA_PROVIDER | (ninguno) | Resolvedor de CAPTCHA externo: capsolver | 2captcha | nopecha |
LEAP_CAPTCHA_API_KEY | (ninguno) | Clave API para el proveedor de CAPTCHA configurado |
LEAP_MAX_SESSIONS_PER_CLIENT | (ninguno) | Límite de pool de sesiones por cliente |
LEAP_LOG_LEVEL | info | debug / info / warn / error |
Pruebas
769 passing across 31 suites
Gestión de sesiones, motor de instantáneas, diferenciador de instantáneas, inteligencia de red, gestión de pestañas, seguridad, protección SSRF, parches de sigilo (19), sigilo mejorado, humanización (ratón, escritura, desplazamiento), clasificación de páginas, inteligencia de harness, inteligencia de API, ejecutor de scripts, acciones extendidas, superposiciones HUD, intervención humana, consentimiento de cookies, conocimiento de dominio, curación de selectores, elementos estables, gestor de mosaicos, regresión de errores, prueba de humo de integración, pruebas de estrés, benchmarks.
npm test
Requisitos
- Node.js >= 20
- Chromium: usar Chrome del sistema (
LEAP_CHANNEL=chrome) o instalar mediantenpx playwright-core install chromium
Licencia
MIT