National Bank of Ukraine (NBU) public statistics MCP. Keyless.
Five tools with complete, well-structured schemas and clear descriptions. Tool names follow verb_noun convention (exchange_rates, currency_rate, currency_history, monetary_aggregates, international_reserves). All descriptions are substantive (100 - 200 chars), explaining WHAT the tool does and WHEN to use it. Input schemas are properly typed with required fields marked. However, output schemas are NOT documented, LLMs cannot predict response structure. Parameter descriptions are good but lack explicit format constraints (e.g., 'YYYYMMDD format' is stated but not formalized as a pattern). No error handling guidance or recovery paths documented. All tools are READ_ONLY (safe), but this is not declared via toolAnnotations.
Daily time series of the official NBU rate for ONE currency over a date range. Pass `valcode` (ISO-4217, e.g. USD) and `start`/`end` as YYYYMMDD. Returns one record per business day: {exchangedate (DD.MM.YYYY), cc, txt (Ukrainian name), enname (English name), rate (UAH per `units`), units, rate_per_unit}. Omit `valcode` to get every currency over the range. Newest first.
Official NBU rate for a SINGLE currency on one day. Pass `valcode` as an ISO-4217 code (e.g. USD, EUR, GBP). `rate` is UAH per 1 unit of that currency. Omit `date` for today. For a time series of one currency across a date range, use `currency_history` instead.
Official NBU exchange rates for ALL currencies on a single day (the rate the National Bank of Ukraine sets daily). Returns one record per currency: {r030 (numeric currency code), txt (Ukrainian name), rate (UAH per 1 unit of the currency), cc (ISO-4217 code, e.g. USD/EUR/PLN), exchangedate (DD.MM.YYYY)}. Omit `date` for today's rates.
NBU official international (reserve) assets for a given month, broken down by component. Each record: {dt (YYYYMMDD), txt (Ukrainian name), txten (English name), id_api, value, freq}. `date` selects the reference month; omit for the latest available month.
NBU monetary aggregates (M0, M1, M2, M3 money supply, in UAH million) for a given month. Each record: {dt (YYYYMMDD), txt (Ukrainian name), txten (English name), id_api (e.g. M2/M3), value, freq}. `date` selects the reference month (any day in it); omit for the latest available month.
Output schemas not documented. LLMs cannot predict response structure (e.g., field names, types, nesting). Descriptions mention response fields (e.g., 'r030', 'txt', 'rate') but no formal schema is provided.
No toolAnnotations (readOnlyHint). All five tools are READ_ONLY and safe to retry, but this is not declared via MCP toolAnnotations. LLMs cannot infer idempotency or safety.
Date format constraint not formalized. Parameter descriptions state 'YYYYMMDD format' as prose, but no JSON Schema pattern or enum is provided. LLMs may pass invalid dates.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
No error handling guidance. If an invalid date or currency code is passed, the tool throws a generic error. No recovery hints (e.g., 'Try currency_history() for a date range') are provided.
Parameter descriptions include example values (e.g., '20240115', 'USD', 'EUR', 'PLN'). LLMs may reuse these literally instead of adapting to context.