Vulnerability Registry MCP Server
Servidor MCP de Registro de Vulnerabilidades
Autor: Or Cohen
Un servidor MCP (Model Context Protocol) que envuelve una base de datos de vulnerabilidades heredada y la expone como herramientas para cualquier cliente LLM compatible con MCP. Construido como una capa de acceso inteligente sobre archivos de datos personalizados delimitados por tuberías, permitiendo a los analistas de seguridad consultar vulnerabilidades mediante lenguaje natural.
Inicio Rápido
Requisitos previos
Node.js 18+
Claude Desktop (o cualquier cliente compatible con MCP)
Configuración
git clone https://github.com/orcohen5/vulnerability-registry.git
cd vulnerability-registry
npm install
npm run buildConectar a Claude Desktop
Agregue a su configuración de Claude Desktop (%APPDATA%\Claude\claude_desktop_config.json en Windows, ~/Library/Application Support/Claude/claude_desktop_config.json en macOS):
{
"mcpServers": {
"vulnerability-registry": {
"command": "node",
"args": [
"<FULL_PATH>/vulnerability-registry/dist/index.js",
"<FULL_PATH>/vulnerability-registry/data"
]
}
}
}Reemplace <FULL_PATH> con la ruta absoluta al repositorio clonado.
Reinicie Claude Desktop y luego pregunte:
"¿Qué herramientas MCP tienes para vulnerabilidades?"
Claude Desktop descubriendo las 6 herramientas del registro de vulnerabilidades
Herramientas Disponibles
Herramienta | Descripción | Parámetros Clave | Consulta de Ejemplo |
| Lista todos los proveedores de software registrados |
| "Muéstrame todos los proveedores de código abierto" |
| Encuentra un proveedor por ID o nombre |
| "Encuentra el ID de proveedor para Linux Kernel" |
| Busca con filtros flexibles |
| "Muestra vulnerabilidades críticas abiertas" |
| Obtiene detalles completos de CVE |
| "¿Cuál es la puntuación CVSS de Log4Shell?" |
| Estadísticas agregadas |
| "¿Cuántas vulnerabilidades hay por severidad?" |
| Perfil de riesgo del proveedor |
| "Muéstrame el perfil de riesgo de Microsoft" |
Consultas de Ejemplo
"¿Cuántas vulnerabilidades críticas siguen abiertas?"
Utiliza search_vulnerabilities con severity: "critical" y status: "open".

"¿Cuál es la puntuación CVSS de Log4Shell?"
Utiliza get_vulnerability con cve_id: "CVE-2021-44228".

"Muéstrame el perfil de riesgo de Microsoft"
Utiliza get_vendor_risk_summary con vendor_id: "V1".

"¿Qué vulnerabilidades se encontraron en Linux Kernel después de 2022?"
Esta consulta demuestra la orquestación de múltiples herramientas: Claude primero llama a list_vendors para resolver "Linux Kernel" al ID de proveedor V5, luego llama a search_vulnerabilities con vendor_id: "V5" y published_after: "2022-01-01".

