FIRST.org EPSS (Exploit Prediction Scoring System) MCP. Provides exploit-probability scoring for CVEs to complement CVSS severity and prioritize patching.
Two well-named tools with strong, LLM-optimized descriptions (194 - 250 chars each). Both have complete input schemas with typed properties and clear parameter descriptions. Tool names follow verb_noun pattern (get_epss, top_exploited). Descriptions explain WHAT, WHEN, and WHY. However, output schemas are not formally documented in the code, only inferred from callTool implementation. No error handling guidance (e.g., what to do if CVE not found). No parameter validation or bounds enforcement visible. Missing tool annotations (readOnlyHint, idempotentHint). Parameter descriptions are good but could specify ranges/constraints more explicitly (e.g., 'min_score must be 0 - 1').
EPSS exploit-probability for one or more CVEs. Returns each CVE's EPSS score (0-1 = probability it will be exploited in the wild in the next 30 days) and percentile (how it ranks vs all CVEs). Use to gauge real-world exploit likelihood and prioritize patching — complements CVSS severity (a high-severity CVE with low EPSS may be lower urgency than a moderate-severity one with high EPSS).
List the CVEs most likely to be exploited, ranked by EPSS score descending. Answers "which vulnerabilities are most likely to be exploited right now" so you can prioritize patching. EPSS is the probability (0-1) a CVE will be exploited in the wild in the next 30 days; this complements CVSS severity rather than replacing it.
Output schemas not formally documented. callTool returns structured objects (results array with cve, epss_score, percentile, date, interpretation fields; cves array for top_exploited), but no JSON Schema definition is provided in tool definitions. LLMs cannot reliably parse or plan downstream calls without explicit output schema.
No error handling guidance. If a CVE is not found or the FIRST.org API fails, callTool returns {error, message} but does not guide the LLM on recovery (e.g., 'Try a different CVE format' or 'API temporarily unavailable, retry in 30s'). Agents cannot self-correct.
Parameter constraints not enforced or validated. min_score and limit accept any number; no bounds checking visible. LLMs could pass min_score=999 or limit=-1, causing silent failures or unexpected API behavior. Descriptions mention defaults and max but do not enforce them.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Tool annotations missing. Neither tool declares readOnlyHint (both are read-only) or idempotentHint (both are idempotent). Agents cannot infer safety properties without explicit annotations.
Transport mechanism unknown. package.json and src/index.ts do not reveal how this server exposes the MCP protocol (STDIO, HTTP, SSE, etc.). Cannot assess protocol readiness without knowing transport.