- Upgrade @cyanheads/mcp-ts-core ^0.7.6 → ^0.8.19. Twenty patches across
two minors, two breaking: false→true. Highlights: typed error
contracts (errors: [{ reason, code, when, recovery }]) with
ctx.fail(reason) and ctx.recoveryFor(reason) (0.8.0), MCP error
metadata moved from _meta.error to structuredContent.error per spec
(breaking, 0.8.0), httpErrorFromResponse / httpStatusToErrorCode
helpers (0.8.0), serializationError / internalError / databaseError
factories (0.8.0), createMockContext({ errors }) test option (0.8.0),
conformance lint scans handler source (0.8.0), Bun ≥1.3 / Node ≥24
floor (0.8.15).
- Adopt typed error contracts on four tools: out_of_scope on
nws_get_forecast and nws_find_stations; full five-reason set on
nws_get_observations (missing_input, station_not_found,
no_observations, no_stations_nearby, out_of_scope); three-reason set
on nws_search_alerts (mutually_exclusive_filters, invalid_area_code,
invalid_point) with the area/point/zone mutex check moved into the
handler. nws-service.ts throws carry data: { reason,
...ctx.recoveryFor(reason) } so service-side failures are wire-correct
even though the conformance lint only scans handler source.
- Replace manual 429/5xx mapping in nwsFetch with httpErrorFromResponse;
codeOverride remaps 500/501 → ServiceUnavailable so they hit
isRetryableNwsError's allowlist (NWS grid-forecast 500s are documented
as transient). parseNwsJson now throws serializationError on
malformed JSON and serviceUnavailable on HTML CDN intercepts (the
latter stays in the retry allowlist).
- Swap four invalidParams sites to validationError per the framework's
factory audit — invalidParams (-32602) is malformed JSON-RPC params,
semantic post-shape validation is validationError (-32007).
- Bump engines to Node ≥24 / Bun ≥1.3, Docker base to oven/bun:1.3.
Drop dev:stdio / dev:http scripts.
- Migrate tests: createMockContext({ errors: tool.errors }) for ctx.fail
support, assert on data.reason and data.recovery.hint, structured-
Content.error wire shape, /HTTP 429/ regex for the rate-limit message.
- Sync 17 skills via maintenance Phase A (3 new: api-canvas,
api-telemetry, tool-defs-analysis); Phase B mirror to .claude/skills
and .agents/skills; Phase C update scripts/build-changelog.ts and add
scripts/split-changelog.ts.
Tests: 110 pass. Devcheck: all checks green, 0 warnings.