Panther

Interaja com a plataforma de segurança Panther para escrever detecções, consultar logs em linguagem natural e gerenciar alertas.

Documentação

Servidor MCP Panther

Ruff

O servidor Model Context Protocol (MCP) do Panther fornece funcionalidades para:

  1. Escrever e ajustar detecções a partir do seu IDE
  2. Consultar interativamente logs de segurança usando linguagem natural
  3. Triar, comentar e resolver um ou vários alertas
Panther Server MCP server

Ferramentas Disponíveis

Alertas
Nome da FerramentaDescriçãoExemplo de Prompt
add_alert_commentAdicionar um comentário a um alerta do Panther"Adicionar comentário 'Parece muito ruim' ao alerta abc123"
start_ai_alert_triageIniciar uma análise de triagem com IA para um alerta do Panther, com insights e recomendações inteligentes"Iniciar triagem de IA para o alerta abc123" / "Gerar uma análise detalhada de IA do alerta def456"
get_ai_alert_triage_summaryRecuperar o resumo de triagem de IA mais recente gerado anteriormente para um alerta específico"Obter o resumo de triagem de IA para o alerta abc123" / "Mostre-me a análise de IA para o alerta def456"
get_alertObter informações detalhadas sobre um alerta específico"Qual é o status do alerta 8def456?"
get_alert_eventsObter uma pequena amostra de eventos para um determinado alerta"Mostre-me eventos associados ao alerta 8def456"
list_alertsListar alertas com opções abrangentes de filtragem (intervalo de datas, gravidade, status, etc.)"Mostre-me todos os alertas de alta gravidade das últimas 24 horas"
bulk_update_alertsAtualizar em massa vários alertas com alterações de status, responsável e/ou comentário"Atualize os alertas abc123, def456 e ghi789 para o status resolvido e adicione o comentário 'Corrigido'"
update_alert_assigneeAtualizar o responsável de um ou mais alertas"Atribua os alertas abc123 e def456 a John"
update_alert_statusAtualizar o status de um ou mais alertas"Marque os alertas abc123 e def456 como resolvidos"
list_alert_commentsListar todos os comentários de um alerta específico"Mostre-me todos os comentários para o alerta abc123"
Data Lake
Nome da FerramentaDescriçãoExemplo de Prompt
query_data_lakeExecutar consultas SQL no data lake do Panther com resultados síncronos"Consultar logs do AWS CloudTrail para tentativas de login falhas no último dia"
get_table_schemaObter informações de esquema para uma tabela específica"Mostre-me o esquema da tabela AWS_CLOUDTRAIL"
list_databasesListar todos os bancos de dados disponíveis no data lake do Panther"Listar todos os bancos de dados disponíveis"
list_database_tablesListar todas as tabelas disponíveis para um banco de dados específico no data lake do Panther"Quais tabelas estão no banco de dados panther_logs"
get_alert_event_statsAnalisar padrões e relacionamentos entre vários alertas agregando seus dados de eventos em estatísticas baseadas em tempo"Mostre-me padrões em eventos dos alertas abc123 e def456"
Consultas Agendadas
Nome da FerramentaDescriçãoExemplo de Prompt
list_scheduled_queriesListar todas as consultas agendadas com suporte a paginação"Mostre-me todas as consultas agendadas" / "Liste as primeiras 25 consultas agendadas"
get_scheduled_queryObter informações detalhadas sobre uma consulta agendada específica por ID"Obter detalhes da consulta agendada 'weekly-security-report'"
Fontes
Nome da FerramentaDescriçãoExemplo de Prompt
list_log_sourcesListar fontes de log com filtros opcionais (status de saúde, tipos de log, tipo de integração)"Mostre-me todas as fontes de log S3 saudáveis"
get_http_log_sourceObter informações detalhadas sobre uma fonte de log HTTP específica por ID"Mostre-me a configuração da fonte HTTP 'webhook-collector-123'"
Detecções
Nome da FerramentaDescriçãoExemplo de Prompt
list_detectionsListar detecções do Panther com suporte abrangente a filtros. Suporta múltiplos tipos de detecção e filtragem por nome, estado, gravidade, tags, tipos de log, tipos de recurso, IDs de saída (destinos) e mais. Retorna outputIDs para cada detecção mostrando os destinos de alerta configurados"Mostre-me todas as regras habilitadas de alta gravidade com a tag 'AWS'" / "Liste políticas desabilitadas para recursos S3" / "Encontre todas as regras com outputID 'prod-slack'" / "Mostre-me detecções que alertam para destinos de produção"
get_detectionObter informações detalhadas sobre uma detecção específica, incluindo o corpo da detecção e testes. Aceita uma lista com um tipo de detecção: ["rules"], ["scheduled_rules"], ["simple_rules"] ou ["policies"]"Obter detalhes da regra ID abc123" / "Obter detalhes da política ID AWS.S3.Bucket.PublicReadACP"
disable_detectionDesabilitar uma detecção definindo enabled como false. Suporta rules, scheduled_rules, simple_rules e policies"Desabilitar regra abc123" / "Desabilitar política AWS.S3.Bucket.PublicReadACP"
Auxiliares Globais
Nome da FerramentaDescriçãoExemplo de Prompt
list_global_helpersListar funções auxiliares globais com opções abrangentes de filtragem (busca por nome, criador, modificador)"Mostre-me auxiliares globais contendo 'aws' no nome"
get_global_helperObter informações detalhadas e o código Python completo para um auxiliar global específico"Obter o código completo do auxiliar global 'AWSUtilities'"
Modelos de Dados
Nome da FerramentaDescriçãoExemplo de Prompt
list_data_modelsListar modelos de dados que controlam mapeamentos UDM em regras"Mostre-me todos os modelos de dados para análise de logs"
get_data_modelObter informações detalhadas sobre um modelo de dados específico"Obter os detalhes completos do modelo de dados 'AWS_CloudTrail'"
Esquemas
Nome da FerramentaDescriçãoExemplo de Prompt
list_log_type_schemasListar esquemas de tipos de log disponíveis com filtros opcionais"Mostre-me todos os esquemas relacionados à AWS"
get_log_type_schema_detailsObter informações detalhadas para esquemas de tipos de log específicos"Obter detalhes completos do esquema AWS.CloudTrail"
Métricas
Nome da FerramentaDescriçãoExemplo de Prompt
get_rule_alert_metricsObter métricas sobre alertas agrupados por regra"Mostre as 10 principais regras por contagem de alertas"
get_severity_alert_metricsObter métricas sobre alertas agrupados por gravidade"Mostre contagens de alertas por gravidade na última semana"
get_bytes_processed_metricsObter métricas de ingestão de dados por tipo de log e fonte"Mostre-me o volume de ingestão de dados por tipo de log"
Usuários e Gerenciamento de Acesso
Nome da FerramentaDescriçãoExemplo de Prompt
list_usersListar todas as contas de usuário do Panther com suporte a paginação"Mostre-me todos os usuários ativos do Panther" / "Liste os primeiros 25 usuários"
get_userObter informações detalhadas sobre um usuário específico"Obter detalhes do usuário ID 'john.doe@company.com'"
get_permissionsObter as permissões do usuário atual"Quais permissões eu tenho?"
list_rolesListar todos os papéis com opções de filtragem (busca por nome, IDs de papel, direção de ordenação)"Mostre-me todos os papéis contendo 'Admin' no nome"
get_roleObter informações detalhadas sobre um papel específico, incluindo permissões"Obter detalhes completos do papel 'Admin'"

