Skip to main content
Glama

cisa-cybersecurity-mcp-server

cisa_search_kev

cisa_search_kev
Read-onlyIdempotent

Search the CISA Known Exploited Vulnerabilities catalog across every entry in the cached snapshot. Filter by vendor or product using CISA's own labels, by name substring, by CWE, by the date an entry was added, by due date, by overdue status, by ransomware linkage, by the three-day forensic-triage tier, or by which binding operational directive the entry cites. Results are paged and sortable by due date or date added. Vendor and product values are CISA's free-text labels, not CPE names — call cisa_list_reference for the field vocabulary before guessing one. The catalog records additions but carries no per-record modified timestamp, so dateAddedFrom answers "what is new since D" while a revised due date on an existing entry is not detectable from the feed.

Input Schema

NameRequiredDescriptionDefault
cweNoExact CWE identifier, e.g. CWE-362. Case and surrounding whitespace are normalized. Entries with no CWEs never match.
limitNoMaximum entries per page.
orderNoSort direction.desc
cursorNoOpaque pagination cursor from a previous call. Omit for the first page.
sortByNoField to sort by.dateAdded
overdueNoTrue selects entries whose due date is strictly before the echoed asOf date.
productNoCase-insensitive substring of CISA's own product label.
dueAfterNoEarliest due date, inclusive, YYYY-MM-DD.
directiveNoWhich directive the entry cites. "none" selects the entries citing neither.
dueBeforeNoLatest due date, inclusive, YYYY-MM-DD.
ransomwareNoTrue selects entries CISA has linked to ransomware campaigns.
cveIdPrefixNoYear scope for the CVE ID, e.g. CVE-2026. Case and surrounding whitespace are normalized.
dateAddedToNoLatest date added, inclusive, YYYY-MM-DD.
nameContainsNoStrict token match over the vulnerability name and short description: every token must appear. Matching folds case and accents, spells letters such as ß, æ, ø, þ, and ł as ss, ae, o, th, and l, and keeps only the letters a-z and the digits 0-9; a word carrying any other letter or digit, such as one in another script, loses those characters and the response names it, and a value left with none of them is rejected. No fuzzy fallback.
dateAddedFromNoEarliest date added, inclusive, YYYY-MM-DD.
vendorProjectNoCase-insensitive substring of CISA's own vendor label.
forensicTriageNoTrue selects the BOD 26-04 three-day forensic-triage tier.

Output Schema

