Snowfort Circuit MCP

Automatize navegadores web e aplicativos desktop Electron para agentes de codificação de IA.

Documentação

Circuit MCP - Uso de computador para aplicações web e apps Electron

License

O Circuit MCP é um conjunto completo de servidores Model Context Protocol (MCP) que permite que agentes de codificação de IA automatizem navegadores web e aplicações desktop Electron com precisão e flexibilidade incomparáveis.

🚀 Início Rápido para Agentes de IA

Configuração do MCP

Adicione ao arquivo de configuração do MCP do seu agente de IA:

Apenas Automação Web

{
  "mcpServers": {
    "circuit-web": {
      "command": "npx",
      "args": ["@snowfort/circuit-web@latest"]
    }
  }
}

Apenas Automação Desktop

{
  "mcpServers": {
    "circuit-electron": {
      "command": "npx",
      "args": ["@snowfort/circuit-electron@latest"]
    }
  }
}

Configuração Completa com Dois Motores (Recomendado)

{
  "mcpServers": {
    "circuit-web": {
      "command": "npx",
      "args": ["@snowfort/circuit-web@latest"]
    },
    "circuit-electron": {
      "command": "npx",
      "args": ["@snowfort/circuit-electron@latest"]
    }
  }
}

Primeiros Comandos

Uma vez configurado, seu agente de IA pode começar a automatizar imediatamente:

// Launch browser with optimized AI settings
browser_launch({
  "compressScreenshots": true,
  "screenshotQuality": 50
})
browser_navigate({"sessionId": "...", "url": "https://github.com"})
// Auto-snapshot included in response!

// Launch and control any Electron app
app_launch({"app": "/Applications/Visual Studio Code.app"})
click({"sessionId": "...", "selector": "button[title='New File']"})

✨ Recursos

🌐 Automação Web (29 Ferramentas)

  • Suporte a Múltiplos Navegadores: Chromium, Firefox, WebKit
  • 🎯 Snapshots Otimizados para IA: Auto-snapshots com referências de elementos após cada ação
  • 📸 Compressão Inteligente de Screenshots: Compressão JPEG para fluxos de IA mais rápidos (configurável)
  • Conjunto Completo de Interações: Clique, digitação, hover, arrastar, rolar com auto-contexto
  • 🖱️ Gerenciamento de Múltiplas Abas: Criar, alternar, listar e fechar abas do navegador
  • 📊 Monitoramento de Rede e Console: Rastreamento de requisições em tempo real e captura de console
  • Entrada Avançada: Upload de arquivos, seleção em menus suspensos, atalhos de teclado
  • Extração de Conteúdo: Conteúdo HTML, conteúdo de texto, árvores de acessibilidade com referências de elementos
  • Captura Visual: Screenshots comprimidos, geração de PDF
  • Navegação: Controle de histórico, recarregamento de página, navegação por URL
  • Tratamento de Diálogos: Gerenciamento automático de alertas/confirmações/prompts
  • Controle do Navegador: Redimensionamento de viewport, gerenciamento de janelas
  • 🧪 Geração de Testes: Gera automaticamente código de teste Playwright a partir de ações registradas
  • Execução de JavaScript: Executar scripts personalizados no contexto da página
  • Espera Inteligente: Aparecimento de elementos, inatividade de rede, estados de carregamento de página

🖥️ Automação Desktop (32 Ferramentas)

  • 🎯 Controle Desktop Otimizado para IA: Inicia e controla apps Electron com auto-snapshots
  • 📸 Compressão Inteligente de Screenshots: Compressão JPEG para fluxos de IA mais rápidos (configurável)
  • 🔧 Suporte ao Modo de Desenvolvimento: Inicia apps durante o desenvolvimento com detecção automática
  • Suporte Universal a Electron: Qualquer aplicação Electron (empacotada ou em desenvolvimento)
  • Gerenciamento de Múltiplas Janelas: Controla múltiplas janelas de aplicativos simultaneamente
  • Comunicação IPC: Comunicação direta entre processos com os aplicativos
  • Sistema de Arquivos Nativo: Leitura/escrita de arquivos diretamente
  • Segmentação Aprimorada: Cliques baseados em papéis, seleção do enésimo elemento, segmentação baseada em texto
  • Acessibilidade em Primeiro Lugar: Navegação integrada pela árvore de acessibilidade com referências de elementos
  • Gerenciamento de Estado: Espera e monitoramento avançado de estados de página
  • 🐛 Monitoramento de Console e Rede: Captura logs de aplicativos e requisições de rede para depuração
  • Todas as Ferramentas Web: Toda ferramenta de automação web funciona no contexto desktop