Arquitectura
┌─────────────────┐ ┌──────────────┐ ┌──────────────┐
│ Claude Desktop │────▶│ MCP Server │────▶│ Data Files │
│ (MCP Client) │◀────│ (stdio) │◀────│ (.db) │
└─────────────────┘ └──────┬───────┘ └──────────────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
tools.ts repository.ts parser.ts
(MCP layer) (query engine) (file reader)El código sigue una estricta separación en tres capas:
parser.ts — Lee el formato personalizado delimitado por tuberías de forma dinámica. No sabe nada sobre MCP.
repository.ts — Almacén de datos en memoria con mapas indexados para búsquedas O(1). No sabe nada sobre MCP.
tools.ts — Registra herramientas MCP utilizando la API de alto nivel
McpServer. Traduce entre MCP y el repositorio.
Esto significa que cambiar la fuente de datos (archivos → base de datos) requiere cambiar solo parser.ts, sin cambios en la capa MCP.
Decisiones de Diseño
Análisis dinámico de metadatos — El analizador de archivos lee los nombres de las columnas desde el encabezado # FORMAT: en tiempo de ejecución en lugar de codificar las posiciones de los campos. Combinado con la verificación de versión (# VERSION: 1.0), esto asegura que el servidor pueda detectar y advertir sobre cambios de formato sin modificaciones en el código.
Patrón de repositorio con indexación en memoria — Los datos se cargan una vez al inicio y se indexan en múltiples mapas (vendorById, vulnByCveId, vulnsByVendor, vulnsBySeverity, vulnsByStatus). Las búsquedas principales son O(1). Las búsquedas filtradas comienzan desde el subconjunto indexado más pequeño y se cruzan, haciendo que las consultas combinadas sean eficientes incluso a gran escala.
API de alto nivel McpServer — Utiliza McpServer.registerTool() con esquemas Zod para la validación de entrada con seguridad de tipos, en lugar de la clase Server de bajo nivel con definiciones manuales de JSON Schema y enrutamiento de solicitudes.
Búsqueda flexible con filtros opcionales — search_vulnerabilities acepta todos los parámetros como opcionales, permitiendo cualquier combinación. Una herramienta maneja consultas desde "mostrar todas las críticas" hasta "encontrar CVEs de Linux de 2023 con CVSS superior a 8". Los resultados siempre se ordenan por puntuación CVSS (primero la más alta) para que los problemas más graves aparezcan primero.
Respuestas enriquecidas — get_vulnerability devuelve el objeto completo del proveedor junto con los datos del CVE. get_vendor_risk_summary incluye la lista de vulnerabilidades abiertas. Esto reduce el número de llamadas a herramientas que el LLM necesita para responder preguntas comunes.
Seguridad de tipos estricta — Severity y Status son tipos de unión derivados de arreglos as const, con guardias de tipo en tiempo de ejecución (isSeverity, isStatus). Los mismos arreglos de fuente de verdad alimentan tanto los tipos de TypeScript como los validadores de enumeración de Zod.
Anomalías de Datos Conocidas
Al trabajar con los archivos de datos fuente, identifiqué al menos una inconsistencia de atribución:
CVE-2024-21762 (Fortinet SSL VPN OOB) está asignado al proveedor V4 (Google) en vulnerabilities.db,
aunque esta es una vulnerabilidad de Fortinet. El servidor devuelve fielmente los datos tal como están almacenados —
corregir los datos de origen está fuera del alcance de una capa de consulta de solo lectura. En un sistema de producción,
agregaría un paso de validación de datos en el momento de la carga para marcar tales inconsistencias para revisión humana,
posiblemente mediante la referencia cruzada con la API de NVD para la atribución canónica del proveedor.
Lo que construiría con más tiempo
Persistencia SQLite/PostgreSQL — Reemplazar el almacenamiento en memoria para conjuntos de datos que excedan la RAM disponible, con agrupación de conexiones para acceso concurrente.
Paginación — Agregar parámetros
limit/offsetasearch_vulnerabilitiespara grandes conjuntos de resultados.Búsqueda de texto difusa — Coincidencia de distancia de Levenshtein en títulos de vulnerabilidades para consultas tolerantes a errores tipográficos.
Integración con API de NVD — Actualizaciones automáticas de datos CVE desde la Base de Datos Nacional de Vulnerabilidades del NIST.
Recursos MCP — Exponer archivos de datos sin procesar como Recursos MCP para acceso directo del LLM cuando se necesite contexto de texto completo.
Registro estructurado y observabilidad — Registros en formato JSON con IDs de correlación para depurar cadenas de llamadas a herramientas.
Autenticación y limitación de tasa — Proteger el servidor en escenarios de despliegue compartido.
Pipeline CI/CD — GitHub Actions ejecutando lint, verificación de tipos y pruebas en cada push.
Stack Tecnológico
Componente | Elección |
Lenguaje | TypeScript (ES2022, módulos Node16) |
SDK MCP |
|
Validación | Zod |
Transporte | stdio |
Construcción | tsc |
Pruebas | Vitest |
Pruebas
npm test # Run all tests (30 tests across parser + repository)
npm run build # Compile TypeScript
npm start # Start the MCP server (stdio mode)Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/orcohen5/vulnerability-registry'
If you have feedback or need assistance with the MCP directory API, please join our Discord server