@cyanheads/nist-nvd-mcp-server 0.1.15 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/AGENTS.md +11 -6
  2. package/CLAUDE.md +11 -6
  3. package/README.md +11 -7
  4. package/changelog/0.1.x/0.1.16.md +21 -0
  5. package/changelog/0.1.x/0.1.17.md +13 -0
  6. package/dist/mcp-server/resources/definitions/nvd-cve.resource.d.ts +5 -0
  7. package/dist/mcp-server/resources/definitions/nvd-cve.resource.d.ts.map +1 -1
  8. package/dist/mcp-server/resources/definitions/nvd-cve.resource.js +6 -6
  9. package/dist/mcp-server/resources/definitions/nvd-cve.resource.js.map +1 -1
  10. package/dist/mcp-server/tools/definitions/nvd-audit-cpe.tool.d.ts +2 -0
  11. package/dist/mcp-server/tools/definitions/nvd-audit-cpe.tool.d.ts.map +1 -1
  12. package/dist/mcp-server/tools/definitions/nvd-audit-cpe.tool.js +47 -33
  13. package/dist/mcp-server/tools/definitions/nvd-audit-cpe.tool.js.map +1 -1
  14. package/dist/mcp-server/tools/definitions/nvd-get-cve.tool.d.ts +19 -1
  15. package/dist/mcp-server/tools/definitions/nvd-get-cve.tool.d.ts.map +1 -1
  16. package/dist/mcp-server/tools/definitions/nvd-get-cve.tool.js +51 -38
  17. package/dist/mcp-server/tools/definitions/nvd-get-cve.tool.js.map +1 -1
  18. package/dist/mcp-server/tools/definitions/nvd-search-cpes.tool.d.ts +2 -0
  19. package/dist/mcp-server/tools/definitions/nvd-search-cpes.tool.d.ts.map +1 -1
  20. package/dist/mcp-server/tools/definitions/nvd-search-cpes.tool.js +34 -7
  21. package/dist/mcp-server/tools/definitions/nvd-search-cpes.tool.js.map +1 -1
  22. package/dist/mcp-server/tools/definitions/nvd-search-cves.tool.d.ts +1 -0
  23. package/dist/mcp-server/tools/definitions/nvd-search-cves.tool.d.ts.map +1 -1
  24. package/dist/mcp-server/tools/definitions/nvd-search-cves.tool.js +24 -28
  25. package/dist/mcp-server/tools/definitions/nvd-search-cves.tool.js.map +1 -1
  26. package/dist/mcp-server/tools/formatting/cpe-match.d.ts +46 -0
  27. package/dist/mcp-server/tools/formatting/cpe-match.d.ts.map +1 -0
  28. package/dist/mcp-server/tools/formatting/cpe-match.js +43 -0
  29. package/dist/mcp-server/tools/formatting/cpe-match.js.map +1 -0
  30. package/dist/mcp-server/tools/schemas/brief-cve.d.ts +41 -0
  31. package/dist/mcp-server/tools/schemas/brief-cve.d.ts.map +1 -0
  32. package/dist/mcp-server/tools/schemas/brief-cve.js +46 -0
  33. package/dist/mcp-server/tools/schemas/brief-cve.js.map +1 -0
  34. package/dist/services/nvd-cpe/nvd-cpe-service.d.ts +3 -0
  35. package/dist/services/nvd-cpe/nvd-cpe-service.d.ts.map +1 -1
  36. package/dist/services/nvd-cpe/nvd-cpe-service.js +3 -2
  37. package/dist/services/nvd-cpe/nvd-cpe-service.js.map +1 -1
  38. package/dist/services/nvd-cve/nvd-cve-service.d.ts +23 -0
  39. package/dist/services/nvd-cve/nvd-cve-service.d.ts.map +1 -1
  40. package/dist/services/nvd-cve/nvd-cve-service.js +33 -3
  41. package/dist/services/nvd-cve/nvd-cve-service.js.map +1 -1
  42. package/dist/services/nvd-cve/types.d.ts +17 -6
  43. package/dist/services/nvd-cve/types.d.ts.map +1 -1
  44. package/manifest.json +1 -1
  45. package/package.json +1 -1
  46. package/server.json +3 -3
package/AGENTS.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** nist-nvd-mcp-server
4
- **Version:** 0.1.15
4
+ **Version:** 0.1.17
5
5
  **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.0`
6
6
  **Engines:** Bun ≥1.3.0, Node ≥24.0.0
7
7
  **MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
@@ -67,12 +67,15 @@ export const nvdSearchCpes = tool('nvd_search_cpes', {
67
67
  title: z.string().optional().describe('Human-readable title.'),
68
68
  deprecated: z.boolean().describe('Whether this CPE is deprecated.'),
69
69
  })).describe('Matching CPE dictionary entries.'),
70
- queryMeta: z.object({
71
- totalResults: z.number().describe('Total matches before limit.'),
72
- returned: z.number().describe('Entries returned.'),
73
- }).describe('Pagination metadata.'),
74
70
  }),
75
71
 
72
+ // Pagination totals are agent-facing context, not domain payload — declare them as
73
+ // `enrichment` and populate via ctx.enrich so they reach structuredContent AND content[].
74
+ enrichment: {
75
+ totalCount: z.number().describe('Total matches before the limit was applied.'),
76
+ returned: z.number().describe('Entries returned.'),
77
+ },
78
+
76
79
  errors: [
77
80
  {
78
81
  reason: 'missing_search_input',
@@ -91,7 +94,9 @@ export const nvdSearchCpes = tool('nvd_search_cpes', {
91
94
  ctx.log.info('Searching CPE dictionary', { keyword: input.keyword, limit: input.limit });
92
95
  const service = getNvdCpeService();
93
96
  const result = await service.searchCpes({ keyword: input.keyword, cpeMatchString: input.cpeMatchString, limit: input.limit }, ctx);
94
- return { cpes: result.cpes, queryMeta: { totalResults: result.totalResults, returned: result.returned } };
97
+ ctx.enrich({ returned: result.returned });
98
+ ctx.enrich.total(result.totalResults);
99
+ return { cpes: result.cpes };
95
100
  },
96
101
 
97
102
  format: (result) => [{ type: 'text', text: result.cpes.map(c => `**${c.title ?? c.cpeName}**: \`${c.cpeName}\``).join('\n') }],