🔧 Benefícios da Arquitetura

  • 🤖 Design Priorizando IA: Auto-snapshots, referências de elementos e imagens comprimidas para fluxos de IA ideais
  • Seleção de App em Tempo de Execução: Especifique apps Electron no momento da chamada da ferramenta, não na inicialização
  • Gerenciamento de Sessões: Múltiplas sessões de automação simultâneas com isolamento completo
  • Segurança de Tipos: Suporte completo a TypeScript com definições de tipos abrangentes
  • Tratamento de Erros: Relatórios de erro robustos e recuperação
  • Performance Otimizada: Uso eficiente de recursos e execução rápida

📚 Referência Completa de Ferramentas

🌐 Ferramentas Web

FerramentaDescriçãoParâmetros Principais
browser_launchIniciar navegador com otimizações de IAbrowser, headed, viewport, compressScreenshots, screenshotQuality
browser_navigateNavegar para URL (inclui auto-snapshot)sessionId, url
browser_resizeRedimensionar viewport do navegadorsessionId, width, height
browser_handle_dialogDefinir resposta automática de diálogossessionId, action, promptText
browser_tab_newCriar nova aba no navegadorsessionId
browser_tab_listListar todas as abas abertassessionId
browser_tab_selectAlternar para aba específicasessionId, tabId
browser_tab_closeFechar aba específicasessionId, tabId
browser_network_requestsObter histórico de requisições de redesessionId
browser_console_messagesObter histórico de mensagens do consolesessionId
browser_generate_playwright_testGerar código de teste a partir de açõessessionId
clickClicar no elemento (inclui auto-snapshot)sessionId, selector, windowId
typeDigitar texto (inclui auto-snapshot)sessionId, selector, text, windowId
hoverPassar o mouse sobre o elemento (inclui auto-snapshot)sessionId, selector, windowId
dragArrastar elemento até o alvosessionId, sourceSelector, targetSelector
keyPressionar tecla do teclado (inclui auto-snapshot)sessionId, key, windowId
selectSelecionar opção em menu suspensosessionId, selector, value
uploadEnviar arquivo para inputsessionId, selector, filePath
backVoltar no históricosessionId
forwardAvançar no históricosessionId
refreshRecarregar página atualsessionId
screenshotTirar screenshot comprimidosessionId, path
snapshotObter árvore de acessibilidade com referências de elementossessionId
pdfGerar PDF da páginasessionId, path
contentObter conteúdo HTMLsessionId
text_contentObter texto visívelsessionId
evaluateExecutar JavaScriptsessionId, script
wait_for_selectorAguardar elementosessionId, selector, timeout
closeFechar sessão do navegadorsessionId

🖥️ Ferramentas Electron

FerramentaDescriçãoParâmetros Principais
app_launchIniciar app Electron com otimizações de IAapp, mode, projectPath, startScript, disableDevtools, compressScreenshots, screenshotQuality
get_windowsListar janelas com identificação de tiposessionId
ipc_invokeChamar método IPCsessionId, channel, args
fs_write_fileEscrever arquivo no discosessionId, filePath, content
fs_read_fileLer arquivo do discosessionId, filePath
keyboard_pressPressionar tecla com modificadoressessionId, key, modifiers
click_by_textClicar no elemento por textosessionId, text, exact
click_by_roleClicar por papel de acessibilidadesessionId, role, name
click_nthClicar no enésimo elemento correspondentesessionId, selector, index
keyboard_typeDigitar com atrasosessionId, text, delay
add_locator_handlerTratar modais/popupssessionId, selector, action
wait_for_load_stateAguardar estado da páginasessionId, state
smart_clickClique inteligente com detecção automática (refs/texto/CSS)sessionId, target, strategy, windowId
browser_console_messagesObter logs do console do app ElectronsessionId
browser_network_requestsObter requisições de rede do app ElectronsessionId
+ Ferramentas Web CompartilhadasFerramentas web principais: click, type, screenshot, evaluate, etc.

💡 Exemplos de Uso

Fluxos de Trabalho de Automação Web

Inicialização do Navegador Otimizada para IA

// Launch with optimal AI settings
const session = await browser_launch({
  "compressScreenshots": true,
  "screenshotQuality": 50,
  "headed": false
})

