Skip to main content
Glama

nvd-mcp

An MCP server that brings NIST National Vulnerability Database (NVD) intelligence directly into Claude. Look up CVEs, search by product, and triage a list of vulnerabilities into a prioritized risk report — all from a natural-language prompt.

Built with FastMCP and the NVD REST API v2 (no API key required).


Tools

Tool

Description

Key inputs

lookup_cve

Full details for a single CVE

cve_id — e.g. "CVE-2021-44228"

search_cves

CVEs by product or keyword, sorted by CVSS score

keyword, max_results (1–20, default 10)

summarize_risk

Severity breakdown + weighted risk score for a set of CVEs

cve_ids — list of 1–10 CVE IDs

summarize_risk computes a composite risk score using the formula:

score = (CRITICAL×10 + HIGH×5 + MEDIUM×2 + LOW×1) / total_found

Score range: 0 (no risk) → 10 (all CRITICAL).


Related MCP server: NVD MCP Server

Quickstart

1. Clone and install

git clone <repo-url> nvd-mcp
cd nvd-mcp
uv venv --python 3.13
uv pip install -e .

2. Verify the entry point

.venv/bin/nvd-mcp

You should see FastMCP start and wait on stdin — that confirms the server is working. Press Ctrl-C to exit.

3. Connect to Claude Desktop

Open (or create) ~/Library/Application Support/Claude/claude_desktop_config.json and add the nvd-mcp entry:

{
  "mcpServers": {
    "nvd-mcp": {
      "command": "/absolute/path/to/nvd-mcp/.venv/bin/nvd-mcp"
    }
  }
}

Replace /absolute/path/to/nvd-mcp with the actual path on your machine (run pwd inside the project directory to get it).

Restart Claude Desktop. You should see nvd-mcp appear in the tools list.


Example prompts

Look up CVE-2021-44228 and tell me how severe it is.
Find the 10 most critical CVEs affecting OpenSSL.
Summarize the risk for CVE-2021-44228, CVE-2022-22965, and CVE-2023-38545.
Give me a recommended remediation priority.

Project layout

src/nvd_mcp/
├── server.py   # FastMCP app — tool definitions and entry point
├── client.py   # Async NVD API v2 HTTP client with retry/backoff
└── models.py   # Pydantic v2 models: NVD response parsing + tool output types

Rate limiting

The NVD public API allows 5 requests per 30 seconds without an API key. summarize_risk staggers its requests automatically. If you need higher throughput, register for a free NVD API key and set the NVD_API_KEY environment variable (the server will pick it up via the Authorization header — see client.py).

Note: NVD_API_KEY support is a one-line addition to the NvdClient headers dict; it is not wired up in this demo to keep the setup keyless.


Development

# Type check
PYTHONPATH=src .venv/bin/pyright

# Run tests
PYTHONPATH=src .venv/bin/pytest

Available Tools

3 tools
lookup_cveA

Look up full details for a specific CVE by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idYesThe CVE identifier, e.g. ``"CVE-2021-44228"``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states 'look up full details' but does not specify whether the operation is read-only, idempotent, or requires authentication. It also fails to mention any potential errors or limits. With an output schema present, the description could still benefit from clarifying what 'full details' entails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded and contains no unnecessary words. It efficiently conveys the essential purpose without any waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (as indicated by context signals), the description does not need to explain return values. For a simple single-CVE lookup tool, the description is sufficiently complete, though it could mention what happens if the CVE is not found.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single parameter, including a description and example value. The tool description adds no additional meaning beyond what the schema already provides, so a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('look up full details') and the resource ('a specific CVE by ID'), making the tool's purpose unambiguous. It also implicitly distinguishes itself from siblings like 'search_cves' (which searches) and 'summarize_risk' (which summarizes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for looking up a single CVE by ID, but it does not explicitly state when to use it versus alternatives, nor does it mention any prerequisites or typical use cases. The guidance is only implied by the sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cvesA