Configuração do Panther

Siga estas etapas para configurar suas credenciais de API e ambiente.

  1. Crie um token de API no Panther:

    • Navegue até Configurações (ícone de engrenagem) → Tokens de API

    • Crie um novo token com as seguintes permissões (abordagem somente leitura recomendada para começar):

    • Ver Permissões Necessárias

      Screenshot of Panther Token permissions Screenshot of Panther Token permissions

  2. Armazene o token gerado com segurança (ex.: 1Password)

  3. Copie a URL da instância do Panther do seu navegador (ex.: https://YOUR-PANTHER-INSTANCE.domain)

    • Nota: Isso deve incluir https://

Instalação do Servidor MCP

Escolha um dos seguintes métodos de instalação:

Docker (Recomendado)

A maneira mais fácil de começar é usando nossa imagem Docker pré-construída:

{
  "mcpServers": {
    "mcp-panther": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "-e", "PANTHER_INSTANCE_URL",
        "-e", "PANTHER_API_TOKEN",
        "--rm",
        "ghcr.io/panther-labs/mcp-panther"
      ],
      "env": {
        "PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
        "PANTHER_API_TOKEN": "YOUR-API-KEY"
      }
    }
  }
}

Fixação de versão: Para estabilidade em produção, fixe uma tag de versão específica:

"ghcr.io/panther-labs/mcp-panther:v2.2.0"

As tags disponíveis podem ser encontradas no Registro de Contêineres do GitHub.

UVX

Para usuários de Python, você pode executar diretamente do PyPI usando uvx:

  1. Instale o UV

  2. Configure seu cliente MCP:

{
  "mcpServers": {
    "mcp-panther": {
      "command": "uvx",
      "args": ["mcp-panther"],
      "env": {
        "PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
        "PANTHER_API_TOKEN": "YOUR-PANTHER-API-TOKEN"
      }
    }
  }
}