// Navigation automatically includes page snapshot with element refs
await browser_navigate({
  "sessionId": session.id, 
  "url": "https://github.com"
})
// Response includes auto-snapshot with element references like ref="e1", ref="e2"

Fluxo de Trabalho com Múltiplas Abas

// Create and manage multiple tabs
const session = await browser_launch({})
await browser_navigate({"sessionId": session.id, "url": "https://github.com"})

const newTabId = await browser_tab_new({"sessionId": session.id})
await browser_tab_select({"sessionId": session.id, "tabId": newTabId})
await browser_navigate({"sessionId": session.id, "url": "https://stackoverflow.com"})

const tabs = await browser_tab_list({"sessionId": session.id})
// Shows all tabs with titles, URLs, and active status

Segmentação de Elementos com Referências

// Navigate and get element references
await browser_navigate({"sessionId": session.id, "url": "https://example.com"})
// Auto-snapshot response includes:
// {"role": "button", "name": "Sign In", "ref": "e5"}

// Click using standard selector (auto-snapshot included)
await click({"sessionId": session.id, "selector": "button:has-text('Sign In')"})
// Response includes updated page snapshot showing interaction result

Monitoramento de Rede e Console

// Monitor page activity
await browser_navigate({"sessionId": session.id, "url": "https://api-heavy-site.com"})
const requests = await browser_network_requests({"sessionId": session.id})
const consoleMessages = await browser_console_messages({"sessionId": session.id})

// Generate test code from actions
const testCode = await browser_generate_playwright_test({"sessionId": session.id})

Tratamento de Diálogos

// Set up automatic dialog handling
await browser_handle_dialog({
  "sessionId": session.id,
  "action": "accept",
  "promptText": "Default input"
})
// All subsequent dialogs will be handled automatically

Automação de Aplicações Desktop

Inicialização Desktop Otimizada para IA

// Launch with optimal AI settings for packaged apps
const session = await app_launch({
  "app": "/Applications/Visual Studio Code.app",
  "compressScreenshots": true,
  "screenshotQuality": 50
})
// All interactions automatically include window snapshots with element refs!
await click({"sessionId": session.id, "selector": "[title='New File']"})
// Response includes: "Element clicked successfully" + snapshot with ref="e1", ref="e2"

Suporte ao Modo de Desenvolvimento

// NEW: Launch Electron app during development
const session = await app_launch({
  "app": "/Users/dev/my-electron-project",
  "mode": "development",
  "compressScreenshots": false  // Full quality for debugging
})

// Auto-detect packaged vs development
const session2 = await app_launch({
  "app": "/path/to/app-or-project",
  "mode": "auto"  // Automatically detects launch mode
})

Suporte a Electron Forge (NOVO na v0.5.7)

Abordagem Recomendada (Mais Confiável):

// 1. First, run in a separate terminal:
// npm run start

// 2. Wait for webpack to compile, then launch with MCP:
const session = await app_launch({
  "app": "/path/to/forge-project",
  "mode": "development"
  // Don't use startScript - let manual npm start handle it
})
// This approach ensures proper timing and reliable launches

Recurso Experimental de Inicialização Automática:

// The MCP can attempt to auto-start the dev server (experimental)
const session = await app_launch({
  "app": "/path/to/forge-project",
  "mode": "development",
  "startScript": "start"  // Attempts to run 'npm run start' automatically
})
// Features: 30s timeout, progress updates every 5s, enhanced Forge pattern detection
// Note: If you experience problems, use the manual approach above

🚀 Guia de Início Rápido para Automação Electron

Use este guia para agentes de IA (CLAUDE.md) ou referência manual

Para Projetos Electron Forge:

# Step 1: In terminal, start your dev server first
npm run start

# Step 2: Once webpack compiles, use the MCP to launch
await app_launch({
  "app": "/path/to/your/project",
  "mode": "development"
})

Para Projetos Electron Regulares:

// Just launch directly - no prep needed!
await app_launch({
  "app": "/path/to/project",
  "mode": "development",
  "disableDevtools": true  // Optional: prevent DevTools auto-opening
})

Para Apps Empacotados:

// Launch .app, .exe, or AppImage files
await app_launch({
  "app": "/Applications/YourApp.app"
})

Recursos Principais:

  • 📸 Cada ação retorna um snapshot pronto para IA com referências de elementos (e1, e2, etc.)
  • 🎯 Múltiplos métodos de clique: por seletor, texto, papel ou enésimo elemento
  • 🔧 Automação completa: screenshots, avaliação de JS, controle de teclado/mouse
  • 🧹 Limpeza automática: Sessões e servidores de desenvolvimento fecham automaticamente
  • 🪟 Gerenciamento inteligente de janelas: DevTools filtrados automaticamente, detecção da janela principal

