Skip to main content
Glama

vulnerability_history

Read-onlyIdempotent

Get the timeline of events for a specific CVE.

What this tool does

Returns the dated events known to SecDB for a CVE, most recent first:

  • published: publication of the CVE

  • nvd: NVD changes (CVSS, CPE, CWE, references, description)

  • advisory: security advisories that mention the CVE

  • nasl: NASL detection plugins that cover the CVE

  • cisa-kev, eu-kev: addition to a Known Exploited Vulnerabilities catalog

  • poc: public proof-of-concept repositories on GitHub

  • exploitdb: Exploit-DB entries

  • alias: public disclosure under a known name

Every event carries the date of the event itself, not the date it reached SecDB. Sources without a date are not included. EPSS changes are not included: use epss_timeseries.

When to use this tool

Use this tool when the user asks:

  • "What changed on CVE-XYZ since last week?"

  • "When was this CVE added to KEV?"

  • "When did the first PoC or detection plugin appear?"

For the current state of a CVE, use vulnerability_info.

Inputs

  • cve_id: valid CVE identifier (CVE-YYYY-NNNNN).

  • types: only return these event types (default: all).

  • since: only return events from this date, included (YYYY-MM-DD).

Outputs

  • cve_id: CVE identifier.

  • returned: number of events returned.

  • counts: number of events for each type. It follows since but not types, so it also shows what types left out.

  • events: each with type, timestamp, and change. The fields of change depend on the type:

    • published: none

    • nvd: source, event, action, type, old, new

    • advisory: advisory_type, advisory_id, advisory_severity, advisory_title

    • nasl: plugin_id, plugin_vendor, plugin_name

    • cisa-kev: vulnerability_name, due_date

    • eu-kev: vulnerability_name, patched_since

    • poc: name, description, url

    • exploitdb: id, description, file

    • alias: alias

LLM usage guidelines

  • The response is not paginated and can be very large for well-known CVEs, mostly because of poc and nasl events: use types and since to request only what you need.

  • An event dated before since can still be new to SecDB: do not use this tool to prove that nothing changed.

  • Do not guess dates or events: use what the tool returns.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "cve_id": "<cve_id>"
    },
    "name": "vulnerability_history"
  }
}

Input Schema

NameRequiredDescriptionDefault
sinceNoOnly events from this date, included (YYYY-MM-DD)
typesNoEvent types to return (default: all)
cve_idYesCVE identification (CVE-YYYY-NNNNN)

Output Schema

NameRequiredDescriptionDefault
countsYesEvents for each type
cve_idYesCVE identification
eventsYesEvents, most recent first
returnedYesEvents returned

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / properties / returned
      Added value: +{
      +  "description": "Events returned",
      +  "type": "integer"
      +}
    • removedOutput schema / properties / total
      Removed value: -{
      -  "description": "Events returned",
      -  "type": "integer"
      -}
    • changedOutput schema / required
      Previous value: -[
      -  "cve_id",
      -  "total",
      -  "counts",
      -  "events"
      -]New value: +[
      +  "cve_id",
      +  "returned",
      +  "counts",
      +  "events"
      +]
  2. Changed2 schema fields changed
    • changedInput schema / properties / types / items / enum
      Previous value: -[
      -  "published",
      -  "nvd",
      -  "advisory",
      -  "nasl",
      -  "cisa-kev",
      -  "eu-kev",
      -  "poc",
      -  "alias"
      -]New value: +[
      +  "published",
      +  "nvd",
      +  "advisory",
      +  "nasl",
      +  "cisa-kev",
      +  "eu-kev",
      +  "poc",
      +  "exploitdb",
      +  "alias"
      +]
    • changedOutput schema / properties / events / items / properties / type / enum
      Previous value: -[
      -  "published",
      -  "nvd",
      -  "advisory",
      -  "nasl",
      -  "cisa-kev",
      -  "eu-kev",
      -  "poc",
      -  "alias"
      -]New value: +[
      +  "published",
      +  "nvd",
      +  "advisory",
      +  "nasl",
      +  "cisa-kev",
      +  "eu-kev",
      +  "poc",
      +  "exploitdb",
      +  "alias"
      +]
  3. Added

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, it discloses that responses are unpaginated and can be very large for well-known CVEs, that `counts` reflects `since` but ignores `types`, and that an event dated before `since` can still be newly ingested. It also documents the event-dating convention (event date, not SecDB ingestion date) and that undated sources are dropped.

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

Conciseness3/5

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

Well front-loaded and sectioned, with the key constraint (unpaginated, can be very large) surfaced in the usage notes. However, the long 'Outputs' section restates what an output schema already provides, and the 'Inputs' section largely repeats the schema descriptions, so a meaningful share of the text does not earn its place.

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?

Given a read-only timeline tool with three parameters and an output schema, the description covers everything an agent needs: what is included and excluded, sizing risk, filter interaction quirks, and the caveat about interpreting 'no recent events'. Nothing material is missing.

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% and the schema already carries patterns, defaults, and the enum, so the description mostly restates it. The event-type glossary does add meaning to each `types` enum value that the raw enum names do not convey, but the per-parameter notes ('only return these event types', 'from this date, included') duplicate the schema text.

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 ('timeline of events for a specific CVE') and immediately enumerates the event categories returned, so an agent knows exactly what it gets. It explicitly distinguishes itself from `epss_timeseries` (EPSS excluded) and `vulnerability_info` (current state vs. history).

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

Usage Guidelines5/5

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

Provides literal example user questions that should route here ('When was this CVE added to KEV?'), plus an explicit alternative for the adjacent need ('For the current state of a CVE, use vulnerability_info'). It also gives anti-usage guidance: do not use it to prove nothing changed, and do not guess dates.

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.

Resources