---
summary: "Every paged tool keeps a response within about 50 KB: worldbank_get_data serves 200 rows a page, worldbank_list_countries 150, and indicator descriptions and long project abstracts come back shortened. Keyword search ranks World Development Indicators series ahead of regional and archived copies."
breaking: true
security: false
---

# 0.5.0 — 2026-09-25

## Added

- **`appliedFilters` on `worldbank_list_countries`** ([#42](https://github.com/cyanheads/worldbank-mcp-server/issues/42)): the applied `region`, `incomeLevel`, `lendingType`, `includeAggregates`, `page`, the served `perPage`, and `requestedPerPage` when that was reduced, on both surfaces.
- **`|` separates `countries` codes** on `worldbank_get_data`, `worldbank_get_poverty`, and `worldbank_search_projects`, beside `,` and `;` ([#48](https://github.com/cyanheads/worldbank-mcp-server/issues/48)). All three split through one shared `splitCountryCodes`, and a value made only of separators (`"|"`, `["|"]`) is rejected before any request.

## Changed

- **Breaking: `worldbank_get_data` serves at most 200 observations a page, and `worldbank_list_countries` at most 150 entries** ([#42](https://github.com/cyanheads/worldbank-mcp-server/issues/42)). A larger `per_page` is served at the cap, echoed as `appliedFilters.perPage` beside `requestedPerPage`, and `totalPages` counts pages at the served size, so `page + 1` continues where a page ends. The advertised maxima (1000 and 300) are unchanged.
- **Breaking: `worldbank_search_indicators` returns the first 150 characters of `sourceNote`**, marked `…` when cut ([#42](https://github.com/cyanheads/worldbank-mcp-server/issues/42)). Matching still reads the whole note, and `worldbank_get_indicator` returns it whole.
- **Breaking: `worldbank_search_projects` cuts an abstract longer than 5,000 characters there**, marked `…` on both surfaces, and `notice` names the projects cut ([#42](https://github.com/cyanheads/worldbank-mcp-server/issues/42)).
- **Breaking: `worldbank_get_data`'s `country_not_found` and `indicator_and_country_not_found` name only the codes the country index lacks** ([#50](https://github.com/cyanheads/worldbank-mcp-server/issues/50)), in the message and `data.countryCodes`, looked up case-insensitively and named as sent; `data.countries` is now an array of the requested codes, not a `;`-joined string. The index is read only after upstream rejects, and when it knows every code or fails to load, every code is named.
- **Keyword ranking in `worldbank_search_indicators`** ([#44](https://github.com/cyanheads/worldbank-mcp-server/issues/44)): exact ID or name, then names starting with the phrase as whole words, then whole-phrase matches, then every term a whole word of the ID or name, then other ID/name matches, then description-only matches. Within each tier, World Development Indicators lead, then other live sources, then archives, and a series leads its own breakdowns (`SP.DYN.LE00.IN` ahead of `SP.DYN.LE00.FE.IN`).
- **The page-size reduction notice is shared** by `worldbank_get_data`, `worldbank_list_countries`, `worldbank_search_projects`, and `worldbank_get_poverty`, and stays silent when the whole result fits on one page at the served size ([#42](https://github.com/cyanheads/worldbank-mcp-server/issues/42)). A page past the end of `worldbank_search_indicators` gets the shared past-end notice.
- **`worldbank_search_projects` `format()`** puts `regionName` on the status line, leaves out the abstract line on a row without one, and leaves zero-valued commitment parts out of the breakdown ([#42](https://github.com/cyanheads/worldbank-mcp-server/issues/42)). `structuredContent` rows are unchanged.
- **README and `docs/design.md`** document the page caps, excerpts, ranking tiers, separators, and country-code handling.

## Fixed

- **`countryIso3` is filled from the country index when upstream leaves it empty** ([#54](https://github.com/cyanheads/worldbank-mcp-server/issues/54)): the income groups and Not classified (`XD`, `XM`, `XN`, `XT`, `XY`) now carry their three-letter codes, so a request for `HIC` returns `XD` / `HIC`. Global Economic Monitor rows, which upstream sends with the ISO3 code as `country.id`, report `countryCode` `KE` and `countryIso3` `KEN`.
- **`worldbank_get_data` sends Lesotho as `LSO`** ([#65](https://github.com/cyanheads/worldbank-mcp-server/issues/65)), since the API's edge firewall answers HTTP 403 to a country path carrying `LS` after another code (`ZA;LS`). Rows and echoes still name Lesotho as before.
- **`worldbank_search_projects` rejects a `countries` value made only of separators** as `invalid_country_code` ([#48](https://github.com/cyanheads/worldbank-mcp-server/issues/48)); `","` used to search the whole portfolio.

## Dependencies

- Bun 1.4.0 → 1.4.2: `packageManager`, the `Dockerfile`'s `oven/bun` build and `-slim` production images, and the README badge