Fixação de versão: Para estabilidade em produção, fixe uma versão específica:

"args": ["mcp-panther==2.2.0"]

As versões disponíveis podem ser encontradas no PyPI.

Configuração do Cliente MCP

Cursor

Siga as instruções aqui para configurar seu projeto ou a configuração global do MCP. É MUITO IMPORTANTE que você não inclua este arquivo no controle de versão.

Depois de configurado, navegue até Configurações do Cursor > MCP para ver o servidor em execução:

Cursor MCP Configuration Screenshot

Dicas:

  • Seja específico sobre onde deseja gerar novas regras usando o símbolo @ e digitando um diretório específico.
  • Para mais confiabilidade durante o uso da ferramenta, tente selecionar um modelo específico, como Claude 3.7 Sonnet.
  • Se o seu Cliente MCP não estiver encontrando ferramentas do Servidor MCP Panther, tente reiniciar o Cliente e garantir que o servidor MCP esteja em execução. No Cursor, atualize o Servidor MCP e inicie um novo chat.

Claude Code

Claude Code é a ferramenta CLI oficial da Anthropic. Adicione o servidor MCP Panther usando Docker:

claude mcp add-json panther '{
  "command": "docker",
  "args": [
    "run",
    "-i",
    "-e", "PANTHER_INSTANCE_URL",
    "-e", "PANTHER_API_TOKEN",
    "--rm",
    "ghcr.io/panther-labs/mcp-panther"
  ],
  "env": {
    "PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
    "PANTHER_API_TOKEN": "YOUR-API-TOKEN"
  }
}'

Alternativamente, usando UVX:

claude mcp add-json panther '{
  "command": "uvx",
  "args": ["mcp-panther"],
  "env": {
    "PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
    "PANTHER_API_TOKEN": "YOUR-API-TOKEN"
  }
}'

Após adicionar, verifique se o servidor está configurado:

claude mcp list

Claude Desktop

Para usar com o Claude Desktop, configure manualmente seu claude_desktop_config.json:

  1. Abra as configurações do Claude Desktop e navegue até a aba Desenvolvedor
  2. Clique em "Editar Config" para abrir o arquivo de configuração
  3. Adicione a seguinte configuração:
{
  "mcpServers": {
    "mcp-panther": {
      "command": "uvx",
      "args": ["mcp-panther"],
      "env": {
        "PANTHER_INSTANCE_URL": "https://YOUR-PANTHER-INSTANCE.domain",
        "PANTHER_API_TOKEN": "YOUR-PANTHER-API-TOKEN"
      }
    }
  }
}
  1. Salve o arquivo e reinicie o Claude Desktop

Se você encontrar algum problema, tente as etapas de solução de problemas aqui.

Goose CLI

Use com Goose CLI, o agente de IA de código aberto da Block:

# Start Goose with the MCP server
goose session --with-extension "uvx mcp-panther"

Goose Desktop

Use com Goose Desktop, o agente de IA de código aberto da Block:

Em 'Extensões' -> 'Adicionar extensão personalizada', forneça suas informações de configuração.

Executando o Servidor

O servidor MCP Panther suporta múltiplos protocolos de transporte:

STDIO (Padrão)

Para desenvolvimento local e integração com cliente MCP:

uv run python -m mcp_panther.server

HTTP Transmissível

Para executar como um serviço web persistente, use o transporte HTTP. Isso é ideal para:

  • Implantações de servidor de longa duração
  • Múltiplos clientes conectando-se ao mesmo servidor
  • Testes e depuração com monitoramento contínuo de logs

Usando Docker Run (Desanexado)

docker run -d \
  --name panther-mcp-server \
  -p 8000:8000 \
  -e PANTHER_INSTANCE_URL=https://YOUR-PANTHER-INSTANCE.domain \
  -e PANTHER_API_TOKEN=YOUR-API-TOKEN \
  -e MCP_TRANSPORT=streamable-http \
  -e MCP_HOST=0.0.0.0 \
  -e MCP_PORT=8000 \
  -e LOG_LEVEL=INFO \
  --restart unless-stopped \
  ghcr.io/panther-labs/mcp-panther:latest

Usando Docker Compose (Recomendado)

Crie um arquivo docker-compose.yml:

services:
  panther-mcp:
    image: ghcr.io/panther-labs/mcp-panther:latest
    container_name: panther-mcp-server
    ports:
      - "8000:8000"
    environment:
      - PANTHER_INSTANCE_URL=https://YOUR-PANTHER-INSTANCE.domain
      - PANTHER_API_TOKEN=YOUR-API-TOKEN
      - MCP_TRANSPORT=streamable-http
      - MCP_HOST=0.0.0.0
      - MCP_PORT=8000
      - LOG_LEVEL=INFO
    restart: unless-stopped

