---
summary: "Upgrades to mcp-ts-core 0.13.6: argument rejections carry a recovery hint naming what to send, near-miss argument keys and stringified arrays are normalized before validation, and tool error text closes with its reason."
breaking: false
security: false
---

# 0.3.8 — 2026-09-21

## Changed

- **Argument rejections carry `data.reason: "invalid_arguments"` and a `Recovery:` hint** derived from the schema — an unknown key names the keys the tool accepts, a wrong type names the type to send, missing fields collapse into one `Provide …` sentence. A rejected union-typed argument (e.g. `countries`, string or array) reports each alternative's message instead of Zod's `Invalid input` (mcp-ts-core 0.13.3, [cyanheads/mcp-ts-core#445](https://github.com/cyanheads/mcp-ts-core/issues/445), [#417](https://github.com/cyanheads/mcp-ts-core/issues/417)).
- **Before validation, client-added `_meta` / `tool_call_description` / `toolCallId` / `_`-prefixed keys are dropped**, an undeclared key that case-folds to exactly one declared key is rewritten (`countryCode` → `country_code`), and a JSON-stringified array is repaired and re-parsed once. Any other undeclared key is still rejected, and the advertised `inputSchema` is unchanged (mcp-ts-core 0.13.4, [cyanheads/mcp-ts-core#453](https://github.com/cyanheads/mcp-ts-core/issues/453), [#452](https://github.com/cyanheads/mcp-ts-core/issues/452), [#234](https://github.com/cyanheads/mcp-ts-core/issues/234)).
- **Tool error text closes with `(reason <reason>)`**, adding ` · retryable` / ` · not retryable` only when the error declares it; `structuredContent` is unchanged (mcp-ts-core 0.13.5, [cyanheads/mcp-ts-core#458](https://github.com/cyanheads/mcp-ts-core/issues/458)).
- **`worldbank_get_poverty` and `worldbank_search_projects` name each thrown reason literally** so the framework's error-contract lint rules scan both definitions; responses are unchanged.
- Framework skills and the definition linter synced, a CodeQL workflow tracked, `CLAUDE.md`/`AGENTS.md` release-review wording updated, and the Dockerfile's OTel comment corrected (comment only).

## Dependencies

- `@cyanheads/mcp-ts-core` ^0.13.2 → ^0.13.6
- `zod` ^4.6.4 → ^4.6.5
- `@biomejs/biome` ^2.5.13 → ^2.5.14 (dev)
- `@types/node` ^26.5.1 → ^26.6.2 (dev)
- `vitest` ^5.0.0 → ^5.0.1 (dev)