package/CLAUDE.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** nist-nvd-mcp-server
4
- **Version:** 0.1.15
4
+ **Version:** 0.1.17
5
5
  **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.11.0`
6
6
  **Engines:** Bun ≥1.3.0, Node ≥24.0.0
7
7
  **MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
@@ -67,12 +67,15 @@ export const nvdSearchCpes = tool('nvd_search_cpes', {
67
67
  title: z.string().optional().describe('Human-readable title.'),
68
68
  deprecated: z.boolean().describe('Whether this CPE is deprecated.'),
69
69
  })).describe('Matching CPE dictionary entries.'),
70
- queryMeta: z.object({
71
- totalResults: z.number().describe('Total matches before limit.'),
72
- returned: z.number().describe('Entries returned.'),
73
- }).describe('Pagination metadata.'),
74
70
  }),
75
71
 
72
+ // Pagination totals are agent-facing context, not domain payload — declare them as
73
+ // `enrichment` and populate via ctx.enrich so they reach structuredContent AND content[].
74
+ enrichment: {
75
+ totalCount: z.number().describe('Total matches before the limit was applied.'),
76
+ returned: z.number().describe('Entries returned.'),
77
+ },
78
+
76
79
  errors: [
77
80
  {
78
81
  reason: 'missing_search_input',
@@ -91,7 +94,9 @@ export const nvdSearchCpes = tool('nvd_search_cpes', {
91
94
  ctx.log.info('Searching CPE dictionary', { keyword: input.keyword, limit: input.limit });
92
95
  const service = getNvdCpeService();
93
96
  const result = await service.searchCpes({ keyword: input.keyword, cpeMatchString: input.cpeMatchString, limit: input.limit }, ctx);
94
- return { cpes: result.cpes, queryMeta: { totalResults: result.totalResults, returned: result.returned } };
97
+ ctx.enrich({ returned: result.returned });
98
+ ctx.enrich.total(result.totalResults);
99
+ return { cpes: result.cpes };
95
100
  },
96
101
 
97
102
  format: (result) => [{ type: 'text', text: result.cpes.map(c => `**${c.title ?? c.cpeName}**: \`${c.cpeName}\``).join('\n') }],
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.1.15-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/nist-nvd-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/nist-nvd-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/nist-nvd-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.14-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.1.17-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/nist-nvd-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/nist-nvd-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/nist-nvd-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.14-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -49,8 +49,9 @@ The primary discovery tool for vulnerability surveillance and triage workflows.
49
49
  - CISA KEV filter — limit results to known-exploited vulnerabilities
50
50
  - Convenience date shorthands: `pubDays` and `lastModDays` for "last N days" queries
51
51
  - Explicit ISO 8601 date range parameters (`pubStartDate`/`pubEndDate`, etc.) with 120-day max span
52
- - Auto-clamps convenience date params that exceed 120 days and reports clamped values in `queryMeta`
52
+ - Auto-clamps convenience date params that exceed 120 days and reports clamped values in the response enrichment
53
53
  - Pagination via `limit` (up to 2000) and `offset`
54
+ - Every row carries a truncated description alongside the ID, so results are distinguishable without a follow-up fetch
54
55
  - Results are always brief; call `nvd_get_cve` for full detail
55
56
 
56
57
  ---
@@ -61,9 +62,10 @@ Fetch one or more CVEs by ID with full detail or brief summaries.
61
62
 
62
63
  - Batch up to 100 CVE IDs per call
63
64
  - Full mode: all CVSS scores across v2.0, v3.0, v3.1, and v4.0; CWE weaknesses; CPE configurations; CISA KEV fields; references
64
- - Brief mode (`brief: true`): ID, status, top severity, KEV name — recommended for batches larger than 10
65
+ - Brief mode (`brief: true`): ID, status, top severity, KEV name, truncated description — recommended for batches larger than 10
65
66
  - `includeReferences: false` to strip the references array and reduce response size
66
- - Per-ID parity check: `queryMeta.missingIds` lists any requested IDs NVD didn't return
67
+ - Per-ID parity check: the `missingIds` enrichment field lists any requested IDs NVD didn't return
68
+ - Rendered text carries the affected-product criteria and references the record holds, capped with a `… N more` trailer; `allLanguages: true` renders every localized description, not just English
67
69
 
68
70
  ---
69
71
 
@@ -73,7 +75,7 @@ Look up product identifiers before auditing.
73
75
 
74
76
  - Keyword search (e.g., `"apache http server"`, `"openssl"`) or partial CPEv2.3 pattern
75
77
  - Returns full CPE name, human-readable title, deprecation status, and superseding CPEs
76
- - Pagination up to 10,000 entries — narrow the keyword when `totalResults > returned`
78
+ - Pagination via `limit` (up to 10,000 per page) and `offset` — a vendor-level keyword can match tens of thousands of entries, so page with `offset` rather than trying to narrow further
77
79
  - Use this before `nvd_audit_cpe` — CPE names are arcane strings; guessing audits the wrong product
78
80
 
79
81
  ---
@@ -86,7 +88,8 @@ Full CVE audit for a specific product version.
86
88
  - Version range via `versionStart`/`versionEnd` with inclusive/exclusive type control
87
89
  - Client-side severity filter (`severityMin`) to strip low-signal entries
88
90
  - Returns full CVE records (ID, CVSS scores, CWE, CPE configurations, KEV fields, references)