Inicie o servidor:

# Start in detached mode
docker-compose up -d

# View logs
docker-compose logs -f

# Stop the server
docker-compose down

Conectando o Claude Code ao Servidor HTTP

Importante: O servidor roda em HTTP (não HTTPS). Configure o Claude Code com a URL http://:

# Add the HTTP endpoint (note: http:// not https://)
claude mcp add-json panther-http '{
  "url": "http://localhost:8000/mcp"
}'

# Verify configuration
claude mcp list

Testando a Conexão

# Test the HTTP endpoint
curl http://localhost:8000/mcp

# View server logs
docker logs -f panther-mcp-server
# Or with docker-compose:
docker-compose logs -f

Você também pode testar usando o cliente FastMCP:

import asyncio
from fastmcp import Client

async def test_connection():
    async with Client("http://localhost:8000/mcp") as client:
        tools = await client.list_tools()
        print(f"Available tools: {len(tools)}")

asyncio.run(test_connection())

Solução de Problemas do Streamable HTTP

Porta Já em Uso

Se você vir Bind for 0.0.0.0:8000 failed: port is already allocated:

# Check what's using the port
lsof -i :8000

# Stop conflicting containers
docker ps | grep panther
docker stop <container-id>

# Or use a different port via MCP_PORT environment variable:
-e MCP_PORT=8080
# Then connect to: http://localhost:8080/mcp

Avisos de Solicitação HTTP Inválida

Se você vir WARNING: Invalid HTTP request received nos logs, isso geralmente significa:

  • O Claude Code está tentando conectar via HTTPS em vez de HTTP
  • Verifique se sua configuração usa http:// e não https://
  • Verifique com: claude mcp list

Variáveis de Ambiente

  • MCP_TRANSPORT: Define o tipo de transporte (stdio ou streamable-http)
  • MCP_PORT: Porta para transporte HTTP (padrão: 3000)
  • MCP_HOST: Host para transporte HTTP (padrão: 127.0.0.1)
  • MCP_LOG_FILE: Caminho do arquivo de log (opcional)

Boas Práticas de Segurança

Recomendamos fortemente as seguintes boas práticas de segurança do MCP:

  • Aplique privilégio mínimo estrito aos tokens da API do Panther. Escope os tokens às permissões mínimas necessárias e vincule-os a uma lista de permissões de IP ou intervalo CIDR para que sejam inúteis se exfiltrados. Gire as credenciais em um intervalo preferido (por exemplo, a cada 30 dias).
  • Hospede o servidor MCP em uma sandbox restrita (por exemplo, Docker) com montagens somente leitura. Isso confina qualquer comprometimento a um raio de explosão mínimo.
  • Monitore o acesso de credenciais ao Panther e monitore anomalias. Escreva uma regra do Panther!
  • Execute apenas servidores MCP confiáveis e oficialmente assinados. Verifique assinaturas digitais ou checksums antes de executar, audite o código das ferramentas e evite ferramentas da comunidade de editores não oficiais.

Solução de Problemas

Verifique os logs do servidor para mensagens de erro detalhadas: tail -n 20 -F ~/Library/Logs/Claude/mcp*.log. Problemas comuns e soluções estão listados abaixo.

Executando ferramentas

  • Se você receber um erro {"success": false, "message": "Failed to [action]: Request failed (HTTP 403): {\"error\": \"forbidden\"}"}, provavelmente significa que seu token de API não possui a permissão específica necessária para a ferramenta.
  • Certifique-se de que a URL da sua instância do Panther esteja configurada corretamente. Você pode visualizá-la no recurso config://panther do seu Cliente MCP.

Contribuindo

Aceitamos contribuições para melhorar o MCP-Panther! Veja como você pode ajudar:

  1. Relate Problemas: Abra uma issue para quaisquer bugs ou solicitações de recursos
  2. Envie Pull Requests: Faça um fork do repositório e envie PRs para correções de bugs ou novos recursos
  3. Melhore a Documentação: Ajude-nos a tornar a documentação mais clara e abrangente
  4. Compartilhe Casos de Uso: Conte-nos como você está usando o MCP-Panther e o que poderia torná-lo melhor

Certifique-se de que suas contribuições sigam nossos padrões de codificação e incluam testes e documentação adequados.

Contribuidores

Este projeto existe graças a todas as pessoas que contribuem. Agradecimentos especiais a Tomasz Tchorz e Glenn Edwards da Block, que desempenharam um papel fundamental no lançamento do MCP-Panther como um esforço conjunto de código aberto com a Panther.

Consulte nosso CONTRIBUTORS.md para uma lista completa de contribuidores.

Licença

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