---
summary: "bls_get_latest result ordering fix, series_not_found contract correction, bls_list_surveys error contracts"
breaking: false
security: false
---

# 0.3.1 — 2026-06-04

## Changed

- **`bls_list_surveys`**: added `errors[]` contract declaring `service_unavailable` and `serialization_failure` reasons; both throws in `bls-api-service.ts` now pass `{ reason }` in their data so `structuredContent.error.data.reason` is observable. ([#27](https://github.com/cyanheads/bls-labor-mcp-server/issues/27))
- **`bls_get_latest`** output schema: `failed[].error` description now lists common values ("Series does not exist", "No observations returned") so agents understand the partial-failure surface without reading source; `failed[]` array description clarifies not-found series appear here, not as a tool-level throw.

## Fixed

- **`bls_get_latest` `results` ordering**: `results[i]` now corresponds to `series_ids[i]` regardless of success/failure. Previously all succeeded entries preceded all failed entries, breaking index-based correlation. ([#25](https://github.com/cyanheads/bls-labor-mcp-server/issues/25))
- **`bls_get_latest` `series_not_found` error contract**: removed the `errors[]` entry whose `code: NotFound` implied a tool-level throw — not-found series are partial results in `failed[]`, not thrown errors. ([#28](https://github.com/cyanheads/bls-labor-mcp-server/issues/28))
