Screenshots By Snapshot Site

Dê olhos ao seu agente: capture screenshots, detecte mudanças visuais entre duas versões de página e analise páginas com IA. Hospedado, OAuth, plano gratuito.

Documentação

Snapshot Site MCP

npm Node License CI

Servidor MCP oficial para a API do Snapshot Site

Ferramentas

  • screenshot
  • analyze
  • compare

Estas ferramentas são anotadas para clientes MCP como:

  • somente leitura
  • idempotentes
  • mundo aberto

Elas também incluem títulos mais ricos, metadados de categoria e exemplos de intenções para melhorar a seleção de ferramentas no Claude Desktop e no Cursor.

Duas formas de conectar

Hospedado, com OAuth — aponte seu cliente para https://mcp.snapshot-site.com/mcp e faça login. Não há processo local para executar nem chave de API na configuração do seu cliente; o servidor resolve sua conta a partir da sessão OAuth.

Local, com chave de API — execute o pacote você mesmo via stdio e forneça SNAPSHOT_SITE_API_KEY. O servidor chama a API do Snapshot Site diretamente.

De qualquer forma, as chamadas contam contra a mesma cota do plano que as chamadas diretas à API. Nada é medido de forma diferente por ter vindo através do MCP.

Credenciais

O servidor hospedado não precisa de credencial — você faz login via OAuth e o servidor resolve sua conta a partir da sessão. Pule esta seção, a menos que você execute o servidor você mesmo via stdio.

Para o modo stdio local, você precisa de uma chave de API do Snapshot Site.

  1. Crie uma conta no Console do Snapshot Site.

  2. Crie uma chave de API na página Chaves de API.

    Snapshot Site Console — API Keys

  3. Passe a chave para o servidor como a variável de ambiente SNAPSHOT_SITE_API_KEY.

  4. Deixe SNAPSHOT_SITE_BASE_URL no valor padrão (https://api.prod.ss.snapshot-site.com) a menos que você esteja apontando para uma instância auto-hospedada ou de staging.

Compatibilidade

Requer Node.js 20.9 ou posterior. Compilado com @modelcontextprotocol/sdk v1.28 e testado com Claude Desktop e Cursor via stdio, e com qualquer cliente que fale o transporte HTTP streamable contra o endpoint hospedado.

Uso

Não sabe quais opções usar? Visualize uma captura e seus parâmetros no playground do console Screenshot antes de conectá-los a uma chamada de ferramenta.

Snapshot Site Console — Screenshot playground

Fluxo de descoberta OAuth

O que um cliente faz ao conectar-se ao servidor hospedado:

1. Discovery

Claude
  -> GET https://mcp.snapshot-site.com/.well-known/oauth-protected-resource

MCP
  -> responds:
     authorization_servers = https://mcp.snapshot-site.com
2. Authorization

Claude
  -> must know client_id
  -> opens:
     https://mcp.snapshot-site.com/oauth/v2/authorize
     ?client_id=...
     &redirect_uri=https://claude.ai/api/mcp/auth_callback
     &response_type=code
     &code_challenge=...
3. Token

Claude
  -> receives an access token
  -> calls the MCP server:
     POST https://mcp.snapshot-site.com/
     Authorization: Bearer <access_token>

O servidor então valida o token contra o emissor e resolve a conta à qual ele pertence antes de executar a ferramenta.

Verificando a implantação

curl -s https://mcp.snapshot-site.com/.well-known/oauth-protected-resource | jq
curl -s https://mcp.snapshot-site.com/.well-known/openid-configuration | jq
curl -i https://mcp.snapshot-site.com/
curl -i -X POST https://mcp.snapshot-site.com/mcp -H 'content-type: application/json' --data '{}'

client_id manual vs. implícito

  • O client_id só é necessário para a etapa de autorização.
  • Se o seu cliente não conseguir descobrir o client_id antecipadamente, insira-o manualmente na interface do conector.
  • Ele não pode ser injetado posteriormente depois que o fluxo OAuth for iniciado.
  • O servidor pode publicar um modo implícito experimental expondo um preferred_client_id em /.well-known/oauth-protected-resource.
  • Clientes que leem esses metadados podem então pular a entrada manual. Clientes que ignoram o campo ainda exigem um client_id manual.

Ambiente

export SNAPSHOT_SITE_API_KEY=ss_live_xxx
export SNAPSHOT_SITE_BASE_URL=https://api.prod.ss.snapshot-site.com

Build

pnpm install
pnpm run build

Modo stdio local

export SNAPSHOT_SITE_API_KEY=ss_live_xxx
snapshot-site-mcp

Configuração do Claude Desktop

{
  "mcpServers": {
    "snapshot-site": {
      "command": "node",
      "args": ["/absolute/path/to/snapshot-site-mcp/build/server.js"],
      "env": {
        "SNAPSHOT_SITE_API_KEY": "ss_live_xxx",
        "SNAPSHOT_SITE_BASE_URL": "https://api.prod.ss.snapshot-site.com"
      }
    }
  }
}

Configuração do Cursor

{
  "mcpServers": {
    "snapshot-site": {
      "command": "node",
      "args": ["/absolute/path/to/snapshot-site-mcp/build/server.js"],
      "env": {
        "SNAPSHOT_SITE_API_KEY": "ss_live_xxx"
      }
    }
  }
}

Modo HTTP remoto

Este pacote também suporta um endpoint MCP hospedado para clientes que usam mcp-remote.

Inicie o servidor HTTP:

pnpm start:http

ou:

npx snapshot-site-mcp-http

Variáveis de ambiente:

export PORT=3000
export HOST=0.0.0.0
export MCP_PATH=/mcp
export HEALTH_PATH=/healthz
export MCP_ALLOWED_HOSTS=mcp.snapshot-site.com
export SNAPSHOT_SITE_BASE_URL=https://api.prod.ss.snapshot-site.com

Configuração de cliente remoto com cabeçalho de chave de API direto:

{
  "mcpServers": {
    "Snapshot Site MCP": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.snapshot-site.com/mcp",
        "--header",
        "x-snapshotsiteapi-key: ss_live_xxx"
      ]
    }
  }
}

