---
summary: "Tool arguments sent as a numeric or boolean string, a lone string for `include`, `null` for an optional field, or an integer for `code` are repaired before validation, tool errors carry a request ID, and the Docker image installs its dependencies on the build platform (`@cyanheads/mcp-ts-core` ^0.13.6 → ^0.13.14)."
breaking: false
security: false
---

# 0.2.5 — 2026-10-08

## Changed

- **Tool-argument repair** — a numeric or boolean string for a number or boolean field (`limit: "5"`, `latitude: "47.45"`, `include_closed: "true"`), a lone string for an array field (`include: "runways"` on `ourairports_get_airport`), and `null` at an optional key (read as absent) are repaired before validation (`@cyanheads/mcp-ts-core` 0.13.14). An invalid-arguments (`-32602`) rejection is bounded in size.
- **Integer `code`** — an integer sent for a string field becomes its digits (`code: 1234` → `"1234"`), and argument-rejection hints keep field paths (`@cyanheads/mcp-ts-core` 0.13.9).
- **Request ID on tool errors** — error results carry `data.requestId` and their text ends `(reason <r> · request <id>)` (`@cyanheads/mcp-ts-core` 0.13.10). The server's `requestId` is always framework-generated; a client's JSON-RPC id appears in logs as `jsonRpcId` (0.13.12).
- **`ctx.log` client notifications** honor `MCP_LOG_LEVEL` and mask sensitive fields (`@cyanheads/mcp-ts-core` 0.13.11).
- **MCP SDK 2.1 transport behavior** — a `2026-07-28` POST without `MCP-Protocol-Version` is refused `400` / `-32020`, a JSON-RPC batch over 100 messages is refused, and stdin EOF on stdio aborts in-flight requests (`@cyanheads/mcp-ts-core` 0.13.9).
- **`ctx.recoveryFor` forwards removed** from `ourairports_get_airport`, `ourairports_find_navaids`, and `airport://{code}` — the framework fills a declared `errors[]` recovery hint itself (0.13.10); the hints callers receive are unchanged. The `unknown_code` test for `ourairports_find_navaids` runs through `runToolContract`.
- **Docker image** installs production dependencies in a `deps` stage on `$BUILDPLATFORM` with `--os`/`--cpu` cross-install (0.13.10), so multi-arch builds no longer run Bun under QEMU. `scripts/install-otel.ts` installs the OTel packages and `scripts/prune-musl-packages.ts` deletes musl-only packages from the glibc image (0.13.11). `MCP_FORCE_CONSOLE_LOGGING` is dropped (0.13.8). Base images move to `oven/bun:1.4.2` (the 0.13.7 scaffold pin).
- **`server.json`** npm entries launch via `npx` without the `run start:*` arguments, and the Streamable HTTP entry sets `MCP_TRANSPORT_TYPE` to `http` (0.13.11 scaffold shape); the description reads "Offline global aviation reference: airports…".
- **CodeQL** runs one job per language (`actions`, `javascript-typescript`), uploading under `/language:<language>`.
- **Ignore rules** — `.gitignore` and `.dockerignore` match `.env*` (`.gitignore` keeps `.env.example`, `.env.template`, `.env.sample`), and `.dockerignore` adds the MCP Registry token files. `.mcpbignore` excludes `docs/idea.md`, `logs/`, `.cache/`, `coverage/`, and `tests/` from the `.mcpb` bundle.
- **`.env.example`** documents the framework env block: `MCP_REQUEST_STATE_KEY`, `MCP_HTTP_RESUMABILITY*`, `MCP_LOG_RATE_LIMIT_*`, `LOG_TOOL_FAILURE_PAYLOADS`, `LOG_LLM_INTERACTIONS`, and the per-signal OTLP endpoints; `MCP_HTTP_HOST` defaults to `127.0.0.1`.
- **`test:coverage`** script (`vitest run --coverage`, `@vitest/coverage-istanbul`), with `tests/services/data-dir.test.ts` covering `resolveBundledDataDir`.
- **`package.json`** — `packageManager` `bun@1.4.2`, `files` excludes `dist/*.mcpb`, and `audit:refresh` ends with `bun audit`.
- **Framework skills, scripts, and agent docs** synced to `@cyanheads/mcp-ts-core` 0.13.14: `devcheck`, `lint-mcp`, `lint-packaging`, `check-skill-versions`, and `release-github` (adds `--check`) scripts, an empty `lint` block in `devcheck.config.json`, and `CLAUDE.md` / `AGENTS.md` guidance for session posture, shutdown, and CI.
- **README** badges read MCP SDK `^2.2.0` and Bun `v1.4.2+`.

## Dependencies

- `@cyanheads/mcp-ts-core` ^0.13.6 → ^0.13.14
- `pino-pretty` ^13.1.3 → ^13.2.0
- `@biomejs/biome` (dev) 2.5.14 → 2.5.15
- `@socketsecurity/bun-security-scanner` (dev) ^1.1.2 → ^1.1.3
- `@types/node` (dev) 26.6.2 → 26.6.4
- `ignore` (dev) ^7.0.9 → ^7.0.12
- `tsc-alias` (dev) ^1.9.5 → ^1.9.7
- `vitest` (dev) ^5.0.1 → ^5.0.3
- `@vitest/coverage-istanbul` (dev) 5.0.3 (new)
- Bun 1.4.0 → 1.4.2
