Skip to main content
Glama

cisa-cybersecurity-mcp-server

cisa_get_advisory

cisa_get_advisory
Read-onlyIdempotent

Read one CISA industrial control system advisory in full: affected products flattened from the CSAF product tree into vendor, product, and version ranges; per-CVE CVSS score, vector, and CWE; remediations with their category and vendor instructions; critical-infrastructure sectors; and the revision history. Large advisories return a section outline instead of the whole document, listing each section's size and the CVE IDs the vulnerabilities section holds — re-call with the sections you need, or with cves to read only those vulnerability entries. Republished vendor advisories carry the originating vendor's text; every response reports the source URL and attribution. Find advisory IDs with cisa_search_ics_advisories.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
cvesNoNarrow the vulnerabilities section to these CVE IDs; the outline lists the ones the advisory holds. Alone, it selects the vulnerabilities section; with sections, that list must include "vulnerabilities".
sectionsNoSections to return. Omit for the whole document, or for its outline when the document overflows the inline budget.
advisoryIdYesAdvisory identifier, e.g. ICSA-26-260-07 or ICSMA-26-253-02, with an optional revision suffix: a single letter A-F or a numeric -N. Case, surrounding whitespace, and a trailing .json are normalized.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
kindNofull when the document is returned; outline when only the section listing is.
errorNoPresent when the call failed. Absent on success.
foundNoWhether an advisory with that ID is in the index.
summaryNoNarrative notes and sector classification.
advisoryNoAdvisory identity, dates, and attribution. Always kept, including on a section selection.
guidanceNoWhat to do instead, present when found is false: how current the index is, and whether the advisory may be newer than it.
productsNoAffected products and version ranges.
sectionsNoOutline arm — the sections available, largest first, with their byte sizes and, for vulnerabilities, its CVE IDs.
referencesNoDocument-level references.
outlineNoticeNoOutline arm — how to call cisa_get_advisory for specific sections.
acknowledgmentsNoAcknowledgment entries.
indexCheckpointNoPresent when found is false: the newest revision timestamp the index holds, or null if none.
revisionHistoryNoRevision history, oldest first as published.
vulnerabilitiesNoVulnerabilities the advisory covers, with scores, remediations, and product status.
indexLastSyncedAtNoPresent when found is false: when the index last completed a sync, ISO 8601, or null if never.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `mirror_not_ready`: The advisory index has never completed a full sync. `unknown_section`: A requested section is one this advisory does not carry. `cves_need_vulnerabilities_section`: cves is set but sections does not include \"vulnerabilities\", so there is nothing for cves to narrow. `unknown_cve`: A cves entry names a CVE this advisory does not cover. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mirror_not_ready`: The advisory index has never completed a full sync. `mirror_unavailable`: The advisory index store cannot be opened: its location is not writable, is read-only, runs through a missing directory or a file, or holds a file that is not a SQLite database. `unknown_section`: A requested section is one this advisory does not carry. `cves_need_vulnerabilities_section`: cves is set but sections does not include \"vulnerabilities\", so there is nothing for cves to narrow. `unknown_cve`: A cves entry names a CVE this advisory does not cover. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "mirror_not_ready",
      -  "unknown_section",
      -  "cves_need_vulnerabilities_section",
      -  "unknown_cve"
      -]New value: +[
      +  "mirror_not_ready",
      +  "mirror_unavailable",
      +  "unknown_section",
      +  "cves_need_vulnerabilities_section",
      +  "unknown_cve"
      +]
    • changedOutput schema / properties / guidance / description
      Previous value: -"What to do instead, present when found is false."New value: +"What to do instead, present when found is false: how current the index is, and whether the advisory may be newer than it."
    • addedOutput schema / properties / indexCheckpoint
      Added value: +{
      +  "description": "Present when found is false: the newest revision timestamp the index holds, or null if none.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / indexLastSyncedAt
      Added value: +{
      +  "description": "Present when found is false: when the index last completed a sync, ISO 8601, or null if never.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  2. Changed3 schema fields changed
    • changedInput schema / properties / advisoryId / description
      Previous value: -"Advisory identifier, e.g. ICSA-26-260-07 or ICSMA-26-253-02. Case-insensitive; an optional revision suffix is a single letter a-f or a numeric -N. A trailing .json is stripped."New value: +"Advisory identifier, e.g. ICSA-26-260-07 or ICSMA-26-253-02, with an optional revision suffix: a single letter A-F or a numeric -N. Case, surrounding whitespace, and a trailing .json are normalized."
    • changedInput schema / properties / advisoryId / pattern
      Previous value: -"^\\s*ICS(A|MA)-\\d{2}-\\d{3}-\\d{2}(?:[a-z]|-\\d+)?(?:\\.json)?\\s*$"New value: +"^ICS(A|MA)-\\d{2}-\\d{3}-\\d{2}(?:[A-Z]|-\\d+)?$"
    • changedOutput schema / properties / advisory / properties / advisoryId / pattern
      Previous value: -"^ICS(A|MA)-\\d{2}-\\d{3}-\\d{2}(?:[a-z]|-\\d+)?$"New value: +"^ICS(A|MA)-\\d{2}-\\d{3}-\\d{2}(?:[A-Z]|-\\d+)?$"
  3. Changed7 schema fields changed
    • addedInput schema / properties / cves
      Added value: +{
      +  "description": "Narrow the vulnerabilities section to these CVE IDs; the outline lists the ones the advisory holds. Alone, it selects the vulnerabilities section; with sections, that list must include \"vulnerabilities\".",
      +  "items": {
      +    "description": "One CVE identifier the advisory covers, e.g. CVE-2023-3935. Case and surrounding whitespace are normalized.",
      +    "pattern": "^CVE-[0-9]{4}-[0-9]{4,19}$",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `mirror_not_ready`: The advisory index has never completed a full sync. `unknown_section`: A requested section is one this advisory does not carry. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mirror_not_ready`: The advisory index has never completed a full sync. `unknown_section`: A requested section is one this advisory does not carry. `cves_need_vulnerabilities_section`: cves is set but sections does not include \"vulnerabilities\", so there is nothing for cves to narrow. `unknown_cve`: A cves entry names a CVE this advisory does not cover. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "mirror_not_ready",
      -  "unknown_section"
      -]New value: +[
      +  "mirror_not_ready",
      +  "unknown_section",
      +  "cves_need_vulnerabilities_section",
      +  "unknown_cve"
      +]
    • changedOutput schema / properties / products / properties / shownProducts / description
      Previous value: -"Flattened version rows actually returned."New value: +"Flattened version rows returned — equal to productCount except on a truncated copy."
    • changedOutput schema / properties / products / properties / truncated / description
      Previous value: -"True when the flattened version rows were capped."New value: +"True only on a copy stored by an older index build that capped product rows; the index re-ingests on its next start and then returns every row. Absent otherwise."
    • changedOutput schema / properties / sections / description
      Previous value: -"Outline arm — the sections available, largest first, with their byte sizes."New value: +"Outline arm — the sections available, largest first, with their byte sizes and, for vulnerabilities, its CVE IDs."
    • addedOutput schema / properties / sections / items / properties / cves
      Added value: +{
      +  "description": "On the vulnerabilities section only: the CVE IDs it holds, in document order. Pass any of them in cves to cisa_get_advisory to read just those entries.",
      +  "items": {
      +    "description": "One CVE identifier.",
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
  4. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already mark it read-only and idempotent, and the description adds critical non-obvious behavior: large advisories return a section outline instead of the full document, re-calls with sections or cves are supported, republished vendor advisories retain the vendor text, and every response includes source URL and attribution. This goes well beyond the structured annotations.

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 dense but each sentence earns its place: main purpose and contents, large-advisory behavior, vendor-attribution note, and sibling routing. It is front-loaded with the core action and uses the remaining sentences for behavioral specifics without redundancy.

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?

The description covers the tool's key behavioral edge cases, parameter-driven section selection, output expectations around source URL and attribution, and how to find advisory IDs. With an output schema present and read-only/idempotent annotations, no critical operational information 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 the baseline is 3, but the tool description adds meaning by explaining how sections and cves interact with the outline behavior and how to re-call selectively. It clarifies that cves selects the vulnerabilities section and that large documents require targeted section requests.

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 opens with a specific verb and resource: 'Read one CISA industrial control system advisory in full.' It enumerates the exact contents (affected products, CVSS data, remediations, sectors, revision history), which clearly distinguishes it from the sibling search and status tools. The mention of cisa_search_ics_advisories for finding IDs further differentiates its role.

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?

The description makes the primary use case explicit: retrieve a full advisory when you have an advisory ID, with an explicit pointer to cisa_search_ics_advisories for discovering IDs. It does not enumerate when not to use this tool relative to every sibling, but the context is clear and no exclusion is needed for the main alternative.

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.