Leapfrog
MCP de navegador multissessão para agentes de IA — modo furtivo, pool de sessões, humanização, 10x menos tokens que o Playwright
Documentação
Leapfrog
Navegador multi-sessão MCP para agentes de IA.
36 ferramentas. 15 sessões paralelas. Stealth. HUD. Auto-aprimoramento. Até 10x menos tokens.
npm i leapfrog-mcp | Funciona com Claude Code, Cursor, Windsurf
O Problema
O Playwright MCP envia ~14.000 tokens para uma página com muito conteúdo como o Hacker News. A maior parte disso é ruído. Sua janela de contexto enche. Seu agente fica confuso. Você paga por isso.
O Leapfrog envia ~1.400 tokens. Mesma página. Mesma informação. Até 10x menos ruído.
┌─────────────────────────────────────────────────────┐
│ Playwright MCP │
│ ████████████████████████████████████████ ~14,000 │
│ │
│ Leapfrog │
│ █████ ~1,400 │
└─────────────────────────────────────────────────────┘
tokens per page (Hacker News, real test)
A economia varia de 2 a 10x dependendo da complexidade da página. Páginas com muito conteúdo apresentam os maiores ganhos. Formulários densos apresentam os menores. A mediana em sites reais é de ~4-5x.
Início 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
Adicione ao ~/.mcp.json (Claude Code) ou à configuração MCP do seu editor:
{
"leapfrog": {
"command": "npx",
"args": ["-y", "leapfrog-mcp"],
"env": {
"LEAP_MAX_SESSIONS": "15",
"LEAP_TILE": "true",
"LEAP_HUD": "true",
"LEAP_AUTO_CONSENT": "true"
}
}
}
O Leapfrog usa playwright-core (15MB) em vez de playwright (1.6GB) e não inclui um navegador. Ou:
- Defina
LEAP_CHANNEL=chromepara usar seu Chrome/Chromium instalado (recomendado) - Ou execute
npx playwright-core install chromiumpara instalar o binário Chromium incluído - Ou defina
LEAP_CDP_ENDPOINTpara conectar a uma instância do Chrome já em execução
Matriz de Recursos
| Leapfrog | Playwright MCP | agent-browser | |
|---|---|---|---|
| Tokens por página | ~1.200-2.500 | ~3.800-15.000 | ~300 |
| Sessões paralelas | 15 | 1 | 1 |
| Isolamento de sessão | Sim | Não | Não |
| Multi-abas / popups | Sim | Não | Não |
| Interceptação de rede | Sim | Não | Não |
| Captura de console | Sim | Sim | Não |
| Stealth / anti-bot | Sim | Não | Não |
| Espera inteligente (5 tipos) | Sim | Básico | Não |
| Recuperação de falhas | Sim | Não | Não |
| Ações em lote (100/chamada) | Sim | Não | Não |
| Injeção de script de inicialização | Sim | Sim | Não |
| Arrastar / enviar / redimensionar | Sim | Sim | Não |
| Proxy por sessão | Sim | Não | Não |
| Humanização (opt-in) | Sim | Não | Não |
| Reutilização de perfil de autenticação | Sim | Não | Não |
| Persistência de cookies | Sim | Não | Não |
| Classificação de páginas (18) | Sim | Não | Não |
| Memória de sessão | Sim | Não | Não |
| Inteligência de API | Sim | Não | Não |
| Espera adaptativa + nova tentativa automática | Sim | Não | Não |
| Resolução automática de CAPTCHA | Sim | Não | Não |
| Auto-aprimoramento (9 dimensões) | Sim | Não | Não |
| Gravar / reproduzir | Sim | Não | Não |
| Extração de paginação | Sim | Não | Não |
| Snapshots incrementais (diff) | Sim | Não | Não |
| CLI de autoteste stealth | Sim | Não | Não |
| Proteção SSRF | Sim | Não | Não |
Stealth
O Leapfrog inclui 19 correções anti-detecção habilitadas por padrão (LEAP_STEALTH=true). Quatro modos:
true(padrão) — todas as 19 correções ativaspassive— remove apenas sinais de automação (webdriver, HeadlessChrome). NÃO falsifica identidade (WebGL, fontes, áudio). Melhor para sites onde a confiança importa mais que a evasão.auto— bandit EXP3 por domínio seleciona a configuração stealth ideal com base no que funcionou antesfalse— sem correções stealth
Elas cobrem os vetores que serviços de fingerprinting como CreepJS e fingerprint-pro realmente verificam:
- Marcas de Client Hints (remove HeadlessChrome)
navigator.webdriverforçado paraundefined- Fornecedor/renderizador WebGL (substitui SwiftShader por strings reais de GPU)
- RTT de conexão (diferente de zero)
- Tempo de dispensa de alertas (atraso em velocidade humana)
- Deslocamento de altura externa/interna da janela
- Preenchimento do array de tipos MIME
- Inferência de plataforma a partir do user agent
- Emulação de
chrome.app - Proteção de
contentWindowem iframes - Falsificação de codecs de mídia (
canPlayType) - Substituição de
document.hasFocus() - Remoção de comentários de URL de origem
- Coexistência de UA personalizado + stealth (user agents personalizados não desabilitam mais o contexto stealth)
- Detecção de
Runtime.enablevia CDP (filtroError.prepareStackTrace) - Falsificação da API de Permissões (mais de 20 tipos de permissão)
- Ruído de fingerprint do AudioContext (
getChannelData/getFloatFrequencyData) - Prevenção de vazamento de IP via WebRTC (filtragem de candidatos ICE)
- Falsificação de fingerprint por enumeração de fontes
Controle stealth por sessão: passe stealth: false em session_create para desabilitar em uma sessão específica.
Humanização (Experimental)
Defina LEAP_HUMANIZE=true para habilitar interação de navegador semelhante à humana. Isso é opt-in e adiciona latência em troca de um comportamento mais realista. Seis módulos:
- Mouse — caminhos de curva Bezier com tempo baseado na Lei de Fitts e micro-tremor
- Digitação — atrasos entre teclas com distribuição log-normal (mediana de 200ms), tempo de pressionamento, velocidade consciente de bigramas, digitação com sobreposição
- Rolagem — simulação inercial com aceleração e desaceleração de momentum (física de touchpad/roda do mouse)
- Pausa — atrasos de "pensamento" entre ações que simulam lacunas cognitivas
- Fingerprint — geração coerente de fingerprint do navegador (plataforma, memória do dispositivo, GPU, fuso horário)
- Utils — primitivas matemáticas compartilhadas (gaussiana Box-Muller, distribuições)
Classificação de Páginas
Toda chamada de navigate e snapshot classifica automaticamente o tipo de página usando pontuação ponderada de sinais (sem necessidade de LLM). 18 tipos:
login · search-results · product · product-list · checkout · article · dashboard · form · error · challenge · landing · documentation · profile · media · feed · qa · ecommerce · unknown
A classificação direciona uma extração de snapshot mais inteligente — páginas de login exibem campos de formulário, artigos exibem conteúdo, painéis exibem elementos interativos.
Inteligência do Harness
O harness rastreia cada ação em uma sessão e classifica os resultados:
- Classificação de resultado de ação —
SUCCESS,SILENT_CLICK,NAVIGATION,WRONG_ELEMENT,BLOCKED,ERROR,PENDING - Detecção de redirecionamento de bot — detecta quando um site redireciona para uma página de desafio ou bloqueio após uma ação
- Detecção de loop — avisa quando o agente está preso clicando no mesmo elemento, alternando entre URLs ou repetindo ações
- Memória de sessão — a ferramenta
session_memoryrecorda ações após a compressão da janela de contexto
Persistência de Cookies
Perfis de navegador persistentes agora usam context.cookies() + addCookies() em vez de storageState(), que retorna vazio em contextos persistentes. O estado de autenticação sobrevive entre sessões.
Espera Adaptativa + Escalonamento Stealth
O Navigate tenta novamente automaticamente com estratégias alternativas quando as páginas falham ao carregar:
- Tente
load(mais rápido) — se vazio, tente novamente comnetworkidle(limite de 10s) - Se
networkidleexpirar (Amazon, sites com muitos anúncios), usedomcontentloadedcomo alternativa - Se bloqueado/desafiado, escale o stealth: atrasos aleatórios → aguarde desafio JS → alterne a sessão com novo fingerprint
- Sessões de perfil (autenticadas) nunca têm sua sessão destruída — limitadas ao Nível 2
Opt-out com autoRetry: false em navigate. Controle o escalonamento máximo com maxRetryLevel (0-5, padrão 3).
Gravar / Reproduzir
Exporte o histórico de ações de uma sessão como uma gravação reproduzível e reproduza-a em novas sessões:
session_export— cria JSON parametrizado ou script Playwright a partir do histórico da sessão. Referências@eNresolvidas para seletores CSS estáveis. Detecta automaticamente e-mails, senhas e URLs como{{placeholders}}.session_replay— reproduz uma gravação com substituições de parâmetros. SuportaonError: 'stop'ou'skip'.
Transforme fluxos de trabalho únicos do agente em automações reutilizáveis.
Extração de Paginação
Extraia dados de várias páginas em uma única chamada de ferramenta:
- Clique em próximo — detecta automaticamente botões "Próximo", links de paginação, botões "Carregar mais"
- Rolagem infinita — rola e aguarda novo conteúdo via comparação de hash do DOM
- Padrão de URL — incrementa
?page={page}ou padrões personalizados
Substitui 3-4 chamadas de ferramenta por página. Limite: 50 páginas, 100K caracteres no total. Para em: sem botão próximo, página vazia, conteúdo duplicado ou detecção de bot.
Snapshots Incrementais
A ferramenta diff retorna apenas o que mudou desde o último snapshot — adições, remoções, alterações. Economia massiva de tokens para fluxos de monitoramento e polling.
Sobreposições HUD (LEAP_HUD=true)
Ao executar com interface gráfica, o Leapfrog sobrepõe feedback visual em cada sessão:
- Ripple de clique — círculo verde expansivo nas coordenadas do clique (apenas ações do agente)
- Zoom no alvo — o navegador amplia para 1.15x no elemento clicado brevemente para que agentes (e humanos) possam acompanhar visualmente o que está acontecendo em janelas lado a lado
- Rolar até o alvo — scrollIntoView antes dos cliques para que você veja o que o agente está prestes a clicar
Mínimo por design. Sem bordas, sem barras de status, sem sobreposição de cursor — apenas o feedback que importa.
Organização em Múltiplos Terminais (LEAP_TILE=true)
Múltiplas instâncias do Leapfrog compartilham a tela via coordenação baseada em arquivos. Cada instância rastreia suas próprias janelas e um TilesCoordinator atribui slots globais de grade — sem sobreposição, sem organização manual. Defina LEAP_TILE=true (ou LEAP_TILE=master para a instância primária). O espaçamento entre blocos é configurável com LEAP_TILE_PADDING (padrão 8px).
Intervenção Humana
O Leapfrog detecta automaticamente situações que precisam de um humano — CAPTCHAs, formulários de login, redirecionamentos OAuth, desafios Cloudflare — e tenta resolver sozinho antes de pausar.
- Auto-resolve primeiro: clica em caixas de seleção do reCAPTCHA, botões de verificação do Cloudflare, botões genéricos de verificar/continuar, depois uma segunda tentativa — tudo antes de pedir ajuda
- Solucionadores externos: defina
LEAP_CAPTCHA_PROVIDER+LEAP_CAPTCHA_API_KEYpara integração com CapSolver, 2Captcha ou NopeCHA - Aprende o que funciona: lembra qual método de resolução funcionou por domínio e tenta o método conhecido primeiro em novas visitas
- Detecta reCAPTCHA, hCaptcha, Turnstile, formulários de login, redirecionamentos OAuth, desafios Cloudflare
- O título da aba muda para "NEEDS HUMAN" quando intervenção é necessária
- Ferramenta
wait_for_human— o agente chama quando está travado, bloqueia até você resolver ou navegar além
Dispensa Automática de Consentimento de Cookies (LEAP_AUTO_CONSENT=true)
Dispensa automaticamente banners de consentimento de cookies em 10 frameworks (OneTrust, CookieBot, TrustArc, Quantcast, Didomi, Cookielaw, Osano, Usercentrics, + genérico) além de fallback por correspondência de texto. Cache de seletores por domínio para reprodução instantânea em novas visitas.
Tracing (LEAP_TRACE=true)
Tracing Playwright por sessão com screenshots + snapshots de DOM. Exporte arquivos ZIP visualizáveis em trace.playwright.dev via ferramenta session_export_trace. Salva automaticamente na destruição da sessão.
Auto-Aprimoramento
O Leapfrog aprende com cada visita. O conhecimento por domínio persiste em ~/.leapfrog/domains/{domain}.json — 9 dimensões, todas automáticas:
| # | Dimensão | O que faz |
|---|---|---|
| 1 | Estratégias de espera | Aprende o método de espera ideal por domínio (networkidle vs domcontentloaded vs load) + média móvel de tempo |
| 2 | Níveis stealth | Escala automaticamente 0→3 quando bloqueios são detectados (2+ bloqueios em 1 hora). Começa no nível aprendido em novas visitas |
| 3 | Seletores de consentimento | Lembra seletores de dispensa de banners de cookies, clica automaticamente em novas visitas |
| 4 | Resolução de desafios | Registra qual método de CAPTCHA funcionou (caixa reCAPTCHA, verificação Cloudflare, etc.), tenta o método conhecido primeiro |
| 5 | Supressão de elementos estáveis | Identifica elementos de navegação/rodapé/barra lateral vistos em 3+ visitas, suprime de snapshots (economia de 30-40% de tokens em domínios maduros) |
| 6 | Correção de seletores | Lembra fingerprints de elementos → seletores, corrige referências quebradas entre visitas |
| 7 | Cache de endpoints de API | Endpoints de API descobertos persistem entre sessões |
| 8 | Mapas de calor de interação | Rastreia quais elementos os agentes realmente usam, suprime elementos não tocados (em breve) |
| 9 | Seleção de estratégia | Bandit adversarial (EXP3) para otimização de configuração stealth. Use LEAP_STEALTH=auto para habilitar. |
Evicção LRU em 500 domínios. Inspecione com a ferramenta domain_knowledge.
Endurecimento SSRF
A validação de URL bloqueia IPs codificados em hexadecimal (0x7f000001), notação octal (0177.0.0.1), faixas CGNAT (100.64.0.0/10) e cadeias de redirecionamento que resolvem para endereços internos. Localhost e 127.0.0.0/8 são permitidos por padrão para fluxos de desenvolvimento local — defina LEAP_BLOCK_LOCALHOST=true para bloqueá-los.
O Ecossistema
O Leapfrog usa metáforas de lago para tornar as coisas memoráveis. Seu agente é o sapo.
| Conceito | Termo Leapfrog | O que significa |
|---|---|---|
| Sessões | Lagos | Contextos de navegador isolados — cookies, armazenamento, estado |
| Abas | Lírios | Onde o sapo pousa dentro de um lago |
| Navegar | Saltar | Ir para uma URL, obter um snapshot compacto de volta |
| Snapshots | Superfície | O que você vê na superfície — refs @eN interativos |
| Tráfego de rede | Ondulação | Requisições HTTP fluindo sob a superfície |
| Erros de console | Croak | Algo deu errado no navegador |
| Modo furtivo | Camuflagem | Patches de evasão anti-bot |
Todas as 36 Ferramentas
Gerenciamento de Lagos (11)
| Ferramenta | O que faz |
|---|---|
session_create | Abrir um novo lago — cookies isolados, estado, viewport, locale, fuso horário, furtividade, proxy |
session_destroy | Drenar um lago e liberar o slot |
session_list | Ver todos os lagos ativos com URLs e tempos ociosos |
session_save_profile | Salvar estado de autenticação em disco para lagos futuros |
session_list_profiles | Listar perfis de autenticação salvos |
pool_status | Estatísticas do pool, memória, uptime |
session_health | O lago está saudável? Navegador conectado, página responsiva? |
profile_list | Listar perfis de navegador persistentes salvos |
profile_delete | Excluir um perfil de navegador persistente salvo e seus dados |
profile_import_from_chrome | Importar cookies e estado de um perfil Chrome instalado |
profile_warm | Pré-aquecer um perfil carregando URLs-chave para estabelecer cookies/estado |
Navegação e Snapshots (12)
| Ferramenta | O que faz |
|---|---|
navigate | Saltar para uma URL, retornar um snapshot @eN compacto. Espera adaptativa + escalonamento furtivo integrados. |
snapshot | Reler a superfície (escopo com seletor CSS) |
diff | Snapshot incremental — retorna apenas o que mudou desde o último snapshot |
act | Clicar, preencher, digitar, marcar, selecionar, pressionar, rolar, passar o mouse, mover o mouse, arrastar, enviar arquivo, redimensionar, voltar, avançar |
batch_actions | Até 100 ações sequenciais em uma única chamada MCP — elimina sobrecarga de ida e volta |
paginate | Extrair dados em várias páginas em uma chamada (clique-próximo, rolagem, padrão de URL) |
add_init_script | Injetar JS que executa antes de cada carregamento de página, persiste entre navegações |
wait_for | Aguardar por elemento / texto / rede ociosa / navegação / expressão JS |
screenshot | Capturar PNG (página inteira ou elemento) |
extract | Extrair texto, HTML, título, URL ou avaliar JS |
session_memory | Relembrar ações executadas nesta sessão — recupera contexto após compressão |
session_export | Exportar histórico da sessão como gravação JSON reproduzível ou script Playwright |
Gerenciamento de Abas (3)
| Ferramenta | O que faz |
|---|---|
tabs_list | Listar todos os lírios em um lago |
tab_switch | Saltar para outro lírio (-1 para o popup mais recente) |
tab_close | Fechar um lírio (não é possível fechar o último) |
Inteligência do Agente (3)
| Ferramenta | O que faz |
|---|---|
wait_for_human | Pausar para intervenção humana — bloqueia até o usuário clicar em Concluído na sobreposição @..@ |
domain_knowledge | Inspecionar o que o Leapfrog aprendeu sobre um domínio (estratégias de espera, níveis furtivos, endpoints) |
session_export_trace | Exportar um arquivo ZIP de trace Playwright — visualizável em trace.playwright.dev |
Inteligência de Rede e API (7)
| Ferramenta | O que faz |
|---|---|
network_log | Ver tráfego HTTP — filtrar por URL, método, status, content-type |
console_log | Ler saída do console do navegador, filtrada por nível |
network_intercept | Bloquear, simular ou registrar requisições por padrão de URL |
api_discover | Listar APIs JSON que a página chamou, classificadas por categoria (dados, rastreamento, autenticação, CDN, anúncios) |
api_export | Gerar uma especificação OpenAPI v3 a partir do tráfego de API observado |
execute | Executar um script Playwright em um ambiente sandbox — substitui 5-20 idas e voltas MCP sequenciais |
session_replay | Reproduzir uma gravação na sessão atual com substituições de parâmetros |
Variáveis de Ambiente
| Variável | Padrão | Descrição |
|---|---|---|
LEAP_MAX_SESSIONS | 15 | Máximo de sessões concorrentes |
LEAP_IDLE_TIMEOUT | 1800000 | Tempo limite de ociosidade da sessão em ms (30 min). Defina 0 para desativar. |
LEAP_HEADLESS | true | Defina false para assistir ao navegador |
LEAP_HEADED | false | Defina true para assistir ao navegador (alternativa positiva a LEAP_HEADLESS) |
LEAP_CHANNEL | (chromium incluído) | Defina chrome para usar seu Chrome instalado |
LEAP_CDP_ENDPOINT | (nenhum) | Conectar a uma instância Chrome em execução (ex.: http://localhost:9222) |
LEAP_EXTENSIONS | (nenhum) | Caminhos separados por vírgula para extensões de navegador a carregar |
LEAP_ALLOW_JS | true | Permitir avaliação de JS em extract e wait_for |
LEAP_STEALTH | true | Modo furtivo: true | passive | auto | false. Veja a seção Furtividade. |
LEAP_STEALTH_PROFILES | false | Habilitar patches furtivos em sessões de perfil (autenticadas) |
LEAP_CDP_STEALTH | true | Evasão de detecção CDP (filtragem Runtime.enable) |
LEAP_HUMANIZE | false | Experimental. Movimento de mouse semelhante ao humano, cadência de digitação e comportamento de rolagem. |
LEAP_ALLOW_EXECUTE | true | Permitir a ferramenta execute (scripts Playwright em sandbox) |
LEAP_BLOCK_LOCALHOST | false | Bloquear localhost/127.x.x.x (permitido por padrão para desenvolvimento local) |
LEAP_PROFILES_DIR | ~/.leapfrog/chrome-profiles | Diretório para perfis de navegador persistentes |
LEAP_TILE | false | Organizar sessões em grade (true | master | false) |
LEAP_TILE_PADDING | 8 | Espaçamento entre janelas organizadas (px) |
LEAP_MULTI_TILE | false | Coordenação de organização multi-terminal entre instâncias Leapfrog |
LEAP_SCREEN_WIDTH | (automático) | Largura de tela explícita para cálculos de organização |
LEAP_SCREEN_HEIGHT | (automático) | Altura de tela explícita para cálculos de organização |
LEAP_HUD | false | Clique com ondulação, zoom no alvo, rolagem até o alvo em ações do agente |
LEAP_AUTO_CONSENT | true | Dispensar automaticamente banners de consentimento de cookies (10 frameworks + fallback) |
LEAP_TRACE | false | Rastreamento Playwright por sessão (capturas de tela + snapshots DOM) |
LEAP_RECORD | false | Gravação de sessão (exportação de histórico de ações) |
LEAP_REBROWSER | false | Habilitar integração Rebrowser |
LEAP_AUTO_WARM | false | Pré-aquecer perfis automaticamente carregando URLs-chave na criação da sessão |
LEAP_CAPTCHA_PROVIDER | (nenhum) | Solucionador de CAPTCHA externo: capsolver | 2captcha | nopecha |
LEAP_CAPTCHA_API_KEY | (nenhum) | Chave de API para o provedor de CAPTCHA configurado |
LEAP_MAX_SESSIONS_PER_CLIENT | (nenhum) | Limite de pool de sessão por cliente |
LEAP_LOG_LEVEL | info | debug / info / warn / error |
Testes
769 passing across 31 suites
Gerenciamento de sessão, mecanismo de snapshot, diferenciador de snapshot, inteligência de rede, gerenciamento de abas, segurança, proteção SSRF, patches furtivos (19), furtividade aprimorada, humanização (mouse, digitação, rolagem), classificação de páginas, inteligência de harness, inteligência de API, executor de scripts, ações estendidas, sobreposições HUD, intervenção humana, consentimento de cookies, conhecimento de domínio, cura de seletores, elementos estáveis, gerenciador de tiles, regressão de bugs, smoke de integração, testes de estresse, benchmarks.
npm test
Requisitos
- Node.js >= 20
- Chromium — use o Chrome do sistema (
LEAP_CHANNEL=chrome) ou instale vianpx playwright-core install chromium
Licença
MIT