Skip to main content
Glama
orcohen5

Vulnerability Registry MCP Server

by orcohen5

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 build

Conectar 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?"

Descubrimiento de herramientas Claude Desktop descubriendo las 6 herramientas del registro de vulnerabilidades

Herramientas Disponibles

Herramienta

Descripción

Parámetros Clave

Consulta de Ejemplo

list_vendors

Lista todos los proveedores de software registrados

category (opcional)

"Muéstrame todos los proveedores de código abierto"

get_vendor

Encuentra un proveedor por ID o nombre

vendor_id, name

"Encuentra el ID de proveedor para Linux Kernel"

search_vulnerabilities

Busca con filtros flexibles

severity, status, min_cvss, keyword, published_after

"Muestra vulnerabilidades críticas abiertas"

get_vulnerability

Obtiene detalles completos de CVE

cve_id

"¿Cuál es la puntuación CVSS de Log4Shell?"

get_vulnerability_stats

Estadísticas agregadas

vendor_id (opcional)

"¿Cuántas vulnerabilidades hay por severidad?"

get_vendor_risk_summary

Perfil de riesgo del proveedor

vendor_id

"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".

Vulnerabilidades Críticas Abiertas

"¿Cuál es la puntuación CVSS de Log4Shell?"

Utiliza get_vulnerability con cve_id: "CVE-2021-44228".

CVSS de Log4Shell

"Muéstrame el perfil de riesgo de Microsoft"

Utiliza get_vendor_risk_summary con vendor_id: "V1".

Perfil de Riesgo de Microsoft

"¿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".

Consulta Multi-Herramienta de Linux Kernel

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 opcionalessearch_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 enriquecidasget_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 estrictaSeverity 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/offset a search_vulnerabilities para 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

@modelcontextprotocol/sdk — API de alto nivel McpServer

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)
Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - A tier

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