---
summary: "Fix worldbank_get_data error classification, date_range/countries validation, aggregate detection, and mrv ceiling (#13, #17, #18, #20, #22)"
breaking: false
security: false
---

# 0.1.16 — 2026-08-09

## Added

- **`indicator_and_country_not_found`** error reason on `worldbank_get_data` — thrown when upstream rejects both the indicator ID and every country code in one request, distinct from the single-parameter `indicator_not_found`/`country_not_found` cases. [#13](https://github.com/cyanheads/worldbank-mcp-server/issues/13)

## Changed

- **`date_range`** now accepts quarterly (`2020Q1`) and monthly (`2020M03`) periods alongside years, and a malformed, mixed-type, or reversed range is rejected at the schema before any request goes out.
- **`mrv`** ceiling raised from 10 to 100, clamped upstream to each series' actual length. [#22](https://github.com/cyanheads/worldbank-mcp-server/issues/22)

## Fixed

- **`worldbank_get_data`** error classification for invalid indicator/country codes no longer inverts: the previous heuristic checked the shape of the caller's own `indicator_id` and returned the wrong reason for both a bad indicator and a bad country. Classification now comes from how many path segments upstream's envelope rejected, with a follow-up `/indicator/{id}` lookup to place a single rejected segment. [#13](https://github.com/cyanheads/worldbank-mcp-server/issues/13)
- **`countries`**: an empty array, empty string, or separator-only string no longer widens the query to every country — both the array and string branches now reject blank input. [#17](https://github.com/cyanheads/worldbank-mcp-server/issues/17)
- **`isAggregate`** now resolves against a cached `/country` lookup instead of a hardcoded 33-entry set, correctly flagging all 78 published aggregates (previously missed `EUU`, `ARB`, `LDC`, `LMY`, and 42 others). [#18](https://github.com/cyanheads/worldbank-mcp-server/issues/18)
- **`date_range`** windows the API silently can't apply — no overlap with the series, or a granularity finer than the series carries — no longer come back as a false match with the full unfiltered series; observations are now checked against the requested window, and a window matching nothing reports as a structured empty result with a notice. [#20](https://github.com/cyanheads/worldbank-mcp-server/issues/20)
