Website Snapshot

Um servidor MCP que fornece capacidades abrangentes de captura de snapshots de sites usando Playwright. Este servidor permite que LLMs capturem e analisem páginas da web por meio de snapshots de acessibilidade estruturados, monitoramento de rede e coleta de mensagens do console.

Documentação

MCP Web Snapshot

Um servidor Model Context Protocol (MCP) que fornece recursos abrangentes de snapshot de sites usando Playwright. Este servidor permite que LLMs capturem e analisem páginas da web por meio de snapshots estruturados de acessibilidade, monitoramento de rede e coleta de mensagens do console.

Principais Recursos

  • 🚀 Rápido e leve: Usa a árvore de acessibilidade do Playwright para snapshots eficientes
  • 🎯 Otimizado para LLM: Saída de dados estruturados projetada especificamente para consumo por IA
  • 📊 Monitoramento abrangente: Captura requisições de rede, respostas e mensagens do console
  • 🔍 Referências de elementos: Adiciona identificadores únicos a elementos interativos para direcionamento preciso
  • 🛡️ Pronto para produção: Tratamento de erros integrado, limites de recursos e gerenciamento de timeout
  • ✅ Bem testado: Suíte de testes abrangente com cobertura de código

Requisitos

  • Python 3.11 ou mais recente
  • VS Code, Cursor, Windsurf, Claude Desktop ou qualquer outro cliente MCP

Começando

Primeiro, instale o servidor MCP Web Snapshot com seu cliente. Uma configuração típica se parece com isto:

{
  "mcpServers": {
    "mcp-web-snapshot": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp-web-snapshot",
        "run",
        "python",
        "src/server.py"
      ]
    }
  }
}

Instalar no VS Code

Você pode instalar o servidor MCP Web Snapshot usando a CLI do VS Code:

# For VS Code
code --add-mcp '{"name":"mcp-web-snapshot","command":"uv","args":["--directory","/path/to/mcp-web-snapshot","run","python","src/server.py"]}'

Após a instalação, o servidor MCP Web Snapshot estará disponível para uso com seu agente GitHub Copilot no VS Code.

Instalar no Cursor

Vá para Cursor Settings → MCP → Add new MCP Server. Dê um nome de sua preferência, use o tipo command com o comando uv e argumentos ["--directory", "/path/to/mcp-web-snapshot", "run", "python", "src/server.py"].

{
  "mcpServers": {
    "mcp-web-snapshot": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/mcp-web-snapshot",
        "run",
        "python",
        "src/server.py"
      ]
    }
  }
}

Configuração de Desenvolvimento

Instalação Local

  1. Clone este repositório:
git clone https://github.com/your-username/mcp-web-snapshot.git
cd mcp-web-snapshot
  1. Instale as dependências usando uv:
uv sync
  1. Instale os navegadores do Playwright:
uv run playwright install
  1. Execute o servidor:
uv run python src/server.py

Estrutura do Projeto

├── src/
│   ├── server.py               # Main MCP server entry point
│   ├── registry.py             # Tool registration logic
│   └── tools/
│       ├── __init__.py
│       └── snapshot_url.py     # Web snapshot implementation
├── tests/                      # Test suite
│   ├── __init__.py
│   ├── test_snapshot_url.py    # Unit tests for website_snapshot
│   └── README.md               # Test documentation
├── pyproject.toml              # Project configuration
├── pytest.ini                  # Pytest configuration
├── uv.lock                     # Lock file for dependencies
└── README.md                   # This file

Testes

O projeto inclui uma suíte de testes abrangente usando pytest:

# Run all tests
uv run pytest

# Run with verbose output
uv run pytest -v

# Run with coverage report
PYTHONPATH=. uv run pytest --cov=src.tools.snapshot_url --cov-report=term-missing

A cobertura de testes atualmente está em 92%, cobrindo:

  • Captura e formatação bem-sucedidas de snapshots
  • Monitoramento de requisições de rede e mensagens do console
  • Validação de URLs
  • Tratamento de erros e recuperação

Ferramentas Disponíveis

Website Snapshot

Ferramenta: website_snapshot

Descrição: Tire snapshots abrangentes de páginas da web com recursos de monitoramento

