cyanheads avatar

Worldbank Mcp Server

cyanheads/worldbank-mcp-server

Wraps the World Bank Open Data API with seven tools that let Claude search and query 29,500+ development indicators across 200+ countries and 60+ years of records. You can list topics and sources, search indicators by keyword or theme, pull country metadata with income levels and coordinates, and fetch time series data with flexible filtering by date range or most recent values. The data retrieval tool handles single countries, regional aggregates, or all entities at once, and explicitly surfaces null observations so you see gaps in the data. Built on the mcp-ts-core framework and available via stdio, streamable HTTP, or a public hosted endpoint at worldbank.caseyjhand.com/mcp. Reach for this when you need Claude to analyze economic indicators, compare development metrics across regions, or answer questions that require official World Bank statistics.

GitHub stars
3
tools
9
transport
STDIO, HTTP
env vars
12
last updated
Nov 11, 2026

Install

From registry metadata
$ npx add-mcp https://worldbank.caseyjhand.com/mcp --name worldbank

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http worldbank https://worldbank.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 9 tools

Verified live against the running server on Nov 6, 2026.

worldbank_list_topicsList all 21 World Bank thematic topics (Economy & Growth, Health, Education, and others) with descriptions. Use it to browse the indicator space by theme or to find a topic_id for worldbank_search_indicators.

List all 21 World Bank thematic topics (Economy & Growth, Health, Education, and others) with descriptions. Use it to browse the indicator space by theme or to find a topic_id for worldbank_search_indicators.

No parameters. Call it with no arguments.

worldbank_list_sourcesList the 70+ World Bank data sources (datasets), such as World Development Indicators, International Debt Statistics, and Doing Business. Returns source IDs and names for use as source_id in worldbank_search_indicators, worldbank_get_data, and worldbank_list_countries, one pag...2 params

List the 70+ World Bank data sources (datasets), such as World Development Indicators, International Debt Statistics, and Doing Business. Returns source IDs and names for use as source_id in worldbank_search_indicators, worldbank_get_data, and worldbank_list_countries, one pag...

Parameters* required
pageinteger
Pagination page number (1-based).default: 1
per_pageinteger
Results per page (default: server default, max: 100).
worldbank_list_countriesList countries and regional aggregates with metadata: ISO codes, region, income level, lending type, capital, and coordinates. Filter by region code (e.g. EAS, SSF, NAC), income level (LIC, LMC, UMC, HIC), and lending type (IDX for IDA, IBD for IBRD, IDB for Blend); filters co...7 params

List countries and regional aggregates with metadata: ISO codes, region, income level, lending type, capital, and coordinates. Filter by region code (e.g. EAS, SSF, NAC), income level (LIC, LMC, UMC, HIC), and lending type (IDX for IDA, IBD for IBRD, IDB for Blend); filters co...

Parameters* required
include_aggregatesboolean
When true, includes regional, income-group, and world aggregate entries alongside individual countries. Default false (individual countries only). No aggregate is returned under region or lending_t...default: false
income_levelstring
Filter by income group code: LIC (Low income), LMC (Lower middle income), UMC (Upper middle income), HIC (High income).
lending_typevalue
Filter by World Bank lending type code: IDX (IDA), IBD (IBRD), IDB (Blend — eligible for both), or LNX (Not classified). IDX, IBD, and IDB are also the codes worldbank_get_poverty takes for its len...
pageinteger
Pagination page number (1-based).default: 1
per_pageinteger
Results per page (default: server default). Positive integers above 300 are served at that maximum with the requested and served sizes echoed and a notice. totalPages uses the served size.
regionstring
Filter by World Bank region code. A country's region.id is one of EAS (East Asia & Pacific), ECS (Europe & Central Asia), LCN (Latin America & Caribbean), MEA (Middle East, North Africa, Afghanista...
source_idstring
Select a source-specific entity listing. Entries carry canonical id, name and sourceId only; global classification filters and include_aggregates=true are unavailable. Default false keeps all sourc...
worldbank_get_countryFetch metadata for one country or aggregate entity: ISO codes, region, income level, lending type, capital, and coordinates. Accepts an ISO2 code (US, DE), an ISO3 code (USA, DEU), or a World Bank aggregate code (EAS, HIC, WLD); "all" and lists of codes are rejected. Use world...1 params

Fetch metadata for one country or aggregate entity: ISO codes, region, income level, lending type, capital, and coordinates. Accepts an ISO2 code (US, DE), an ISO3 code (USA, DEU), or a World Bank aggregate code (EAS, HIC, WLD); "all" and lists of codes are rejected. Use world...

Parameters* required
country_code*string
One country code. Accepts ISO2 (US), ISO3 (USA), or aggregate code (EAS, HIC, WLD) — not "all" or a list of codes. Use worldbank_list_countries to browse valid codes.
worldbank_search_indicatorsSearch the 29,500+ World Bank indicator catalog by keyword, topic, or source, returning indicator IDs and metadata for worldbank_get_data. Provide at least one of query, topic_id, or source_id; a topic and a source together narrow to indicators in both. A keyword query matches...5 params

