Skip to main content
Glama

EchelonGraph CVE & Exposure

Recent CISA KEV additions

kev_recent
Read-onlyIdempotent

The CVEs CISA has added to its Known Exploited Vulnerabilities (KEV) catalog, newest first, from EchelonGraph's copy of that catalog, which polls CISA's feed every 5 minutes. Each kev row gives cve_id, kev_added_date (CISA's dateAdded), kev_due_date, kev_vendor, kev_product, kev_vuln_name and kev_ransomware (known ransomware-campaign use), EchelonGraph's severity, cvss_v3_score, epss_score, epss_percentile and eg_kev_tier for the CVE, and our_first_seen_kev, when EchelonGraph's poller first recorded the CVE entering the catalog (null where no such record exists). Filter by since and until (YYYY-MM-DD, inclusive, on kev_added_date), ransomware, and vendor (an exact, case-insensitive match on kev_vendor); page with limit (1 to 200, default 50) and cursor, passing back the previous page's next_cursor with the same filters. total counts the CVEs matching the filters; kev_listed_total counts every CVE EchelonGraph holds as KEV-listed, and catalog.catalog_count is CISA's own count in the catalog last fetched, so a gap between the two is entries not yet in EchelonGraph's CVE table, which no page returns. CISA's requiredAction, shortDescription and notes are not in these rows: each CVE's own record carries them, verbatim and labelled as CISA's. Its structured result's measured_at is our last successful fetch of CISA's feed (null when the API does not say), coverage counts the CISA KEV catalog (total, returned, kev_listed_total, catalog_count, limit, has_more) and freshness gives last_successful_fetch_at, catalog_version and date_released. Past 30,000 characters of JSON, the first text block holds data cut to fit, and the note says what the cut leaves out and where to read it (TEXT CUT); so is structured data (DATA CUT), unless full: true. Cut, each row keeps cve_id, kev_added_date, kev_vendor and kev_ransomware at least, or rows are left out, and next_cursor still continues after the page's last row, not the text's.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "kev_recent"
  }
}

Input Schema