NameRequiredDescriptionDefault
capNoThe page limit that was applied.
asOfNoThe UTC date overdue and daysUntilDue were computed against, YYYY-MM-DD.
errorNoPresent when the call failed. Absent on success.
shownNoEntries returned on this page.
cursorNoOpaque cursor for the next page. Absent when this is the last page.
noticeNoGuidance when nothing matched, when a page was capped, or when nameContains dropped characters it cannot match.
catalogNoWhich catalog snapshot answered this call.
hasMoreNoWhether more matches exist beyond this page.
resultsNoMatching KEV entries for this page.
truncatedNoTrue when the page limit capped this result.
totalCountNoTotal matches before paging.
appliedFiltersNoThe filters the server actually applied, as it parsed them.
snapshotCaveatNoDisclosure that additions are queryable but revisions are not detectable.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • addedInput schema / properties / dateAddedFrom / format
      Added value: +"date"
    • changedInput schema / properties / dateAddedFrom / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • addedInput schema / properties / dateAddedTo / format
      Added value: +"date"
    • changedInput schema / properties / dateAddedTo / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • addedInput schema / properties / dueAfter / format
      Added value: +"date"
    • changedInput schema / properties / dueAfter / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
    • addedInput schema / properties / dueBefore / format
      Added value: +"date"
    • changedInput schema / properties / dueBefore / pattern
      Previous value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
  2. Changed2 schema fields changed
    • changedInput schema / properties / nameContains / description
      Previous value: -"Strict token match over the vulnerability name and short description: every token must appear. Matching folds case and accents and keeps only the letters a-z and the digits 0-9; a word carrying any other letter or digit, such as one in another script, loses those characters and the response names it, and a value left with none of them is rejected. No fuzzy fallback."New value: +"Strict token match over the vulnerability name and short description: every token must appear. Matching folds case and accents, spells letters such as ß, æ, ø, þ, and ł as ss, ae, o, th, and l, and keeps only the letters a-z and the digits 0-9; a word carrying any other letter or digit, such as one in another script, loses those characters and the response names it, and a value left with none of them is rejected. No fuzzy fallback."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `catalog_unavailable`: No KEV catalog snapshot is held and the fetch from cisa.gov failed. `invalid_date_range`: A From bound is later than its matching To bound. `empty_search_text`: nameContains holds no letter a-z or digit 0-9 once case and accents are folded and punctuation is removed, so there is nothing to search for. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `catalog_unavailable`: No KEV catalog snapshot is held and the fetch from cisa.gov failed. `invalid_date_range`: A From bound is later than its matching To bound. `empty_search_text`: nameContains holds no letter a-z or digit 0-9 once case, accents, and letters such as ß and ø are folded and punctuation is removed, so there is nothing to search for. Other values are possible when a failure originates below the handler."
  3. Changed20 schema fields changed
    • changedInput schema / properties / cveIdPrefix / description
      Previous value: -"Year scope for the CVE ID, e.g. CVE-2026."New value: +"Year scope for the CVE ID, e.g. CVE-2026. Case and surrounding whitespace are normalized."
    • changedInput schema / properties / cwe / description
      Previous value: -"Exact CWE identifier, e.g. CWE-362. Excludes the 175 entries with no CWEs."New value: +"Exact CWE identifier, e.g. CWE-362. Case and surrounding whitespace are normalized. Entries with no CWEs never match."
    • changedInput schema / properties / directive / description
      Previous value: -"Which directive the entry cites. \"none\" selects the 1,277 entries citing neither."New value: +"Which directive the entry cites. \"none\" selects the entries citing neither."
    • changedInput schema / properties / forensicTriage / description
      Previous value: -"True selects the BOD 26-04 three-day forensic-triage tier (58 entries)."New value: +"True selects the BOD 26-04 three-day forensic-triage tier."
    • changedInput schema / properties / nameContains / description
      Previous value: -"Strict token match over the vulnerability name and short description: every token must appear. No fuzzy fallback."New value: +"Strict token match over the vulnerability name and short description: every token must appear. Matching folds case and accents and keeps only the letters a-z and the digits 0-9; a word carrying any other letter or digit, such as one in another script, loses those characters and the response names it, and a value left with none of them is rejected. No fuzzy fallback."
    • changedInput schema / properties / product / description
      Previous value: -"Case-insensitive substring of CISA's own product label. 694 distinct values."New value: +"Case-insensitive substring of CISA's own product label."
    • changedInput schema / properties / ransomware / description
      Previous value: -"True selects entries CISA has linked to ransomware campaigns (360 entries)."New value: +"True selects entries CISA has linked to ransomware campaigns."
    • changedInput schema / properties / vendorProject / description
      Previous value: -"Case-insensitive substring of CISA's own vendor label. 283 distinct values."New value: +"Case-insensitive substring of CISA's own vendor label."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `catalog_unavailable`: No KEV catalog snapshot is held and the fetch from cisa.gov failed. `invalid_date_range`: A From bound is later than its matching To bound. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `catalog_unavailable`: No KEV catalog snapshot is held and the fetch from cisa.gov failed. `invalid_date_range`: A From bound is later than its matching To bound. `empty_search_text`: nameContains holds no letter a-z or digit 0-9 once case and accents are folded and punctuation is removed, so there is nothing to search for. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "catalog_unavailable",
      -  "invalid_date_range"
      -]New value: +[
      +  "catalog_unavailable",
      +  "invalid_date_range",
      +  "empty_search_text"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when nothing matched."New value: +"Guidance when nothing matched, when a page was capped, or when nameContains dropped characters it cannot match."
    • changedOutput schema / properties / results / items / description
      Previous value: -"One KEV catalog entry, or a not-in-KEV result carrying only cveId and inKev."New value: +"One KEV catalog entry, or a not-in-KEV result carrying only cveId and inKev. Under cisa_check_cve_status detail \"summary\" an entry carries only cveId, inKev, the dates and deadline status, directive, vendor and product labels, and the ransomware and forensic-triage flags."
    • changedOutput schema / properties / results / items / properties / cwes / description
      Previous value: -"Associated CWEs. Empty on 175 entries, so a CWE filter excludes those."New value: +"Associated CWEs. Empty on some entries, and a CWE filter excludes those. Absent under detail \"summary\"."
    • changedOutput schema / properties / results / items / properties / directive / description
      Previous value: -"The binding operational directive the entry cites, or null when it cites neither — 1,277 of 1,716 entries name none, and none is never inferred from age."New value: +"The binding operational directive the entry cites, or null when it cites neither — most entries name none, and none is never inferred from age."
    • changedOutput schema / properties / results / items / properties / kevUrl / description
      Previous value: -"Absolute URL of the KEV catalog page for this CVE."New value: +"Absolute URL of the KEV catalog page for this CVE. Absent under detail \"summary\"."
    • changedOutput schema / properties / results / items / properties / notesCommentary / description
      Previous value: -"Free prose from the notes field, present when the entry opens with prose."New value: +"The prose segments of the notes field, verbatim with any URLs they contain; present when the notes carry prose. Absent under detail \"summary\"."
    • changedOutput schema / properties / results / items / properties / references / description
      Previous value: -"Reference URLs parsed from the notes field, each classified by kind."New value: +"Every reference URL in the notes field, in notes order, each classified by kind. Absent under detail \"summary\"."
    • changedOutput schema / properties / results / items / properties / requiredAction / description
      Previous value: -"CISA's required-action text for the entry, verbatim."New value: +"CISA's required-action text for the entry, verbatim. Absent under detail \"summary\"."
    • changedOutput schema / properties / results / items / properties / shortDescription / description
      Previous value: -"CISA's one-paragraph description."New value: +"CISA's one-paragraph description. Absent under detail \"summary\"."
    • changedOutput schema / properties / results / items / properties / vulnerabilityName / description
      Previous value: -"CISA's short name for the vulnerability."New value: +"CISA's short name for the vulnerability. Absent under detail \"summary\"."
  4. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint/idempotentHint annotations: it discloses that the data is a cached snapshot, that results are paged and sortable, that vendor/product are CISA free-text labels rather than CPE names, and a genuine data-model limitation (no per-record modified timestamp, so revised due dates are undetectable). That last point is exactly the kind of caveat an agent cannot infer elsewhere.

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?

Front-loaded with verb and resource, then filters, then paging/sorting, then the two caveats. The long filter enumeration is dense but every clause maps to a real capability, and no sentence is filler.

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?

With an output schema present, return-value documentation is unnecessary, and the description covers what matters for correct invocation: scope, filter inventory, pagination, sort keys, label vocabulary warning, and the temporal caveat. Nothing an agent needs to call this correctly is missing.

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 description coverage is 100%, so 3 is the baseline, but the description adds interpretive meaning the schema does not: the vendor/product label-vs-CPE distinction, the paging/sorting behavior, and the semantic asymmetry between the added-date and due-date filters. It does not restate the enum values or patterns, which 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?

States a specific verb and resource ('Search the CISA Known Exploited Vulnerabilities catalog') and immediately scopes it ('across every entry in the cached snapshot'), then enumerates the filterable dimensions. This is clearly distinguishable from sibling reads like cisa_get_advisory or cisa_check_cve_status without opening a schema.

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 an explicit prerequisite-style routing instruction: call cisa_list_reference for the field vocabulary before guessing vendor/product values. It also clarifies which date filter answers which question (dateAddedFrom = 'what is new since D'). It does not, however, state when to prefer this tool over siblings like cisa_check_cve_status, so it stops short of full when/when-not coverage.

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.