Search the 29,500+ World Bank indicator catalog by keyword, topic, or source, returning indicator IDs and metadata for worldbank_get_data. Provide at least one of query, topic_id, or source_id; a topic and a source together narrow to indicators in both. A keyword query matches...

Parameters* required
pageinteger
Pagination page number (1-based).default: 1
per_pageinteger
Results per page (default: server default, max: 100).
querystring
Keyword search terms — an indicator name, ID, or any words from either (e.g. "GDP per capita", "NY.GDP.MKTP.CD", "CO2 emissions"). Every term must match; punctuation is ignored, so the query needs...
source_idstring
Filter by data source ID (e.g. "2" for World Development Indicators). Use worldbank_list_sources to browse valid IDs.
topic_idstring
Filter by topic ID (e.g. "1" for Agriculture, "3" for Economy & Growth). Use worldbank_list_topics to browse valid IDs.
worldbank_get_indicatorFetch metadata for one World Bank indicator by ID: name, description, unit, source dataset, source organization, and thematic topics. Use worldbank_search_indicators to find the ID when only the concept is known; "all" and lists of IDs are rejected.1 params

Fetch metadata for one World Bank indicator by ID: name, description, unit, source dataset, source organization, and thematic topics. Use worldbank_search_indicators to find the ID when only the concept is known; "all" and lists of IDs are rejected.

Parameters* required
indicator_id*string
One indicator code (e.g. NY.GDP.PCAP.CD, SP.POP.TOTL) — not "all" or a list of codes. Use worldbank_search_indicators to find valid IDs.
worldbank_get_dataQuery World Bank indicator values for one or more countries across a time range — the primary data-access tool; find indicator_id values with worldbank_search_indicators. Observations carry a null value where data is not available for a country×year cell, which is common for s...10 params

Query World Bank indicator values for one or more countries across a time range — the primary data-access tool; find indicator_id values with worldbank_search_indicators. Observations carry a null value where data is not available for a country×year cell, which is common for s...

