Skip to content

Releases

v0.5.0: CISA advisory evidence and triage corrections

Choose a tag to compare

@cyanheads cyanheads released this 14 Nov 06:30
v0.5.0
e897d54

CISA advisory evidence and triage corrections

  • Preserve verbatim CSAF vulnerability references, render HTTP(S) references as Markdown links, and expose an unambiguous FIRST CVSS v4 vector alongside published scores (#57).
  • Trim KEV and ICS vendor and product filters before matching and reject previously accepted padded one-character terms (#58).
  • Omit assignmentAgrees unless the KEV entry explicitly cites BOD 26-04 (#59).
  • Find republished ICS advisories by originating vendor ID and return distinct reference pairs, including separate CSAF and HTML links (#60).
  • Add detail: "full" to read uncapped RSS descriptions as literal text for items without an advisory ID and get lookup guidance for capped items with an ID (#61).
  • Describe variable historical KEV deadline gaps and point to actual RSS window dates (#62).
  • Omit generic title fields from resource list entries so clients display distinct record names (#63).
  • Dependencies better-sqlite3 ^13.0.3 → ^13.1.1 and @biomejs/biome 2.6.6 → 2.6.7.

CHANGELOG v0.5.0 · release PR #64

v0.4.1: CISA triage and advisory lookup corrections

Choose a tag to compare

@cyanheads cyanheads released this 11 Nov 12:15
v0.4.1
09e9883

CISA triage and advisory lookup corrections

  • Add opt-in detail: "summary" to KEV search for the eleven triage fields shared with CVE status (#52).
  • Compare both the remediation day count and forensic-triage requirement for SSVC assignment agreement (#50).
  • List indexed revisions with the same base ID when an exact advisory tool or resource lookup misses (#51).
  • Point KEV and ICS search callers to the cursor on non-final pages and suggest a higher limit only below the maximum (#53).
  • Echo all submitted SSVC IDs and scope SSVC and KEV absence notices to the processed IDs (#54).
  • Normalize recognized SSVC decision values from upstream and cached records, and preserve evidence with guidance when an unsupported value prevents timeline computation (#55).
  • Update the CISA cybersecurity guide to 1.1 with exposure and timeline reporting guidance.
  • Propagate caller cancellation in Vulnrichment lookups and provide retry guidance without exposing upstream exception text.
  • Preserve resource titles, advisory sync coordination, and MCPB skill loading across the framework update. Document JWT audience and issuer settings and raise the Bun minimum to 1.4.4.
  • Update @cyanheads/mcp-ts-core ^0.13.18 → ^0.13.22 alongside XML parser and development dependencies.

CHANGELOG v0.4.1 · release PR #56

v0.4.0: CISA investigation guide and scoped advisory evidence

Choose a tag to compare

@cyanheads cyanheads released this 01 Nov 03:51
v0.4.0
a0d08cb

CISA investigation guide and scoped advisory evidence

  • Publish the CISA cybersecurity guide as an MCP skill resource.
  • Accept oversized reads within a 1,000-input ceiling, retaining workload caps and explicit batch remainders; expose a clamping off switch and normalization telemetry. (#41)
  • Resolve grouped remediation applicability and preserve scoped flags and impact statements. (#43, #47)
  • Size KEV cursor pages from the current request's limit. (#44)
  • Retain advisory identity, source links, and attribution on outlines. (#45)
  • Continue within the available feed window using GUID cursors and explicit unavailable-anchor guidance. (#46)
  • Separate failed SSVC fetches from confirmed misses through outcomes, counts, and guidance. (#48)
  • Add Agent Plugins manifests and skill validation, remove development files from MCPB bundles while retaining runtime scripts and native modules, and synchronize development references and checks.
  • @cyanheads/mcp-ts-core ^0.13.15 → ^0.13.18
  • zod ^4.6.6 → ^4.6.7
  • @biomejs/biome 2.5.15 → 2.6.4
  • @types/node 26.6.5 → 26.6.6
  • @vitest/coverage-istanbul 5.0.3 → 5.0.5
  • ignore ^7.0.12 → ^7.0.14
  • tsc-alias ^1.9.7 → ^1.9.9
  • vitest ^5.0.3 → ^5.0.5
  • Bun package manager and container images 1.4.3 → 1.4.4

CHANGELOG v0.4.0 · release PR #49

v0.3.2: Complete CISA data and reliable refresh recovery

Choose a tag to compare

@cyanheads cyanheads released this 14 Oct 21:30
v0.3.2
18677bb

Complete CISA data and reliable refresh recovery

  • cisa_get_advisory keeps relationship product definitions and adds productIds to select products by exact ID (#33, #40)
  • Impossible calendar dates (month 13, February 30, non-leap February 29, and similar) are rejected on all nine date filters across cisa_search_kev, cisa_search_ics_advisories, and cisa_get_alerts (#38)
  • A malformed KEV feed is rejected whole instead of producing false inKev: false answers; a failed refresh keeps the last valid snapshot (#35)
  • cisa_get_alerts reports fetchedAt and stale, and serves cached items with retry guidance when a refresh fails (#37)
  • A partial advisory-index refresh keeps applied rows readable, retries unresolved documents, and reports partial status and failedDocumentCount (#34)
  • Transient SQLite lock failures surface as retryable mirror_busy (#28)
  • mirror:refresh on a never-seeded index exits with mirror:init guidance before any request, and the mirror:* scripts resolve imports in the npm package, bundle, and Docker image (#30)
  • stdin EOF during startup no longer strands a sync lease, and a first seed skipped under another process's lease retries in the background (#39)
  • Advisory Markdown renders upstream text literally, so <LABEL> placeholders stay visible (#36)
  • Test coverage thresholds pass without changes to thresholds or exclusions (#31); advisory index re-ingests once for the new content version; framework-skills resync
  • deps: @cyanheads/mcp-ts-core ^0.13.14 → ^0.13.15, zod ^4.6.5 → ^4.6.6 (+ @types/node 26.6.5, Bun 1.4.3)

CHANGELOG v0.3.2 · release PR #42

v0.3.1: mcp-ts-core 0.13.14: request IDs on errors, argument repair

Choose a tag to compare

@cyanheads cyanheads released this 09 Oct 06:51
v0.3.1
ec53903

mcp-ts-core 0.13.14: request IDs on errors, argument repair

  • Error results carry data.requestId, and a tool error's text ends request <id> (cyanheads/mcp-ts-core 0.13.10)
  • Tool arguments are repaired before validation: a numeric string for a number (limit: "5"), a lone string for a list (cveIds: "CVE-2021-44228"), and null for an optional field (cyanheads/mcp-ts-core 0.13.14)
  • An ICS advisory index that cannot be opened fails naming only csaf.sqlite3, never its directory (cyanheads/mcp-ts-core 0.13.12)
  • server.json npm entries run through npx, and the HTTP entry sets MCP_TRANSPORT_TYPE=http (cyanheads/mcp-ts-core 0.13.11)
  • The Docker image installs dependencies in a build-platform deps stage (cyanheads/mcp-ts-core 0.13.10) and drops musl-only native packages (cyanheads/mcp-ts-core 0.13.11)
  • framework: @cyanheads/mcp-ts-core ^0.13.6 → ^0.13.14; deps: fast-xml-parser ^5.11.1 → ^5.11.2, pino-pretty ^13.1.3 → ^13.2.0; dev: @biomejs/biome 2.5.14 → 2.5.15, @types/node 26.6.2 → 26.6.4, @vitest/coverage-istanbul 5.0.1 → 5.0.3, ignore ^7.0.10 → ^7.0.12, tsc-alias ^1.9.5 → ^1.9.7, vitest ^5.0.1 → ^5.0.3

CHANGELOG v0.3.1 · release PR #32

v0.3.0: Per-user index path, refresh on every transport, ICS notices

Choose a tag to compare

@cyanheads cyanheads released this 25 Sep 15:34
v0.3.0
d490ad4

Per-user index path, refresh on every transport, ICS notices

  • The ICS advisory index defaults to the per-user cache directory instead of <cwd>/.mirror/ (breaking); the Docker image pins it to its .mirror volume (#11)
  • An index that cannot be opened fails the ICS surfaces with a non-retryable mirror_unavailable, and cisa_list_reference topic sources says why (#11)
  • The index refreshes at boot and on schedule on every transport, stdio included (breaking), seeding rather than refreshing an index that never synced, and processes sharing one index sync under a cross-process lease (#12)
  • cisa_get_advisory misses report the index checkpoint and last sync, and flag an advisory that may be newer than the index (#12)
  • A refresh cron set to off disables its schedule; any other value node-cron rejects fails startup (breaking) (#24)
  • The cisa_search_ics_advisories zero-hit notice is computed from per-filter counts (#21)
  • vendor and product match labels with non-ASCII capitals and are capped at 512 characters (breaking) (#27)
  • ICS descriptions and reference topics drop corpus counts, with coverage notices following the index (#22); nameContains on cisa_search_kev spells ß, æ, ø and kin the Latin-ASCII way (#25)
  • deps: ignore ^7.0.9 → ^7.0.10 (dev); toolchain: Bun 1.4.0 → 1.4.2; tsc now typechecks the mirror scripts

CHANGELOG v0.3.0 · release PR #29

v0.2.0: KEV summary projection, notes references, per-filter notices

Choose a tag to compare

@cyanheads cyanheads released this 25 Sep 13:26
v0.2.0
4232621

KEV summary projection, notes references, per-filter notices

  • cisa_check_cve_status takes detail: "summary", the eleven triage fields per in-KEV record, so a 200-CVE batch stays compact (#9)
  • Every URL in a KEV entry's notes becomes a classified references[] entry (comma runs, URLs inside prose, a ; inside a URL), so every entry now carries an nvd reference (#15)
  • The cisa_search_kev zero-hit notice is computed from per-filter counts: it names the filter that matches nothing and what dropping it restores, and stops blaming filters that match alone (#16)
  • Breaking: a nameContains with no letter a-z or digit 0-9 now fails empty_search_text instead of returning zero results (#16)
  • Breaking: advertised advisoryId patterns are canonical uppercase and flag-free. Uppercase-suffix IDs now validate under strict clients, and strict clients reject lowercase, .json-suffixed, or padded inputs before sending; the server still normalizes them (#20)
  • cwe, cve, and cveIdPrefix filters normalize case and whitespace (#17); a nameContains word lost to folding is named in a notice with the tokens searched (#23); descriptions no longer state KEV counts that drift with each release (#19)
  • deps: @socketsecurity/bun-security-scanner ^1.1.2 → ^1.1.3, @types/node 26.6.1 → 26.6.2 (dev)

CHANGELOG v0.2.0 · release PR #26

v0.1.3: ICS search filters, full product index, per-CVE advisory reads

Choose a tag to compare

@cyanheads cyanheads released this 22 Sep 19:52
v0.1.3
d2e8b2e

ICS search filters, full product index, per-CVE advisory reads

  • cwe filter on cisa_search_ics_advisories via a new advisory_cwes junction table (#10)
  • inKev filter and per-result kevCves on cisa_search_ics_advisories, best-effort unless inKev is set (#14)
  • cves input on cisa_get_advisory narrows the vulnerabilities section to named CVEs; both outline arms list the section's CVE IDs (#13)
  • Every advisory product row is now stored and indexed — the 200-row cap is gone (#6)
  • q with no searchable text now throws empty_search_text instead of matching the whole corpus; vendor/product escape % and _ so they match literally (#7)
  • Sector extraction resolves the short forms Transportation, Water, Healthcare, Healthcare, Public Health, and Health, Public Health (#8)
  • Ingest content is now versioned: an existing advisory index re-ingests itself in the background on the server's next start, no operator step needed
  • deps: fast-check (dev) ^4.10.1 → ^4.10.2

CHANGELOG v0.1.3 · release PR #18

v0.1.2: Public hosted endpoint at cisa-cybersecurity.caseyjhand.com

Choose a tag to compare

@cyanheads cyanheads released this 20 Sep 14:05
v0.1.2
c438910

Public hosted endpoint at cisa-cybersecurity.caseyjhand.com

  • server.json remotes declares the public Streamable HTTP endpoint, so registry clients can connect without installing the package
  • README carries the hosted endpoint link and a ready-to-paste streamable-http client config alongside the stdio, npx, and Docker options

CHANGELOG v0.1.2 · release PR #5

v0.1.1: CISA KEV, SSVC, and the ICS advisory corpus over MCP

Choose a tag to compare

@cyanheads cyanheads released this 20 Sep 03:39
v0.1.1
16128df

CISA KEV, SSVC, and the ICS advisory corpus over MCP

  • KEV over MCP: cisa_check_cve_status (200 CVE IDs per call from a cached snapshot) and cisa_search_kev (whole-snapshot filters, three-state directive)
  • cisa_get_ssvc: CISA's published decision points plus the BOD 26-04 Table 1 timeline they imply for a caller-supplied assetExposure, reported beside CISA's own KEV due date
  • ICS advisory corpus back to 2010 as an embedded SQLite + FTS5 index, searched by cisa_search_ics_advisories and read by cisa_get_advisory, with mirror:init / mirror:refresh / mirror:verify for out-of-band control
  • cisa_get_alerts over the three publication feeds, and cisa_list_reference decoding the vocabulary the rest of the surface takes as input
  • Resources cisa://kev/{cveId} and cisa://advisory/{advisoryId}
  • Bounds on upstream input: per-source body ceilings, a 64 MiB tar-entry ceiling, changes.csv source-path validation, a cisa.gov host check on self references, and a 512-character search-text cap
  • CVE IDs normalize before validation (#1); the advisory resource's outline notice names cisa_get_advisory (#2); cisa_list_reference topic sources reports index state rather than a filesystem path (#3)
  • Seven optional CISA_* variables, Docker image, and .mcpb bundle
  • deps: better-sqlite3 ^13.0.3, fast-xml-parser ^5.11.1, node-cron ^4.6.0

CHANGELOG v0.1.1 · release PR #4