Panther

Interactúa con la plataforma de seguridad Panther para escribir detecciones, consultar registros con lenguaje natural y gestionar alertas.

Documentación

Servidor MCP de Panther

Ruff

El servidor de Protocolo de Contexto de Modelo (MCP) de Panther proporciona funcionalidad para:

  1. Escribir y ajustar detecciones desde tu IDE
  2. Consultar de forma interactiva registros de seguridad usando lenguaje natural
  3. Triar, comentar y resolver una o muchas alertas
Panther Server MCP server

Herramientas Disponibles

Alertas
Nombre de la HerramientaDescripciónEjemplo de Solicitud
add_alert_commentAgregar un comentario a una alerta de Panther"Agregar comentario 'Se ve bastante mal' a la alerta abc123"
start_ai_alert_triageIniciar un análisis de triaje impulsado por IA para una alerta de Panther con información y recomendaciones inteligentes"Iniciar triaje de IA para la alerta abc123" / "Generar un análisis detallado de IA de la alerta def456"
get_ai_alert_triage_summaryRecuperar el resumen de triaje de IA más reciente generado previamente para una alerta específica"Obtener el resumen de triaje de IA para la alerta abc123" / "Muéstrame el análisis de IA para la alerta def456"
get_alertObtener información detallada sobre una alerta específica"¿Cuál es el estado de la alerta 8def456?"
get_alert_eventsObtener una pequeña muestra de eventos para una alerta determinada"Muéstrame los eventos asociados con la alerta 8def456"
list_alertsListar alertas con opciones de filtrado exhaustivas (rango de fechas, severidad, estado, etc.)"Muéstrame todas las alertas de alta severidad de las últimas 24 horas"
bulk_update_alertsActualizar en lote múltiples alertas con cambios de estado, asignado y/o comentarios"Actualizar las alertas abc123, def456 y ghi789 a estado resuelto y agregar comentario 'Corregido'"
update_alert_assigneeActualizar el asignado de una o más alertas"Asignar las alertas abc123 y def456 a John"
update_alert_statusActualizar el estado de una o más alertas"Marcar las alertas abc123 y def456 como resueltas"
list_alert_commentsListar todos los comentarios de una alerta específica"Muéstrame todos los comentarios de la alerta abc123"
Lago de Datos
Nombre de la HerramientaDescripciónEjemplo de Solicitud
query_data_lakeEjecutar consultas SQL contra el lago de datos de Panther con resultados sincrónicos"Consultar registros de AWS CloudTrail para intentos de inicio de sesión fallidos en el último día"
get_table_schemaObtener información de esquema para una tabla específica"Muéstrame el esquema de la tabla AWS_CLOUDTRAIL"
list_databasesListar todas las bases de datos disponibles del lago de datos en Panther"Listar todas las bases de datos disponibles"
list_database_tablesListar todas las tablas disponibles para una base de datos específica en el lago de datos de Panther"¿Qué tablas hay en la base de datos panther_logs?"
get_alert_event_statsAnalizar patrones y relaciones entre múltiples alertas agregando sus datos de eventos en estadísticas basadas en tiempo"Muéstrame patrones en eventos de las alertas abc123 y def456"
Consultas Programadas
Nombre de la HerramientaDescripciónEjemplo de Solicitud
list_scheduled_queriesListar todas las consultas programadas con soporte de paginación"Muéstrame todas las consultas programadas" / "Lista las primeras 25 consultas programadas"
get_scheduled_queryObtener información detallada sobre una consulta programada específica por ID"Obtener detalles de la consulta programada 'informe-semanal-de-seguridad'"
Fuentes
Nombre de la HerramientaDescripciónEjemplo de Solicitud
list_log_sourcesListar fuentes de registros con filtros opcionales (estado de salud, tipos de registro, tipo de integración)"Muéstrame todas las fuentes de registros S3 saludables"
get_http_log_sourceObtener información detallada sobre una fuente de registros HTTP específica por ID"Muéstrame la configuración de la fuente HTTP 'webhook-collector-123'"
Detecciones
Nombre de la HerramientaDescripciónEjemplo de Solicitud
list_detectionsListar detecciones de Panther con soporte de filtrado exhaustivo. Admite múltiples tipos de detección y filtrado por nombre, estado, severidad, etiquetas, tipos de registro, tipos de recurso, IDs de salida (destinos) y más. Devuelve outputIDs para cada detección mostrando los destinos de alerta configurados"Muéstrame todas las reglas HABILITADAS de severidad ALTA con etiqueta 'AWS'" / "Listar políticas deshabilitadas para recursos S3" / "Encontrar todas las reglas con outputID 'prod-slack'" / "Muéstrame detecciones que alertan a destinos de producción"
get_detectionObtener información detallada sobre una detección específica, incluido el cuerpo de la detección y las pruebas. Acepta una lista con un tipo de detección: ["rules"], ["scheduled_rules"], ["simple_rules"] o ["policies"]"Obtener detalles de la regla ID abc123" / "Obtener detalles de la política ID AWS.S3.Bucket.PublicReadACP"
disable_detectionDeshabilitar una detección estableciendo enabled en false. Admite rules, scheduled_rules, simple_rules y policies"Deshabilitar la regla abc123" / "Deshabilitar la política AWS.S3.Bucket.PublicReadACP"
Helpers Globales
Nombre de la HerramientaDescripciónEjemplo de Solicitud
list_global_helpersListar funciones helper globales con opciones de filtrado exhaustivas (búsqueda por nombre, creador, modificador)"Muéstrame helpers globales que contengan 'aws' en el nombre"
get_global_helperObtener información detallada y el código Python completo de un helper global específico"Obtener el código completo del helper global 'AWSUtilities'"
Modelos de Datos
Nombre de la HerramientaDescripciónEjemplo de Solicitud
list_data_modelsListar modelos de datos que controlan los mapeos UDM en las reglas"Muéstrame todos los modelos de datos para el análisis de registros"
get_data_modelObtener información detallada sobre un modelo de datos específico"Obtener los detalles completos del modelo de datos 'AWS_CloudTrail'"
Esquemas
Nombre de la HerramientaDescripciónEjemplo de Solicitud
list_log_type_schemasListar esquemas de tipos de registro disponibles con filtros opcionales"Muéstrame todos los esquemas relacionados con AWS"
get_log_type_schema_detailsObtener información detallada para esquemas de tipos de registro específicos"Obtener detalles completos del esquema AWS.CloudTrail"
Métricas
Nombre de la HerramientaDescripciónEjemplo de Solicitud
get_rule_alert_metricsObtener métricas sobre alertas agrupadas por regla"Mostrar las 10 reglas principales por cantidad de alertas"
get_severity_alert_metricsObtener métricas sobre alertas agrupadas por severidad"Mostrar conteos de alertas por severidad de la última semana"
get_bytes_processed_metricsObtener métricas de ingesta de datos por tipo de registro y fuente"Muéstrame el volumen de ingesta de datos por tipo de registro"
Gestión de Usuarios y Acceso
Nombre de la HerramientaDescripciónEjemplo de Solicitud
list_usersListar todas las cuentas de usuario de Panther con soporte de paginación"Muéstrame todos los usuarios activos de Panther" / "Lista los primeros 25 usuarios"
get_userObtener información detallada sobre un usuario específico"Obtener detalles del usuario ID 'john.doe@company.com'"
get_permissionsObtener los permisos del usuario actual"¿Qué permisos tengo?"
list_rolesListar todos los roles con opciones de filtrado (búsqueda por nombre, IDs de rol, dirección de ordenamiento)"Muéstrame todos los roles que contengan 'Admin' en el nombre"
get_roleObtener información detallada sobre un rol específico, incluidos los permisos"Obtener detalles completos del rol 'Admin'"