Dicas Profissionais:

  • Use compressScreenshots: true (padrão) para processamento de IA mais rápido
  • O MCP inicia uma nova instância - ele não pode se anexar a apps em execução
  • Para Electron Forge: Sempre inicie o servidor de desenvolvimento primeiro, depois inicie com o MCP
  • As janelas DevTools são filtradas automaticamente - você sempre receberá a janela principal do app
  • Use disableDevtools: true para impedir que o DevTools abra automaticamente
  • Use get_windows para ver todas as janelas com identificação de tipo (principal/devtools/outras)

É isso! Todas as outras ferramentas funcionam como a versão web. Boa automação! 🎉

📖 Instruções Legadas para Agentes de IA (Claude, CLAUDE.md, etc.)

⚠️ Importante: O MCP inicia sua própria instância do Electron - você não pode se conectar a um app já em execução.

Para projetos de desenvolvimento Electron:

  1. Pare qualquer processo npm run start existente
  2. Deixe o MCP iniciar seu app:
const session = await app_launch({
  "app": "/path/to/your/electron/project",
  "mode": "development"
})
// Returns sessionId automatically - use this for all subsequent commands

Como Funciona:

  • 🚀 Inicia nova instância do seu app Electron usando Playwright
  • 🎯 Controle total de automação via Chrome DevTools Protocol
  • 📸 Não pode se anexar a processos existentes em execução

Principais Benefícios para Fluxos de IA:

  • 🤖 Auto-snapshots após cada ação com referências de elementos (ref="e1", ref="e2")
  • 📸 Screenshots comprimidos por padrão para processamento mais rápido
  • 🎯 Segmentação direta de elementos usando as refs fornecidas nos snapshots
  • 🔄 Nenhuma chamada manual de snapshot necessária - o contexto é fornecido automaticamente

Automação de Editor de Código

// Traditional packaged app automation
const session = await app_launch({"app": "/Applications/Visual Studio Code.app"})
await click({"sessionId": session.id, "selector": "[title='New File']"})
await keyboard_type({"sessionId": session.id, "text": "console.log('Hello World');", "delay": 50})
await keyboard_press({"sessionId": session.id, "key": "s", "modifiers": ["ControlOrMeta"]})

Gerenciamento de Múltiplas Janelas

// Work with multiple windows
const session = await app_launch({"app": "/Applications/Slack.app"})
const windows = await get_windows({"sessionId": session.id})
await click({"sessionId": session.id, "selector": ".channel-name", "windowId": "main"})
await type({"sessionId": session.id, "selector": "[data-qa='message-input']", "text": "Hello team!", "windowId": "main"})

Monitoramento de Console e Rede

// Launch Electron app and monitor activity
const session = await app_launch({"app": "/Applications/MyElectronApp.app"})

// Perform some actions that generate logs/network activity
await click({"sessionId": session.id, "selector": "#load-data-button"})
await wait_for_load_state({"sessionId": session.id, "state": "networkidle"})

// Get console logs for debugging
const consoleLogs = await browser_console_messages({"sessionId": session.id})
console.log("App console output:", consoleLogs)

// Get network requests to see API calls
const networkRequests = await browser_network_requests({"sessionId": session.id})
console.log("Network activity:", networkRequests)

Configuração Avançada

Modo de Desenvolvimento Web com Qualidade Total

// Launch browser with uncompressed screenshots for debugging
const session = await browser_launch({
  "compressScreenshots": false,  // Full PNG quality
  "headed": true,                // Visible browser
  "viewport": {"width": 1920, "height": 1080}
})

Modo de Desenvolvimento Electron

// Launch Electron app during development with full quality
const session = await app_launch({
  "app": "/Users/dev/my-electron-project",
  "mode": "development",
  "compressScreenshots": false  // Full PNG quality for debugging
})

Modo de Produção com Performance Otimizada

// Web: Launch with maximum compression for speed
const webSession = await browser_launch({
  "compressScreenshots": true,
  "screenshotQuality": 30,      // Maximum compression
  "headed": false               // Headless for performance
})

// Electron: Launch packaged app with compression
const electronSession = await app_launch({
  "app": "/Applications/MyApp.app",
  "compressScreenshots": true,
  "screenshotQuality": 30       // Maximum compression
})

