Skip to main content
Glama

MCP Browser Debugger

ARCHITECTURE.md7.02 kB
# Estrutura do Projeto ``` mcp-browser-debugger/ ├── src/ │ ├── index.ts # Ponto de entrada do servidor MCP │ ├── browser.ts # Gerenciamento do Puppeteer e estado do browser │ ├── browserTools.ts # Implementação dos handlers das 15 ferramentas │ ├── tools.ts # Definição das ferramentas MCP (schemas JSON) │ └── types.ts # Interfaces e tipos TypeScript ├── dist/ # Código compilado (gerado pelo build) ├── node_modules/ ├── .gitignore ├── .nvmrc # Versão do Node.js recomendada ├── .prettierrc # Configuração do Prettier ├── eslint.config.js # Configuração do ESLint ├── tsconfig.json # Configuração do TypeScript ├── package.json ├── README.md ├── ARCHITECTURE.md # Este arquivo └── MIGRATION.md # Guia de migração JavaScript → TypeScript ``` ## 📋 Requisitos - **Node.js >= 18.0.0** (recomendado: 18.x ou superior) - npm ou yarn ## 🏗️ Arquitetura ### Módulos Principais #### **src/index.ts** (135 linhas) Servidor MCP principal que: - Inicializa o servidor MCP com StdioServerTransport - Registra handlers para `ListToolsRequestSchema` e `CallToolRequestSchema` - Roteia requisições de ferramentas para os handlers apropriados em `browserTools.ts` - Gerencia tratamento de erros e cleanup (SIGINT handler) - **Responsabilidade**: Orquestração e roteamento, não implementação #### **src/browser.ts** (95 linhas) Gerenciamento do Puppeteer que: - Mantém uma instância global do browser e página (`browserState`) - Configura listeners para console logs e requisições de rede - Fornece funções helper: `initBrowser()`, `closeBrowser()`, `clearConsoleLogs()`, `clearNetworkRequests()` - **Responsabilidade**: Estado e lifecycle do browser #### **src/browserTools.ts** (622 linhas) Implementação dos handlers das ferramentas que: - Exporta 15 funções handler individuais (uma para cada ferramenta MCP) - Cada handler recebe `args` e opcionalmente `currentPage: Page` - Implementa toda a lógica de negócio das ferramentas - Retorna objetos `ToolResponse` compatíveis com MCP SDK - **Responsabilidade**: Lógica de negócio das ferramentas **Handlers disponíveis**: - `handleNavigate` - Navegação de URLs - `handleGetDom` - Extração do DOM - `handleGetElement` - Inspeção de elementos - `handleExecuteJs` - Execução de JavaScript - `handleScreenshot` - Captura de tela - `handleGetConsoleLogs` - Logs do console - `handleGetNetworkActivity` - Atividade de rede - `handleGetPageSource` - Código fonte completo - `handleQuerySelectorAll` - Busca múltipla de elementos - `handleGetPageInfo` - Informações da página - `handleClickElement` - Interação com cliques - `handleTypeText` - Digitação de texto - `handleGetLocalStorage` - Dados do localStorage - `handleGetCookies` - Cookies da página - `handleEvaluateXPath` - Queries XPath #### **src/tools.ts** (380 linhas) Definições das 15 ferramentas MCP com schemas JSON: - Array exportado com objetos de definição de ferramentas - Cada ferramenta possui: `name`, `description`, `inputSchema` (JSON Schema) - **Responsabilidade**: Contrato da API (schemas) #### **src/types.ts** (130 linhas) Interfaces TypeScript para type safety completo: - `BrowserState` - Estado global do Puppeteer - `ConsoleLog`, `NetworkRequest` - Tipos de monitoramento - Interfaces de argumentos para cada ferramenta (`NavigateArgs`, `GetDomArgs`, etc.) - Tipos de resposta (`ElementInfo`, `PageInfo`, `PageSource`, etc.) - **Responsabilidade**: Type safety e contratos de dados ## 💡 Desenvolvimento ### Padrões de Código - **TypeScript strict mode** habilitado - **ESLint** para qualidade de código - **Prettier** para formatação consistente - **Type safety** em todas as funções ### Adicionando Nova Ferramenta 1. **Defina os tipos** em `src/types.ts`: ```typescript export interface MinhaFerramentaArgs { parametro: string; opcional?: boolean; } ``` 2. **Adicione o schema JSON** em `src/tools.ts`: ```typescript { name: 'minha_ferramenta', description: 'Descrição da ferramenta', inputSchema: { type: 'object', properties: { parametro: { type: 'string', description: 'Descrição' }, opcional: { type: 'boolean', description: 'Opcional' }, }, required: ['parametro'], }, } ``` 3. **Implemente o handler** em `src/browserTools.ts`: ```typescript export async function handleMinhaFerramenta( args: unknown, currentPage: Page ): Promise<ToolResponse> { const typedArgs = args as unknown as MinhaFerramentaArgs; const { parametro, opcional = false } = typedArgs; // Implementação... return { content: [{ type: 'text', text: JSON.stringify(resultado, null, 2) }], }; } ``` 4. **Adicione ao roteador** em `src/index.ts`: ```typescript // No import import { handleMinhaFerramenta } from './browserTools.js'; // No switch case 'minha_ferramenta': return await handleMinhaFerramenta(args, currentPage); ``` 5. **Compile e teste**: ```bash npm run build npm start ``` ### Testando Localmente ```bash # Modo desenvolvimento (recompila automaticamente) npm run dev # Build e execução npm run build npm start # Formatação de código npm run format # Verificação de tipos npm run build ``` ## 🎯 Fluxo de Requisição ``` Cliente MCP ↓ [StdioServerTransport] ↓ src/index.ts (Servidor MCP) ↓ [CallToolRequestSchema handler] ↓ [Switch/Case por nome da ferramenta] ↓ src/browserTools.ts (Handler específico) ↓ [Acessa src/browser.ts para Puppeteer] ↓ [Retorna ToolResponse] ↓ Cliente MCP recebe resultado ``` ## 📊 Separação de Responsabilidades | Arquivo | Responsabilidade | Linhas | Exporta | | ----------------- | ---------------------- | ------ | ------------------------------------------------------- | | `index.ts` | Orquestração MCP | 135 | Nada (executa servidor) | | `browser.ts` | Estado Puppeteer | 95 | `browserState`, `initBrowser()`, `closeBrowser()`, etc. | | `browserTools.ts` | Lógica das ferramentas | 622 | 15 funções `handle*()` | | `tools.ts` | Schemas JSON | 380 | Array `tools` | | `types.ts` | Contratos TypeScript | 130 | Interfaces e tipos | ## 🔧 Configurações - **TypeScript**: Strict mode, ES2022 target, ESNext modules, DOM lib - **ESLint**: typescript-eslint com regras recomendadas - **Prettier**: Single quotes, 100 char width, 2 spaces, semicolons - **Node**: Engine >= 18.0.0 (funciona em 16.x mas lint requer 18+)

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/EmmanuelBarbosaMonteiro/mcp-server-browser'

If you have feedback or need assistance with the MCP directory API, please join our Discord server