O servidor hospedado é stateless. Cada requisição autentica com x-snapshotsiteapi-key, o que torna o serviço seguro para execução em múltiplas réplicas sem afinidade de sessão.

Zitadel / OAuth

O servidor HTTP remoto também suporta tokens de portador OAuth validados contra um emissor OIDC, como o Zitadel.

Variáveis de ambiente:

export OIDC_ISSUER_URL=https://auth.snapshot-site.com
export OIDC_AUDIENCE=snapshot-site-mcp
export OIDC_REQUIRED_SCOPE=claudeai
export OIDC_DISCOVERY_CLIENT_ID=366546620977775166
export RESOURCE_SERVER_URL=https://mcp.snapshot-site.com
export ALLOW_API_KEY_AUTH=false
export SNAPSHOT_SITE_API_KEY=ss_server_side_xxx

No modo token de portador, o servidor MCP valida o token de acesso recebido contra o JWKS do emissor e então usa a chave de API do Snapshot Site no lado do servidor para chamar a API de backend.

Ele também expõe e faz proxy de:

GET /.well-known/oauth-protected-resource
GET /.well-known/openid-configuration
GET/POST /oauth/v2/*
GET /ui/*
GET/POST /oauth/register

para que clientes MCP possam descobrir automaticamente os metadados do servidor de autorização.

Quando OIDC_DISCOVERY_CLIENT_ID está definido, os metadados do recurso protegido também incluem:

{
  "resource_name": "Snapshot Site MCP",
  "preferred_client_id": "366546620977775166",
  "oauth_client_metadata": {
    "client_id": "366546620977775166",
    "token_endpoint_auth_method": "none"
  }
}

Esta é uma dica de compatibilidade experimental para clientes que podem inferir o cliente público OAuth automaticamente. A entrada manual de client_id continua sendo o fallback confiável.

O servidor MCP também expõe um shim leve de compatibilidade registration_endpoint em:

POST https://mcp.snapshot-site.com/oauth/register

Este shim atualmente retorna o cliente PKCE público pré-configurado em vez de provisionar um novo cliente Zitadel por instalação. Ele valida e reflete o redirect_uris solicitado pelo cliente, desde que sejam URLs HTTPS válidas. Ele visa melhorar a compatibilidade com clientes que esperam descoberta no estilo DCR, mantendo o fluxo manual existente como fallback.