Enrichment MCP Server

Realiza enriquecimiento de datos en observables utilizando servicios de terceros a través del paquete Python security-cli.

Documentación

Enrichment MCP Server

Este proyecto es un servidor de Model Context Protocol (MCP) para realizar enriquecimiento dado un observable proporcionado. La combinación de servicios configurados y el(los) observable(s) proporcionado(s) determinará qué servicios de enriquecimiento se llamarán.

Esta herramienta proporciona una implementación simple de servidor MCP para realizar enriquecimiento de terceros utilizando servicios comunes (p. ej., VirusTotal, Hybrid Analysis, etc.) utilizando el paquete de Python security-cli para realizar el enriquecimiento/comunicarse con diferentes servicios.

Servidor MCP

Esta implementación del servidor MCP enrichment-mcp expone las siguientes herramientas.

  • lookup-observable: un endpoint genérico que examina y enruta el observable dado a la herramienta correcta.

Servicios compatibles

Los siguientes servicios y tipos de observables son actualmente compatibles:

Si tiene alguna sugerencia o cree que se debería implementar otro servicio, cree un issue o un pull request.

NombreRequiere clave APISoporta IPSoporta dominioSoporta URLSoporta email
VirusTotalSíSíSíSíNo
HybridAnalysisSíSíSíSíNo
AlienVaultSíSíSíSíNo
ShodanSíSíSíSíNo
Urlscan.ioSíSíSíSíNo
AbuseIPDBSíSíNoNoNo
HaveIBeenPwnedSíNoNoNoSí

Requisitos

Este servicio MCP utiliza security-cli y un archivo config.yaml.example personalizado para determinar qué servicios de enriquecimiento de terceros son compatibles para las búsquedas de observables.

La forma más sencilla de ejecutarlo en una Mac/sistema local es:

uv run --env-file .env server.py

Esto requiere que use la plantilla proporcionada .env.example y cree un nuevo archivo .env con sus secretos.

NOTA: Revise la documentación de security-cli para obtener información sobre cómo configurar diferentes servicios. El valor predeterminado será suficiente para la mayoría de los casos de uso.

Variables de entorno

NOTA: Se recomienda encarecidamente configurar los secretos como variables de entorno al implementar este servicio. Deja de almacenar secretos de forma insegura.

Para que el paquete security-cli descubra estas variables, deben estar en un formato específico. A continuación se muestra la lista de variables actualmente compatibles:

  • ENRICHMENT_MCP_VIRUSTOTAL_KEY
  • ENRICHMENT_MCP_HYBRIDANALYSIS_KEY
  • ENRICHMENT_MCP_ALIENVAULT_KEY
  • ENRICHMENT_MCP_SHODAN_KEY
  • ENRICHMENT_MCP_URLSCAN_KEY
  • ENRICHMENT_MCP_ABUSEIPDB_KEY
  • ENRICHMENT_MCP_HIBP_KEY

Configuración de enriquecimientos

Cada servicio de enriquecimiento se define en el archivo de configuración securiy-cli. Además, he desglosado los diferentes tipos de enriquecimiento que se pueden realizar. Esto significa que, en la implementación actual, tenemos un único tipo de acción llamado enrich, pero en el futuro esto se puede ampliar para cosas como scans o queries, etc.

Debajo de estas acciones de alto nivel, enumeramos el tipo de observable seguido de una lista de servicios que admiten ese tipo. Los tipos de observables actualmente compatibles son:

  • ipaddress: direcciones IPv4
  • domain: un dominio o netloc
  • url: una URL completamente calificada con esquema, etc.
  • email: una dirección de correo electrónico estándar

También admitimos estos tipos, pero actualmente no están implementados:

  • md5: un hash MD5 de archivo
  • sha1: un hash SHA1 de archivo
  • sha256: un hash SHA256 de archivo

Cada servicio debe tener un name y un template. El campo apikey se puede proporcionar, pero recomendamos usar variables de entorno.

Plantillas de prompt

