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
El servidor de Protocolo de Contexto de Modelo (MCP) de Panther proporciona funcionalidad para:
- Escribir y ajustar detecciones desde tu IDE
- Consultar de forma interactiva registros de seguridad usando lenguaje natural
- Triar, comentar y resolver una o muchas alertas
Herramientas Disponibles
Alertas
| Nombre de la Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
add_alert_comment | Agregar un comentario a una alerta de Panther | "Agregar comentario 'Se ve bastante mal' a la alerta abc123" |
start_ai_alert_triage | Iniciar 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_summary | Recuperar 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_alert | Obtener información detallada sobre una alerta específica | "¿Cuál es el estado de la alerta 8def456?" |
get_alert_events | Obtener una pequeña muestra de eventos para una alerta determinada | "Muéstrame los eventos asociados con la alerta 8def456" |
list_alerts | Listar 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_alerts | Actualizar 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_assignee | Actualizar el asignado de una o más alertas | "Asignar las alertas abc123 y def456 a John" |
update_alert_status | Actualizar el estado de una o más alertas | "Marcar las alertas abc123 y def456 como resueltas" |
list_alert_comments | Listar todos los comentarios de una alerta específica | "Muéstrame todos los comentarios de la alerta abc123" |
Lago de Datos
| Nombre de la Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
query_data_lake | Ejecutar 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_schema | Obtener información de esquema para una tabla específica | "Muéstrame el esquema de la tabla AWS_CLOUDTRAIL" |
list_databases | Listar todas las bases de datos disponibles del lago de datos en Panther | "Listar todas las bases de datos disponibles" |
list_database_tables | Listar 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_stats | Analizar 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 Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
list_scheduled_queries | Listar todas las consultas programadas con soporte de paginación | "Muéstrame todas las consultas programadas" / "Lista las primeras 25 consultas programadas" |
get_scheduled_query | Obtener 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 Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
list_log_sources | Listar 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_source | Obtener 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 Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
list_detections | Listar 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_detection | Obtener 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_detection | Deshabilitar 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 Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
list_global_helpers | Listar 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_helper | Obtener 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 Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
list_data_models | Listar 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_model | Obtener información detallada sobre un modelo de datos específico | "Obtener los detalles completos del modelo de datos 'AWS_CloudTrail'" |
Esquemas
| Nombre de la Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
list_log_type_schemas | Listar esquemas de tipos de registro disponibles con filtros opcionales | "Muéstrame todos los esquemas relacionados con AWS" |
get_log_type_schema_details | Obtener información detallada para esquemas de tipos de registro específicos | "Obtener detalles completos del esquema AWS.CloudTrail" |
Métricas
| Nombre de la Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
get_rule_alert_metrics | Obtener métricas sobre alertas agrupadas por regla | "Mostrar las 10 reglas principales por cantidad de alertas" |
get_severity_alert_metrics | Obtener métricas sobre alertas agrupadas por severidad | "Mostrar conteos de alertas por severidad de la última semana" |
get_bytes_processed_metrics | Obtener 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 Herramienta | Descripción | Ejemplo de Solicitud |
|---|---|---|
list_users | Listar 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_user | Obtener información detallada sobre un usuario específico | "Obtener detalles del usuario ID 'john.doe@company.com'" |
get_permissions | Obtener los permisos del usuario actual | "¿Qué permisos tengo?" |
list_roles | Listar 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_role | Obtener 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.
-
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

-
-
Almacena el token generado de forma segura (por ejemplo, 1Password)
-
Copia la URL de la instancia de Panther desde tu navegador (por ejemplo,
https://YOUR-PANTHER-INSTANCE.domain)- Nota: Esto debe incluir
https://
- Nota: Esto debe incluir
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:
-
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:
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:
- Abre la configuración de Claude Desktop y navega a la pestaña Desarrollador
- Haz clic en "Editar Config" para abrir el archivo de configuración
- 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"
}
}
}
}
- 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 nohttps:// - Verifica con:
claude mcp list
Variables de entorno
MCP_TRANSPORT: Establece el tipo de transporte (stdioostreamable-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://pantherdesde tu cliente MCP.
Contribuciones
¡Damos la bienvenida a contribuciones para mejorar MCP-Panther! Así es como puedes ayudar:
- Reportar problemas: Abre un issue para cualquier error o solicitud de funcionalidad
- Enviar pull requests: Haz un fork del repositorio y envía PRs para correcciones de errores o nuevas funcionalidades
- Mejorar la documentación: Ayúdanos a hacer la documentación más clara y completa
- 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.