89
- - Echoes the CPE identifier used in `queryMeta` so callers can verify the correct product was queried
91
+ - Pagination via `limit` (up to 2000) and `offset` — page at a modest `limit` instead of raising it, since each result is a full record
92
+ - Echoes the CPE identifier used in the response enrichment so callers can verify the correct product was queried
90
93
 
91
94
  ---
92
95
 
@@ -128,9 +131,10 @@ NVD-specific:
128
131
 
129
132
  Agent-friendly output:
130
133
 
131
- - `queryMeta` on every response — total results, returned count, page offset, and any date-clamping events so agents can reason about what was actually queried
134
+ - An `enrichment` block on every response, carried on both `structuredContent` and the rendered text — total results, returned count, page offset, the filters actually applied, and any date-clamping events, so agents can reason about what was really queried
132
135
  - `missingIds` in batch CVE lookups — per-ID parity check instead of a silent partial result
133
136
  - CPE echo in audit responses — `cpeName` or `virtualMatchString` reflected back so callers can verify the correct product was audited
137
+ - Empty-result notices that name the cause — an unmatched query, a severity threshold that emptied the page, and an offset past the end of the result set are told apart rather than all reading as "nothing found"
134
138
 
135
139
  ## Getting started
136
140
 
@@ -0,0 +1,21 @@
1
+ ---
2
+ summary: "nvd_audit_cpe and nvd_search_cpes gain offset paging; nvd_get_cve's format() renders CPE match criteria and every language a record carries instead of a bare count and English-only text; search results carry a truncated description; docs/design.md and README describe the enrichment block instead of the removed queryMeta envelope."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.1.16 — 2026-07-27
8
+
9
+ ## Added
10
+
11
+ - **`offset` input on `nvd_audit_cpe` and `nvd_search_cpes`** — zero-based, threaded to NVD's `startIndex` and echoed in the `enrichment` block alongside `totalCount` and `returned`, matching the pattern `nvd_search_cves` already used. `nvd_search_cpes`'s truncation notice now names the offset that reaches the remainder instead of telling the caller to narrow an already vendor-level keyword; both tools distinguish an offset past the end of the result set from their other empty-result cases. ([#31](https://github.com/cyanheads/nist-nvd-mcp-server/issues/31))
12
+ - **Truncated description on brief CVE rows** — `BriefCveRecord` gains an optional `description` (first 200 characters of the English text, exported as `BRIEF_DESCRIPTION_CHARS`), populated on both `nvd_search_cves` results and `nvd_get_cve`'s `brief: true` mode. Lets a caller distinguish search hits without a follow-up full-detail fetch. ([#32](https://github.com/cyanheads/nist-nvd-mcp-server/issues/32))
13
+
14
+ ## Changed
15
+
16
+ - **`nvd_get_cve`'s `format()` now matches `structuredContent`** — CPE match criteria render through the shared `formatCpeMatch()`/`flattenCpeMatches()` helpers (moved to `src/mcp-server/tools/formatting/cpe-match.ts`, also used by `nvd_audit_cpe`) instead of a bare node-group count, capped at 5 with a trailer pointing at `nvd_audit_cpe` for the remainder; every language a record carries renders under `allLanguages` instead of only English; references cap raised from 5 to 15. ([#30](https://github.com/cyanheads/nist-nvd-mcp-server/issues/30))
17
+ - **`docs/design.md`, `README.md`, and the tool template in `CLAUDE.md`/`AGENTS.md` describe the `enrichment` block** — all three still described the `queryMeta` output envelope, which stopped being emitted several releases ago. Rewritten against each tool's actual `enrichment` fields, including ones added since the drift started (`filtersApplied`, `severityMin`, `filteredCount`, `offset`). ([#26](https://github.com/cyanheads/nist-nvd-mcp-server/issues/26))
18
+
19
+ ## Fixed
20
+
21
+ - **`nvd://cve/{cveId}` resource carried a dead empty-result branch** — a single-ID miss always throws `cve_not_found` inside `fetchById`, so the resource's own `result.cves.length === 0` check could never execute. Removed; tests retargeted to exercise the real throw path over a mocked HTTP client.
@@ -0,0 +1,13 @@
1
+ ---
2
+ summary: "nvd_search_cves, nvd_search_cpes, and nvd_audit_cpe distinguish an offset past the result set from an empty page NVD returned inside a range it says has matches; nvd_search_cves and nvd_audit_cpe gain a next-page notice; nvd_get_cve's brief mode now shares its row builder with nvd_search_cves instead of duplicating it inline."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.1.17 — 2026-07-27
8
+
9
+ ## Changed
10
+
11
+ - **Empty-page notices on all three paginating tools separate three outcomes** — `nvd_search_cves`, `nvd_search_cpes`, and `nvd_audit_cpe` no longer treat any empty page as an overrun offset. The past-the-end notice now requires `offset >= totalResults`; a valid offset inside a non-zero `totalResults` gets its own notice naming the contradiction (NVD reported matches but returned none) instead of "lower the offset" or "nothing matched," neither of which is true there. ([#34](https://github.com/cyanheads/nist-nvd-mcp-server/issues/34))
12
+ - **`nvd_search_cves` and `nvd_audit_cpe` gain the next-page notice `nvd_search_cpes` already had** — a partial page now names the offset that reaches the next one. `nvd_audit_cpe` advances by `returned + filteredCount`, not `offset + returned`: its `returned` count is taken after the client-side `severityMin` filter, while NVD spent an index position on every row it served, so advancing by `returned` alone would re-serve rows the filter had just dropped. ([#36](https://github.com/cyanheads/nist-nvd-mcp-server/issues/36))
13
+ - **`nvd_get_cve`'s brief mode calls the service's `toBriefCve()` instead of rebuilding the row inline** — `BriefCveRecordSchema` moved to `src/mcp-server/tools/schemas/brief-cve.ts`, shared by `nvd_search_cves`; `UnfilteredBriefCveRecordSchema` covers `nvd_get_cve`, which has no severity filter and so never emits `filteredSeverity`. The brief output schema declares these fields directly instead of an untyped passthrough object, so a divergence between the two surfaces now fails the typecheck. `CveRecord` and `BriefCveRecord` in `src/services/nvd-cve/types.ts` became `type` aliases to get the implicit index signature that returning them against a passthrough schema needs. ([#35](https://github.com/cyanheads/nist-nvd-mcp-server/issues/35))
@@ -12,6 +12,11 @@ export declare const nvdCveResource: import("@cyanheads/mcp-ts-core").ResourceDe
12
12
  readonly when: "The cveId segment of the URI fails format validation.";
13
13
  readonly recovery: "Use a URI of the form nvd://cve/CVE-YYYY-NNNNN, for example nvd://cve/CVE-2021-44228.";
14
14
  }, {
15
+ /**
16
+ * Thrown by the service, not this handler: a single-ID fetch that NVD answers with no
17
+ * records raises `cve_not_found` there. The entry stays declared here so the service's
18
+ * `ctx.recoveryFor('cve_not_found')` resolves this recovery text onto the wire.
19
+ */
15
20
  readonly reason: "cve_not_found";
16
21
  readonly code: JsonRpcErrorCode.NotFound;
17
22
  readonly when: "The CVE ID is well-formed but NVD holds no record for it.";
@@ -1 +1 @@
1
- {"version":3,"file":"nvd-cve.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/nvd-cve.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,eAAO,MAAM,cAAc;;;;;;;;;;;;GA2DzB,CAAC"}
1
+ {"version":3,"file":"nvd-cve.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/nvd-cve.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAKjE,eAAO,MAAM,cAAc;;;;;;;;IAuBrB;;;;OAIG;;;;;GA+BP,CAAC"}
@@ -25,6 +25,11 @@ export const nvdCveResource = resource('nvd://cve/{cveId}', {
25
25
  recovery: 'Use a URI of the form nvd://cve/CVE-YYYY-NNNNN, for example nvd://cve/CVE-2021-44228.',
26
26
  },
27
27
  {
28
+ /**
29
+ * Thrown by the service, not this handler: a single-ID fetch that NVD answers with no
30
+ * records raises `cve_not_found` there. The entry stays declared here so the service's
31
+ * `ctx.recoveryFor('cve_not_found')` resolves this recovery text onto the wire.
32
+ */
28
33
  reason: 'cve_not_found',
29
34
  code: JsonRpcErrorCode.NotFound,
30
35
  when: 'The CVE ID is well-formed but NVD holds no record for it.',
@@ -38,13 +43,8 @@ export const nvdCveResource = resource('nvd://cve/{cveId}', {
38
43
  }
39
44
  ctx.log.debug('Fetching CVE resource', { cveId });
40
45
  const service = getNvdCveService();
46
+ // A single-ID miss throws `cve_not_found` inside fetchById, so this always has a record.
41
47
  const result = await service.fetchById([cveId.toUpperCase()], { includeReferences: true, allLanguages: false }, ctx);
42
- if (result.cves.length === 0) {
43
- throw ctx.fail('cve_not_found', `CVE ${cveId} not found in the NVD database.`, {
44
- cveId,
45
- ...ctx.recoveryFor('cve_not_found'),
46
- });
47
- }
48
48
  return result.cves[0];
49
49
  },
50
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"nvd-cve.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/nvd-cve.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC,mBAAmB,EAAE;IAC1D,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,sEAAsE;QACtE,0FAA0F;QAC1F,sDAAsD;IACxD,QAAQ,EAAE,kBAAkB;IAE5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CAAC,gFAAgF,CAAC;KAC9F,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,uBAAuB;YAC/B,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,uDAAuD;YAC7D,QAAQ,EACN,uFAAuF;SAC1F;QACD;YACE,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,2DAA2D;YACjE,QAAQ,EACN,2FAA2F;SAC9F;KACF;IAED,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;QACvB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC,IAAI,CACZ,uBAAuB,EACvB,2BAA2B,KAAK,qCAAqC,EACrE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,CACvD,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QAEnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CACpC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EACrB,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAChD,GAAG,CACJ,CAAC;QAEF,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,KAAK,iCAAiC,EAAE;gBAC7E,KAAK;gBACL,GAAG,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"nvd-cve.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/nvd-cve.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC,mBAAmB,EAAE;IAC1D,IAAI,EAAE,gBAAgB;IACtB,WAAW,EACT,sEAAsE;QACtE,0FAA0F;QAC1F,sDAAsD;IACxD,QAAQ,EAAE,kBAAkB;IAE5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CAAC,gFAAgF,CAAC;KAC9F,CAAC;IAEF,MAAM,EAAE;QACN;YACE,MAAM,EAAE,uBAAuB;YAC/B,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,uDAAuD;YAC7D,QAAQ,EACN,uFAAuF;SAC1F;QACD;YACE;;;;eAIG;YACH,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,2DAA2D;YACjE,QAAQ,EACN,2FAA2F;SAC9F;KACF;IAED,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;QACvB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC,IAAI,CACZ,uBAAuB,EACvB,2BAA2B,KAAK,qCAAqC,EACrE,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,uBAAuB,CAAC,EAAE,CACvD,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QAEnC,yFAAyF;QACzF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CACpC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EACrB,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,EAChD,GAAG,CACJ,CAAC;QAEF,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;CACF,CAAC,CAAC"}
@@ -25,6 +25,7 @@ export declare const nvdAuditCpe: import("@cyanheads/mcp-ts-core").ToolDefinitio
25
25
  }>>;
26
26
  allLanguages: z.ZodDefault<z.ZodBoolean>;
27
27
  limit: z.ZodDefault<z.ZodNumber>;
28
+ offset: z.ZodDefault<z.ZodNumber>;
28
29
  }, z.core.$strip>, z.ZodObject<{
29
30
  cves: z.ZodArray<z.ZodObject<{
30
31
  cveId: z.ZodString;
@@ -111,6 +112,7 @@ export declare const nvdAuditCpe: import("@cyanheads/mcp-ts-core").ToolDefinitio
111
112
  }], {
112
113
  readonly totalCount: z.ZodNumber;
113
114
  readonly returned: z.ZodNumber;
115
+ readonly offset: z.ZodNumber;
114
116
  readonly auditTarget: z.ZodString;
115
117
  readonly severityMin: z.ZodOptional<z.ZodString>;
116
118
  readonly filteredCount: z.ZodOptional<z.ZodNumber>;
@@ -1 +1 @@
1
- {"version":3,"file":"nvd-audit-cpe.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/nvd-audit-cpe.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAsJjE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyTtB,CAAC"}
1
+ {"version":3,"file":"nvd-audit-cpe.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/nvd-audit-cpe.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA0HjE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8VtB,CAAC"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ import { CPE_MATCH_CAP, flattenCpeMatches } from '../../../mcp-server/tools/formatting/cpe-match.js';
7
8
  import { getNvdCveService } from '../../../services/nvd-cve/nvd-cve-service.js';
8
9
  const CPE_V23_REGEX = /^cpe:2\.3:/i;
9
10
  const CvssScoreSchema = z.object({
@@ -28,30 +29,8 @@ const CpeMatchSchema = z.object({
28
29
  versionEndIncluding: z.string().optional().describe('Inclusive upper version bound.'),
29
30
  versionEndExcluding: z.string().optional().describe('Exclusive upper version bound.'),
30
31
  });
31
- /** Cap on CPE match criteria rendered per CVE — mirrors the references cap in this formatter. */
32
- const CPE_MATCH_CAP = 5;
33
- /**
34
- * Render one CPE match as a single line: the criteria string, its version bounds, and the
35
- * operators that govern it. `nodeOperator` combines the matches inside a node; `groupOperator`
36
- * combines sibling nodes in the group, so an `AND` there marks conditions that hold together
37
- * (e.g. a firmware match and the hardware it runs on) rather than independent alternatives.
38
- */
39
- function formatCpeMatch(match, groupOperator, nodeOperator) {
40
- const bounds = [
41
- match.versionStartIncluding && `>= ${match.versionStartIncluding}`,
42
- match.versionStartExcluding && `> ${match.versionStartExcluding}`,
43
- match.versionEndIncluding && `<= ${match.versionEndIncluding}`,
44
- match.versionEndExcluding && `< ${match.versionEndExcluding}`,
45
- ].filter(Boolean);
46
- const notes = [
47
- nodeOperator,
48
- groupOperator && `${groupOperator} with sibling nodes`,
49
- match.vulnerable ? undefined : 'not the vulnerable component',
50
- ].filter(Boolean);
51
- return (`${match.criteria}` +
52
- (bounds.length > 0 ? ` (${bounds.join(', ')})` : '') +
53
- (notes.length > 0 ? ` [${notes.join('; ')}]` : ''));
54
- }
32
+ /** References rendered per CVE — this tool returns full records for many CVEs at once. */
33
+ const REFERENCE_CAP = 5;
55
34
  const CveRecordSchema = z.object({
56
35
  cveId: z.string().describe('CVE identifier (e.g., "CVE-2021-44228").'),
57
36
  vulnStatus: z.string().describe('NVD analysis status.'),
@@ -172,6 +151,13 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
172
151
  .max(2000)
173
152
  .default(20)
174
153
  .describe('Maximum number of CVEs to return (default 20, max 2000).'),
154
+ offset: z
155
+ .number()
156
+ .int()
157
+ .min(0)
158
+ .default(0)
159
+ .describe('Zero-based page offset for pagination. Page through totalCount with a modest limit ' +
160
+ 'rather than raising limit — this tool returns full CVE records, so a large limit is a large response.'),
175
161
  }),
176
162
  output: z.object({
177
163
  cves: z
@@ -181,6 +167,7 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
181
167
  enrichment: {
182
168
  totalCount: z.number().describe('Total CVEs matched before pagination.'),
183
169
  returned: z.number().describe('Number of CVE records returned.'),
170
+ offset: z.number().describe('Page offset used in this query.'),
184
171
  auditTarget: z.string().describe('The CPE name or virtual match string used for this audit.'),
185
172
  severityMin: z
186
173
  .string()
@@ -193,10 +180,11 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
193
180
  notice: z
194
181
  .string()
195
182
  .optional()
196
- .describe('Guidance when no CVEs were returned — distinguishes an unknown CPE from a severityMin filter that dropped everything on the page.'),
183
+ .describe('Guidance on the shape of this page. When no CVEs came back it distinguishes an unknown CPE from a severityMin filter that dropped everything on the page, from an offset past the result set, from an empty page NVD returned inside a range it says has matches. On a partial page it names the offset that reaches the next one.'),
197
184
  },
198
185
  enrichmentTrailer: {
199
186
  returned: { label: 'Returned' },
187
+ offset: { label: 'Offset' },
200
188
  auditTarget: { label: 'Audit Target' },
201
189
  severityMin: { label: 'Severity Filter' },
202
190
  filteredCount: { label: 'Dropped by Severity Filter' },
@@ -261,6 +249,7 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
261
249
  cpeName: input.cpeName,
262
250
  virtualMatchString: input.virtualMatchString,
263
251
  limit: input.limit,
252
+ offset: input.offset,
264
253
  });
265
254
  const service = getNvdCveService();
266
255
  const result = await service.auditCpe({
@@ -273,10 +262,12 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
273
262
  ...(input.severityMin && { severityMin: input.severityMin }),
274
263
  allLanguages: input.allLanguages,
275
264
  limit: input.limit,
265
+ offset: input.offset,
276
266
  }, ctx);
277
267
  const auditTarget = result.cpeName ?? result.virtualMatchString ?? 'unknown CPE';
278
268
  ctx.enrich({
279
269
  returned: result.returned,
270
+ offset: result.offset,
280
271
  auditTarget,
281
272
  ...(input.severityMin && {
282
273
  severityMin: input.severityMin,
@@ -285,16 +276,38 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
285
276
  });
286
277
  ctx.enrich.total(result.totalResults);
287
278
  if (result.cves.length === 0) {
288
- // Distinguish "the CPE has no CVEs" from "severityMin dropped everything on the page":
289
- // filteredCount > 0 means NVD did return CVEs, they were just below the threshold.
290
- if (input.severityMin && result.filteredCount > 0) {
279
+ /**
280
+ * Four ways a page comes back empty, narrowest first. An offset at or past totalCount means
281
+ * the product has CVEs and this page merely sits past them. filteredCount > 0 means NVD did
282
+ * return CVEs and severityMin cut them. A valid offset inside a non-zero totalCount means
283
+ * NVD contradicted its own count, so neither the offset nor the target is at fault. Only a
284
+ * zero count warrants re-checking the target — every earlier branch exists to keep the
285
+ * caller from being sent after a mistake they did not make.
286
+ */
287
+ if (result.totalResults > 0 && input.offset >= result.totalResults) {
288
+ ctx.enrich.notice(`Offset ${input.offset} is past the end of the result set (${result.totalResults} total). Use a lower offset to page through results.`);
289
+ }
290
+ else if (input.severityMin && result.filteredCount > 0) {
291
291
  ctx.enrich.notice(`All ${result.filteredCount} CVE(s) on the fetched page scored below ${input.severityMin}. ` +
292
292
  'Lower severityMin or raise limit to widen the page NVD returns.');
293
293
  }
294
+ else if (result.totalResults > 0) {
295
+ ctx.enrich.notice(`NVD reported ${result.totalResults} CVE(s) for this audit target but returned none at offset ${input.offset}, which is inside that range. Retry the query; neither the offset nor the audit target is the problem.`);
296
+ }
294
297
  else {
295
- ctx.enrich.notice('No CVEs found for this product. Verify the CPE name with nvd_search_cpes.');
298
+ ctx.enrich.notice('NVD returned no CVEs for this audit target. Verify it exists in the CPE dictionary with nvd_search_cpes.');
296
299
  }
297
300
  }
301
+ else if (result.totalResults > result.offset + result.returned + result.filteredCount) {
302
+ /**
303
+ * Advance by what NVD's page consumed, not by what survived it: `returned` counts the rows
304
+ * left after the client-side severityMin filter, so paging on `offset + returned` alone
305
+ * would re-serve every row that filter dropped. `returned + filteredCount` is the span NVD
306
+ * actually spent index positions on, and collapses to `returned` when no filter is set.
307
+ */
308
+ const consumed = result.returned + result.filteredCount;
309
+ ctx.enrich.notice(`Results truncated — ${result.totalResults} CVEs match this audit target; set offset to ${result.offset + consumed} for the next page.`);
310
+ }
298
311
  return { cves: result.cves };
299
312
  },
300
313
  format: (result) => {
@@ -338,7 +351,7 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
338
351
  lines.push(` - Required Action: ${cve.cisaKev.requiredAction}`);
339
352
  }
340
353
  if (cve.configurations && cve.configurations.length > 0) {
341
- const matches = cve.configurations.flatMap((cfg) => cfg.nodes.flatMap((node) => node.cpeMatch.map((m) => formatCpeMatch(m, cfg.operator, node.operator))));
354
+ const matches = flattenCpeMatches(cve.configurations);
342
355
  lines.push(`**Configurations:** ${cve.configurations.length} node group(s), ${matches.length} CPE match(es)`);
343
356
  for (const match of matches.slice(0, CPE_MATCH_CAP))
344
357
  lines.push(` - ${match}`);
@@ -348,13 +361,14 @@ export const nvdAuditCpe = tool('nvd_audit_cpe', {
348
361
  }
349
362
  if (cve.references && cve.references.length > 0) {
350
363
  lines.push(`**References (${cve.references.length}):**`);
351
- for (const ref of cve.references.slice(0, 5)) {
364
+ for (const ref of cve.references.slice(0, REFERENCE_CAP)) {
352
365
  const sourcePart = ref.source ? ` [${ref.source}]` : '';
353
366
  const tagPart = ref.tags?.length ? ` (${ref.tags.join(', ')})` : '';
354
367
  lines.push(` - ${ref.url}${sourcePart}${tagPart}`);
355
368
  }
356
- if (cve.references.length > 5)
357
- lines.push(` - … ${cve.references.length - 5} more`);
369
+ if (cve.references.length > REFERENCE_CAP) {
370
+ lines.push(` - … ${cve.references.length - REFERENCE_CAP} more`);
371
+ }
358
372
  }
359
373
  lines.push('');
360
374
  }
@@ -1 +1 @@
1
- {"version":3,"file":"nvd-audit-cpe.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/nvd-audit-cpe.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAEzE,MAAM,aAAa,GAAG,aAAa,CAAC;AAEpC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACpF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACxD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAChF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACpE,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC5D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;CACjF,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,UAAU,EAAE,CAAC;SACV,OAAO,EAAE;SACT,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC/D,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACvF,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACvF,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACrF,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CACtF,CAAC,CAAC;AAEH,iGAAiG;AACjG,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;;;;GAKG;AACH,SAAS,cAAc,CACrB,KAAqC,EACrC,aAAiC,EACjC,YAAgC;IAEhC,MAAM,MAAM,GAAG;QACb,KAAK,CAAC,qBAAqB,IAAI,MAAM,KAAK,CAAC,qBAAqB,EAAE;QAClE,KAAK,CAAC,qBAAqB,IAAI,KAAK,KAAK,CAAC,qBAAqB,EAAE;QACjE,KAAK,CAAC,mBAAmB,IAAI,MAAM,KAAK,CAAC,mBAAmB,EAAE;QAC9D,KAAK,CAAC,mBAAmB,IAAI,KAAK,KAAK,CAAC,mBAAmB,EAAE;KAC9D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,MAAM,KAAK,GAAG;QACZ,YAAY;QACZ,aAAa,IAAI,GAAG,aAAa,qBAAqB;QACtD,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,8BAA8B;KAC9D,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClB,OAAO,CACL,GAAG,KAAK,CAAC,QAAQ,EAAE;QACnB,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACnD,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACtE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACvD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAChE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IACrE,YAAY,EAAE,CAAC;SACZ,KAAK,CACJ,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC3C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC/C,CAAC;SACD,QAAQ,CAAC,gCAAgC,CAAC,CAC9C;SACA,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,UAAU,EAAE,CAAC;SACV,KAAK,CAAC,eAAe,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;SACxD,QAAQ,CAAC,4CAA4C,CAAC;IACzD,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC7C,iDAAiD,CAClD;IACD,UAAU,EAAE,CAAC;SACV,KAAK,CACJ,CAAC;SACE,MAAM,CAAC;QACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC5D,MAAM,EAAE,CAAC;aACN,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;aACjD,QAAQ,CAAC,kCAAkC,CAAC;KAChD,CAAC;SACD,QAAQ,CAAC,oCAAoC,CAAC,CAClD;SACA,QAAQ,CAAC,+BAA+B,CAAC;IAC5C,cAAc,EAAE,CAAC;SACd,KAAK,CACJ,CAAC;SACE,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,8NAA8N,CAC/N;QACH,KAAK,EAAE,CAAC;aACL,KAAK,CACJ,CAAC;aACE,MAAM,CAAC;YACN,QAAQ,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,kEAAkE,CAAC;YAC/E,QAAQ,EAAE,CAAC;iBACR,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;iBAC1D,QAAQ,CAAC,mCAAmC,CAAC;SACjD,CAAC;aACD,QAAQ,CAAC,qDAAqD,CAAC,CACnE;aACA,QAAQ,CAAC,sBAAsB,CAAC;KACpC,CAAC;SACD,QAAQ,CAAC,2CAA2C,CAAC,CACzD;SACA,QAAQ,CAAC,kCAAkC,CAAC;IAC/C,UAAU,EAAE,CAAC;SACV,KAAK,CACJ,CAAC;SACE,MAAM,CAAC;QACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,IAAI,EAAE,CAAC;aACJ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;aACrD,QAAQ,EAAE;aACV,QAAQ,CAAC,sBAAsB,CAAC;KACpC,CAAC;SACD,QAAQ,CAAC,yBAAyB,CAAC,CACvC;SACA,QAAQ,EAAE;SACV,QAAQ,CAAC,sBAAsB,CAAC;IACnC,OAAO,EAAE,CAAC;SACP,MAAM,CAAC;QACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACtE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;QAC1E,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAClE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACrE,CAAC;SACD,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;CAC7E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE;IAC/C,KAAK,EAAE,+BAA+B;IACtC,WAAW,EACT,kGAAkG;QAClG,iIAAiI;QACjI,sIAAsI;QACtI,6EAA6E;QAC7E,2BAA2B;IAC7B,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;IAE/E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iFAAiF;YAC/E,kFAAkF,CACrF;QACH,kBAAkB,EAAE,CAAC;aAClB,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,sEAAsE;YACpE,6FAA6F,CAChG;QACH,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,mDAAmD,CAAC;QAChE,gBAAgB,EAAE,CAAC;aAChB,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;aAChC,OAAO,CAAC,WAAW,CAAC;aACpB,QAAQ,CAAC,4DAA4D,CAAC;QACzE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,cAAc,EAAE,CAAC;aACd,IAAI,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;aAChC,OAAO,CAAC,WAAW,CAAC;aACpB,QAAQ,CAAC,4DAA4D,CAAC;QACzE,WAAW,EAAE,CAAC;aACX,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;aAC3C,QAAQ,EAAE;aACV,QAAQ,CACP,2JAA2J,CAC5J;QACH,YAAY,EAAE,CAAC;aACZ,OAAO,EAAE;aACT,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,uGAAuG,CACxG;QACH,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,IAAI,CAAC;aACT,OAAO,CAAC,EAAE,CAAC;aACX,QAAQ,CAAC,0DAA0D,CAAC;KACxE,CAAC;IAEF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC;aACJ,KAAK,CACJ,eAAe,CAAC,QAAQ,CAAC,8DAA8D,CAAC,CACzF;aACA,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC;IAEF,UAAU,EAAE;QACV,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACxE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QAChE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QAC7F,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4EAA4E,CAAC;QACzF,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,oUAAoU,CACrU;QACH,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,mIAAmI,CACpI;KACJ;IAED,iBAAiB,EAAE;QACjB,QAAQ,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE;QAC/B,WAAW,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;QACtC,WAAW,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE;QACzC,aAAa,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE;KACvD;IAED,MAAM,EAAE;QACN;YACE,MAAM,EAAE,mBAAmB;YAC3B,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,sDAAsD;YAC5D,QAAQ,EACN,4IAA4I;SAC/I;QACD;YACE,MAAM,EAAE,wBAAwB;YAChC,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,mEAAmE;YACzE,QAAQ,EAAE,uEAAuE;SAClF;QACD;YACE,MAAM,EAAE,oCAAoC;YAC5C,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,qEAAqE;YAC3E,QAAQ,EACN,uHAAuH;SAC1H;QACD;YACE,MAAM,EAAE,oBAAoB;YAC5B,IAAI,EAAE,gBAAgB,CAAC,eAAe;YACtC,IAAI,EAAE,4FAA4F;YAClG,QAAQ,EACN,4GAA4G;SAC/G;QACD;YACE,MAAM,EAAE,eAAe;YACvB,IAAI,EAAE,gBAAgB,CAAC,QAAQ;YAC/B,IAAI,EAAE,gIAAgI;YACtI,QAAQ,EACN,gGAAgG;SACnG;QACD;YACE,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,gBAAgB,CAAC,WAAW;YAClC,IAAI,EAAE,+DAA+D;YACrE,SAAS,EAAE,IAAI;YACf,QAAQ,EACN,sGAAsG;SACzG;KACF;IAED,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,kBAAkB;QAClB,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAChD,MAAM,GAAG,CAAC,IAAI,CACZ,mBAAmB,EACnB,mDAAmD,EACnD,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC,CACrC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC9C,MAAM,GAAG,CAAC,IAAI,CACZ,wBAAwB,EACxB,8DAA8D,EAC9D,GAAG,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAC1C,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC1E,MAAM,GAAG,CAAC,IAAI,CACZ,oCAAoC,EACpC,qDAAqD,EACrD,GAAG,CAAC,WAAW,CAAC,oCAAoC,CAAC,CACtD,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,CAAC,IAAI,CACZ,oBAAoB,EACpB,sBAAsB,KAAK,CAAC,OAAO,8CAA8C,EACjF,GAAG,CAAC,WAAW,CAAC,oBAAoB,CAAC,CACtC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC9E,MAAM,GAAG,CAAC,IAAI,CACZ,oBAAoB,EACpB,wBAAwB,KAAK,CAAC,kBAAkB,gDAAgD,EAChG,GAAG,CAAC,WAAW,CAAC,oBAAoB,CAAC,CACtC,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAC/C,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,QAAQ,CACnC;YACE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAChD,GAAG,CAAC,KAAK,CAAC,kBAAkB,IAAI,EAAE,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC;YACjF,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;YAC/D,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;YACzD,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5D,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,EACD,GAAG,CACJ,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,kBAAkB,IAAI,aAAa,CAAC;QACjF,GAAG,CAAC,MAAM,CAAC;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,WAAW;YACX,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI;gBACvB,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,aAAa,EAAE,MAAM,CAAC,aAAa;aACpC,CAAC;SACH,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACtC,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,uFAAuF;YACvF,mFAAmF;YACnF,IAAI,KAAK,CAAC,WAAW,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;gBAClD,GAAG,CAAC,MAAM,CAAC,MAAM,CACf,OAAO,MAAM,CAAC,aAAa,4CAA4C,KAAK,CAAC,WAAW,IAAI;oBAC1F,iEAAiE,CACpE,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,MAAM,CAAC,MAAM,CACf,2EAA2E,CAC5E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CACR,eAAe,GAAG,CAAC,UAAU,qBAAqB,GAAG,CAAC,SAAS,yBAAyB,GAAG,CAAC,YAAY,EAAE,CAC3G,CAAC;YAEF,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CACR,iBAAiB,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,eAAe,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CACpG,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;YAC7D,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBAC/B,KAAK,CAAC,IAAI,CACR,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,EAAE;wBACjE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACjD,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBAC/B,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACxD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,gFAAgF;YAChF,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxF,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC,CAAC;YAC9C,CAAC;YAED,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;gBAC3D,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACjD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CACzE,CACF,CAAC;gBACF,KAAK,CAAC,IAAI,CACR,uBAAuB,GAAG,CAAC,cAAc,CAAC,MAAM,mBAAmB,OAAO,CAAC,MAAM,gBAAgB,CAClG,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;gBAChF,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;oBACnC,KAAK,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,MAAM,GAAG,aAAa,OAAO,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,iBAAiB,GAAG,CAAC,UAAU,CAAC,MAAM,MAAM,CAAC,CAAC;gBACzD,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC7C,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpE,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,GAAG,UAAU,GAAG,OAAO,EAAE,CAAC,CAAC;gBACtD,CAAC;gBACD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;YACvF,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"nvd-audit-cpe.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/nvd-audit-cpe.tool.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,13 @@
4
4
  */
5
5
  import { z } from '@cyanheads/mcp-ts-core';
6
6
  import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
7
+ /**
8
+ * References rendered per CVE. A dense record runs to ~100 references at roughly 116 bytes a line
9
+ * (CVE-2021-44228 carries 103, ~11.6KB rendered in full). 15 covers the advisory/patch/exploit
10
+ * cluster a triage decision turns on for ~2KB per record, and the trailer discloses the remainder
11
+ * that `structuredContent` still carries in full.
12
+ */
13
+ export declare const REFERENCE_CAP = 15;
7
14
  export declare const nvdGetCve: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
8
15
  cveIds: z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>;
9
16
  brief: z.ZodDefault<z.ZodBoolean>;
@@ -11,7 +18,18 @@ export declare const nvdGetCve: import("@cyanheads/mcp-ts-core").ToolDefinition<
11
18
  allLanguages: z.ZodDefault<z.ZodBoolean>;
12
19
  }, z.core.$strip>, z.ZodObject<{
13
20
  brief: z.ZodBoolean;
14
- cves: z.ZodArray<z.ZodObject<{}, z.core.$loose>>;
21
+ cves: z.ZodArray<z.ZodObject<{
22
+ cveId: z.ZodString;
23
+ description: z.ZodOptional<z.ZodString>;
24
+ published: z.ZodString;
25
+ severity: z.ZodOptional<z.ZodObject<{
26
+ label: z.ZodString;
27
+ score: z.ZodNumber;
28
+ fromVersion: z.ZodString;
29
+ }, z.core.$strip>>;
30
+ vulnStatus: z.ZodString;
31
+ cisaVulnerabilityName: z.ZodOptional<z.ZodString>;
32
+ }, z.core.$loose>>;
15
33
  }, z.core.$strip>, readonly [{
16
34
  readonly reason: "invalid_cve_id_format";
17
35
  readonly code: JsonRpcErrorCode.ValidationError;
@@ -1 +1 @@
1
- {"version":3,"file":"nvd-get-cve.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/nvd-get-cve.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAIjE,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4NpB,CAAC"}
1
+ {"version":3,"file":"nvd-get-cve.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/nvd-get-cve.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE;;;;;GAKG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoOpB,CAAC"}