---
summary: "BREAKING: bls_search_series output renamed (areaName→area, itemName→item, seasonal boolean→string); bls_get_latest double-list fix; dataframe-query cap notice fix; search capped flag"
breaking: true
security: false
---

# 0.4.3 — 2026-06-08

## Fixed

- **`bls_get_latest` double-listed failed series** ([#42](https://github.com/cyanheads/bls-labor-mcp-server/issues/42)) — rejected fetches and no-observation series were pushed into both `results[]` (as bare stubs) and `failed[]`. They now go into `failed[]` only; every entry in `results[]` carries a `latestObservation`. Format footer updated to count `results.length + failed.length` for the "N of M" denominator.

- **`bls_dataframe_query` cap notice named wrong parameter** ([#42](https://github.com/cyanheads/bls-labor-mcp-server/issues/42)) — when `preview` was the binding limiter the notice incorrectly referenced `row_limit`. The handler now checks `preview < row_limit` and emits the name of whichever parameter capped the result.

## Changed

- **`bls_search_series` output fields renamed and `seasonal` type changed** ([#41](https://github.com/cyanheads/bls-labor-mcp-server/issues/41)) — **BREAKING**: `areaName` → `area`, `itemName` → `item` in the output schema and handler mapping, aligning field names with `bls_get_latest` / `bls_get_series`. `seasonal` changed from `boolean` to `string` (`"Seasonally Adjusted"` / `"Not Seasonally Adjusted"`), matching the descriptive form used by the data tools. Consumers reading `series[].areaName`, `series[].itemName`, or treating `series[].seasonal` as a boolean must update.

## Added

- **`bls_search_series` enrichment `capped` flag** ([#40](https://github.com/cyanheads/bls-labor-mcp-server/issues/40)) — `capped: boolean` added to the enrichment schema and `CatalogSearchResult`. When the FTS candidate pool reaches the internal cap (~1000 rows), `capped: true` is set and `totalFound` becomes a lower bound. Narrow the query, add `survey`/`area` filters, or use a direct SeriesID to get an exact count.
