---
summary: "bls_search_series: headline series union fix, concept/synonym resolution"
breaking: false
security: false
---

# 0.4.2 — 2026-06-04

## Fixed

- **`bls_search_series` headline series dropped before rescore** ([#35](https://github.com/cyanheads/bls-labor-mcp-server/issues/35)) — common series (e.g. `CUUR0000SA0` for "consumer price index" / "CPI") were excluded by the FTS5 candidate cap before the relevance rescore could float them to the top. They are now unioned into the candidate set alongside the FTS5 matches, mirroring the exact-ID lookup path. The `score === 0` gate still suppresses them on unrelated queries.

## Added

- **Concept/synonym resolution in `bls_search_series`** ([#36](https://github.com/cyanheads/bls-labor-mcp-server/issues/36)) — a curated `CONCEPT_ALIASES` map resolves economic vocabulary to BLS survey codes (e.g. "inflation" → CU, "producer price index" → WP/PC, "jobs" / "payroll" → CE). When a query matches a phrase, the corresponding survey's candidates receive a relevance boost in the rescore. No catalog schema change.

## Changed

- **`bls_get_series` `calculations` wording corrected** ([#37](https://github.com/cyanheads/bls-labor-mcp-server/issues/37)) — tool description, parameter description, `README.md`, `CLAUDE.md`/`AGENTS.md`, and `docs/design.md` now reflect the actual API behavior: `calculations: true` returns whichever calculations a survey supports (CPI and PPI return percent change only, with no error). Only surveys supporting neither return an error. Previously documented as all-or-nothing / always-errors.

## Internal

- **Observations ingester/service lint cleanup** — replaced non-null assertions (`!`) with `for...of entries()` iterators and bracket-key property access (`r['series_id']`) with dot notation in `ingester.ts` and `bls-observations-service.ts`.
