---
summary: "Adopts mcp-ts-core through 0.13.6: input aliases on four tools, a declared stateless session mode, structured argument-rejection errors, and CodeQL fixes for regex backtracking and an upstream URL leak in error data."
breaking: false
security: true
---

# 0.6.3 — 2026-09-19

## Added

- **`sessionMode: 'stateless'` declared in `src/index.ts`** — with `MCP_SESSION_MODE` unset the HTTP transport serves stateless; an exported `MCP_SESSION_MODE` value still overrides the declaration.
- **`GET /.well-known/mcp.json` reports the resolved session mode** under `_meta["io.github.cyanheads.mcp-ts-core/sessionMode"]`.
- **`inputAliases` on four tools** — `pubchem_search_assays` accepts `query`/`target` for `targetQuery`, `pubchem_get_compound_xrefs` accepts `maxResults` for `maxPerType`, `pubchem_get_compound_interactions` accepts `maxResults` for `maxEntries`, and `pubchem_get_bioactivity` accepts `geneId`/`accession` for `targetGeneId`/`targetAccession`. Advertised `inputSchema` is unchanged.

## Changed

- **A rejected tool argument answers `-32602`** with `data.reason: "invalid_arguments"`, a `data.recovery.hint` naming the accepted keys, and a matching `Recovery:` line in `content[0].text`.
- **`thrownBy: 'service'`** on the `cid_not_found` and `no_3d_structure` error contract reasons, which the service layer raises.
- **`.env.example` and the README config table now match the current framework scaffold** — session mode, resumability, body cap, public URL, and memory settings; the port comment corrected to `3010`.
- **CLAUDE.md gains an `AGENTS.md` twin** and documents the gated release-PR flow; both files, plus `changelog/`, now ship in the npm package.
- **CodeQL workflow added** (`.github/workflows/codeql.yml`) — the one GitHub Actions workflow this server carries; local gates cover the rest.
- **22 framework skills and 6 dev scripts re-synced** from `@cyanheads/mcp-ts-core` 0.13.1–0.13.6.

## Fixed

- **`untrusted-text`'s inline escaping covers a lone backslash**, so an upstream `\*` cannot re-arm as a live `*` after escaping, and a SMILES stereo bond (`C/C=C\C`) no longer ends its line as a CommonMark hard break.
- **GHS statement parsing (`parseCodedStatement`) matches an annotated code in linear time** — a code followed by a long run of `*` no longer backtracks exponentially; the same statements still parse.

## Security

- **Upstream PubChem error data no longer carries the request URL**, which echoed the caller's own query (a name, SMILES string, or SDQ blob). The message still names PubChem and the HTTP status, and `data.fault` still carries PubChem's parsed fault text.

## Dependencies

- `@cyanheads/mcp-ts-core` ^0.13.0 → ^0.13.6
- `zod` ^4.6.1 → ^4.6.5
- `@biomejs/biome` 2.5.13 → 2.5.14
- `@types/node` 26.5.1 → 26.6.1
- `tsc-alias` ^1.9.4 → ^1.9.5
- `vitest` ^5.0.0 → ^5.0.1
