Euvd Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Euvd Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
MCP server for the European Union Vulnerability Database (EUVD) maintained by ENISA.
cachetools.TTLCache) for list endpoints/health liveness endpoint and /metrics observability endpoint (HTTP mode)git clone <repository-url>
cd euvdmcp
poetry installCopy the example environment file and adjust as needed:
cp .env.template .envAll settings are read from environment variables (or a .env file at the project root).
| Variable | Default | Description |
|---|---|---|
TRANSPORT | http | Transport mode: http or stdio |
HOST | 127.0.0.1 | Server bind address (HTTP mode only) |
PORT | 8000 | Server port (HTTP mode only) |
EUVD_BASE_URL | https://euvdservices.enisa.europa.eu | EUVD API base URL |
EUVD_TIMEOUT | 30 | HTTP request timeout (seconds) |
EUVD_MAX_RETRIES | 3 | Max retries on transient failures |
CACHE_TTL | 30 | TTL for cached list responses (seconds) |
CACHE_MAX_SIZE | 128 | Maximum entries in the response cache |
LOG_LEVEL | INFO | Logging level (DEBUG, INFO, WARNING, ERROR) |
USER_AGENT | euvd-mcp-tool | User-Agent header sent to the EUVD API |
uvicorn euvd_mcp.main:app --host 127.0.0.1 --port 8000With live reload during development:
uvicorn euvd_mcp.main:app --host 127.0.0.1 --port 8000 --reloadpoetry run python -m euvd_mcp.mainServer runs on http://127.0.0.1:8000/mcp by default.
Build the image:
make docker-buildRun with a .env file (configuration is not baked into the image):
make docker-run # uses .env automaticallyOr docker-compose:
make compose-up # start
make compose-logs # tail logs
make compose-down # stopTRANSPORT=stdio poetry run python -m euvd_mcp.mainNote: In stdio mode the/healthand/metricsendpoints are not available. Logs go to stderr so they do not interfere with the MCP protocol on stdout.
Add to your Claude Desktop configuration file:
macOS/Linux: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"euvd": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}{
"mcpServers": {
"euvd": {
"command": "poetry",
"args": ["run", "python", "-m", "euvd_mcp.main"],
"env": { "TRANSPORT": "stdio" }
}
}
}{
"mcpServers": {
"euvd": {
"command": "docker",
"args": [
"run", "--rm", "-p", "8000:8000",
"--env-file", "/absolute/path/to/.env",
"euvd-mcp:local"
]
}
}
}| Tool | Description |
|---|---|
get_last_vulnerabilities | Latest vulnerabilities (up to 8) |
get_exploited_vulnerabilities | Latest exploited vulnerabilities |
get_critical_vulnerabilities | Latest critical vulnerabilities (CVSS ≥ 9.0) |
search_vulnerabilities | Search with CVSS, EPSS, date, vendor, product, and exploited filters |
get_vulnerability_by_id | Fetch a single vulnerability by EUVD ID (e.g. EUVD-2024-45012) |
get_advisory_by_id | Fetch an advisory by its vendor-assigned ID |
Two endpoints are available in HTTP mode:
| Endpoint | Description |
|---|---|
GET /health | Liveness probe — returns {"status": "ok", "version": "...", "uptime_seconds": N} |
GET /metrics | Request counts, per-tool latencies, cache hit/miss ratio, error breakdown |
euvdmcp/
├── euvd_mcp/
│ ├── main.py # MCP server, tool definitions, health/metrics routes
│ ├── controllers/
│ │ └── euvd_api.py # Async API client with retry and TTL cache
│ ├── models/
│ │ ├── input_models.py # Pydantic input validation models
│ │ └── vulnerability.py # Response data models
│ ├── utils/
│ │ ├── settings.py # Configuration (pydantic-settings)
│ │ ├── logging_config.py # Structured logging setup
│ │ └── metrics.py # In-process metrics collector
│ └── tests/ # pytest test suite
├── Dockerfile # Multi-stage build, non-root user, HEALTHCHECK
├── docker-compose.yml
├── Makefile
└── pyproject.tomlpoetry install # install all dependencies (incl. dev)
make pre-commit-setup # install git hooks
make test # run tests
make test-cov # run tests with coverage report
make lint # ruff + mypy
make format # auto-format with ruff
make security # bandit + pip-auditThree GitHub Actions workflows run on every PR to main:
See LICENSE
Duarte Dias
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.