cisa-cybersecurity-mcp-server
Server Details
CISA KEV with BOD 26-04 deadlines, SSVC prioritization, and the ICS advisory corpus (CSAF). Keyless.
- Status
- Healthy
- Uptime
- 99.8% over 42 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- cyanheads/cisa-cybersecurity-mcp-server
- GitHub Stars
- 1
- Server Listing
- @cyanheads/cisa-cybersecurity-mcp-server
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: status lookup (check_cve_status), single-advisory read (get_advisory), feed listing (get_alerts), SSVC computation (get_ssvc), vocabulary reference (list_reference), and two searches over clearly different corpora (KEV vs ICS advisories). The search pair is separable because KEV is a catalog and ICS is an advisory corpus, and descriptions explicitly cross-reference which tool to use for which direction of query.
Consistent verb_noun pattern throughout with the cisa_ namespace prefix (get_, check_, search_, list_). The lone deviation — check_cve_status using check_ rather than get_ — is semantically justified since it is a membership test, not a fetch, and the pattern remains predictable.
Seven tools is well-scoped for a domain covering three data sources (KEV, ICS advisories, SSVC) plus feeds and a vocabulary reference. Each tool earns its place: two searches, two retrievals, a status check, a computation, and a legend, with no padding.
Coverage is strong: search plus detail retrieval for both corpora, direct CVE-status lookup, SSVC timeline computation, recent-feeds, and a vocabulary decoder that closes the training gap for free-text filters. Minor gaps remain — no bulk CVE enrichment or cross-server pivots beyond the documented ones — but the core investigative loop (discover, retrieve, triage) is fully closed.
Available Tools
7 toolscisa_check_cve_statuscisa_check_cve_statusARead-onlyIdempotentInspect
Check CVE IDs against the CISA Known Exploited Vulnerabilities catalog — up to 200 per call, served from a cached catalog snapshot at no upstream cost. Returns, per CVE, whether it is in KEV and if so the date added, the federal remediation due date, days remaining or days overdue, which binding operational directive the entry cites, the required action text, whether it is linked to ransomware campaigns, whether it falls in the three-day forensic-triage tier, CISA's own vendor and product labels, associated CWEs, and the reference URLs parsed from the entry's notes. A CVE that is not in KEV is a normal result, not an error. For a large batch, detail "summary" keeps only the triage fields — the deadline and overdue status, directive, ransomware and forensic-triage flags, and vendor and product labels — and drops the descriptive text, CWEs, and references, so a full batch stays compact. The CWE IDs returned chain directly into the cwe filter of cisa_search_kev and cisa_search_ics_advisories, and the parsed NVD reference gives the canonical record for scoring detail. For the reverse direction — which ICS advisories cover a CVE — pass it as cve to cisa_search_ics_advisories, or set inKev there to list the advisories covering any KEV CVE.
| Name | Required | Description | Default |
|---|---|---|---|
| cveIds | Yes | CVE identifiers to check, up to 200 per call. The whole batch costs zero upstream requests, so a full CVE alias list from a dependency audit can be checked in one call — pair a large batch with detail "summary". | |
| detail | No | full returns every field of each in-KEV entry. summary returns only cveId, inKev, dateAdded, dueDate, daysUntilDue, overdue, directive, vendorProject, product, knownRansomwareCampaignUse, and forensicTriage — the triage view for a large batch. Not-in-KEV results are the same under both. | full |
Output Schema
| Name | Required | Description |
|---|---|---|
| asOf | No | The UTC date daysUntilDue and overdue were computed against, YYYY-MM-DD. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when none of the supplied CVE IDs are in the catalog. |
| catalog | No | Which catalog snapshot answered this call. |
| results | No | One result per requested CVE, in the order supplied. |
| foundCount | No | How many of the requested CVEs are in the catalog. |
| summaryNote | No | Present only under detail "summary": which fields each in-KEV result omits and how to restore them. |
| notFoundCount | No | How many of the requested CVEs are not in the catalog. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses that the catalog is a cached snapshot, that a full batch costs zero upstream requests, that not-in-KEV is a normal result rather than an error, and that summary mode drops specific fields. These are meaningful behavioral details an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, and most sentences carry distinct value. It is somewhat long because it enumerates return fields in prose that the output schema already covers, but the density is justified by the tool's batching and cross-tool integration behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the two-parameter schema, existing annotations, and output schema, the description covers batch limits, error semantics, detail-mode tradeoffs, and integrations with sibling tools. Nothing an agent needs to call the tool correctly seems missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Even though the schema already documents both parameters, the description adds actionable context: cveIds can carry a full dependency-audit alias list because the batch is upstream-free, and detail='summary' is recommended for large batches with the exact retained triage fields enumerated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: checking CVE IDs against the CISA KEV catalog. It also adds scope details (up to 200 per call, cached snapshot) that distinguish this tool from the sibling search/advisory tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use detail='summary' for large batches and explains the reverse direction through cisa_search_ics_advisories. It also names sibling tools and gives concrete routing rules for CWE chaining into cisa_search_kev and cisa_search_ics_advisories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cisa_get_advisorycisa_get_advisoryARead-onlyIdempotentInspect
Read one CISA industrial control system advisory: product definitions and relationship component references; per-CVE CVSS score, vector, and CWE; vendor remediations; sectors; and revision history. Large advisories return a section outline with byte sizes and vulnerability CVE IDs. Re-call with sections, cves for named vulnerabilities, or productIds for exact product definitions referenced by vulnerability status, scores, or remediations. Product IDs are case-sensitive; relationship selection does not expand components. Every response carries source URLs and attribution. Find advisory IDs with cisa_search_ics_advisories.
| Name | Required | Description | Default |
|---|---|---|---|
| cves | No | Narrow the vulnerabilities section to these CVE IDs; the outline lists the ones the advisory holds. Alone, it selects the vulnerabilities section; with sections, that list must include "vulnerabilities". | |
| sections | No | Sections to return. Omit for the whole document, or for its outline when the document overflows the inline budget. | |
| advisoryId | Yes | Advisory identifier, e.g. ICSA-26-260-07 or ICSMA-26-253-02, with an optional revision suffix: a single letter A-F or a numeric -N. Case, surrounding whitespace, and a trailing .json are normalized. | |
| productIds | No | Narrow products to these IDs from vulnerability status, score, or remediation references. Alone selects products; combined with cves selects both sections. Explicit sections must include products. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | No | full when the document is returned; outline when only the section listing is. |
| error | No | Present when the call failed. Absent on success. |
| found | No | Whether an advisory with that ID is in the index. |
| summary | No | Narrative notes and sector classification. |
| advisory | No | Advisory identity, dates, and attribution. Always kept, including on a section selection. |
| guidance | No | What to do instead, present when found is false: how current the index is, and whether the advisory may be newer than it. |
| products | No | Affected products and version ranges. |
| sections | No | Outline arm — the sections available, largest first, with their byte sizes and, for vulnerabilities, its CVE IDs. |
| references | No | Document-level references. |
| outlineNotice | No | Outline arm — how to call cisa_get_advisory for specific sections. |
| acknowledgments | No | Acknowledgment entries. |
| indexCheckpoint | No | Present when found is false: the newest revision timestamp the index holds, or null if none. |
| revisionHistory | No | Revision history, oldest first as published. |
| vulnerabilities | No | Vulnerabilities the advisory covers, with scores, remediations, and product status. |
| indexLastSyncedAt | No | Present when found is false: when the index last completed a sync, ISO 8601, or null if never. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, so the bar is lower, yet the description adds genuine behavior: large advisories degrade to a section outline with byte sizes and CVE IDs, and every response carries source URLs and attribution. It also notes the non-expanding relationship selection. Not exhaustive on pagination/error behavior, but solid beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the core read action and return contents come first, followed by narrowing mechanics and the search-tool pointer. Every sentence carries information, though it is on the longer side and repeats some schema-level detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values needn't be spelled out, yet the description usefully previews them and explains the overflow/outline behavior that an agent needs to interpret large responses. Complete for the task; only minor gaps around error or revision-edge behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents sections, cves, productIds, and advisoryId syntax in detail, so the baseline is 3. The description largely restates that behavior; the one real addition is 'relationship selection does not expand components' for productIds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read one CISA industrial control system advisory') and enumerates the concrete content it returns (product definitions, CVSS score/vector/CWE, remediations, sectors, revisions). It also names the sibling used to find IDs, making it clearly distinguishable from cisa_search_ics_advisories.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains how to narrow results (re-call with sections, cves, or productIds) and routes the agent to cisa_search_ics_advisories for discovering IDs. Clear contextual guidance, though it doesn't explicitly state when-not to use this tool versus other advisory tools like cisa_get_ssvc.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cisa_get_alertscisa_get_alertsARead-onlyIdempotentInspect
List what CISA has published recently — its combined advisory feed, its alerts feed, or its ICS advisory feed. Each feed is a rolling window of exactly 30 items with no history, no pagination, and no date-range query, so the window's coverage varies from about a week to about two months depending on the feed. For ICS advisory history beyond the window, use cisa_search_ics_advisories, which covers the full corpus back to 2010.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | Which feed to read: advisories (all.xml, ~8 days of coverage), alerts (alerts.xml, ~8 weeks), or ics (ics-advisories.xml, ~2.5 weeks). | advisories |
| limit | No | Maximum items to return. The 30 ceiling is the upstream window, not a server choice. | |
| since | No | Keep only items published on or after this date, YYYY-MM-DD. Filters within the fetched window; it cannot reach back beyond it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The limit that was applied. |
| feed | No | The feed that was read. |
| error | No | Present when the call failed. Absent on success. |
| items | No | Items from the fetched window, newest first as published; stale identifies cached fallback. |
| shown | No | Items returned. |
| stale | No | True when refresh failed and this response uses the last cached window. |
| notice | No | Safe retry guidance on refresh failure, or guidance when the since filter excluded every item. |
| window | No | What the fetched window covers. |
| feedUrl | No | The absolute feed URL this window came from. |
| feedTitle | No | The channel title the feed declares. |
| fetchedAt | No | UTC timestamp when this window was successfully fetched. |
| truncated | No | True when the limit capped the returned items. |
| windowCaveat | No | That the feed has no history, no pagination, and no date query. |
| effectiveQuery | No | The since filter as applied, and how many window items it excluded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and idempotentHint; the description goes well beyond them by disclosing the fixed 30-item rolling window, absence of history/pagination/date-range querying, and the fact that coverage varies from roughly a week to two months by feed. That is exactly the operational context an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the action and feed options, then the constraint, then the fallback route. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be described, and the description covers the scope, the rolling-window limitation, and the alternative tool for deeper history. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already documents its enum values, 30-item ceiling, and windowed-filter behavior, so the baseline is 3. The description adds little param-level detail beyond reiterating the window constraint, and its 'no date-range query' phrasing sits in mild tension with the existence of `since` (the schema resolves this, but the description does not).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('List what CISA has published recently') and immediately enumerates the three specific feeds it can read. It also names the sibling cisa_search_ics_advisories, so an agent can distinguish scope without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states both when to use it (recent publication lookup across the three feeds) and when not to (ICS history beyond the rolling window), routing to cisa_search_ics_advisories and noting that it covers the full corpus back to 2010. The 'no pagination, no date-range query' clause further bounds its use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cisa_get_ssvccisa_get_ssvcARead-onlyIdempotentInspect
Fetch the SSVC decision points CISA publishes per CVE as a CVE Authorized Data Publisher — Exploitation, Automatable, and Technical Impact — along with the CVSS score and CWE CISA contributes where present, and compute the BOD 26-04 remediation timeline those values imply for the asset exposure you supply. The computed timeline applies CISA's published decision table to CISA's published decision points and your stated exposure; it is not a compliance determination and it is not CISA's own due-date assignment, which is reported separately when the CVE is in KEV and can differ. Not every CVE is enriched — a miss returns found false with guidance rather than an error. Call cisa_list_reference with topic ssvc_values for the decision-point vocabulary.
| Name | Required | Description | Default |
|---|---|---|---|
| cveIds | Yes | CVE identifiers to look up, up to 50 per call — lower than cisa_check_cve_status's 200-CVE cap because each CVE needs its own live enrichment lookup rather than a cached batch check. | |
| assetExposure | No | Whether the affected asset is reachable by unauthenticated or untrusted entities over public networks. The one BOD 26-04 decision point CISA cannot publish. "unknown" returns both arms so the spread is visible without guessing. | unknown |
Output Schema
| Name | Required | Description |
|---|---|---|
| echo | No | The request as the server parsed it. |
| error | No | Present when the call failed. Absent on success. |
| notice | No | Guidance when nothing was enriched, or when a decision timestamp predates KEV. |
| results | No | One result per requested CVE, in the order supplied. |
| foundCount | No | How many CVEs carry published SSVC decision points. |
| notFoundCount | No | How many CVEs do not. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses important behaviors: misses return 'found false with guidance rather than an error,' the computed timeline is not CISA's own due-date assignment and can differ when the CVE is in KEV, and the lookup uses live enrichment per CVE. These are substantive behavioral details that help an agent set expectations correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a typical one-liner, but every sentence adds necessary context: core function, computed-timeline limitations, miss behavior, and vocabulary reference. It is front-loaded with the primary action and structured so caveats follow naturally.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description covers the essential context: what data is fetched, how the timeline is computed, what is excluded, how misses behave, and where to get supporting vocabulary. An agent has enough guidance to invoke the tool correctly and interpret unexpected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description boosts understanding by explaining how assetExposure is the one BOD 26-04 decision point CISA cannot publish and that the supplied exposure drives the timeline computation. It also ties cveIds to per-CVE enrichment, reinforcing why the cap is lower than the sibling status tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Fetch the SSVC decision points CISA publishes per CVE' and 'compute the BOD 26-04 remediation timeline.' It clearly distinguishes the tool from siblings by focusing on SSVC enrichment plus timeline computation, not on generic CVE status, advisories, or KEV search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool, including what it does and key caveats such as 'not every CVE is enriched' and 'not a compliance determination.' It also explicitly routes users to cisa_list_reference for decision-point vocabulary, but it does not contrast this tool with cisa_check_cve_status or cisa_search_kev as directly as it could.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cisa_list_referencecisa_list_referenceARead-onlyIdempotentInspect
Decode the vocabulary the other CISA tools take as input. Topics cover the BOD 26-04 remediation timeline table and what each tier means, the KEV record fields and their value domains, the SSVC decision points CISA publishes, the critical-infrastructure sector names as the advisory corpus spells them, advisory ID formats, CVSS severity bands, and the freshness of the data this server currently holds. Call this before constructing filters for cisa_search_kev or cisa_search_ics_advisories, and whenever another tool's recovery hint points here.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Which reference block to return: directives (BOD 26-04 Table 1 and its definitions), kev_fields, ssvc_values, sectors, advisory_id_formats, severity_bands, or sources (what this server currently holds). |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | Present when the call failed. Absent on success. |
| title | No | Human-readable title for the topic. |
| topic | No | The topic that was decoded. |
| entries | No | The decoded terms for this topic. |
| sources | No | Topic sources only — what this server currently holds, read from in-process state. |
| summary | No | What this topic covers and when to reach for it. |
| supersedes | No | Topic directives only — the directives BOD 26-04 supersedes and revokes. |
| definitions | No | Topic directives only — supporting definitions from the directive text. |
| timelineTable | No | Topic directives only — all sixteen rows of BOD 26-04 Appendix A, Table 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world, so the safety profile is covered. The description adds genuine behavioral context: this is a static lookup surface, it discloses data-freshness information via the 'sources' topic, and it tells the agent this tool is an input to other tools rather than an action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose, then the topic inventory, then the usage rule. The middle sentence is long but each item is a distinct reference block, so little is wasted; the usage rule is slightly deferred to the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required. The description covers purpose, full topic inventory, and invocation timing for a single-parameter, one-of-enum tool — an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the enum values are documented in the schema, so baseline 3 applies. The description goes beyond the schema by glossing the two most opaque topics ('the BOD 26-04 remediation timeline table', 'the freshness of the data this server currently holds'), adding semantics the enum labels alone don't convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('decode the vocabulary the other CISA tools take as input') and then enumerates exactly what vocabulary is covered. It is immediately distinguishable from the search/get siblings, which consume this vocabulary rather than define it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule ('Call this before constructing filters for cisa_search_kev or cisa_search_ics_advisories') and a second trigger ('whenever another tool's recovery hint points here'). Both the alternative tools and the condition that selects this one are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cisa_search_ics_advisoriescisa_search_ics_advisoriesARead-onlyIdempotentInspect
Search the CISA industrial control system advisory corpus — every CSAF 2.0 advisory covering PLC, HMI, SCADA, building-automation, and medical-device products from 2010 onward. Filter by vendor, product, CVE, CWE, CVSS range, severity band, critical-infrastructure sector, advisory series, publication date, revision date, or whether an advisory covers a CVE in the CISA Known Exploited Vulnerabilities catalog, and run full-text search over advisory titles and product names. Sector filtering reaches only advisories that carry a sector note, which begins in 2017; the response reports how many documents a sector filter can never match. Returns advisory IDs for cisa_get_advisory, the CVEs each advisory covers and which of them are in KEV, and the source URL and attribution every advisory response carries.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Full-text search over advisory titles, vendor names, and product names. Tokens are AND-combined; FTS5 operators in the input are neutralized rather than honored, and a token with no letter or digit is ignored. Needs at least one word or number. | |
| cve | No | Exact CVE membership, e.g. CVE-2021-44228. Case and surrounding whitespace are normalized. | |
| cwe | No | Exact CWE identifier, e.g. CWE-787, matched against every vulnerability entry in the advisory. Case and surrounding whitespace are normalized. A parent class does not match its children. | |
| inKev | No | true selects advisories covering at least one CVE in the CISA Known Exploited Vulnerabilities catalog; false selects advisories covering none. Checked against every CVE an advisory covers, not only the twenty listed per result. | |
| limit | No | Maximum advisories per page. | |
| order | No | Sort direction. Under relevance, desc means most relevant first. | desc |
| cursor | No | Opaque pagination cursor from a previous call. Omit for the first page. | |
| sector | No | Critical-infrastructure sector, matched against the normalized sector set. Multiple is the sentinel the corpus uses for an advisory affecting many sectors. | |
| series | No | Advisory series: ICSA industrial control system advisories, or ICSMA medical-device advisories, a small minority of the corpus. | |
| sortBy | No | Field to sort by. relevance requires q and ranks by FTS5 bm25. | revised |
| vendor | No | Case-insensitive substring of a vendor label, matched literally — % and _ are ordinary characters. Vendor names are unnormalized upstream — the same company appears under several spellings — so this is substring, not exact. | |
| cvssMax | No | Maximum value of the advisory's maximum CVSS base score, inclusive. | |
| cvssMin | No | Minimum value of the advisory's maximum CVSS base score, inclusive. | |
| product | No | Case-insensitive substring of a product name, matched literally — % and _ are ordinary characters. | |
| severity | No | Severity band of the advisory's maximum CVSS score. | |
| publisher | No | coordinator selects CISA-authored advisories; other selects vendor advisories CISA republished, over a quarter of the corpus. | |
| revisedTo | No | Latest current release date, inclusive, YYYY-MM-DD. | |
| publishedTo | No | Latest initial release date, inclusive, YYYY-MM-DD. | |
| revisedFrom | No | Earliest current release date, inclusive, YYYY-MM-DD. | |
| publishedFrom | No | Earliest initial release date, inclusive, YYYY-MM-DD. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The page limit that was applied. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Advisories returned on this page. |
| cursor | No | Opaque cursor for the next page. Absent when this is the last page. |
| mirror | No | Which index state answered this call. |
| notice | No | Guidance when nothing matched — the filter that matches no advisory on its own and what dropping it restores, or the filters whose removal restores results and how many — when a page was capped, when KEV membership was not evaluated, or when a cwe result may be incomplete. |
| hasMore | No | Whether more matches exist beyond this page. |
| results | No | Matching advisories for this page. |
| truncated | No | True when the page limit capped this result. |
| totalCount | No | Total matches before paging. |
| cvssCoverage | No | Disclosure of derived-band and no-score coverage under a score filter. |
| appliedFilters | No | The filters the server actually applied. |
| sectorCoverage | No | Disclosure of how many advisories a sector filter can never match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the readOnly/idempotent/openWorld annotations by disclosing a real corpus limitation: sector filtering only reaches advisories carrying a sector note, which begins in 2017, and the response reports how many documents a sector filter can never match. It also states that every response carries source URL and attribution. Rate limits, ordering effects beyond the schema, and result-size caveats are not covered, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and scope before enumerating filters, and no sentence is pure filler. It is a single long sentence dense enough to be hard to skim, so a small structure penalty applies, but the information density is high.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter, zero-required search tool with an output schema, the description covers corpus boundaries, the filter surface, the sector-coverage caveat, and the shape of returned IDs and KEV flags. Pagination is delegated to the cursor schema and sort behavior to sortBy, so nothing critical is missing, though explicit composition/default guidance is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter is already documented in the schema, so the baseline is 3. The description largely restates the filter taxonomy the schema already provides; the one nuance it adds (KEV coverage is checked against every CVE an advisory covers, not just the twenty listed) is also present in the inKev schema description, so the marginal semantic value is limited.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) plus resource (CISA ICS advisory corpus) and pins the scope precisely: CSAF 2.0 advisories covering PLC/HMI/SCADA/building-automation/medical-device products from 2010 onward. It also routes the agent onward by naming cisa_get_advisory as the consumer of the returned IDs, which cleanly separates it from the fetch-by-ID sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives strong context for when this is the right tool: an enumerated filter surface (vendor, product, CVE, CWE, CVSS range, severity, sector, series, dates, KEV) plus full-text search, and it implies the follow-up path via cisa_get_advisory. It never explicitly contrasts itself with siblings like cisa_search_kev or cisa_check_cve_status, so the when-not/alternative case is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cisa_search_kevcisa_search_kevARead-onlyIdempotentInspect
Search the CISA Known Exploited Vulnerabilities catalog across every entry in the cached snapshot. Filter by vendor or product using CISA's own labels, by name substring, by CWE, by the date an entry was added, by due date, by overdue status, by ransomware linkage, by the three-day forensic-triage tier, or by which binding operational directive the entry cites. Results are paged and sortable by due date or date added. Vendor and product values are CISA's free-text labels, not CPE names — call cisa_list_reference for the field vocabulary before guessing one. The catalog records additions but carries no per-record modified timestamp, so dateAddedFrom answers "what is new since D" while a revised due date on an existing entry is not detectable from the feed.
| Name | Required | Description | Default |
|---|---|---|---|
| cwe | No | Exact CWE identifier, e.g. CWE-362. Case and surrounding whitespace are normalized. Entries with no CWEs never match. | |
| limit | No | Maximum entries per page. | |
| order | No | Sort direction. | desc |
| cursor | No | Opaque pagination cursor from a previous call. Omit for the first page. | |
| sortBy | No | Field to sort by. | dateAdded |
| overdue | No | True selects entries whose due date is strictly before the echoed asOf date. | |
| product | No | Case-insensitive substring of CISA's own product label. | |
| dueAfter | No | Earliest due date, inclusive, YYYY-MM-DD. | |
| directive | No | Which directive the entry cites. "none" selects the entries citing neither. | |
| dueBefore | No | Latest due date, inclusive, YYYY-MM-DD. | |
| ransomware | No | True selects entries CISA has linked to ransomware campaigns. | |
| cveIdPrefix | No | Year scope for the CVE ID, e.g. CVE-2026. Case and surrounding whitespace are normalized. | |
| dateAddedTo | No | Latest date added, inclusive, YYYY-MM-DD. | |
| nameContains | No | Strict token match over the vulnerability name and short description: every token must appear. Matching folds case and accents, spells letters such as ß, æ, ø, þ, and ł as ss, ae, o, th, and l, and keeps only the letters a-z and the digits 0-9; a word carrying any other letter or digit, such as one in another script, loses those characters and the response names it, and a value left with none of them is rejected. No fuzzy fallback. | |
| dateAddedFrom | No | Earliest date added, inclusive, YYYY-MM-DD. | |
| vendorProject | No | Case-insensitive substring of CISA's own vendor label. | |
| forensicTriage | No | True selects the BOD 26-04 three-day forensic-triage tier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cap | No | The page limit that was applied. |
| asOf | No | The UTC date overdue and daysUntilDue were computed against, YYYY-MM-DD. |
| error | No | Present when the call failed. Absent on success. |
| shown | No | Entries returned on this page. |
| cursor | No | Opaque cursor for the next page. Absent when this is the last page. |
| notice | No | Guidance when nothing matched, when a page was capped, or when nameContains dropped characters it cannot match. |
| catalog | No | Which catalog snapshot answered this call. |
| hasMore | No | Whether more matches exist beyond this page. |
| results | No | Matching KEV entries for this page. |
| truncated | No | True when the page limit capped this result. |
| totalCount | No | Total matches before paging. |
| appliedFilters | No | The filters the server actually applied, as it parsed them. |
| snapshotCaveat | No | Disclosure that additions are queryable but revisions are not detectable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/idempotentHint annotations: it discloses that the data is a cached snapshot, that results are paged and sortable, that vendor/product are CISA free-text labels rather than CPE names, and a genuine data-model limitation (no per-record modified timestamp, so revised due dates are undetectable). That last point is exactly the kind of caveat an agent cannot infer elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with verb and resource, then filters, then paging/sorting, then the two caveats. The long filter enumeration is dense but every clause maps to a real capability, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is unnecessary, and the description covers what matters for correct invocation: scope, filter inventory, pagination, sort keys, label vocabulary warning, and the temporal caveat. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so 3 is the baseline, but the description adds interpretive meaning the schema does not: the vendor/product label-vs-CPE distinction, the paging/sorting behavior, and the semantic asymmetry between the added-date and due-date filters. It does not restate the enum values or patterns, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search the CISA Known Exploited Vulnerabilities catalog') and immediately scopes it ('across every entry in the cached snapshot'), then enumerates the filterable dimensions. This is clearly distinguishable from sibling reads like cisa_get_advisory or cisa_check_cve_status without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite-style routing instruction: call cisa_list_reference for the field vocabulary before guessing vendor/product values. It also clarifies which date filter answers which question (dateAddedFrom = 'what is new since D'). It does not, however, state when to prefer this tool over siblings like cisa_check_cve_status, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- Changed
cisa_get_advisory15 fields changed- added
Input schema / properties / productIdsAdded value: +{ + "description": "Narrow products to these IDs from vulnerability status, score, or remediation references. Alone selects products; combined with cves selects both sections. Explicit sections must include products.", + "items": { + "description": "Exact case-sensitive CSAF product ID; surrounding whitespace is trimmed.", + "minLength": 1, + "type": "string" + }, + "type": "array" +} - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `mirror_not_ready`: The advisory index has never completed a full sync. `mirror_unavailable`: The advisory index store cannot be opened: its location is not writable, is read-only, runs through a missing directory or a file, or holds a file that is not a SQLite database. `unknown_section`: A requested section is one this advisory does not carry. `cves_need_vulnerabilities_section`: cves is set but sections does not include \"vulnerabilities\", so there is nothing for cves to narrow. `unknown_cve`: A cves entry names a CVE this advisory does not cover. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `product_ids_need_products_section`: productIds is nonempty but explicit sections omits products. `unknown_product_id`: productIds names an ID with no definition in this advisory. `mirror_busy`: A transient SQLite lock prevents the advisory index from opening. `mirror_not_ready`: The advisory index has never completed a full sync. `mirror_unavailable`: The advisory index store cannot be opened: its location is not writable, is read-only, runs through a missing directory or a file, or holds a file that is not a SQLite database. `unknown_section`: A requested section is one this advisory does not carry. `cves_need_vulnerabilities_section`: cves is set but sections does not include \"vulnerabilities\", so there is nothing for cves to narrow. `unknown_cve`: A cves entry names a CVE this advisory does not cover. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "mirror_not_ready", - "mirror_unavailable", - "unknown_section", - "cves_need_vulnerabilities_section", - "unknown_cve" -]New value: +[ + "product_ids_need_products_section", + "unknown_product_id", + "mirror_busy", + "mirror_not_ready", + "mirror_unavailable", + "unknown_section", + "cves_need_vulnerabilities_section", + "unknown_cve" +] - added
Output schema / properties / products / properties / selectedAdded value: +{ + "description": "True when productIds selects only requested definitions; whole-document totals are retained.", + "type": "boolean" +} - changed
Output schema / properties / products / properties / shownProducts / descriptionPrevious value: -"Flattened version rows returned — equal to productCount except on a truncated copy."New value: +"Product definitions returned — equal to productCount except under productIds selection or on a legacy truncated copy." - changed
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / descriptionPrevious value: -"Version entries under this product."New value: +"Product definitions grouped under this product label." - changed
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / descriptionPrevious value: -"One affected version or version range."New value: +"One branch, standalone, or relationship product definition." - added
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / identificationHelperAdded value: +{ + "description": "Lossless JSON text of upstream CSAF product identification metadata, when supplied.", + "type": "string" +} - changed
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / kind / descriptionPrevious value: -"CSAF branch category this entry came from, e.g. product_version or product_version_range."New value: +"CSAF branch category, or full_product_name or relationship for definitions outside branches." - added
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / nameAdded value: +{ + "description": "Exact full product name supplied upstream.", + "type": "string" +} - changed
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / productId / descriptionPrevious value: -"The CSAFPID token vulnerability entries reference — how a CVE maps to exact affected versions."New value: +"Exact opaque CSAF product ID referenced by vulnerability entries; case-sensitive and not restricted to CSAFPID tokens." - added
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / productReferenceAdded value: +{ + "description": "First relationship component ID; not automatically expanded.", + "type": "string" +} - added
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / relatesToProductReferenceAdded value: +{ + "description": "Second relationship component ID; not automatically expanded.", + "type": "string" +} - added
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / relationshipCategoryAdded value: +{ + "description": "CSAF relationship category supplied upstream.", + "type": "string" +} - changed
Output schema / properties / products / properties / vendors / items / properties / products / items / properties / versions / items / properties / value / descriptionPrevious value: -"The version or version-range expression."New value: +"Version/range expression for a branch row, or full name for a standalone or relationship definition."
- Changed
cisa_get_alerts7 fields changed- added
Input schema / properties / since / formatAdded value: +"date" - changed
Input schema / properties / since / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - changed
Output schema / anyOfPrevious value: -[ - { - "not": { - "required": [ - "error" - ] - }, - "required": [ - "feed", - "feedUrl", - "feedTitle", - "items", - "window", - "windowCaveat" - ] - }, - { - "required": [ - "error" - ] - } -]New value: +[ + { + "not": { + "required": [ + "error" + ] + }, + "required": [ + "stale", + "fetchedAt", + "feed", + "feedUrl", + "feedTitle", + "items", + "window", + "windowCaveat" + ] + }, + { + "required": [ + "error" + ] + } +] - added
Output schema / properties / fetchedAtAdded value: +{ + "description": "UTC timestamp when this window was successfully fetched.", + "type": "string" +} - changed
Output schema / properties / items / descriptionPrevious value: -"Items from the current window, newest first as published."New value: +"Items from the fetched window, newest first as published; stale identifies cached fallback." - changed
Output schema / properties / notice / descriptionPrevious value: -"Guidance when the since filter excluded every item."New value: +"Safe retry guidance on refresh failure, or guidance when the since filter excluded every item." - added
Output schema / properties / staleAdded value: +{ + "description": "True when refresh failed and this response uses the last cached window.", + "type": "boolean" +}
- Changed
cisa_list_reference5 fields changed- changed
Output schema / properties / sources / properties / csafMirror / properties / documentCount / descriptionPrevious value: -"Advisories held in the index; null before the first sync completes."New value: +"Advisories currently held in the index, including partial updates; null before the first sync completes or when the store cannot be read." - added
Output schema / properties / sources / properties / csafMirror / properties / failedDocumentCountAdded value: +{ + "anyOf": [ + { + "maximum": 9007199254740991, + "minimum": -9007199254740991, + "type": "integer" + }, + { + "type": "null" + } + ], + "description": "Changed documents that failed in the last manifest application; zero after a successful sync, null when the store cannot be read." +} - added
Output schema / properties / sources / properties / csafMirror / properties / lastSuccessfulCheckpointAdded value: +{ + "description": "Newest current_release_date at the last wholly successful sync; unchanged after partial updates, null before completion.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / sources / properties / csafMirror / properties / syncStatus / descriptionPrevious value: -"Lifecycle state: pending, in_progress, complete, error, or unavailable."New value: +"Lifecycle state: pending, in_progress, complete, partial, error, busy, or unavailable. A partial refresh keeps applied rows and retries unresolved documents on the next refresh." - changed
Output schema / properties / sources / properties / csafMirror / requiredPrevious value: -[ - "ready", - "documentCount", - "checkpoint", - "syncStatus", - "lastCompletedAt" -]New value: +[ + "ready", + "documentCount", + "failedDocumentCount", + "lastSuccessfulCheckpoint", + "checkpoint", + "syncStatus", + "lastCompletedAt" +]
- Changed
cisa_search_ics_advisories10 fields changed- added
Input schema / properties / publishedFrom / formatAdded value: +"date" - changed
Input schema / properties / publishedFrom / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / publishedTo / formatAdded value: +"date" - changed
Input schema / properties / publishedTo / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / revisedFrom / formatAdded value: +"date" - changed
Input schema / properties / revisedFrom / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / revisedTo / formatAdded value: +"date" - changed
Input schema / properties / revisedTo / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - changed
Output schema / properties / error / properties / data / properties / reason / descriptionPrevious value: -"Machine-readable failure mode. Declared by this tool: `mirror_not_ready`: The advisory index has never completed a full sync. `mirror_unavailable`: The advisory index store cannot be opened: its location is not writable, is read-only, runs through a missing directory or a file, or holds a file that is not a SQLite database. `invalid_cvss_range`: cvssMin exceeds cvssMax. `invalid_date_range`: A From bound is later than its matching To bound. `relevance_sort_without_query`: sortBy is relevance but no q was supplied, so there is no bm25 rank to sort by. `empty_search_text`: q contains no word or number once quotes and punctuation are removed, so there is nothing to search for. `catalog_unavailable`: inKev is set, no KEV catalog snapshot is held, and the fetch from cisa.gov failed. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `mirror_busy`: A transient SQLite lock prevents the advisory index from opening. `mirror_not_ready`: The advisory index has never completed a full sync. `mirror_unavailable`: The advisory index store cannot be opened: its location is not writable, is read-only, runs through a missing directory or a file, or holds a file that is not a SQLite database. `invalid_cvss_range`: cvssMin exceeds cvssMax. `invalid_date_range`: A From bound is later than its matching To bound. `relevance_sort_without_query`: sortBy is relevance but no q was supplied, so there is no bm25 rank to sort by. `empty_search_text`: q contains no word or number once quotes and punctuation are removed, so there is nothing to search for. `catalog_unavailable`: inKev is set, no KEV catalog snapshot is held, and the fetch from cisa.gov failed. Other values are possible when a failure originates below the handler." - changed
Output schema / properties / error / properties / data / properties / reason / examplesPrevious value: -[ - "mirror_not_ready", - "mirror_unavailable", - "invalid_cvss_range", - "invalid_date_range", - "relevance_sort_without_query", - "empty_search_text", - "catalog_unavailable" -]New value: +[ + "mirror_busy", + "mirror_not_ready", + "mirror_unavailable", + "invalid_cvss_range", + "invalid_date_range", + "relevance_sort_without_query", + "empty_search_text", + "catalog_unavailable" +]
- Changed
cisa_search_kev8 fields changed- added
Input schema / properties / dateAddedFrom / formatAdded value: +"date" - changed
Input schema / properties / dateAddedFrom / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / dateAddedTo / formatAdded value: +"date" - changed
Input schema / properties / dateAddedTo / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / dueAfter / formatAdded value: +"date" - changed
Input schema / properties / dueAfter / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" - added
Input schema / properties / dueBefore / formatAdded value: +"date" - changed
Input schema / properties / dueBefore / patternPrevious value: -"^\\d{4}-\\d{2}-\\d{2}$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
Related MCP Connectors
Is a CVE exploited? CISA KEV, FIRST EPSS, CVSS and SSVC with a patch-first verdict. Free, no key.
CVE, KEV, EPSS, SBOM and advisory lookups; per-CVE exposure from Shodan data (© Shodan). Keyless.
CVE patch-priority API + MCP: CISA KEV, EPSS, CVSS, SSVC. Keys $19/mo; 200 free calls/day.
Daily CVE priorities ranked by real exploitation (KEV+EPSS) for AI agents; free teaser, paid full
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables prioritizing vulnerabilities by real-world exploitation evidence, combining CISA KEV, EPSS, CVSS, and SSVC to rank CVEs and package versions, and providing fix recommendations.42MIT
- AlicenseNot gradedqualityCmaintenanceEnables CVE lookups and risk assessment by integrating CISA Known Exploited Vulnerabilities (KEV) data and CVSS metrics. It helps users prioritize patching efforts by ranking vulnerabilities based on exploitation status and calculated risk scores.MIT
- AlicenseNot gradedqualityDmaintenanceProvides multi-source vulnerability intelligence for AI-powered security operations, combining NVD CVSS, CISA KEV, and EPSS scores without requiring an API key.1MIT
- AlicenseNot gradedqualityDmaintenanceMCP server to query and manage CISA Known Exploited Vulnerabilities catalog with EPSS overlay, enabling vulnerability checks and remediation deadline tracking.35 PyPIMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.