---
summary: "Outline-on-overflow helper for oversized document payloads; env booleans parse via Zod stringbool (rejects unrecognized values); built Docker images stamp image.version."
breaking: false
agent-notes: "Env-boolean parsing tightened to Zod stringbool: values outside true/false/1/0/yes/no/on/off now throw at startup instead of coercing to false, and yes/on/y/enabled now parse truthy (previously only true/1 were truthy; everything else fell silently to false). Audit boolean env vars — OTEL_ENABLED, MCP_AUTH_DISABLE_SCOPE_CHECKS, LOG_LLM_INTERACTIONS, SPEECH_TTS_ENABLED, SPEECH_STT_ENABLED, DEV_MCP_AUTH_BYPASS — for non-standard spellings. In server config, replace z.coerce.boolean() with z.stringbool(); devcheck now flags z.coerce.boolean() via the coerce-boolean-env-flag antipattern rule."
---

# 0.10.0 — 2026-06-05

## Added

- **Outline-on-overflow** (`@cyanheads/mcp-ts-core/utils`): `outlineOnOverflow()`, `OUTLINE_VARIANT`, `selectSections()`, `formatOutline()`, and `DEFAULT_OUTLINE_BUDGET_BYTES`. When a single document-shaped tool payload exceeds a serialized-byte budget, return a section outline (top-level keys + per-section size) plus a re-call notice instead of truncating; the agent re-calls the same tool with `sections:[...]` for only what it needs. Pure measure + key-slice — Workers-portable, unlike canvas-bound `spillover()`. The `format()`-parity linter validates each discriminated-union branch, so both surfaces stay in lockstep. (#204)
- **`techniques` skill**: a catalog of reusable response/data-shaping patterns. The first reference documents outline-on-overflow — the stateless re-call contract, the optional `ctx.state` cache, and when to choose it over `spillover()` or capped-list disclosure. (#204)
- **`coerce-boolean-env-flag` antipattern rule** (`scripts/check-framework-antipatterns.ts`, enforced by `devcheck`): flags `z.coerce.boolean()` in `src/`, which cannot be disabled through the environment because `Boolean("false") === true`; recommends `z.stringbool()`. The scanner now skips comment lines so docs that name an antipattern don't false-positive. (#201)

## Changed

- **Env-boolean parsing now uses Zod `stringbool`.** Boolean env flags accept `true/false/1/0/yes/no/on/off` (case-insensitive) and **reject unrecognized values at startup** instead of silently coercing them to `false`. `false/0/no/off`, empty string, and unset all still resolve to `false` as before; `yes/on/y/enabled` now parse truthy; real booleans still pass through (Workers `[vars]`). Affects `OTEL_ENABLED`, `MCP_AUTH_DISABLE_SCOPE_CHECKS`, `LOG_LLM_INTERACTIONS`, `SPEECH_TTS_ENABLED`, `SPEECH_STT_ENABLED`, and `DEV_MCP_AUTH_BYPASS`. `z.stringbool()` is now the documented convention for server-config booleans. (#201)
- **`templates/Dockerfile`** stamps `org.opencontainers.image.version` from an `APP_VERSION` build arg and declares `org.opencontainers.image.source` (filled at polish time); the release `docker buildx` command passes `--build-arg APP_VERSION`. Scaffolded servers only — existing servers pick this up on re-scaffold. (#202)
- Dependencies: `@cloudflare/vitest-pool-workers` ^0.16.11 → ^0.16.13, `@cloudflare/workers-types` 4.20260602.1 → 4.20260605.1, `@supabase/supabase-js` ^2.106.2 → ^2.107.0, `openai` ^6.41.0 → ^6.42.0.
