Kapture
Uma extensão do Chrome DevTools que permite automação de navegador através do Model Context Protocol (MCP) para aplicações de IA.
Documentação
Kapture - Automação de Navegador via Chrome DevTools
Kapture é uma Extensão do Chrome DevTools que permite automação de navegador através do Model Context Protocol (MCP). Ela permite que aplicações de IA como Claude controlem navegadores web através de uma arquitetura de três camadas.
✨ Recurso Principal: Múltiplos clientes de IA podem se conectar ao mesmo servidor! Claude Desktop, Cline e outros clientes MCP podem controlar abas do navegador através de uma única instância do servidor.
Disponível na Chrome Web Store

Visão Geral
Kapture conecta assistentes de IA com navegadores web através de:
- Servidor MCP: Gerencia a comunicação do protocolo MCP
- Extensão do Chrome: Service worker em segundo plano executa comandos de automação do navegador (DevTools não precisa estar aberto)
- Ponte WebSocket: Comunicação em tempo real entre servidor e extensões
- Suporte a Múltiplos Clientes: Múltiplos clientes de IA podem se conectar simultaneamente via WebSocket
Arquitetura

Início Rápido
1. Instalar Dependências
# Server
cd server
npm install
npm run build
# Test App (optional)
cd test-app
npm install
2. Instalar a Extensão do Chrome
Opção A: Instalar pela Chrome Web Store (Recomendado)
- Visite a página do Kapture na Chrome Web Store
- Clique em "Adicionar ao Chrome"
- Confirme a instalação
Opção B: Carregar sem empacotar (Modo Desenvolvedor)
- Abra o Chrome e navegue até
chrome://extensions/ - Ative o "Modo desenvolvedor"
- Clique em "Carregar sem compactação"
- Selecione a pasta
extension
3. Iniciar o Servidor MCP
Configure seu cliente de IA e abra-o. Ele iniciará o servidor MCP automaticamente.
OU
Execute o App de Teste:
cd test-app
npm run dev
O servidor inicia na porta 61822.
# Server
cd server
npm start
# Test App
cd test-app
npm start
4. Conectar uma Aba
- Abra qualquer site no Chrome
- Clique no ícone da barra de ferramentas do Kapture e alterne o botão de conexão
- A extensão se conecta ao servidor na porta 61822 (o selo mostra ✓ quando conectado)
Alternativamente, conecte-se pelo painel "Kapture" no DevTools, ou carregue uma página com ?kapture-connect=true na URL para conexão automática.
Usando com Claude Desktop
Adicione à configuração do seu Claude Desktop:
Opção 1: Usando o comando bridge (Recomendado)
Este comando único inicia o servidor e gerencia a tradução stdio-para-WebSocket:
{
"mcpServers": {
"kapture": {
"command": "npx",
"args": ["-y", "kapture-mcp@latest", "bridge"]
}
}
}
Opção 2: Conexão WebSocket direta (Avançado)
Para casos de uso avançados onde você precisa de controle manual do servidor:
- Inicie o servidor manualmente:
npx kapture-mcp
- Configure o Claude Desktop para conectar via WebSocket:
{
"mcpServers": {
"kapture": {
"transport": "websocket",
"url": "ws://localhost:61822/mcp"
}
}
}
Nota: Esta abordagem requer gerenciamento manual do ciclo de vida do servidor. Use a Opção 1 (comando bridge) para a maioria dos casos de uso.
🚀 Execute Múltiplos Assistentes de IA Simultaneamente
Kapture suporta múltiplos clientes MCP conectando ao mesmo servidor! Você pode executar Claude Desktop, Cline e outros clientes MCP simultaneamente através de uma única instância do servidor.
Como Funciona
- Todos os clientes MCP conectam via WebSocket para
ws://localhost:61822/mcp - Todos os clientes MCP compartilham acesso às mesmas abas do navegador
- Notificações são transmitidas para todos os clientes conectados
Detecção Inteligente de Servidor
Ao executar npx kapture-mcp, o comando detecta automaticamente se um servidor já está em execução:
- Nenhum servidor existente: Inicia um novo servidor na porta 61822
- Servidor já em execução: Mostra informações de conexão e sai graciosamente
Isso previne erros e confusão quando múltiplos clientes tentam iniciar servidores.
Configurando Múltiplos Clientes
Cada cliente deve usar a mesma configuração de comando bridge:
Claude Desktop:
{
"mcpServers": {
"kapture": {
"command": "npx",
"args": ["-y", "kapture-mcp@latest", "bridge"]
}
}
}
Cline/VS Code:
{
"cline.mcpServers": {
"kapture": {
"command": "npx",
"args": ["-y", "kapture-mcp@latest", "bridge"]
}
}
}
Outros Clientes MCP:
Use o mesmo padrão de configuração com "command": "npx" e "args": ["-y", "kapture-mcp@latest", "bridge"].
Veja o guia completo de múltiplos assistentes →
Benefícios de Múltiplos Assistentes de IA:
- Fluxos de Trabalho Paralelos: Tenha o Claude Desktop pesquisando enquanto o Cline desenvolve código
- Tarefas Especializadas: Use diferentes clientes de IA para diferentes tipos de automação
- Colaboração em Equipe: Múltiplos membros da equipe podem usar suas ferramentas de IA preferidas simultaneamente
- Testes e Desenvolvimento: Teste scripts de automação com uma IA enquanto desenvolve com outra
Então peça ao Claude para interagir com páginas web:
- "Navegue até example.com e tire um screenshot"
- "Clique no botão de busca"
- "Preencha o campo de email com test@example.com"
Ferramentas MCP Disponíveis
navigate- Navegar para URLback- Botão voltar do navegadorforward- Botão avançar do navegadorreload- Recarregar a página atual (similar a pressionar F5)click- Clicar em elementos (usa o primeiro elemento correspondente, retorna seletor único)hover- Passar o mouse sobre elementos (usa o primeiro elemento correspondente, retorna seletor único)fill- Preencher campos de entrada definindo o valor diretamente (usa o primeiro elemento correspondente, retorna seletor único)type- Digitar uma string como pressionamentos de tecla individuais (eventos de tecla reais; funciona em entradas "falsas" que ignoram element.value)insertText- Inserir uma string inteira de uma vez (dispara eventos de entrada mas não eventos por tecla; bom para texto em massa e editores como Google Docs)clear- Limpar um campo de texto via selecionar-tudo + Backspace (eventos de tecla reais; funciona em entradas "falsas")select- Selecionar opções de dropdown (apenas HTML<select>, usa o primeiro elemento correspondente, retorna seletor único)keypress- Enviar eventos de teclado para a página ou elementos específicos (suporta teclas modificadoras)scroll- Rolar um elemento para a visualização (seletor/xpath) ou para uma coordenada absoluta x/y do documentoelements- Consultar todos os elementos que correspondem a um seletor CSS ou XPath com filtragem opcional de visibilidadeconsole_logs- Obter o conteúdo do console da aba (mensagens de console, exceções não capturadas, entradas geradas pelo navegador)watch_console- Observar o console em tempo real por um tempo limite obrigatório (ms), então retornar tudo que foi registrado durante a janelanetwork_monitor- Ligar/desligar o monitoramento de rede para uma aba (booleanoenabled). Enquanto ligado, os metadados de cada requisição são capturados em um buffer por aba. Observadores são rastreados por identidade do cliente: ativar é idempotente, o monitoramento permanece ligado até que todos os observadores desativem (ouforce:true), e clientes desconectados são liberados automaticamente. O buffer é limpo quando o monitoramento para completamente. Ative antes do tráfego que você deseja observar — a captura não tem histórico. (Extensão 1.1.0+)network_requests- Listar as requisições capturadas; cada uma carrega umrequestId, umseqmonotônico, ehasPostDataquando a requisição tinha payload. Consulte incrementalmente passando ocursorda chamada anterior comosince.network_body- Buscar os corpos de uma requisição porrequestId(o monitoramento deve estar ligado): o payload POSTrequestBodye obodyda resposta. Truncado paramaxBytes(padrão 65536) combodyTruncated:trueenquantosizereporta o comprimento total; retornabodyErrorse o corpo da resposta foi removido ou está em streaming (text/event-streamnão pode ser lido via CDP).evaluate- Executar JavaScript na página e retornar o resultado. Desligado por padrão: só disponível após ativar o botão "Permitir execução de JS" no popup da extensão ou painel DevTools para uma aba conectada. A permissão é redefinida ao desconectar.compose- Executar uma sequência de comandos contra uma aba em uma única chamada. Script é um comando por linha como<tool>?<query-string>(maiswait?t=<ms>); executa em ordem, para no primeiro erro, retorna um array de respostas por comando.
Nota sobre Seletores: Ferramentas que aceitam um parâmetro selector (click, hover, fill, type, insertText, clear, select, keypress, scroll, screenshot, dom) operarão apenas no primeiro elemento que corresponder ao seletor CSS. A resposta da ferramenta inclui o seletor único do elemento real que foi usado, que pode incluir um ID gerado automaticamente se o elemento não tivesse um.
Suporte a XPath: Todas as ferramentas que aceitam um parâmetro selector também aceitam um parâmetro xpath como alternativa. Isso é particularmente útil para:
- Encontrar elementos por conteúdo de texto:
xpath: "//button[contains(text(), 'Submit')]" - Relações complexas entre elementos:
xpath: "//div[@class='container']//span[2]" - Quando seletores CSS são insuficientes
Use selector OU xpath, não ambos. Se ambos forem fornecidos, selector tem precedência.
Ferramenta Keypress
A ferramenta keypress simula eventos de teclado. Ela aceita:
key(obrigatório): A combinação de teclas a pressionar. Pode ser:- Tecla única:
"a","Enter","Tab","Escape"," "(espaço),"Shift","Control" - Com modificadores:
"Control+a","Shift+Tab","Alt+F4","Meta+Shift+p" - Nomes de modificadores:
Control(ouCtrl),Shift,Alt,Meta(ouCmd/Command) - Nota: Ao enviar apenas uma tecla modificadora (ex.:
"Shift"), é tratado como pressionar essa tecla sozinha - Modificadores duplicados são ignorados (ex.:
"Shift+Shift+a"é o mesmo que"Shift+a")
- Tecla única:
selectorouxpath(opcional): Direcionar para um elemento específico. Se não for fornecido, envia para document.body
Exemplos:
// Press Enter
{ "key": "Enter", "selector": "#login-form" }
// Select all text (Ctrl+A)
{ "key": "Control+a", "selector": "#username" }
// Zoom in (Ctrl+Plus)
{ "key": "Control++", "selector": "body" }
// Zoom out (Ctrl+Minus)
{ "key": "Control+-", "selector": "body" }
// New tab (Ctrl+T)
{ "key": "Control+t" }
// Close tab (Ctrl+W or Cmd+W on Mac)
{ "key": "Meta+w" }
Recursos MCP
kapture://tabs- Listar todas as abas do navegador conectadaskapture://tab/{tabId}- Obter informações detalhadas sobre uma aba específicakapture://tab/{tabId}/console- Obter logs do console de uma aba específica (com suporte a paginação)kapture://tab/{tabId}/screenshot- Capturar screenshots de uma aba ou elementokapture://tab/{tabId}/dom- Obter conteúdo HTML de uma aba ou elementokapture://tab/{tabId}/elementsFromPoint- Obter elementos em coordenadas específicaskapture://tab/{tabId}/elements?selector={selector}&visible={true|false|all}- Consultar todos os elementos que correspondem a um seletor CSS ou XPath com filtragem opcional de visibilidade
Desenvolvimento
Desenvolvimento do Servidor
cd server
npm run dev # Development with hot-reload
App de Teste
cd test-app
npm run dev # Run Electron test app
Desenvolvimento da Extensão
Após fazer alterações:
- Vá para
chrome://extensions/ - Clique em atualizar na extensão Kapture
Componentes Principais
Servidor (/server/src):
mcp-server-manager.ts- Implementação do protocolo MCP (uma instância do servidor por cliente)browser-websocket-manager.ts- Servidor WebSocket para conexões de extensãotab-registry.ts- Rastreamento de abastool-handler.ts+tools.yaml- Definições de ferramentas MCP e despacho
Extensão (/extension):
background.js+modules/- Service worker: gerencia conexões WebSocket e executa comandos (via APIschrome.debuggerechrome.tabs)page-helpers.js- Script de conteúdo que gerencia comandos DOM (dom,elements,fill,select, ...)modules/background-console.js- Recuperação de console via CDP (lê o buffer de console por página do Chrome; sem armazenamento de logs no lado da extensão)popup.js- Popup da barra de ferramentas com botão de conexãopanel.js- Painel DevTools (botão de conexão, visualizador de mensagens WebSocket)
Recursos do Painel DevTools
- Botão de Conexão - Conectar/desconectar a aba inspecionada
- Status da Conexão - Indicador de conexão com o servidor em tempo real
- Visualizador de Mensagens - Visualização ao vivo das mensagens WebSocket entre extensão e servidor
- Configuração de Keepalive - Intervalo de ping configurável
O painel é opcional — conexões e comandos são gerenciados pelo service worker em segundo plano, então a automação funciona com o DevTools fechado.
Solução de Problemas
Problemas de Conexão
- A extensão se conecta ao servidor na porta 61822
- Verifique se o servidor está em execução (
curl http://localhost:61822/) - Verifique o selo do ícone da barra de ferramentas: ✓ = conectado, ↻ = tentando novamente
- Verifique o console do service worker em segundo plano (
chrome://extensions/→ Kapture → service worker) - Verifique os logs do servidor no terminal
Extensão Não Aparecendo
- Certifique-se de que a extensão está carregada e habilitada
- Feche e reabra o DevTools
- Recarregue a extensão em
chrome://extensions/
Timeouts de Comando
- O timeout padrão é de 5 segundos
- Alguns comandos aceitam parâmetro de timeout personalizado
- Verifique se os seletores de elementos estão corretos
Segurança
- Os comandos DOM são executados no mundo isolado do content script; comandos de entrada/navegação/captura de tela usam
chrome.debugger(CDP) - Cada aba possui um ID único que evita interferência entre abas
- Sem acesso direto ao sistema de arquivos a partir da extensão
- O registro de abas impõe isolamento de comandos
Licença
MIT