🔧 Solução de Problemas

Problemas Comuns no Desenvolvimento Electron

Erro "Not connected" (Não conectado)

Problema: Tentar usar comandos MCP sem uma sessão válida

Solução:

// ❌ Wrong - no session exists
get_windows({"sessionId": "test"})

// ✅ Correct - launch first, then use returned sessionId
const session = await app_launch({"app": "/path/to/project", "mode": "development"})
get_windows({"sessionId": session.id})

Não é Possível Conectar a um App em Execução

Problema: Tentar conectar a um processo npm run start existente

Solução: Pare o processo existente, deixe o MCP iniciar seu app

# Stop existing process
kill $(ps aux | grep 'Electron .' | awk '{print $2}')

# Let MCP launch instead
app_launch({"app": "/your/project", "mode": "development"})

Electron Não Encontrado

Problema: O MCP não consegue encontrar o executável do Electron

Soluções:

  1. Instale o Electron localmente: npm install electron --save-dev
  2. Especifique um caminho personalizado: {"electronPath": "/custom/path/to/electron"}
  3. Instale globalmente: npm install -g electron

🛠️ Opções de Configuração

Opções de CLI

Servidor Web (@snowfort/circuit-web)

npx @snowfort/circuit-web@latest [options]

Options:
  --browser <type>    Browser engine: chromium, firefox, webkit (default: chromium)
  --headed           Run in headed mode (default: headless)
  --name <name>      Server name for MCP handshake (default: circuit-web)

Servidor Electron (@snowfort/circuit-electron)

npx @snowfort/circuit-electron@latest [options]

Options:
  --name <name>      Server name for MCP handshake (default: circuit-electron)

Configurações MCP Avançadas

Configuração de Desenvolvimento

{
  "mcpServers": {
    "circuit-web": {
      "command": "npx",
      "args": ["@snowfort/circuit-web@latest", "--headed", "--browser", "chromium"]
    },
    "circuit-electron": {
      "command": "npx",
      "args": ["@snowfort/circuit-electron@latest"]
    }
  }
}

Configuração de Produção

{
  "mcpServers": {
    "circuit-web": {
      "command": "npx",
      "args": ["@snowfort/circuit-web@latest"]
    },
    "circuit-electron": {
      "command": "npx",
      "args": ["@snowfort/circuit-electron@latest"]
    }
  }
}

🏗️ Arquitetura

Published Packages:
├── @snowfort/circuit-core@latest      # Core MCP infrastructure
├── @snowfort/circuit-web@latest       # Web automation server (29 tools)
└── @snowfort/circuit-electron@latest  # Desktop automation server (32 tools)

Local Development:
packages/
├── core/          # Shared MCP infrastructure & Driver interface
├── web/           # Web automation CLI with AI optimizations
└── electron/      # Desktop automation CLI

📦 Pacotes Publicados

PacoteVersãoDescrição
@snowfort/circuit-corenpmInfraestrutura principal do MCP
@snowfort/circuit-webnpmCLI de automação web (29 ferramentas)
@snowfort/circuit-electronnpmCLI de automação de desktop (25+ ferramentas)

🔧 Desenvolvimento

Configuração do Ambiente de Desenvolvimento Local

# Clone the repository
git clone https://github.com/clharman/circuit-mcp.git
cd circuit-mcp

# Install dependencies
pnpm install

# Build all packages
pnpm -r build

# Watch mode development
pnpm -r dev

Executando Servidores de Desenvolvimento Local

# Web automation server
./packages/web/dist/esm/cli.js --headed

# Desktop automation server  
./packages/electron/dist/esm/cli.js

Testes

# Run all tests
pnpm -r test

# Clean all builds
pnpm -r clean

🤝 Contribuição

Aceitamos contribuições! Consulte nosso Guia de Contribuição para obter detalhes.

  1. Faça um fork do repositório
  2. Crie sua branch de funcionalidade (git checkout -b feature/amazing-feature)
  3. Faça commit das suas alterações (git commit -m 'Add some amazing feature')
  4. Envie para a branch (git push origin feature/amazing-feature)
  5. Abra um Pull Request

📄 Licença

Este projeto é licenciado sob a Apache License 2.0 — consulte o arquivo LICENSE para obter detalhes.

Implementação independente para testes abrangentes de automação

🙏 Agradecimentos

  • Playwright pelo framework de automação
  • MCP SDK pela implementação do protocolo
  • À comunidade Model Context Protocol por impulsionar a inovação na integração com ferramentas de IA