UNHCR Refugee Data Finder MCP (keyless). Provides access to UN Refugee Agency public statistics on forcibly displaced and stateless people: refugees, asylum-seekers, IDPs (internally displaced), plus asylum applications and decisions.
Four tools with complete input schemas and descriptions. Naming follows verb_noun pattern (list_countries, population, asylum_*). Descriptions are detailed (100-200 chars) and explain prerequisites (e.g., 'resolve with list_countries first'). However, schemas lack required field declarations, output schemas are undocumented, and error handling is absent. Parameters are well-described but lack enums for constrained values (e.g., procedure_type, dec_level). No pagination guidance in descriptions despite paginated responses.
Asylum applications lodged, by year, country of origin (coo) and country of asylum (coa). Rows carry procedure_type, app_type, dec_level and the `applied` count; response.total.applied is the aggregate. coo/coa take UNHCR 3-letter codes (see list_countries).
Decisions on asylum claims, by year, country of origin (coo) and country of asylum (coa). Each row breaks out dec_recognized, dec_other, dec_rejected, dec_closed and dec_total; response.total aggregates the same fields. coo/coa take UNHCR 3-letter codes (see list_countries).
Reference list of countries/territories UNHCR tracks. Use this to map a country name to the `code` you pass as coo/coa in the other tools. Each item has: code (UNHCR 3-letter, USE THIS for filtering), iso (true ISO3), iso2, name, region, majorArea. Paginated — large list, raise `limit` or page through (response.maxPages).
Forcibly displaced & stateless persons by year and country: refugees, asylum_seekers, idps (internally displaced), returned_refugees, returned_idps, stateless, others. Filter by coo (country of origin) and/or coa (country of asylum). coo_all/coa_all=true breaks the totals DOWN by that dimension (one row per origin or asylum country). NOTE: coo/coa take UNHCR's 3-letter code (e.g. Germany='GFR', not ISO3 'DEU') — resolve with list_countries first.
Output schemas undocumented. Tools return paginated envelopes (page, maxPages, total, items) but LLMs cannot infer response structure. Agents cannot plan downstream calls or extract required fields reliably.
No required field declarations in inputSchema. All parameters are optional, but yearFrom/yearTo are semantically required for meaningful queries. Missing 'required' array invites incomplete calls.
Enum constraints missing for categorical parameters. procedure_type, app_type, dec_level, dec_recognized are mentioned in descriptions but not declared as enums. LLMs will hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
No error handling or recovery guidance. callTool() throws generic 'Unknown tool' or HTTP errors without actionable context. LLMs cannot self-correct on invalid country codes or malformed queries.
Pagination not surfaced in tool descriptions. Tools accept limit/page but descriptions do not explain pagination strategy, default limits, or when to call list_countries first. Agents may miss discovery step.