---
summary: "nvd_get_cve and nvd_audit_cpe replace their configurations output field with configurationNodes — a flat array of nodes, each tagged with the group it came from — on mcp-ts-core 0.12.3."
breaking: true
security: false
agent-notes: |
  A consumer reading `configurations` moves to `configurationNodes` and reaches
  criteria one level shallower: `configurationNodes[].cpeMatch[]` rather than
  `configurations[].nodes[].cpeMatch[]`. Group membership rides each node as
  `groupIndex`, and the single `operator` splits into `groupOperator` and
  `nodeOperator`.

  Tool inputs are strict on `@cyanheads/mcp-ts-core` 0.12.x — a call carrying an
  argument key the schema does not declare now comes back as an error naming
  that key instead of having it stripped.
---

# 0.3.0 — 2026-08-24

## Added

- **`.github/CONTRIBUTING.md` and `.github/CODE_OF_CONDUCT.md`** — how to tell a server bug from a framework bug before filing, what makes a report actionable, and the project's conduct rules.

## Changed

- **`nvd_get_cve` and `nvd_audit_cpe` emit `configurationNodes` in place of `configurations`.** One entry per upstream node, carrying `groupIndex`, `groupOperator`, `nodeOperator`, and its own `cpeMatch[]`, so criteria sit one level shallower. Hoisting the group rather than the node is what keeps `(X1.0 OR X1.1) AND Y` distinguishable from `X1.0 AND X1.1 AND Y`.
- **Rendered CPE match lines label the vulnerable component in both directions.** A match that is the vulnerable component reads `vulnerable component`; previously only the negative case was labelled and the affirmative one said nothing.
- **The `Configurations:` summary line reports group, node, and match counts.** It previously reported node-group and match counts, which under the new shape would have counted nodes as groups.
- **Tool inputs are strict.** An argument key a tool's schema does not declare is rejected by name as an error result rather than silently stripped.
- **The advertised `outputSchema` declares the error envelope.** A client that validates `structuredContent` without checking `isError` no longer rejects an error result with `-32602`.
- **Advertised JSON Schema is 2020-12**, not draft-07.
- **Protocol revision 2026-07-28 is served on every HTTP endpoint**, alongside the 2025-era revisions negotiated at `initialize`.
- **`transport.sessionMode` reports the mode the server resolved to**, never `auto`, on both the landing page and `/.well-known/mcp.json`.
- **`ctx.log` output reaches the client** as `notifications/message`, gated by the client's `logging/setLevel`.
- **`.env.example` sets `MCP_SESSION_MODE=stateless` explicitly**, so a source run resolves the mode the `Dockerfile` already set; the file previously documented the `stateful` default.
- **The production Docker stage installs with `--omit=peer`** on both its `bun install` and its OpenTelemetry `bun add`, keeping the framework's optional peer tiers out of the runtime image.
- **Repo tooling resync** — `tsconfig.json` typechecks `src/` and `tests/` under `noEmit` with emit split into `tsconfig.build.json`, `scripts/tree.ts` honors directory-only gitignore patterns, and the shipped `skills/` are re-synced to the 0.12.x framework.

## Dependencies

- `@cyanheads/mcp-ts-core` `^0.11.0` → `^0.12.3`
- `@biomejs/biome` `^2.5.6` → `^2.5.10`
- `@types/node` `^26.1.2` → `^26.2.0`
- `tsc-alias` `^1.9.1` → `^1.9.2`
- `typescript` `^6.0.3` → `^7.0.2`
- `vitest` `^4.1.10` → `^4.1.11`
- `packageManager` `bun@1.3.14` → `bun@1.4.0`, matching the pins in both `Dockerfile` stages. `engines.bun` stays `>=1.3.0`.
- The framework's MCP SDK moves from `@modelcontextprotocol/sdk` `^1.29.0` to `@modelcontextprotocol/server` `^2.0.0`; this server imports neither directly.
- The framework gap also carries upstream security hardening: `rejectPrivateIPs` now range-checks the full non-global IP surface instead of pattern-matching prefixes, and credentials, query strings, and fragments are stripped from resource URIs before they reach logs or telemetry.
