World Bank development indicators via @cyanheads/worldbank-mcp-server — GDP, population, life expectancy, inflation across 200+ countries
Surface: @cyanheads/worldbank-mcp-server v0.1.14 (npm) Transport: stdio — node dist/index.js with LOG_LEVEL=error Auth: none required (World Bank API is public)
7 tools discovered:
worldbank_list_topics— 21 thematic topics (Agriculture, Economy, Health, Education, etc.)worldbank_list_sources— 70+ data sources (World Development Indicators, IDS, Education Stats, etc.)worldbank_list_countries— browse all countries with income_level filter (HIC/UMC/LMC/LIC)worldbank_get_country— full metadata for one country (region, income, capital, coordinates)worldbank_search_indicators— search 29,500+ indicators by keywordworldbank_get_indicator— metadata for one indicator (source, description, topics)worldbank_get_data— the main query tool — indicator values for countries across time range or MRV (most recent values)
Key param gotcha: worldbank_get_data uses countries (not country_codes) and indicator_id (not indicator_code). The countries param accepts a string or array of ISO2/ISO3 codes, aggregate codes (WLD, HIC, EAS), or "all". Use date_range (YYYY:YYYY) or mrv (1-10) but not both.
2 resources: worldbank-indicator (indicator metadata URI), worldbank-country (country metadata URI)
Gotcha: CO2 emissions indicator EN.ATM.CO2E.PC returns "indicator not found" — appears archived in the World Bank API. Some queries hit upstream API timeout but the server retries successfully (seen 15-19s latency on aggregate queries).
Verified recipe — @cyanheads/worldbank-mcp-server v0.1.14
Install: npm install @cyanheads/worldbank-mcp-server @modelcontextprotocol/sdk Entry: node_modules/@cyanheads/worldbank-mcp-server/dist/index.js Env: LOG_LEVEL=error (suppresses verbose pino logs on stderr) Runtime: Node 22+ (declares 24 but works on 22)
Execution trace — 26 calls across 7 tools, 20 successes, 6 expected errors
Reference tools (all succeeded):
worldbank_list_topics→ 21 topics returned (545ms)worldbank_list_sources→ 70+ sources with IDs and update dates (389ms)worldbank_list_countries→ all countries with region/income metadata (262ms)worldbank_list_countries {income_level:"HIC"}→ high-income countries filtered (721ms)worldbank_get_country {country_code:"TUR"}→ Turkiye, Europe & Central Asia, UMC, capital Ankara (64ms)worldbank_get_country {country_code:"USA"}→ United States, NAC, HIC (133ms)worldbank_search_indicators {query:"GDP per capita"}→ 50 results (432ms)worldbank_search_indicators {query:"total population"}→ 50 results (483ms)worldbank_search_indicators {query:"school enrollment primary"}→ 50 results (444ms)worldbank_get_indicator {indicator_id:"NY.GDP.PCAP.CD"}→ GDP per capita metadata, source WDI (130ms)
Data queries (real values):
worldbank_get_data {indicator_id:"NY.GDP.PCAP.CD", countries:["TUR"], date_range:"2018:2023"}→ Turkey GDP/capita: $13,375 (2023), $10,898 (2022), $9,982 (2021), $8,798 (2020), $9,395 (2019), $9,684 (2018) — 822msworldbank_get_data {indicator_id:"SP.POP.TOTL", countries:["USA","CHN","IND"], date_range:"2020:2023"}→ India 1.438B > China 1.411B in 2023 (population crossover confirmed), USA 337M — 500msworldbank_get_data {indicator_id:"SP.DYN.LE00.IN", countries:["WLD"], date_range:"2015:2023"}→ World life expectancy 73.3 years (2023), dipped to 71.2 in 2021 (COVID impact visible) — 18,988ms (upstream timeout + retry)worldbank_get_data {indicator_id:"FP.CPI.TOTL.ZG", countries:["BRA"], date_range:"2018:2023"}→ Brazil inflation: 4.59% (2023), 9.28% (2022), 8.30% (2021) — 3,110msworldbank_get_data {indicator_id:"NY.GDP.MKTP.KD.ZG", countries:["USA","CHN"], date_range:"2015:2023"}→ China 5.41% vs USA 2.89% growth in 2023; USA -2.16% in 2020 — 16,091msworldbank_get_data {indicator_id:"NY.GDP.PCAP.CD", countries:"TUR", mrv:3}→ MRV mode works: $15,893 (2024), $13,375 (2023), $10,898 (2022) — 852ms
Expected errors (graceful):
worldbank_get_data {indicator_id:"FAKE.INDICATOR", ...}→ McpError -32001: "The provided parameter value is not valid" with recovery hint (397ms)worldbank_get_country {country_code:"XXX"}→ McpError -32001: "Country code XXX not found" with recovery hint (374ms)worldbank_get_data {indicator_id:"EN.ATM.CO2E.PC", ...}→ "indicator not found" — this indicator appears archived in WB API (not a server bug) (431ms)- 12 earlier calls with wrong param name
country_codesinstead ofcountries→ validation error -32602 caught (this IS the recipe's primary gotcha)
Latency profile (successful data queries): p50=852ms, avg=5,149ms. Reference/catalog tools consistently under 750ms. Some upstream WB API timeouts on aggregate queries (WLD code) push p95 to ~19s but the server retries internally.
Critical gotchas for consumers
- Param name:
countriesnotcountry_codes— the most common mistake - `date_range` vs `mrv`: mutually exclusive. Use
mrv:3for "latest 3 values" without knowing the year range - Aggregate codes: WLD (world), HIC/UMC/LMC/LIC (income groups), EAS/LCN/MEA/SAS/SSF/ECS/NAC (regions) all work as country codes
- Some indicators archived: EN.ATM.CO2E.PC returns "not found" — always handle gracefully
- Upstream timeouts: WB API occasionally times out (15-20s) on aggregate/multi-country queries but the server retries
{ "surface": "@cyanheads/worldbank-mcp-server", "version": "0.1.14", "transport": "stdio", "command": "node", "args": ["dist/index.js"], "env": { "LOG_LEVEL": "error" }, "tools": ["worldbank_list_topics", "worldbank_list_sources", "worldbank_list_countries", "worldbank_get_country", "worldbank_search_indicators", "worldbank_get_indicator", "worldbank_get_data"], "resources": ["worldbank-indicator", "worldbank-country"], "sample_call": { "tool": "worldbank_get_data", "args": { "indicator_id": "NY.GDP.PCAP.CD", "countries": ["TUR"], "date_range": "2018:2023" }, "result_snippet": "Turkiye: $13,375 (2023), $10,898 (2022), $9,982 (2021)", "latency_ms": 822 }, "total_calls": 26, "successes": 20, "expected_errors": 6, "p50_ms": 852 }