Parameters* required
countries*value
Country codes. Accepts: ISO2 (US, CN), ISO3 (USA, CHN), regional aggregate codes (EAS, LCN, MEA, SAS, SSF, ECS, NAC), income group codes (HIC, UMC, LMC, LIC), world code (WLD), or "all" on its own...
date_rangestring
Time window to filter observations to. Accepts a whole year (`2020`), a quarter (`2020Q1`), or a month (`2020M03`), or a range of two periods of the same type separated by a colon, earliest first (...
dimension_valuestring
For indicators answered from their own dataset (the response carries sourceScoped), the id of the value of that dataset's extra dimension to query, matched case-insensitively: a WDI Database Archiv...
frequencyvalue
The period form to return, for series such as Global Economic Monitor's that publish quarterly or monthly values beside annual ones: annual (the default), quarterly, or monthly. With mrv or mrnev i...
indicator_id*string
One indicator code to query (e.g. NY.GDP.PCAP.CD, SP.POP.TOTL) — not "all" or a list of codes. Use worldbank_search_indicators to find valid IDs.
mrnevinteger
Return each requested country's own N most recent periods (1–100) holding a value — its latest non-null observations, however far back they sit. A country with fewer values in the series returns th...
mrvinteger
Return the N most recent periods (1–100) holding a value for any requested country, clamped to the length of the series. Every requested country comes back at those periods, null where it has no va...
pageinteger
Pagination page number (1-based).default: 1
per_pageinteger
Results per page (default: server default). Positive integers above 1000 are served at that maximum with the requested and served sizes echoed and a notice. totalPages uses the served size.
source_idstring
Select this source dataset explicitly, including subnational sources. Use worldbank_list_countries with the same source_id for its canonical entity IDs. Omission preserves the standard dataset and...
worldbank_get_povertyQuery poverty and inequality estimates from the World Bank Poverty and Inequality Platform (PIP) for economies and for PIP's own aggregates — World, World Bank regions, income groups, lending groups, and fragility groups. Returns the poverty headcount ratio, poverty gap, and p...9 params

Query poverty and inequality estimates from the World Bank Poverty and Inequality Platform (PIP) for economies and for PIP's own aggregates — World, World Bank regions, income groups, lending groups, and fragility groups. Returns the poverty headcount ratio, poverty gap, and p...

Parameters* required
countries*value
Country codes: a single code, an array, or one string separated by commas, semicolons, or pipes. Economies go by ISO3 (IND, USA) or ISO2 (IN, US) code, including those PIP publishes only as model e...
fill_gapsboolean
When true (the default), any year the surveys do not cover falls back to PIP's own estimate for it instead of being left out — so a single-year query still answers, and a full-history query returns...default: true
pageinteger
Pagination page number (1-based).default: 1
per_pageinteger
Results per page (default: server default). Positive integers above 1000 are served at that maximum with the requested and served sizes echoed and a notice. totalPages uses the served size.
poverty_linenumber
Poverty line in PPP dollars per person per day, at the applied PPP vintage — any threshold, not only the published ones. Omitted uses the international poverty line for that vintage, so the applied...
ppp_versionvalue
PPP vintage to express every dollar figure in — the poverty line, mean, and median — as a four-digit year ("2021", "2017"). It must be one of the vintages PIP's current data release is published at...
reporting_levelvalue
Restrict results to one reporting level. Most economies publish a national figure only; ten publish a split and return an extra row per year for it, China with all three levels and the rest pairing...
welfare_typevalue
Restrict results to one welfare measure. Surveys measure either income or consumption and the two are not directly comparable, so a cross-country comparison is safer pinned to one. Omitted returns...
yearstring
Reporting year to return. A four-digit year (2022), "all" for the full history, or "MRV" for the most recent year. Omitted behaves as "all". MRV follows fill_gaps: with fill_gaps true each economy...
worldbank_search_projectsSearch the World Bank lending portfolio — the individual loans, credits, and grants the Bank finances — by free text, country, region, status, sector names, financing window (IBRD, IDA, Grants, Other), and board approval date. For classified education commitments use sector: [...11 params

Search the World Bank lending portfolio — the individual loans, credits, and grants the Bank finances — by free text, country, region, status, sector names, financing window (IBRD, IDA, Grants, Other), and board approval date. For classified education commitments use sector: [...

Parameters* required
approved_fromvalue
Earliest board approval date, as YYYY-MM-DD and inclusive. It must be a real calendar day (2024-02-29, not 2023-02-29) and, when approved_to is also set, on or before it. Board approval is the date...
approved_tovalue
Latest board approval date, as YYYY-MM-DD and inclusive. It must be a real calendar day.
countriesvalue
Borrowing countries: an economy by ISO3 or ISO2 code (BRA or BR), or a World Bank regional code for a multi-country operation (3A for Africa, 4E for East Asia and Pacific). Several codes — an array...
financial_typearray
Financing windows to include, combined as OR: a project matches when its financialTypes holds any of them. IBRD, IDA, Grants, Other are the complete set, case-sensitive. A project that publishes no...
include_abstractboolean
Include each project's complete abstract without changing page size. A project with no abstract reports null; appliedFilters.includeAbstract distinguishes omission from unavailable text.default: false
pageinteger
Pagination page number (1-based).default: 1
per_pageinteger
Results per page (default: server default). Positive integers above 1000 are served at that maximum with the requested and served sizes echoed and a notice. totalPages uses the served size.
querystring
Free-text search across project names, abstracts, and objectives. Every word must appear, so extra words narrow the result. A balanced quoted phrase and AND or OR between words parse; brackets, bra...
regionarray
World Bank operational regions to include, combined as OR. These are the lending regions the portfolio is organized by, not the WDI aggregate codes worldbank_get_data accepts.
sectorarray
Exact sector names, such as Education or FY17 - Social Protection, combined as OR across bare and FY17 spellings. Use names copied from the Projects API sector_exact facet, not sector codes. Unknow...
statusarray
Lifecycle stages to include, combined as OR. "Active" is under implementation, "Pipeline" is approved but not yet effective, "Closed" has finished disbursing, and "Dropped" was abandoned before app...

Sponsors

Configuration

MCP_LOG_LEVELdefault: info

Minimum log level for output: 'debug', 'info', 'notice', 'warning', 'error'.

WORLDBANK_API_BASE_URLdefault: https://api.worldbank.org/v2

World Bank API base URL override.

WORLDBANK_PIP_BASE_URLdefault: https://api.worldbank.org/pip/v1

World Bank Poverty and Inequality Platform (PIP) API base URL override.

WORLDBANK_PROJECTS_BASE_URLdefault: https://search.worldbank.org/api/v3

World Bank Projects API base URL override.

WORLDBANK_DEFAULT_PER_PAGEdefault: 50

Default page size for list, search, and data operations.

WORLDBANK_CLAMP_LIMITSdefault: true

Serve a per_page above a tool's page maximum at that maximum, with a notice. false advertises each maximum in the tool's input schema and rejects a larger per_page.

WORLDBANK_CATALOG_CACHE_TTL_MSdefault: 3600000

Lifetime in ms of the in-process reference caches: the indicator catalog behind keyword-only search, the country index behind isAggregate, source-scoped country codes, and poverty ISO2 codes, each source-scoped dataset's concept, country, period, and dimension listings, and PIP's

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/worldbank-mcp-server

Query 29,500+ World Bank development indicators for 200+ countries across 60+ years via MCP. STDIO or Streamable HTTP.

9 Tools • 2 Metadata Resources • 1 Skill

Version License MCP SDK npm TypeScript Bun

Details

Repository
github.com/cyanheads/worldbank-mcp-server
Package
@cyanheads/worldbank-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
1
Tools verified
Nov 6, 2026

More from cyanheads