Cada servicio y tipo de observable puede tener su propia plantilla de respuesta. Estas residen en el directorio security-cli templates y se espera que todas las plantillas existan aquí.

Cada servicio definido tiene una plantilla de prompt que utiliza plantillas jinja2. Puede modificarlas según sea necesario, pero el formato del nombre de archivo debe permanecer igual.

Estos archivos tienen el siguiente patrón de nombre:

{service.name}.{enrichment.type}.jinja2

Asegúrese de que el objeto de respuesta tenga los campos correctos en la propia plantilla o recibirá un error.

A continuación se muestra un ejemplo de salida para un prompt de Enrich this IP 91.195.240.94 con algunos errores mezclados:

{
    "virustotal": "error occurred looking up ip 91.195.240.94 in virustotal",
    "alienvault": "Service: alienvault\nIPAddress: \nReputation Score: 0\nTotal Votes: ",
    "shodan": "Service: shodan\nIPAddress: 91.195.240.94\nLast Analysis Results: 2025-04-25T21:02:52.644602\n\nTags\n\n\nAdditional information includes:\n\n* Latitude: 48.13743\n* Longitude: 11.57549\n* ASN: AS47846\n* Domains: ["servervps.net"]",
    "hybridanalysis": "error occurred looking up ip 91.195.240.94 in hybridanalysis",
    "urlscan": "Service: urlscan\nResult: https://urlscan.io/api/v1/result/01966efe-c8fa-74a4-bfc0-1ed479838e85/\n\nStats\n\n* uniqIPs - 6\n\n* uniqCountries - 2\n\n* dataLength - 432561\n\n* encodedDataLength - 218606\n\n* requests - 14\n\n\nPage\n* country - DE\n* server - Parking/1.0\n* ip - 91.195.240.94\n* mimeType - text/html\n* title - wearab.org\xa0-\xa0Informationen zum Thema wearab.\n* url - https://login.wearab.org/\n* tlsValidDays - 364\n* tlsAgeDays - 0\n* tlsValidFrom - 2025-04-25T00:00:00.000Z\n* domain - login.wearab.org\n* apexDomain - wearab.org\n* asnname - SEDO-AS SEDO GmbH, DE\n* asn - AS47846\n* tlsIssuer - Encryption Everywhere DV TLS CA - G2\n* status - 200\n",
    "abuseipdb": "Service: abuseripdb\nIPAddress: 91.195.240.94\nLast Analysis Result: 2025-03-30T14:04:45+00:00\nScore: 7\nUsage: Data Center/Web Hosting/Transit\nIs Tor: False\nIs Whitelisted: False\nISP: Sedo Domain Parking"
}

Uso del servidor MCP

Para usar un servidor precompilado, siga las instrucciones desde aquí: https://modelcontextprotocol.io/quickstart/user

  • Descargue Claude for Desktop
  • Instale uv
curl -LsSf https://astral.sh/uv/install.sh | sh
  • Descargue este repositorio y agréguelo a la configuración de Claude for Desktop
    • Claude for Desktop > Configuración > Desarrollador > Editar configuración

Puede copiar el archivo .desktop_config.example.json proporcionado

Si desea crearlo usted mismo, estas son las rutas para Claude Desktop.

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

Abra el archivo de configuración en cualquier editor de texto. Reemplace el contenido del archivo con esto:

{
	"mcpServers": {
		"enrichment-mcp": {
			"command": "/ABSOLUTE/PATH/TO/PARENT/FOLDER/uv",
			"args": [
				"--directory",
				"/ABSOLUTE/PATH/TO/CLONED/REPOSITORY/enrichment-mcp",
				"run",
				"server.py"
			]
		}
    }
}
  1. Relance Claude for Desktop

Ahora debería ver dos iconos en la barra de chat, un martillo que muestra las herramientas disponibles y un icono de conexión que muestra el prompt definido y la entrada requerida.

Contribuciones

¡Las contribuciones son bienvenidas! No dude en enviar solicitudes de extracción.