Search for CVEs by product name or keyword.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYesProduct name or search term, e.g. ``"Apache Log4j"``.
max_resultsNoNumber of results to return. Clamped to 1–20. Default 10.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully bears responsibility for behavioral disclosure. It only states 'Search for CVEs by product name or keyword' without revealing any behavioral traits such as rate limits, authentication needs, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that communicates the core functionality without any redundant or extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

While the description covers the basic purpose and the schema documents parameters, it lacks additional context like search scoping, result ordering, or explanation of CVEs. An output schema exists, so return value details are assumed covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage, with both parameters (keyword and max_results) described. The description's keyword mention adds no new meaning beyond the schema, warranting a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Search for CVEs by product name or keyword.' It uses a specific verb ('Search') and resource ('CVEs') and distinguishes itself from siblings like 'lookup_cve' (likely single CVE lookup) and 'summarize_risk' (risk summary).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for searching CVEs but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

summarize_riskA

Aggregate a risk summary for a list of CVE IDs.

Fetches each CVE from NVD, computes a weighted composite risk score, and returns a severity breakdown with prioritized remediation guidance.

Risk score formula: (CRITICAL×10 + HIGH×5 + MEDIUM×2 + LOW×1) / total_found Score range: 0 (no risk) → 10 (all CRITICAL).

ParametersJSON Schema
NameRequiredDescriptionDefault
cve_idsYes1–10 CVE IDs, e.g. ``["CVE-2021-44228", "CVE-2022-22965"]``.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behavior: fetches from NVD, computes weighted composite score, returns severity breakdown and remediation guidance. Includes the formula and score range. No annotations exist, so description carries full burden, and it provides substantial behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Highly concise with no filler. Three short sentences: purpose, process, formula. Front-loaded with the main action. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description adequately covers purpose and process. It mentions expected output (severity breakdown, remediation guidance). Lacks detail on error handling or performance, but given simplicity and single parameter, it is fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear description and example for cve_ids. Description adds minimal new meaning beyond the schema (e.g., mentions 'list of CVE IDs' but schema already specifies that). Baseline score applies as schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Aggregate a risk summary for a list of CVE IDs' with a specific verb and resource. Distinguishes from siblings lookup_cve (single CVE detail) and search_cves (search) by focusing on multiple CVEs and aggregation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage when a list of CVEs is present and an aggregate risk is needed, but does not explicitly state when not to use or provide alternatives to siblings. The description lacks exclusion criteria or comparison with similar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4/5.0
Disambiguation5/5

Each tool has a distinct purpose: lookup a specific CVE, search by keyword, and aggregate risk for multiple CVEs. No overlap in functionality.

Naming Consistency5/5

All tools use a consistent verb_noun snake_case pattern: lookup_cve, search_cves, summarize_risk.

Tool Count4/5

Three tools is slightly on the low side but appropriate for a focused NVD query and risk assessment domain. Each tool is essential.

Completeness5/5

The tool set covers the full workflow: finding CVEs (search), getting details (lookup), and summarizing risk (summarize). No obvious gaps for the intended purpose.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    This MCP server transforms Claude into a comprehensive security analyst by providing access to 27 security tools across 21 APIs for vulnerability intelligence. It enables users to query multiple sources like NVD, EPSS, CISA KEV, and threat intelligence platforms in parallel to get correlated security insights and risk assessments for CVEs.
    28
    1,315
    Apache 2.0
  • A
    license
    A
    quality
    C
    maintenance
    MCP server for the NIST National Vulnerability Database — lets AI assistants search CVEs by keyword, severity, CPE, CWE, KEV status, and date range via natural language.
    2
    GPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server for querying the NIST National Vulnerability Database (NVD) API, enabling search and retrieval of CVE details, temporal context, and KEV catalog entries.
    15
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    MCP server that connects Claude to Dependency-Track for natural language vulnerability triage, analysis, and management.
    14
    MIT

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/derrickjudge/nvd-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server