Skip to main content
Glama

Get CVE Details

nvd_get_cve
Read-onlyIdempotent

Fetch one or more CVEs by ID from the NIST National Vulnerability Database. Returns CVSS scores across all available versions (v2.0, v3.0, v3.1, v4.0), CWE weakness classifications, affected CPE configurations, CISA KEV fields, current SSVC assessments, and references. Up to 100 CVE IDs per call. For bulk lookups of more than 10 IDs, use brief: true — full records for 100 CVEs can exceed 1MB and exhaust context budgets.

Input Schema

NameRequiredDescriptionDefault
briefNoWhen true, returns trimmed records (ID, status, top CVSS score, KEV name, published date, and a truncated description) instead of full detail. Recommended for batches of more than 10 IDs.
cveIdsYesOne CVE ID or an array of CVE IDs; at most 100 are fetched per call.
allLanguagesNoWhen true, keeps every localized description NVD supplies on each record, and full records render all of them. Default keeps English only, falling back to whatever exists if a record has no English entry. Brief records always carry a single truncated description.
includeReferencesNoWhen false, omits the references array to reduce response size.
includeConfigurationsNoWhen false, omits configurationNodes from full records and their rendered text.

Output Schema

NameRequiredDescriptionDefault
cvesNoCVE records — full detail by default, trimmed rows when brief is true.
briefNoWhether brief or full records were returned.
errorNoPresent when the call failed. Absent on success.
noticeNoExplains when the requested ID count was clamped.
returnedNoNumber of CVE records returned.
requestedNoNumber of CVE IDs processed in this call.
missingIdsNoCVE IDs requested but not found in NVD. Absent when all IDs matched.
effectiveLimitNoPage size or ID count used after clamping.
requestedLimitNoRequested page size or ID count before clamping.
unprocessedIdsNoIDs beyond the processed prefix, deduplicated in request order and excluding IDs already attempted.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed11 schema fields changed
    • changedInput schema / properties / cveIds / anyOf
      Previous value: -[
      -  {
      -    "description": "A single CVE ID (e.g., \"CVE-2021-44228\").",
      -    "type": "string"
      -  },
      -  {
      -    "description": "An array of CVE IDs — at least 1, up to 100 per call.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "maxItems": 100,
      -    "minItems": 1,
      -    "type": "array"
      -  }
      -]New value: +[
      +  {
      +    "description": "A single CVE ID (e.g., \"CVE-2021-44228\").",
      +    "type": "string"
      +  },
      +  {
      +    "description": "An array of CVE IDs — at least 1. The first 100 are processed; excess IDs are reported unless NVD_CLAMP_LIMITS is false, which rejects them.",
      +    "items": {
      +      "description": "One CVE ID.",
      +      "type": "string"
      +    },
      +    "minItems": 1,
      +    "type": "array"
      +  }
      +]
    • changedInput schema / properties / cveIds / description
      Previous value: -"One CVE ID or an array of up to 100 CVE IDs to fetch."New value: +"One CVE ID or an array of CVE IDs; at most 100 are fetched per call."
    • addedInput schema / properties / includeConfigurations
      Added value: +{
      +  "default": true,
      +  "description": "When false, omits configurationNodes from full records and their rendered text.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / cves / items / properties / ssvc
      Added value: +{
      +  "description": "Current SSVC assessments in upstream order.",
      +  "items": {
      +    "additionalProperties": false,
      +    "description": "One current SSVC assessment.",
      +    "properties": {
      +      "decisionPoints": {
      +        "description": "Ordered option objects; repeated keys remain separate.",
      +        "items": {
      +          "additionalProperties": {
      +            "anyOf": [
      +              {
      +                "description": "Decision-point value.",
      +                "type": "string"
      +              },
      +              {
      +                "description": "Decision-point values.",
      +                "items": {
      +                  "description": "One decision-point value.",
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              }
      +            ],
      +            "description": "One string or ordered list of strings."
      +          },
      +          "description": "Decision-point names and values.",
      +          "propertyNames": {
      +            "description": "Decision-point name.",
      +            "type": "string"
      +          },
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "role": {
      +        "description": "Assessment role.",
      +        "type": "string"
      +      },
      +      "source": {
      +        "description": "Contributor name or original source identifier.",
      +        "type": "string"
      +      },
      +      "timestamp": {
      +        "description": "Assessment timestamp when provided.",
      +        "type": "string"
      +      },
      +      "version": {
      +        "description": "SSVC decision-tree version.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "source",
      +      "role",
      +      "version",
      +      "decisionPoints"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / effectiveLimit
      Added value: +{
      +  "description": "Page size or ID count used after clamping.",
      +  "type": "number"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `invalid_cve_id_format`: One or more CVE IDs fail format validation (NVD returns HTTP 404 for malformed IDs). `cve_not_found`: A valid-format CVE ID returns no results — the ID is well-formed but does not exist in NVD. `rate_limited`: NVD returned HTTP 403 indicating the rate limit was exceeded. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `nvd_invalid_response`: NVD returned an invalid response. `nvd_request_blocked`: NVD blocked the request. `invalid_cve_id_format`: One or more CVE IDs fail format validation (NVD returns HTTP 404 for malformed IDs). `cve_not_found`: A valid-format CVE ID returns no results — the ID is well-formed but does not exist in NVD. `rate_limited`: NVD explicitly reported that the rate limit was exceeded. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "invalid_cve_id_format",
      -  "cve_not_found",
      -  "rate_limited"
      -]New value: +[
      +  "nvd_invalid_response",
      +  "nvd_request_blocked",
      +  "invalid_cve_id_format",
      +  "cve_not_found",
      +  "rate_limited"
      +]
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Explains when the requested ID count was clamped.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / requested / description
      Previous value: -"Number of CVE IDs requested."New value: +"Number of CVE IDs processed in this call."
    • addedOutput schema / properties / requestedLimit
      Added value: +{
      +  "description": "Requested page size or ID count before clamping.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / unprocessedIds
      Added value: +{
      +  "description": "IDs beyond the processed prefix, deduplicated in request order and excluding IDs already attempted.",
      +  "items": {
      +    "description": "Normalized CVE ID not attempted.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  2. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare read-only and idempotent, and the description adds value beyond them: the 100-ID cap per call, the excess-ID behavior interaction, and the size/context-budget risk of full records. That is exactly the operational context annotations cannot express.

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?

Three sentences, each loading-bearing: what it does, what it returns, and the guardrail for large batches. The most actionable constraint is front-loaded at the end where an agent scanning for cost limits will find it.

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

Completeness5/5

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

An output schema exists, so return values needn't be explained, yet the description still summarizes the payload shape (CVSS across versions, CWE, CPE, KEV, SSVC, references). Combined with the batch cap and size warning, an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description still adds the payoff of `brief` (trimmed vs full records) tied to a batch-size threshold, which is a usage heuristic beyond the schema's field text. It does not mention allLanguages/includeReferences/includeConfigurations, though those are well documented in the schema.

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?

States a specific verb and resource ('Fetch one or more CVEs by ID from the NIST National Vulnerability Database') and the ID-keyed retrieval makes it distinguishable from the sibling nvd_search_cves without opening either schema. It also enumerates the record contents returned, so the agent knows exactly what a call yields.

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

Usage Guidelines4/5

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

Gives a concrete when-to-change-behavior rule ('For bulk lookups of more than 10 IDs, use brief: true') with the reason (1MB, context budgets). It does not explicitly route to the alternative sibling (nvd_search_cves) when the agent lacks IDs, but the 'by ID' framing implies the boundary.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.