Configuración de Panther

Sigue estos pasos para configurar tus credenciales de API y el entorno.

  1. Crea un token de API en Panther:

    • Navega a Configuración (icono de engranaje) → Tokens de API

    • Crea un nuevo token con los siguientes permisos (se recomienda un enfoque de solo lectura para comenzar):

    • Ver Permisos Requeridos

      Screenshot of Panther Token permissions Screenshot of Panther Token permissions

  2. Almacena el token generado de forma segura (por ejemplo, 1Password)

  3. Copia la URL de la instancia de Panther desde tu navegador (por ejemplo, https://YOUR-PANTHER-INSTANCE.domain)

    • Nota: Esto debe incluir https://

Instalación del Servidor MCP

Elige uno de los siguientes métodos de instalación:

Docker (Recomendado)

La forma más fácil de comenzar es usando nuestra imagen Docker preconstruida:

{
  "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"
      }
    }
  }
}

Fijación de Versión: Para estabilidad en producción, fija una etiqueta de versión específica:

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

Las etiquetas disponibles se pueden encontrar en el Registro de Contenedores de GitHub.

UVX

Para usuarios de Python, puedes ejecutar directamente desde PyPI usando uvx:

  1. Instalar UV

  2. Configura tu 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"
      }
    }
  }
}