NameRequiredDescriptionDefault
fullNotrue: data in the structured result is the answer whole, however long. Without it, a structured result past 30,000 characters of JSON has its data cut (DATA CUT): in an order the note states, the entries of its longest lists keep only some of their fields, and then the lists only some of their entries; data_truncated is true, and truncated gives each list cut with its total, the number returned and whether its entries are thinned. Whole data is for a program; a client that sizes structured results, as Claude Code does against MAX_MCP_OUTPUT_TOKENS, can refuse an answer past its cap.
limitNopage size (default 50, max 200)
sinceNoearliest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it, with the time and offset dropped; anything else is refused)
untilNolatest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it, with the time and offset dropped; anything else is refused)
cursorNonext_cursor from the previous page
vendorNoCISA vendorProject, an exact case-insensitive match, e.g. 'Microsoft'
ransomwareNotrue: only CVEs with known ransomware-campaign use; false: only those without

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {},
      -            "properties": {
      -              "catalog": {
      -                "anyOf": [
      -                  {
      -                    "const": "CISA KEV catalog",
      -                    "type": "string"
      -                  },
      -                  {
      -                    "type": "string"
      -                  }
      -                ]
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What the answer covers; null where the answer says nothing about it."
      -      },
      -      "data": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "catalog": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {
      -                  "catalog_count": {
      -                    "type": [
      -                      "number",
      -                      "null"
      -                    ]
      -                  },
      -                  "catalog_version": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "date_released": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "feed_url": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "last_successful_fetch_at": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "source": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "count": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "filters": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {},
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "generated_at": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "kev": {
      -            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "cve_id": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "cvss_v3_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "eg_kev_tier": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_percentile": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "kev_added_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_due_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_product": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_ransomware": {
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vendor": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vuln_name": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "our_first_seen_kev": {
      -                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "severity": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "kev_listed_total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "limit": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "method": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "next_cursor": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "notes": {
      -            "anyOf": [
      -              {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "order": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "data_truncated": {
      -        "description": "false: data is the answer whole. true: the structured result would pass 30,000 characters of JSON with data whole, so data is cut (DATA CUT): the entries of some of its lists keep only some of their fields, or the lists only some of their entries, truncated gives each, and no string is shortened. The same call with full: true returns data whole.",
      -        "type": "boolean"
      -      },
      -      "freshness": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": {},
      -            "properties": {
      -              "catalog_version": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "date_released": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "last_successful_fetch_at": {
      -                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "last_successful_fetch_at",
      -              "catalog_version",
      -              "date_released"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      -      },
      -      "measured_at": {
      -        "anyOf": [
      -          {
      -            "description": "An RFC 3339 instant.",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      -      },
      -      "method": {
      -        "description": "How the numbers were produced.",
      -        "type": "string"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      -        "enum": [
      -          "measured",
      -          "not_assessed"
      -        ],
      -        "type": "string"
      -      },
      -      "truncated": {
      -        "additionalProperties": {
      -          "additionalProperties": {},
      -          "properties": {
      -            "returned": {
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "thinned": {
      -              "const": true,
      -              "type": "boolean"
      -            },
      -            "total": {
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            }
      -          },
      -          "required": [
      -            "total",
      -            "returned"
      -          ],
      -          "type": "object"
      -        },
      -        "description": "Present when data_truncated is true: each list of data that was cut, by its path in data (a dot between the names of an object and a list inside it), with total, its entries in the answer, returned, the entries data holds, and thinned, true when each of them keeps only some of its fields.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "data_truncated",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "kind": {
      -            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      -            "enum": [
      -              "network",
      -              "timeout",
      -              "http",
      -              "not_json",
      -              "not_object",
      -              "invalid_input",
      -              "internal",
      -              "unexpected_shape",
      -              "radars"
      -            ],
      -            "type": "string"
      -          },
      -          "message": {
      -            "description": "The cause: the API's own message, or what went wrong.",
      -            "type": "string"
      -          },
      -          "path": {
      -            "description": "The API path requested, when a request was made.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "anyOf": [
      -              {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The HTTP status, when the API answered one."
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "path",
      -          "status",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "freshness": {
      -        "type": "null"
      -      },
      -      "measured_at": {
      -        "type": "null"
      -      },
      -      "method": {
      -        "type": "null"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      -        "enum": [
      -          "failed",
      -          "invalid_input"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "catalog": {
      +                "anyOf": [
      +                  {
      +                    "const": "CISA KEV catalog",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What the answer covers; null where the answer says nothing about it."
      +      },
      +      "data": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "catalog": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "catalog_count": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "catalog_version": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "date_released": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "feed_url": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "last_successful_fetch_at": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "source": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "count": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "filters": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {},
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "generated_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "kev": {
      +            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "cve_id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "cvss_v3_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "eg_kev_tier": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_percentile": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "kev_added_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_due_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_product": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_ransomware": {
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vendor": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vuln_name": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "our_first_seen_kev": {
      +                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "severity": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "kev_listed_total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "limit": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "method": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "next_cursor": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "notes": {
      +            "anyOf": [
      +              {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "order": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "data_truncated": {
      +        "description": "false: data is the answer whole. true: the structured result would pass 30,000 characters of JSON with data whole, so data is cut (DATA CUT): the entries of some of its lists keep only some of their fields, or the lists only some of their entries, truncated gives each, and no string is shortened. The same call with full: true returns data whole.",
      +        "type": "boolean"
      +      },
      +      "freshness": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "catalog_version": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "date_released": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "last_successful_fetch_at": {
      +                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "last_successful_fetch_at",
      +              "catalog_version",
      +              "date_released"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      +      },
      +      "measured_at": {
      +        "anyOf": [
      +          {
      +            "description": "An RFC 3339 instant.",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      +      },
      +      "method": {
      +        "description": "How the numbers were produced.",
      +        "type": "string"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      +        "enum": [
      +          "measured",
      +          "not_assessed"
      +        ],
      +        "type": "string"
      +      },
      +      "truncated": {
      +        "additionalProperties": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "returned": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "thinned": {
      +              "const": true,
      +              "type": "boolean"
      +            },
      +            "total": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "total",
      +            "returned"
      +          ],
      +          "type": "object"
      +        },
      +        "description": "Present when data_truncated is true: each list of data that was cut, by its path in data (a dot between the names of an object and a list inside it), with total, its entries in the answer, returned, the entries data holds, and thinned, true when each of them keeps only some of its fields.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "data_truncated",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "kind": {
      +            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      +            "enum": [
      +              "network",
      +              "timeout",
      +              "http",
      +              "not_json",
      +              "not_object",
      +              "invalid_input",
      +              "internal",
      +              "unexpected_shape",
      +              "radars"
      +            ],
      +            "type": "string"
      +          },
      +          "message": {
      +            "description": "The cause: the API's own message, or what went wrong.",
      +            "type": "string"
      +          },
      +          "path": {
      +            "description": "The API path requested, when a request was made.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The HTTP status, when the API answered one; 503 with kind internal and path null where this server was too busy to make the call."
      +          }
      +        },
      +        "required": [
      +          "kind",
      +          "path",
      +          "status",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "freshness": {
      +        "type": "null"
      +      },
      +      "measured_at": {
      +        "type": "null"
      +      },
      +      "method": {
      +        "type": "null"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      +        "enum": [
      +          "failed",
      +          "invalid_input"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What the answer covers; null where the answer says nothing about it."
      -      },
      -      "data": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "catalog": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {
      -                  "catalog_count": {
      -                    "type": [
      -                      "number",
      -                      "null"
      -                    ]
      -                  },
      -                  "catalog_version": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "date_released": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "feed_url": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "last_successful_fetch_at": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "source": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "count": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "filters": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {},
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "generated_at": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "kev": {
      -            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "cve_id": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "cvss_v3_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "eg_kev_tier": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_percentile": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "kev_added_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_due_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_product": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_ransomware": {
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vendor": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vuln_name": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "our_first_seen_kev": {
      -                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "severity": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "kev_listed_total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "limit": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "method": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "next_cursor": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "notes": {
      -            "anyOf": [
      -              {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "order": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "data_truncated": {
      -        "description": "false: data is the answer whole. true: the structured result would pass 30,000 characters of JSON with data whole, so data is cut (DATA CUT): the entries of some of its lists keep only some of their fields, or the lists only some of their entries, truncated gives each, and no string is shortened. The same call with full: true returns data whole.",
      -        "type": "boolean"
      -      },
      -      "freshness": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog_version": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "date_released": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "last_successful_fetch_at": {
      -                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "last_successful_fetch_at",
      -              "catalog_version",
      -              "date_released"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      -      },
      -      "measured_at": {
      -        "anyOf": [
      -          {
      -            "description": "An RFC 3339 instant.",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      -      },
      -      "method": {
      -        "description": "How the numbers were produced.",
      -        "type": "string"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      -        "enum": [
      -          "measured",
      -          "not_assessed"
      -        ],
      -        "type": "string"
      -      },
      -      "truncated": {
      -        "additionalProperties": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "returned": {
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "thinned": {
      -              "const": true,
      -              "type": "boolean"
      -            },
      -            "total": {
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            }
      -          },
      -          "required": [
      -            "total",
      -            "returned"
      -          ],
      -          "type": "object"
      -        },
      -        "description": "Present when data_truncated is true: each list of data that was cut, by its path in data (a dot between the names of an object and a list inside it), with total, its entries in the answer, returned, the entries data holds, and thinned, true when each of them keeps only some of its fields.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "data_truncated",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "kind": {
      -            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      -            "enum": [
      -              "network",
      -              "timeout",
      -              "http",
      -              "not_json",
      -              "not_object",
      -              "invalid_input",
      -              "internal",
      -              "unexpected_shape",
      -              "radars"
      -            ],
      -            "type": "string"
      -          },
      -          "message": {
      -            "description": "The cause: the API's own message, or what went wrong.",
      -            "type": "string"
      -          },
      -          "path": {
      -            "description": "The API path requested, when a request was made.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "anyOf": [
      -              {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The HTTP status, when the API answered one."
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "path",
      -          "status",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "freshness": {
      -        "type": "null"
      -      },
      -      "measured_at": {
      -        "type": "null"
      -      },
      -      "method": {
      -        "type": "null"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      -        "enum": [
      -          "failed",
      -          "invalid_input"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "catalog": {
      +                "anyOf": [
      +                  {
      +                    "const": "CISA KEV catalog",
      +                    "type": "string"
      +                  },
      +                  {
      +                    "type": "string"
      +                  }
      +                ]
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What the answer covers; null where the answer says nothing about it."
      +      },
      +      "data": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "catalog": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "catalog_count": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "catalog_version": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "date_released": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "feed_url": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "last_successful_fetch_at": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "source": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "count": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "filters": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {},
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "generated_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "kev": {
      +            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "cve_id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "cvss_v3_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "eg_kev_tier": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_percentile": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "kev_added_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_due_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_product": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_ransomware": {
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vendor": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vuln_name": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "our_first_seen_kev": {
      +                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "severity": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "kev_listed_total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "limit": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "method": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "next_cursor": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "notes": {
      +            "anyOf": [
      +              {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "order": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "data_truncated": {
      +        "description": "false: data is the answer whole. true: the structured result would pass 30,000 characters of JSON with data whole, so data is cut (DATA CUT): the entries of some of its lists keep only some of their fields, or the lists only some of their entries, truncated gives each, and no string is shortened. The same call with full: true returns data whole.",
      +        "type": "boolean"
      +      },
      +      "freshness": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": {},
      +            "properties": {
      +              "catalog_version": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "date_released": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "last_successful_fetch_at": {
      +                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "last_successful_fetch_at",
      +              "catalog_version",
      +              "date_released"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      +      },
      +      "measured_at": {
      +        "anyOf": [
      +          {
      +            "description": "An RFC 3339 instant.",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      +      },
      +      "method": {
      +        "description": "How the numbers were produced.",
      +        "type": "string"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      +        "enum": [
      +          "measured",
      +          "not_assessed"
      +        ],
      +        "type": "string"
      +      },
      +      "truncated": {
      +        "additionalProperties": {
      +          "additionalProperties": {},
      +          "properties": {
      +            "returned": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "thinned": {
      +              "const": true,
      +              "type": "boolean"
      +            },
      +            "total": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "total",
      +            "returned"
      +          ],
      +          "type": "object"
      +        },
      +        "description": "Present when data_truncated is true: each list of data that was cut, by its path in data (a dot between the names of an object and a list inside it), with total, its entries in the answer, returned, the entries data holds, and thinned, true when each of them keeps only some of its fields.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "data_truncated",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "kind": {
      +            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      +            "enum": [
      +              "network",
      +              "timeout",
      +              "http",
      +              "not_json",
      +              "not_object",
      +              "invalid_input",
      +              "internal",
      +              "unexpected_shape",
      +              "radars"
      +            ],
      +            "type": "string"
      +          },
      +          "message": {
      +            "description": "The cause: the API's own message, or what went wrong.",
      +            "type": "string"
      +          },
      +          "path": {
      +            "description": "The API path requested, when a request was made.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The HTTP status, when the API answered one."
      +          }
      +        },
      +        "required": [
      +          "kind",
      +          "path",
      +          "status",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "freshness": {
      +        "type": "null"
      +      },
      +      "measured_at": {
      +        "type": "null"
      +      },
      +      "method": {
      +        "type": "null"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      +        "enum": [
      +          "failed",
      +          "invalid_input"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What the answer covers; null where the answer says nothing about it."
      -      },
      -      "data": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "catalog": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {
      -                  "catalog_count": {
      -                    "type": [
      -                      "number",
      -                      "null"
      -                    ]
      -                  },
      -                  "catalog_version": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "date_released": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "feed_url": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "last_successful_fetch_at": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "source": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "count": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "filters": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {},
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "generated_at": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "kev": {
      -            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "cve_id": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "cvss_v3_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "eg_kev_tier": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_percentile": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "kev_added_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_due_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_product": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_ransomware": {
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vendor": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vuln_name": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "our_first_seen_kev": {
      -                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "severity": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "kev_listed_total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "limit": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "method": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "next_cursor": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "notes": {
      -            "anyOf": [
      -              {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "order": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "data_truncated": {
      -        "description": "false: data is the answer whole. true: the structured result would pass 30,000 characters of JSON with data whole, so data is cut (DATA CUT): the entries of some of its lists keep only some of their fields, or the lists only some of their entries, truncated gives each, and no string is shortened. The same call with full: true returns data whole.",
      -        "type": "boolean"
      -      },
      -      "freshness": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog_version": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "date_released": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "last_successful_fetch_at": {
      -                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "last_successful_fetch_at",
      -              "catalog_version",
      -              "date_released"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      -      },
      -      "measured_at": {
      -        "anyOf": [
      -          {
      -            "description": "An RFC 3339 instant.",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      -      },
      -      "method": {
      -        "description": "How the numbers were produced.",
      -        "type": "string"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      -        "enum": [
      -          "measured",
      -          "not_assessed"
      -        ],
      -        "type": "string"
      -      },
      -      "truncated": {
      -        "additionalProperties": {
      -          "additionalProperties": false,
      -          "properties": {
      -            "returned": {
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            },
      -            "thinned": {
      -              "const": true,
      -              "type": "boolean"
      -            },
      -            "total": {
      -              "maximum": 9007199254740991,
      -              "minimum": 0,
      -              "type": "integer"
      -            }
      -          },
      -          "required": [
      -            "total",
      -            "returned"
      -          ],
      -          "type": "object"
      -        },
      -        "description": "Present when data_truncated is true: each list of data that was cut, by its path in data (a dot between the names of an object and a list inside it), with total, its entries in the answer, returned, the entries data holds, and thinned, true when each of them keeps only some of its fields.",
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "data_truncated",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "kind": {
      -            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      -            "enum": [
      -              "network",
      -              "timeout",
      -              "http",
      -              "not_json",
      -              "not_object",
      -              "invalid_input",
      -              "internal",
      -              "unexpected_shape",
      -              "radars"
      -            ],
      -            "type": "string"
      -          },
      -          "message": {
      -            "description": "The cause: the API's own message, or what went wrong.",
      -            "type": "string"
      -          },
      -          "path": {
      -            "description": "The API path requested, when a request was made.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "anyOf": [
      -              {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The HTTP status, when the API answered one."
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "path",
      -          "status",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "freshness": {
      -        "type": "null"
      -      },
      -      "measured_at": {
      -        "type": "null"
      -      },
      -      "method": {
      -        "type": "null"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      -        "enum": [
      -          "failed",
      -          "invalid_input"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": {},
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What the answer covers; null where the answer says nothing about it."
      +      },
      +      "data": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "catalog": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "catalog_count": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "catalog_version": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "date_released": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "feed_url": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "last_successful_fetch_at": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "source": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "count": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "filters": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {},
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "generated_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "kev": {
      +            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "cve_id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "cvss_v3_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "eg_kev_tier": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_percentile": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "kev_added_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_due_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_product": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_ransomware": {
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vendor": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vuln_name": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "our_first_seen_kev": {
      +                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "severity": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "kev_listed_total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "limit": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "method": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "next_cursor": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "notes": {
      +            "anyOf": [
      +              {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "order": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "data_truncated": {
      +        "description": "false: data is the answer whole. true: the structured result would pass 30,000 characters of JSON with data whole, so data is cut (DATA CUT): the entries of some of its lists keep only some of their fields, or the lists only some of their entries, truncated gives each, and no string is shortened. The same call with full: true returns data whole.",
      +        "type": "boolean"
      +      },
      +      "freshness": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog_version": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "date_released": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "last_successful_fetch_at": {
      +                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "last_successful_fetch_at",
      +              "catalog_version",
      +              "date_released"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      +      },
      +      "measured_at": {
      +        "anyOf": [
      +          {
      +            "description": "An RFC 3339 instant.",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      +      },
      +      "method": {
      +        "description": "How the numbers were produced.",
      +        "type": "string"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      +        "enum": [
      +          "measured",
      +          "not_assessed"
      +        ],
      +        "type": "string"
      +      },
      +      "truncated": {
      +        "additionalProperties": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "returned": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "thinned": {
      +              "const": true,
      +              "type": "boolean"
      +            },
      +            "total": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "total",
      +            "returned"
      +          ],
      +          "type": "object"
      +        },
      +        "description": "Present when data_truncated is true: each list of data that was cut, by its path in data (a dot between the names of an object and a list inside it), with total, its entries in the answer, returned, the entries data holds, and thinned, true when each of them keeps only some of its fields.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "data_truncated",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "kind": {
      +            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      +            "enum": [
      +              "network",
      +              "timeout",
      +              "http",
      +              "not_json",
      +              "not_object",
      +              "invalid_input",
      +              "internal",
      +              "unexpected_shape",
      +              "radars"
      +            ],
      +            "type": "string"
      +          },
      +          "message": {
      +            "description": "The cause: the API's own message, or what went wrong.",
      +            "type": "string"
      +          },
      +          "path": {
      +            "description": "The API path requested, when a request was made.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The HTTP status, when the API answered one."
      +          }
      +        },
      +        "required": [
      +          "kind",
      +          "path",
      +          "status",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "freshness": {
      +        "type": "null"
      +      },
      +      "measured_at": {
      +        "type": "null"
      +      },
      +      "method": {
      +        "type": "null"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      +        "enum": [
      +          "failed",
      +          "invalid_input"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed2 schema fields changed
    • addedInput schema / properties / full
      Added value: +{
      +  "description": "true: data in the structured result is the answer whole, however long. Without it, a structured result past 30,000 characters of JSON has its data cut (DATA CUT): in an order the note states, the entries of its longest lists keep only some of their fields, and then the lists only some of their entries; data_truncated is true, and truncated gives each list cut with its total, the number returned and whether its entries are thinned. Whole data is for a program; a client that sizes structured results, as Claude Code does against MAX_MCP_OUTPUT_TOKENS, can refuse an answer past its cap.",
      +  "type": "boolean"
      +}
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What the answer covers; null where the answer says nothing about it."
      -      },
      -      "data": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "catalog": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {
      -                  "catalog_count": {
      -                    "type": [
      -                      "number",
      -                      "null"
      -                    ]
      -                  },
      -                  "catalog_version": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "date_released": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "feed_url": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "last_successful_fetch_at": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "source": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "count": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "filters": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {},
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "generated_at": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "kev": {
      -            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "cve_id": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "cvss_v3_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "eg_kev_tier": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_percentile": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "kev_added_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_due_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_product": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_ransomware": {
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vendor": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vuln_name": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "our_first_seen_kev": {
      -                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "severity": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "kev_listed_total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "limit": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "method": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "next_cursor": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "notes": {
      -            "anyOf": [
      -              {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "order": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "freshness": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog_version": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "date_released": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "last_successful_fetch_at": {
      -                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "last_successful_fetch_at",
      -              "catalog_version",
      -              "date_released"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      -      },
      -      "measured_at": {
      -        "anyOf": [
      -          {
      -            "description": "An RFC 3339 instant.",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      -      },
      -      "method": {
      -        "description": "How the numbers were produced.",
      -        "type": "string"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      -        "enum": [
      -          "measured",
      -          "not_assessed"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "kind": {
      -            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      -            "enum": [
      -              "network",
      -              "timeout",
      -              "http",
      -              "not_json",
      -              "not_object",
      -              "invalid_input",
      -              "internal",
      -              "unexpected_shape",
      -              "radars"
      -            ],
      -            "type": "string"
      -          },
      -          "message": {
      -            "description": "The cause: the API's own message, or what went wrong.",
      -            "type": "string"
      -          },
      -          "path": {
      -            "description": "The API path requested, when a request was made.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "anyOf": [
      -              {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The HTTP status, when the API answered one."
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "path",
      -          "status",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "freshness": {
      -        "type": "null"
      -      },
      -      "measured_at": {
      -        "type": "null"
      -      },
      -      "method": {
      -        "type": "null"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      -        "enum": [
      -          "failed",
      -          "invalid_input"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What the answer covers; null where the answer says nothing about it."
      +      },
      +      "data": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "catalog": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "catalog_count": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "catalog_version": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "date_released": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "feed_url": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "last_successful_fetch_at": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "source": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "count": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "filters": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {},
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "generated_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "kev": {
      +            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "cve_id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "cvss_v3_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "eg_kev_tier": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_percentile": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "kev_added_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_due_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_product": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_ransomware": {
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vendor": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vuln_name": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "our_first_seen_kev": {
      +                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "severity": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "kev_listed_total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "limit": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "method": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "next_cursor": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "notes": {
      +            "anyOf": [
      +              {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "order": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "data_truncated": {
      +        "description": "false: data is the answer whole. true: the structured result would pass 30,000 characters of JSON with data whole, so data is cut (DATA CUT): the entries of some of its lists keep only some of their fields, or the lists only some of their entries, truncated gives each, and no string is shortened. The same call with full: true returns data whole.",
      +        "type": "boolean"
      +      },
      +      "freshness": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog_version": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "date_released": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "last_successful_fetch_at": {
      +                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "last_successful_fetch_at",
      +              "catalog_version",
      +              "date_released"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      +      },
      +      "measured_at": {
      +        "anyOf": [
      +          {
      +            "description": "An RFC 3339 instant.",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      +      },
      +      "method": {
      +        "description": "How the numbers were produced.",
      +        "type": "string"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      +        "enum": [
      +          "measured",
      +          "not_assessed"
      +        ],
      +        "type": "string"
      +      },
      +      "truncated": {
      +        "additionalProperties": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "returned": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "thinned": {
      +              "const": true,
      +              "type": "boolean"
      +            },
      +            "total": {
      +              "maximum": 9007199254740991,
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "total",
      +            "returned"
      +          ],
      +          "type": "object"
      +        },
      +        "description": "Present when data_truncated is true: each list of data that was cut, by its path in data (a dot between the names of an object and a list inside it), with total, its entries in the answer, returned, the entries data holds, and thinned, true when each of them keeps only some of its fields.",
      +        "propertyNames": {
      +          "type": "string"
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "data_truncated",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "kind": {
      +            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      +            "enum": [
      +              "network",
      +              "timeout",
      +              "http",
      +              "not_json",
      +              "not_object",
      +              "invalid_input",
      +              "internal",
      +              "unexpected_shape",
      +              "radars"
      +            ],
      +            "type": "string"
      +          },
      +          "message": {
      +            "description": "The cause: the API's own message, or what went wrong.",
      +            "type": "string"
      +          },
      +          "path": {
      +            "description": "The API path requested, when a request was made.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The HTTP status, when the API answered one."
      +          }
      +        },
      +        "required": [
      +          "kind",
      +          "path",
      +          "status",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "freshness": {
      +        "type": "null"
      +      },
      +      "measured_at": {
      +        "type": "null"
      +      },
      +      "method": {
      +        "type": "null"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      +        "enum": [
      +          "failed",
      +          "invalid_input"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  5. Changed3 schema fields changed
    • changedInput schema / properties / since / description
      Previous value: -"earliest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it)"New value: +"earliest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it, with the time and offset dropped; anything else is refused)"
    • changedInput schema / properties / until / description
      Previous value: -"latest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it)"New value: +"latest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it, with the time and offset dropped; anything else is refused)"
    • changedOutput schema / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "What the answer covers; null where the answer says nothing about it."
      -      },
      -      "data": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "catalog": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {
      -                  "catalog_count": {
      -                    "type": [
      -                      "number",
      -                      "null"
      -                    ]
      -                  },
      -                  "catalog_version": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "date_released": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "feed_url": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "last_successful_fetch_at": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  },
      -                  "source": {
      -                    "type": [
      -                      "string",
      -                      "null"
      -                    ]
      -                  }
      -                },
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "count": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "filters": {
      -            "anyOf": [
      -              {
      -                "additionalProperties": {},
      -                "properties": {},
      -                "type": "object"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "generated_at": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "kev": {
      -            "items": {
      -              "additionalProperties": {},
      -              "properties": {
      -                "cve_id": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "cvss_v3_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "eg_kev_tier": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_percentile": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "epss_score": {
      -                  "type": [
      -                    "number",
      -                    "null"
      -                  ]
      -                },
      -                "kev_added_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_due_date": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_product": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_ransomware": {
      -                  "type": [
      -                    "boolean",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vendor": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "kev_vuln_name": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "our_first_seen_kev": {
      -                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                },
      -                "severity": {
      -                  "type": [
      -                    "string",
      -                    "null"
      -                  ]
      -                }
      -              },
      -              "type": "object"
      -            },
      -            "type": "array"
      -          },
      -          "kev_listed_total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "limit": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          },
      -          "method": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "next_cursor": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "notes": {
      -            "anyOf": [
      -              {
      -                "items": {
      -                  "type": "string"
      -                },
      -                "type": "array"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          },
      -          "order": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "total": {
      -            "type": [
      -              "number",
      -              "null"
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      },
      -      "freshness": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog_version": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "date_released": {
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              },
      -              "last_successful_fetch_at": {
      -                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      -                "type": [
      -                  "string",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "last_successful_fetch_at",
      -              "catalog_version",
      -              "date_released"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      -      },
      -      "measured_at": {
      -        "anyOf": [
      -          {
      -            "description": "An RFC 3339 instant.",
      -            "type": "string"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ],
      -        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      -      },
      -      "method": {
      -        "description": "How the numbers were produced.",
      -        "type": "string"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      -        "enum": [
      -          "measured",
      -          "not_assessed"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "data"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "coverage": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "catalog": {
      -                "const": "CISA KEV catalog",
      -                "type": "string"
      -              },
      -              "catalog_count": {
      -                "description": "CISA's own count, in the catalog last fetched.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "has_more": {
      -                "description": "Whether next_cursor names a further page.",
      -                "type": [
      -                  "boolean",
      -                  "null"
      -                ]
      -              },
      -              "kev_listed_total": {
      -                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "limit": {
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "returned": {
      -                "description": "Rows in this page.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              },
      -              "total": {
      -                "description": "CVEs matching the filters.",
      -                "type": [
      -                  "number",
      -                  "null"
      -                ]
      -              }
      -            },
      -            "required": [
      -              "catalog",
      -              "total",
      -              "returned",
      -              "kev_listed_total",
      -              "catalog_count",
      -              "limit",
      -              "has_more"
      -            ],
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "kind": {
      -            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      -            "enum": [
      -              "network",
      -              "timeout",
      -              "http",
      -              "not_json",
      -              "not_object",
      -              "invalid_input",
      -              "internal",
      -              "unexpected_shape",
      -              "radars"
      -            ],
      -            "type": "string"
      -          },
      -          "message": {
      -            "description": "The cause: the API's own message, or what went wrong.",
      -            "type": "string"
      -          },
      -          "path": {
      -            "description": "The API path requested, when a request was made.",
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "status": {
      -            "anyOf": [
      -              {
      -                "maximum": 9007199254740991,
      -                "minimum": -9007199254740991,
      -                "type": "integer"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ],
      -            "description": "The HTTP status, when the API answered one."
      -          }
      -        },
      -        "required": [
      -          "kind",
      -          "path",
      -          "status",
      -          "message"
      -        ],
      -        "type": "object"
      -      },
      -      "freshness": {
      -        "type": "null"
      -      },
      -      "measured_at": {
      -        "type": "null"
      -      },
      -      "method": {
      -        "type": "null"
      -      },
      -      "notes": {
      -        "description": "Caveats, one sentence each.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "state": {
      -        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      -        "enum": [
      -          "failed",
      -          "invalid_input"
      -        ],
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "state",
      -      "measured_at",
      -      "method",
      -      "coverage",
      -      "freshness",
      -      "notes",
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "What the answer covers; null where the answer says nothing about it."
      +      },
      +      "data": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "catalog": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {
      +                  "catalog_count": {
      +                    "type": [
      +                      "number",
      +                      "null"
      +                    ]
      +                  },
      +                  "catalog_version": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "date_released": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "feed_url": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "last_successful_fetch_at": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  },
      +                  "source": {
      +                    "type": [
      +                      "string",
      +                      "null"
      +                    ]
      +                  }
      +                },
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "count": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "filters": {
      +            "anyOf": [
      +              {
      +                "additionalProperties": {},
      +                "properties": {},
      +                "type": "object"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "generated_at": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "kev": {
      +            "description": "Newest kev_added_date first; rows within one date are ordered by cve_id.",
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "cve_id": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "cvss_v3_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "eg_kev_tier": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_percentile": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "epss_score": {
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "kev_added_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_due_date": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_product": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_ransomware": {
      +                  "type": [
      +                    "boolean",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vendor": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "kev_vuln_name": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "our_first_seen_kev": {
      +                  "description": "When EchelonGraph's poller first recorded the CVE entering the catalog; null where no such record exists.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "severity": {
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                }
      +              },
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "kev_listed_total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "limit": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "method": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "next_cursor": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "notes": {
      +            "anyOf": [
      +              {
      +                "items": {
      +                  "type": "string"
      +                },
      +                "type": "array"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "order": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "total": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "freshness": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog_version": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "date_released": {
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "last_successful_fetch_at": {
      +                "description": "When CISA last answered our poll of its feed: a 200 we applied, or a 304 Not Modified.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "last_successful_fetch_at",
      +              "catalog_version",
      +              "date_released"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "The producing radar's last completed check (last_run_at), where the API serves one."
      +      },
      +      "measured_at": {
      +        "anyOf": [
      +          {
      +            "description": "An RFC 3339 instant.",
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "description": "When the underlying observation was made, as the API states it; null when the answer does not say or holds no observation."
      +      },
      +      "method": {
      +        "description": "How the numbers were produced.",
      +        "type": "string"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "measured: a measurement of what was asked; an exposure count is measured only with measured_at and method. not_assessed: the answer holds no dated measurement of what was asked, so no count in it is presented as one; it can still relay a count, as what the source holds on record, undated, and its notes (and exposure_state, where the result carries it) say what each count is.",
      +        "enum": [
      +          "measured",
      +          "not_assessed"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "data"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "coverage": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": false,
      +            "properties": {
      +              "catalog": {
      +                "const": "CISA KEV catalog",
      +                "type": "string"
      +              },
      +              "catalog_count": {
      +                "description": "CISA's own count, in the catalog last fetched.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "has_more": {
      +                "description": "Whether next_cursor names a further page.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              },
      +              "kev_listed_total": {
      +                "description": "Every CVE EchelonGraph holds as KEV-listed.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "limit": {
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "returned": {
      +                "description": "Rows in this page.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "total": {
      +                "description": "CVEs matching the filters.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "catalog",
      +              "total",
      +              "returned",
      +              "kev_listed_total",
      +              "catalog_count",
      +              "limit",
      +              "has_more"
      +            ],
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "kind": {
      +            "description": "What failed: the request (network, timeout), the answer (http, not_json, not_object, unexpected_shape), the input, or this server.",
      +            "enum": [
      +              "network",
      +              "timeout",
      +              "http",
      +              "not_json",
      +              "not_object",
      +              "invalid_input",
      +              "internal",
      +              "unexpected_shape",
      +              "radars"
      +            ],
      +            "type": "string"
      +          },
      +          "message": {
      +            "description": "The cause: the API's own message, or what went wrong.",
      +            "type": "string"
      +          },
      +          "path": {
      +            "description": "The API path requested, when a request was made.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "status": {
      +            "anyOf": [
      +              {
      +                "maximum": 9007199254740991,
      +                "minimum": -9007199254740991,
      +                "type": "integer"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "The HTTP status, when the API answered one."
      +          }
      +        },
      +        "required": [
      +          "kind",
      +          "path",
      +          "status",
      +          "message"
      +        ],
      +        "type": "object"
      +      },
      +      "freshness": {
      +        "type": "null"
      +      },
      +      "measured_at": {
      +        "type": "null"
      +      },
      +      "method": {
      +        "type": "null"
      +      },
      +      "notes": {
      +        "description": "Caveats, one sentence each.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "state": {
      +        "description": "failed: the lookup did not complete. invalid_input: the input was refused, so nothing was looked up. Neither is a finding.",
      +        "enum": [
      +          "failed",
      +          "invalid_input"
      +        ],
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "state",
      +      "measured_at",
      +      "method",
      +      "coverage",
      +      "freshness",
      +      "notes",
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  6. Changed2 schema fields changed
    • changedInput schema / properties / since / description
      Previous value: -"earliest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as its UTC date)"New value: +"earliest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it)"
    • changedInput schema / properties / until / description
      Previous value: -"latest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as its UTC date)"New value: +"latest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as the date written in it)"
  7. Changed2 schema fields changed
    • changedInput schema / properties / since / description
      Previous value: -"earliest kev_added_date to include, YYYY-MM-DD"New value: +"earliest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as its UTC date)"
    • changedInput schema / properties / until / description
      Previous value: -"latest kev_added_date to include, YYYY-MM-DD"New value: +"latest kev_added_date to include, YYYY-MM-DD (an RFC 3339 timestamp is read as its UTC date)"
  8. First observed

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the read-only/idempotent annotations, the description discloses the polling cadence, that older fields like requiredAction live on each CVE's own record, that our_first_seen_kev and measured_at can be null, and precisely how truncation works past 30,000 characters (TEXT CUT vs DATA CUT, full:true escape). These are substantive behavioral facts an agent cannot get from the annotations.

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?

The core purpose is front-loaded, but the body is one enormous run-on paragraph that mixes row fields, filter semantics, totals accounting, freshness metadata, and truncation rules. The 30,000-character cut behavior is largely duplicated in the schema's 'full' parameter description, so some sentences do not fully earn their 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?

For a seven-parameter, output-schema-backed listing tool, the description covers row contents, filter semantics, the total vs kev_listed_total vs catalog_count distinction, freshness metadata, and edge cases under truncation. Nothing an agent needs to call it correctly appears to be 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 coverage is 100%, so the baseline is 3; the description still adds meaning, notably that since/until are inclusive dates, that vendor is an exact case-insensitive match, and that next_cursor continues after the page's last row rather than the truncated text's last row. That last point is a non-obvious pagination semantic not present 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?

The description opens with a specific verb and resource: the CVEs CISA has added to its KEV catalog, newest first, drawn from EchelonGraph's mirrored copy. It also states provenance and refresh cadence ('polls CISA's feed every 5 minutes'), which no sibling (search_cves, get_cve, cve_intel) shares, so an agent can identify the resource without opening the 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?

It gives clear operational context: filter with since/until on kev_added_date, ransomware, and exact vendor; page by passing the previous page's next_cursor with the same filters. It does not name an alternative tool or state when another tool would be preferable (e.g., search_cves for non-KEV CVEs), so it stops short of a 5.

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.