Skip to main content
Glama
MSAdministrator

Enrichment MCP Server

Servidor MCP de enriquecimiento

Este proyecto es un servidor de Protocolo de Contexto de Modelo (MCP) para realizar enriquecimiento dado un observable proporcionado. La combinación de los servicios configurados y los observables proporcionados determinará a qué servicios de enriquecimiento se llamará.

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

Servidor MCP

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

  • lookup-observable: un punto final genérico que examina y dirige el observable dado a la herramienta correcta.

Related MCP server: ADEO CTI MCP Server

Servicios soportados

Actualmente se admiten los siguientes servicios y tipos observables:

Si tiene alguna sugerencia o cree que se debería implementar otro servicio, ¡cree un problema o una solicitud de extracción!

Nombre

Se requiere clave API

Soporta IP

Admite dominio

Admite URL

Admite correo electrónico

VirusTotal

Sí

Sí

Sí

Sí

No

Análisis híbrido

Sí

Sí

Sí

Sí

No

Bóveda alienígena

Sí

Sí

Sí

Sí

No

Shodan

Sí

Sí

Sí

Sí

No

Urlscan.io

Sí

Sí

Sí

Sí

No

AbuseIPDB

Sí

Sí

No

No

No

He sido derrotado

Sí

No

No

No

Sí

Requisitos

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

La forma más fácil de ejecutar esto en un sistema/Mac local es:

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

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

NOTA: Consulte la documentación de security-cli para obtener información sobre la configuración de los diferentes servicios. La configuración predeterminada es suficiente para la mayoría de los casos de uso.

Variables ambientales

NOTA: Se recomienda encarecidamente configurar los secretos como variables de entorno al implementar este servicio. ¡Deja de almacenar secretos, idiota!

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

  • ENRIQUECIMIENTO_MCP_VIRUSTOTAL_CLAVE

  • ENRIQUECIMIENTO_MCP_ANÁLISIS_HÍBRIDO_CLAVE

  • ENRIQUECIMIENTO_MCP_ALIENVAULT_CLAVE

  • ENRIQUECIMIENTO_MCP_SHODAN_CLAVE

  • ENRIQUECIMIENTO_MCP_URLSCAN_CLAVE

  • ENRIQUECIMIENTO_MCP_ABUSEIPDB_CLAVE

  • ENRIQUECIMIENTO_MCP_HIBP_CLAVE

Configuración de enriquecimientos

Cada servicio de enriquecimiento se define en el archivo de configuración de 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 se podrá ampliar para funciones como scans , queries , etc.

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

  • direcciónip - direcciones ipv4

  • dominio - Un dominio o netloc

  • url: una URL completa con esquema, etc.

  • correo electrónico - 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 una template . Se puede proporcionar el campo apikey , pero recomendamos usar variables de entorno.

Plantillas de indicaciones

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

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

Estos archivos tienen el siguiente patrón de nombre de archivo.

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

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

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

{
    "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 utilizar un servidor prediseñado, instrucciones desde aquí: https://modelcontextprotocol.io/quickstart/user

  • Descargar Claude para escritorio

  • Instalar uv

curl -LsSf https://astral.sh/uv/install.sh | sh
  • Descargue este repositorio y agréguelo a la configuración de Claude para escritorio

    • Claude para escritorio > Configuración > Desarrollador > Editar configuración

Puede copiar el archivo .desktop_config.example.json proporcionado

Si quieres crearlo tú 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. Reiniciar Claude para escritorio

Ahora debería ver dos íconos en la barra de chat: un martillo que muestra las herramientas disponibles y un ícono de conexión que muestra el mensaje definido y la entrada requerida.

Contribuyendo

¡Agradecemos sus contribuciones! No dude en enviar solicitudes de incorporación de cambios.

Available Tools

1 tool
lookup-observableD

A generic tool which takes any observable and passes it the correct tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

D1.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It fails to describe any traits—such as whether it's read-only, destructive, requires authentication, or has rate limits—and does not explain what 'passes it' means in terms of output or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is appropriately concise, but it is not front-loaded with critical information. It wastes space on vague phrasing like 'generic tool' without adding value, though it avoids excessive verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (with an output schema but no annotations and 0% schema coverage), the description is incomplete. It does not clarify the tool's purpose, parameters, or behavior, failing to compensate for the lack of structured data, though the output schema might help mitigate some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not add any meaning beyond the schema. It does not explain what 'value' represents (e.g., what an 'observable' is), its format, or constraints, leaving the single parameter undocumented and unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'takes any observable and passes it the correct tool,' which is tautological—it restates the tool's name 'lookup-observable' without specifying what an 'observable' is or what 'passes it' entails. It lacks a clear verb+resource combination, making the purpose vague and minimally informative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool, such as context, prerequisites, or alternatives. The description is generic and does not provide any usage instructions, leaving the agent with no direction on its application.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool update
    • First observedlookup-observable

TDQS

C2.1/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of ambiguity or overlap between tools. The single tool 'lookup-observable' has a clear, distinct purpose of routing observables to appropriate handlers, leaving no room for confusion or misselection.

Naming Consistency5/5

The naming is trivially consistent as there is only one tool. The tool name 'lookup-observable' follows a clear verb_noun pattern, and with no other tools to compare, there is no inconsistency in naming conventions.

Tool Count2/5

A single tool is too few for a server named 'Enrichment MCP Server', which suggests a purpose of enriching various observables. This minimal toolset feels thin and inadequate for the implied scope, as it relies on internal routing rather than exposing a comprehensive set of enrichment operations directly.

Completeness1/5

The tool surface is severely incomplete for an enrichment server. There are obvious gaps, such as no direct tools for specific observable types (e.g., IP addresses, domains, files) or enrichment actions (e.g., threat intelligence lookup, geolocation). The single generic tool creates a dead end for agents, lacking the necessary coverage for the domain.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol server that facilitates integration with OpenCTI, allowing users to query and retrieve cyber threat intelligence data via a standardized interface.
    16
    40
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides access to Shodan and VirusTotal APIs for cybersecurity analysis, enabling analysts to perform network intelligence operations including host lookups, vulnerability analysis, and threat intelligence gathering.
    25
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that performs third-party threat intelligence enrichment for various observables (IP addresses, domains, URLs, emails) using services like VirusTotal, Shodan, and AbuseIPDB.
    -
  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server providing security vulnerability intelligence tools including CVE lookup, EPSS scoring, CVSS calculation, exploit detection, and Python package vulnerability checking.
    8
    9
    MIT