---
summary: "Typed error contracts: ctx.fail() re-throws for country_not_found, indicator_not_found, invalid_filter; empty getData returns structured result instead of throwing"
breaking: false
security: false
---

# 0.1.11 — 2026-06-04

## Fixed

- **`worldbank_get_country`** now catches `country_not_found` thrown by the service layer and re-throws via `ctx.fail()`, populating `data.recovery.hint` on the wire ([#10](https://github.com/cyanheads/worldbank-mcp-server/issues/10)).
- **`worldbank_get_indicator`** now catches `indicator_not_found` and re-throws via `ctx.fail()`, populating `data.recovery.hint` ([#10](https://github.com/cyanheads/worldbank-mcp-server/issues/10)).
- **`worldbank_get_data`** now catches `indicator_not_found` and `country_not_found` and re-throws each via `ctx.fail()` with the corresponding recovery hint; the `no_data` contract entry is removed ([#10](https://github.com/cyanheads/worldbank-mcp-server/issues/10)).
- **`worldbank_get_data`** service layer no longer throws when the WB API returns an empty data array — returns a structured empty result (`data: []`, paging totals in enrichment) instead ([#9](https://github.com/cyanheads/worldbank-mcp-server/issues/9)).
- **`worldbank_list_countries`** adds an `errors[]` contract declaring `invalid_filter`, and the handler catches the service-layer throw and re-routes via `ctx.fail()` so `data.reason` and `data.recovery.hint` appear on the wire ([#11](https://github.com/cyanheads/worldbank-mcp-server/issues/11)).