Parâmetros:

  • target_url (string): A URL a ser capturada (deve ser uma URL válida com protocolo)

Recursos:

  • 🎭 Snapshot de Acessibilidade: Captura a estrutura completa da árvore de acessibilidade
  • 🌐 Monitoramento de Rede: Registra todas as requisições e respostas de rede durante o carregamento da página
  • 🖥️ Mensagens do Console: Captura a saída do console do lado do cliente (logs, avisos, erros)
  • 🎯 Referências de Elementos: Adiciona IDs de referência únicos a elementos interativos
  • 📊 Métricas de Desempenho: Fornece resumo dos elementos capturados e atividade de rede

Exemplo de Uso:

# Through MCP client
result = await website_snapshot("https://example.com")

Estrutura de Saída:

✅ Captured snapshot with 25 elements, 12 requests, 0 console messages
🔍 Example Website - Home Page
📍 https://example.com

🎭 Accessibility Snapshot:
- navigation "Main":
  - link "Home": [ref=1]
  - link "About": [ref=2]
  - button "Contact" [ref=3]
- main:
  - heading "Welcome to Example"
  - link "Get Started": [ref=4]

🌐 Network Requests:
🌐 GET https://example.com
   Status: 200
   Response: <!DOCTYPE html><html>...

🖥️ Console:
No console messages

🎯 Element References:
[ref=1]: link "Home"
[ref=2]: link "About"
[ref=3]: button "Contact"
[ref=4]: link "Get Started"

Configuração

O servidor pode ser configurado através do dicionário CONFIG em src/tools/snapshot_url.py:

CONFIG = {
    "viewport": {"width": 1920, "height": 1080},
    "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
    "timeout": 15000,  # 15 seconds
}

Opções de Personalização

  • Tamanho da Viewport: Ajuste as dimensões da janela do navegador
  • User Agent: Personalize a identificação do navegador
  • Timeout: Controle o tempo máximo de espera para operações de página
  • Filtragem de Conteúdo: Modifique os limites de tamanho do corpo da resposta e filtros de tipo de conteúdo

Casos de Uso

Testes Guiados por LLM

Capture o estado abrangente da página para geração automatizada de testes:

"Please take a snapshot of https://myapp.com/login and help me create Page Object Model classes based on the discovered elements and structure."

Análise de Conteúdo Web

Extraia dados estruturados para análise e monitoramento de conteúdo:

"Take a snapshot of https://competitor.com/pricing and analyze any pricing changes or new features compared to what we discussed last week."

Auditoria de Acessibilidade

Aproveite os dados da árvore de acessibilidade para verificação de conformidade:

"Please capture a snapshot of https://myapp.com and identify any accessibility issues or areas for improvement based on WCAG guidelines."

Análise de Integração de API

Monitore a atividade de rede para entender o comportamento da aplicação:

"Take a snapshot of https://dashboard.example.com after I log in and show me what API calls are being made so I can understand the data flow."

Configuração de Testes Cross-Browser

Gere cenários de teste com base nas interações capturadas:

"Snapshot https://myapp.com/checkout and help me create comprehensive test cases that cover all the interactive elements and user workflows."

Tratamento de Erros

O servidor inclui tratamento abrangente de erros:

  • URLs Inválidas: Retorna mensagens de erro úteis para URLs malformadas
  • Timeouts de Rede: Limites de timeout configuráveis com fallbacks graciosos
  • Crashs do Navegador: Limpeza automática e gerenciamento de recursos
  • Limites de Conteúdo: Filtragem inteligente de corpos de resposta grandes para evitar problemas de memória

Contribuindo

  1. Faça um fork do repositório
  2. Crie um branch de recurso: git checkout -b feature-name
  3. Faça suas alterações e adicione testes
  4. Execute os testes: uv run pytest
  5. Verifique a cobertura de testes: PYTHONPATH=. uv run pytest --cov=src.tools.snapshot_url --cov-report=term-missing
  6. Garanta a conformidade com o estilo de código: uv run ruff check
  7. Envie um pull request

Por favor, garanta que todos os testes passem e mantenha ou melhore a cobertura de testes atual.

Licença

Este projeto é licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

Agradecimentos

Projetos Relacionados