MCP server for querying the EU Vulnerability Database (EUVDB) API provided by ENISA
This server has 7 tools with basic functionality but significant quality gaps. All tools are directly visible in server.py with explicit @mcp.tool() registrations. However, tool descriptions are minimal (10-70 chars), parameter documentation is sparse or missing, output schemas are undocumented, and error handling is absent. Tools 1-3 (get_last_vulnerabilities, get_exploited_vulnerabilities, get_critical_vulnerabilities) have empty input schemas {} but no documentation of what they return or how to use results. Tool 7 (query_vulnerabilities) has 13 parameters but most lack constraint documentation (min/max for numeric fields, date format specs, enum values for filters). No tool documents its return structure, and none include error recovery guidance. This is typical of a working but unmaintained integration layer that would cause LLM errors in production.
Consulta un aviso por ID (e.g. cisco-sa-xxx).
Últimas vulnerabilidades críticas (máx 8).
Consulta una vulnerabilidad por ENISA ID (e.g. EUVD-2024-45012).
Últimas vulnerabilidades explotadas (máx 8).
Últimas vulnerabilidades reportadas (máx 8).
Consulta una vulnerabilidad por ID (e.g. CVE-2024-0864).
Consulta filtrada del catálogo de vulnerabilidades.
No output schemas documented for any tool. LLMs cannot predict response structure, forcing runtime discovery and wasting tokens on introspection.
Tools 1-3 (get_last_vulnerabilities, get_exploited_vulnerabilities, get_critical_vulnerabilities) have empty input schemas {} but no documentation of what they return (field names, types, max count). Descriptions are under 20 chars; description scores capped at 0.
query_vulnerabilities has 13 parameters but most lack type constraints, format specs, or enums. E.g., fromScore/toScore/fromEpss/toEpss have no min/max bounds documented; fromDate/toDate lack format specs (ISO 8601?). LLMs will pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 43 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | - | v1 |
No error handling or recovery guidance. Tools call resp.raise_for_status() but do not catch/interpret HTTP errors. An LLM receives a bare 404 or 500 with no guidance on retry, fallback, or user correction.
Parameter id in get_vulnerability_by_id, get_enisaid, get_advisory is ambiguous. Example values in descriptions (CVE-2024-0864, EUVD-2024-45012, cisco-sa-xxx) are treated as literal templates by LLMs. No enum or regex constraint provided.
No pagination or result limits documented. query_vulnerabilities accepts page and size params but tool description does not state: Are results capped at 100 per page? What is the max page count? Unlimited results risk context window exhaustion.