Releases: cyanheads/wsdot-mcp-server
Release list
v0.1.13: ferry date, ferry_routes docs, vessel coordinate parity
ferry date, ferry_routes docs, vessel coordinate parity
Correctness fixes to the ferry trip-date default, vessel-location coordinate rendering, and the wsdot_get_ferry_routes documentation.
Fixed:
- Ferry default trip date tracks the Washington/Pacific service date (
America/Los_Angeles), not the UTC date that rolled to the next day in the Pacific evening (#16) wsdot_get_vessel_locationscontent[]renders coordinates at full precision, matchingstructuredContent(#21)wsdot_get_ferry_routesdocs corrected to its real output — route ID, abbreviation, description (not terminal ID pairs / crossing times) (#19)
245 tests pass; bun run devcheck clean.
v0.1.12: mcp-ts-core ^0.10.14 maintenance and camera route/pagination fixes
mcp-ts-core ^0.10.14 maintenance and camera route/pagination fixes
Camera and alert route filtering, camera pagination, and empty-result content, on a framework refresh with Socket supply-chain scanning.
Added:
wsdot_search_camerasgainsoffset/limitpaging withnextOffset/hasMoreoutput (#20)
Fixed:
stateRoutematches a canonical route number via sharednormalizeRoute()— natural forms resolve and "90" no longer hits SR 290 (#17)wsdot_search_camerasrendersNo cameras found.incontent[]on an empty result (#18)wsdot_search_camerascontent[]andstructuredContentcarry the identical page (#20)
Dependencies:
@cyanheads/mcp-ts-core^0.10.9 → ^0.10.14@socketsecurity/bun-security-scanner^1.1.2 added — Socket install scanning + 3-day minimumReleaseAge guard@types/node^26.0.0 → ^26.1.1- Bun pinned 1.3.14;
@biomejs/biome2.5.0 → 2.5.3,tsc-alias1.8.17 → 1.9.0,vitest4.1.9 → 4.1.10
243 tests pass; bun run devcheck clean.
v0.1.11: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Framework dependency refresh — no source or behavior changes.
Added:
scripts/check-dependency-specifiers.tsdevcheck step rejecting floating specifiers (latest,*, pre-release dist-tags) in package.json deps and bun.lock workspaces (cyanheads/mcp-ts-core#246)
Changed:
- devcheck
packaging.pluginManifestsguard enabled - Vendored framework scripts and agent skills re-synced to ^0.10.9
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9@types/node^25.9.3 → ^26.0.0vitest^4.1.8 → ^4.1.9
232 tests pass; bun run devcheck clean.
v0.1.10: mcp-ts-core ^0.10.6 adoption, hyphenated display identity, MCPB bundle cleaner
mcp-ts-core ^0.10.6 adoption, hyphenated display identity, MCPB bundle cleaner
Maintenance release: framework adoption, display-identity hardening, and Docker/bundle tooling. No tool-surface changes.
Added:
- scripts/clean-mcpb.ts post-pack cleaner — mcpb clean plus a strip of agent-doc trees (skills/, .claude/, .agents/, SKILL.md) nested under node_modules/ that root-anchored .mcpbignore patterns cannot reach
- Dockerfile HEALTHCHECK against /healthz (bun -e fetch, no curl/wget) and an org.opencontainers.image.version OCI label
Changed:
- Display identity set to the hyphenated repo name — createApp() name/title and codex displayName are 'wsdot-mcp-server'
- .mcpbignore patterns root-anchored; .agents/ and skills/ excluded
- lint:packaging gains bundle-content guards (dev-dir exclusion, anchored patterns, post-bundle agent-doc assertion)
- Vendored agent skills re-synced to the installed framework version
Dependency bumps:
- @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
- @biomejs/biome ^2.4.16 → ^2.5.0
- @types/node ^25.9.2 → ^25.9.3
232 tests pass; bun run devcheck clean.
v0.1.9: Traffic WCF dates, mountain-pass elevation/restrictions, ferry 4xx handling, schema descriptions
Traffic WCF dates, mountain-pass elevation/restrictions, ferry 4xx handling, schema descriptions
Fixes data fidelity gaps and client-error handling across both services, with description
accuracy improvements throughout.
Fixed:
- WCF /Date(ms±offset)/ timestamps now decode to ISO 8601 across all traffic tools; .NET DateTime.MinValue emits as null. New shared decodeWcfDate/wcfDateField util used by both services. (#11)
- mountain_passes elevation and restriction fields were silently dropped due to wrong upstream field names (Elevation/TravelRestrictionComment vs ElevationInFeet/RestrictionText/TravelDirection). (#12)
- Ferry 4xx responses no longer retried; toFerryDate now rejects non-YYYY-MM-DD locally; terminal-pair 400 maps to clear invalid_terminal_pair error. (#13)
- border_waits crossing descriptions corrected to route codes (I5, SR543, SR539, SR9) with human names via location.description; -1 sentinel documented. ferry_alerts/ferry_routes cross-reference clarified for San Juan interisland and Sidney B.C. route IDs. (#14)
Changed:
- Direction code legend added to all direction .describe() fields: cameras (B, N/S/E/W, O), alerts (A=alternating, B, N/S/E/W), travel times (N/S/E/W), border waits (N/S/E/W), toll rates travelDirection (N/S/E/W). (#15)
232 tests pass; bun run devcheck clean.
v0.1.8: Traffic data fixes — toll amounts, active-feed filters for alerts and cameras
Traffic data fixes — toll amounts, active-feed filters for alerts and cameras
Three bugs in the traffic service corrected against live API validation.
Fixed:
- wsdot_get_toll_rates — RawTollRate field names corrected (CurrentToll, CurrentMessage, TravelDirection, StartLatitude/Longitude, EndLatitude/Longitude); tollRateInDollars now CurrentToll/100. Previously all 84 toll objects returned 0 amount (#8).
- wsdot_search_alerts — filtered calls now query GetAlertsAsJson (active feed) and filter client-side instead of routing to the historical SearchAlertsAsJson archive (up to 28 s / 2.5 MB). Region input normalized (Northwest → NW, etc.) (#9).
- wsdot_search_cameras — CameraLocation nested object unpacked for roadName, milePost, latitude, longitude, direction. Filtered calls now query GetCamerasAsJson (1,682 cameras) client-side; stateRoute previously returned 0 results (#10).
Changed:
- devcheck.config.json: @cyanheads/mcp-ts-core added to outdated allowlist
Dependency bumps:
@types/node^25.9.1 → ^25.9.2
214 tests pass; bun run devcheck clean.
v0.1.7: Ferry error handling and remainingOnly fix
Ferry error handling and remainingOnly fix
Routes declared error contract reasons through ctx.fail so data.reason is
populated on the wire for machine consumers.
Fixed:
- FerryApiService.getSchedule — remainingOnly=true with a future tripDate now returns the future date's full schedule instead of today's remaining sailings (#5)
Changed:
- wsdot_get_ferry_routes / wsdot_get_ferry_schedule — invalid tripDate throws via ctx.fail('invalid_date') so data.reason is populated (#6)
- wsdot_get_ferry_schedule — WSF API errors now surface as ctx.fail('invalid_terminal_pair') with a recovery hint (#6)
210 tests pass; bun run devcheck clean.
v0.1.6: mcp-ts-core 0.9.21 — per-request log context, secret scrubbing, fail-fast retries
mcp-ts-core 0.9.21 — per-request log context, secret scrubbing, fail-fast retries
Adopts @cyanheads/mcp-ts-core ^0.9.21 with three notable framework fixes; syncs scripts and skills from the 0.9.17–0.9.21 series.
Changed:
- HTTP transport per-request logs and traces now carry fresh request + trace/span IDs instead of the frozen boot context
- fetchWithTimeout strips query-string secrets (e.g. ?api_key=) from error messages and logs
- withRetry fails fast on non-retryable errors; ctx.fail auto-populates the retryable flag
- New api-mirror and orchestrations skills added; add-tool, add-service, api-canvas, api-context, api-linter, api-utils, design-mcp-server, release-and-publish skills updated
Dependencies:
@cyanheads/mcp-ts-core^0.9.16 -> ^0.9.21vitest^4.1.7 -> ^4.1.8
205 tests pass; bun run devcheck clean.
v0.1.5: Enrichment adoption across all twelve tools
Enrichment adoption across all twelve tools
All collection tools now surface totalCount, appliedFilters (where applicable), and empty-result guidance in a typed enrichment block reaching both the structuredContent JSON and content[] markdown trailer.
Changed:
- All twelve tools: enrichment block with totalCount, appliedFilters, and contextual notice
- structuredContent field moves: totalCount (and tripDate on wsdot_get_ferry_routes, note on wsdot_search_cameras) moved from output to enrichment
- wsdot_search_cameras: output.note renamed to enrichment.notice
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.13 → ^0.9.16
89 tests pass; bun run devcheck clean.
v0.1.4: mcp-ts-core ^0.9.7 → ^0.9.13, dep refresh, error code corrections
mcp-ts-core ^0.9.7 → ^0.9.13, dep refresh, error code corrections
Adopts framework 0.9.8–0.9.13 and refreshes dev dependencies.
Changed:
@cyanheads/mcp-ts-core^0.9.7 → ^0.9.13 — HTTP session-init gate (HTTP 400 on missing Mcp-Session-Id), configurable request-body cap (MCP_HTTP_MAX_BODY_BYTES, default 1 MiB, 413 on oversize), quieter 401/403/400/404 logging (warning level, no stack traces), GET /mcp surfaces package.json keywords.landing.requireAuth: falseadded to createApp() — public catalog inventory on the hosted server.invalidParams→validationErrorin ferry-service.ts and two ferry tool error contracts.
Dependency bumps:
@biomejs/biome^2.4.7 → ^2.4.16@types/node^25.6.0 → ^25.9.1tsc-alias^1.8.16 → ^1.8.17typescript^5.9.3 → ^6.0.3vitest^4.1.0 → ^4.1.7
64 tests pass; bun run devcheck clean.