Fijación de Versión: Para estabilidad en producción, fija una versión específica:

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

Las versiones disponibles se pueden encontrar en PyPI.

Configuración del Cliente MCP

Cursor

Sigue las instrucciones aquí para configurar tu proyecto o la configuración MCP global. Es MUY IMPORTANTE que no verifiques este archivo en el control de versiones.

Una vez configurado, navega a Configuración de Cursor > MCP para ver el servidor en ejecución:

Cursor MCP Configuration Screenshot

Consejos:

  • Sé específico sobre dónde quieres generar nuevas reglas usando el símbolo @ y luego escribiendo un directorio específico.
  • Para mayor confiabilidad durante el uso de herramientas, intenta seleccionar un modelo específico, como Claude 3.7 Sonnet.
  • Si tu Cliente MCP no encuentra ninguna herramienta del Servidor MCP de Panther, intenta reiniciar el Cliente y asegúrate de que el servidor MCP esté en ejecución. En Cursor, actualiza el Servidor MCP e inicia un nuevo chat.

Claude Code

Claude Code es la herramienta CLI oficial de Anthropic. Agrega el servidor MCP de 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"
  }
}'

Después de agregarlo, verifica que el servidor esté configurado:

claude mcp list

Claude Desktop

Para usar con Claude Desktop, configura manualmente tu claude_desktop_config.json:

  1. Abre la configuración de Claude Desktop y navega a la pestaña Desarrollador
  2. Haz clic en "Editar Config" para abrir el archivo de configuración
  3. Agrega la siguiente configuración:
{
  "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. Guarda el archivo y reinicia Claude Desktop

Si encuentras algún problema, prueba los pasos de solución de problemas aquí.

Goose CLI

Usa con Goose CLI, el agente de IA de código abierto de Block:

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

Goose Desktop

Usa con Goose Desktop, el agente de IA de código abierto de Block:

Desde 'Extensiones' -> 'Agregar extensión personalizada' proporciona tu información de configuración.

Ejecutando el Servidor

El servidor MCP de Panther admite múltiples protocolos de transporte:

STDIO (Predeterminado)

Para desarrollo local e integración con clientes MCP:

uv run python -m mcp_panther.server

HTTP Transmisible

Para ejecutarse como un servicio web persistente, usa el transporte HTTP. Esto es ideal para:

  • Implementaciones de servidor de larga duración
  • Múltiples clientes conectándose al mismo servidor
  • Pruebas y depuración con monitoreo continuo de registros

Usando Docker Run (Desacoplado)

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)

Crea un archivo 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

Inicia el servidor:

# Start in detached mode
docker-compose up -d

# View logs
docker-compose logs -f

# Stop the server
docker-compose down

Conectando Claude Code al Servidor HTTP

Importante: El servidor se ejecuta en HTTP (no HTTPS). Configura Claude Code con la 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

Probando la Conexión

# 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

También puedes probar usando el 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())

Solución de problemas de Streamable HTTP

Puerto ya en uso

Si ves 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

Advertencias de solicitud HTTP no válida

Si ves WARNING: Invalid HTTP request received en los registros, esto generalmente significa:

  • Claude Code está intentando conectarse mediante HTTPS en lugar de HTTP
  • Verifica que tu configuración use http:// y no https://
  • Verifica con: claude mcp list

Variables de entorno

  • MCP_TRANSPORT: Establece el tipo de transporte (stdio o streamable-http)
  • MCP_PORT: Puerto para transporte HTTP (predeterminado: 3000)
  • MCP_HOST: Host para transporte HTTP (predeterminado: 127.0.0.1)
  • MCP_LOG_FILE: Ruta del archivo de registro (opcional)

Mejores prácticas de seguridad

Recomendamos encarecidamente las siguientes mejores prácticas de seguridad de MCP:

  • Aplica el principio de mínimo privilegio estricto a los tokens de API de Panther. Limita los tokens a los permisos mínimos requeridos y vincúlalos a una lista de permitidos de IP o a un rango CIDR para que sean inútiles si se exfiltran. Rota las credenciales en un intervalo preferido (por ejemplo, cada 30 días).
  • Aloja el servidor MCP en un sandbox restringido (por ejemplo, Docker) con montajes de solo lectura. Esto limita cualquier compromiso a un radio de explosión mínimo.
  • Monitorea el acceso a las credenciales de Panther y vigila anomalías. ¡Escribe una regla de Panther!
  • Ejecuta solo servidores MCP confiables y firmados oficialmente. Verifica las firmas digitales o los checksums antes de ejecutarlos, audita el código de las herramientas y evita herramientas comunitarias de editores no oficiales.

Solución de problemas

Revisa los registros del servidor para obtener mensajes de error detallados: tail -n 20 -F ~/Library/Logs/Claude/mcp*.log. Los problemas comunes y sus soluciones se enumeran a continuación.

Ejecutar herramientas

  • Si recibes un error de {"success": false, "message": "Failed to [action]: Request failed (HTTP 403): {\"error\": \"forbidden\"}"}, probablemente significa que tu token de API no tiene el permiso específico que necesita la herramienta.
  • Asegúrate de que la URL de tu instancia de Panther esté configurada correctamente. Puedes verla en el recurso config://panther desde tu cliente MCP.

Contribuciones

¡Damos la bienvenida a contribuciones para mejorar MCP-Panther! Así es como puedes ayudar:

  1. Reportar problemas: Abre un issue para cualquier error o solicitud de funcionalidad
  2. Enviar pull requests: Haz un fork del repositorio y envía PRs para correcciones de errores o nuevas funcionalidades
  3. Mejorar la documentación: Ayúdanos a hacer la documentación más clara y completa
  4. Compartir casos de uso: Cuéntanos cómo estás usando MCP-Panther y qué podría mejorarlo

Asegúrate de que tus contribuciones sigan nuestros estándares de codificación e incluyan pruebas y documentación adecuadas.

Contribuyentes

Este proyecto existe gracias a todas las personas que contribuyen. Un agradecimiento especial a Tomasz Tchorz y Glenn Edwards de Block, quienes desempeñaron un papel fundamental en el lanzamiento de MCP-Panther como un esfuerzo conjunto de código abierto con Panther.

Consulta nuestro CONTRIBUTORS.md para obtener una lista completa de contribuyentes.

Licencia

Este proyecto está licenciado bajo la Apache License 2.0 - consulta el archivo LICENSE para obtener más detalles.