Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,537Letters: 14Defects: 1,322counted 2 min ago
teppi

Server definition

Hash
sha256:51a9b903fd144eba92b42201b577dfb2c6cee4d77ef599b52c98fe7f6d2cd398
What it is
What a remote MCP server returned when asked what it offers: 9 tools

The blob, as servednamed by its sha256

{ "instructions": "Use the worldbank_* tools to query the World Bank Open Data API for development indicators. No API key required. Workflow: worldbank_search_indicators (browse topic/source IDs via worldbank_list_topics and worldbank_list_sources) to find an indicator_id, then worldbank_get_data to fetch values. Indicators use dotted codes like NY.GDP.PCAP.CD; countries use ISO2/ISO3, regional/income aggregate codes (EAS, HIC), WLD, or \"all\". On worldbank_get_data, date_range, mrv, and mrnev (each country's own latest values) are mutually exclusive; on series that publish quarterly or monthly values beside annual ones, frequency picks the form mrv and mrnev select from (annual by default) and a date_range's own form (2024Q1:2024Q4) picks it for a window; sparse cells return null, lastUpdated gives the data vintage, and \"all\" requires pagination. Poverty at a custom line, the Gini coefficient, and decile shares come from a separate dataset — use worldbank_get_poverty, which takes ISO3 or ISO2 economy codes plus PIP's own aggregates (WLD, regions such as SSF, income groups such as LIC, lending groups such as IDX) and returns null inequality fields on gap-filled years and aggregate rows. The Bank's lending operations are a third dataset — use worldbank_search_projects, which takes ISO3 or ISO2 economy codes but no aggregates, and combines its filters by AND.", "tools": [ { "description": "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 worldbank_list_countries to browse valid codes.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "country_code": { "description": "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.", "pattern": "^[A-Za-z0-9]{2,3}$", "type": "string" } }, "required": [ "country_code" ], "type": "object" }, "name": "worldbank_get_country", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "id", "iso2", "name", "region", "incomeLevel", "lendingType", "capitalCity", "longitude", "latitude", "isAggregate" ] }, { "required": [ "error" ] } ], "properties": { "capitalCity": { "description": "Capital city name (empty for aggregates).", "type": "string" }, "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode. Declared by this tool: `country_not_found`: The country code does not exist in the World Bank API. `multiple_countries`: The code is \"all\", or another selector the World Bank resolves to more than one country. Other values are possible when a failure originates below the handler.", "examples": [ "country_not_found", "multiple_countries" ], "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "id": { "description": "Country or aggregate ID.", "type": "string" }, "incomeLevel": { "additionalProperties": false, "description": "World Bank income classification.", "properties": { "id": { "description": "Income level code.", "type": "string" }, "name": { "description": "Income level name.", "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "isAggregate": { "description": "True when this entry is a regional or income-group aggregate.", "type": "boolean" }, "iso2": { "description": "ISO2 country code.", "type": "string" }, "latitude": { "description": "Capital latitude (empty for aggregates).", "type": "string" }, "lendingType": { "description": "World Bank lending type classification.", "type": "string" }, "longitude": { "description": "Capital longitude (empty for aggregates).", "type": "string" }, "name": { "description": "Country or aggregate name.", "type": "string" }, "region": { "additionalProperties": false, "description": "World Bank region this country belongs to.", "properties": { "id": { "description": "Region code.", "type": "string" }, "name": { "description": "Region name.", "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "type": "object" } }, { "description": "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 sparse series. Set at most one of date_range (a time window), mrv (the latest N periods across the requested countries), or mrnev (each country's own latest N values). Some series, such as Global Economic Monitor's, publish quarterly or monthly values beside annual ones: frequency picks the form mrv and mrnev select from (annual by default), and a date_range's own form (2024, 2024Q1, 2024M01) picks it for a window. lastUpdated gives the serving source's last update date, the data vintage to cite. For \"all\" countries, page through the results at up to 200 per page, since the API returns several hundred entries per indicator. Indicators the standard data endpoint does not serve — WDI Database Archives, PEFA, ICP, GDLD, International Debt Statistics: DSSI, Food Prices for Nutrition — are answered from their own dataset instead; the response then carries sourceScoped, naming that dataset and the release, classification, sector, or counterpart area applied (see dimension_value), because those values can be archived or superseded figures rather than current ones.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "countries": { "anyOf": [ { "description": "A single country code, a list separated by commas, semicolons, or pipes, or \"all\".", "pattern": "[^\\s;,|]", "type": "string" }, { "description": "An array of country codes; an element holding several codes separated by commas, semicolons, or pipes is split too.", "items": { "description": "A country code.", "type": "string" }, "minItems": 1, "type": "array" } ], "description": "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 for every entry (use pagination). Pass a single code, an array, or one string separated by commas, semicolons, or pipes (US,JP · US;JP · US|JP). At least one code is required — an empty value, or one made only of separators, is rejected rather than treated as \"all\"." }, "date_range": { "description": "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 (`2010:2023`, `2020Q1:2021Q4`, `2020M01:2020M06`); a range running latest first is rejected. On a series publishing more than one period form, the window's form picks which: `2024` returns the annual value, `2024Q1:2024Q4` the quarters, `2024M01:2024M12` the months, and a quarter or month window is null-filled where the series has none (a notice then names the other forms). On a series with one form, a window at another form keeps the periods it overlaps (`2019:2021` on a quarterly series returns its twelve quarters). A window covering no part of the series returns zero observations rather than the full series. Mutually exclusive with mrv, mrnev, and frequency.", "pattern": "^\\s*(?:\\d{4}(?::\\d{4})?|\\d{4}[Qq][1-4](?::\\d{4}[Qq][1-4])?|\\d{4}[Mm](?:0[1-9]|1[0-2])(?::\\d{4}[Mm](?:0[1-9]|1[0-2]))?)?\\s*$", "type": "string" }, "dimension_value": { "description": "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 Archives release (\"202503\"), an ICP or Food Prices for Nutrition classification (\"PPPGlob\", \"FPN 5.0\"), a GDLD sector (\"WHT\"), or an International Debt Statistics counterpart area (\"265\"). Omit it for the default, which sourceScoped.dimension reports: the only value when the dataset has one, \"WLD\" (World) for counterpart areas, the newest WDI Database Archives release holding data for the requested countries and periods (the newest release when none does), or otherwise every value with each row labelled. A value the dataset does not list is rejected with the valid ids, and a value for an indicator the standard data endpoint serves is rejected too.", "type": "string" }, "frequency": { "anyOf": [ { "const": "", "type": "string" }, { "description": "annual (2025), quarterly (2025Q4), or monthly (2025M12) periods.", "enum": [ "annual", "quarterly", "monthly" ], "type": "string" } ], "description": "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 it picks the form they select from — frequency \"monthly\" with mrv 3 returns the three latest months, where mrv 3 alone returns the three latest years. With neither, it returns the whole series at that form. A series that does not publish the form returns an empty result with a notice saying so, except that with neither mrv nor mrnev a source that null-fills the form (Global Economic Monitor) returns null rows, and a page of them carries a notice. Mutually exclusive with date_range, whose own form (2024, 2024Q1, 2024M01) picks the periods of a window." }, "indicator_id": { "description": "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.", "pattern": "^[A-Za-z0-9._-]+$", "type": "string" }, "mrnev": { "description": "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 the ones it has, and a country with none returns no rows. The periods are annual unless frequency names another form (a series with no annual periods keeps its own). Mutually exclusive with date_range and mrv.", "maximum": 100, "minimum": 1, "type": "integer" }, "mrv": { "description": "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 value there rather than with its own older values; mrnev returns each country's own latest values instead. The periods are annual unless frequency names another form (a series with no annual periods keeps its own). Rows are mrv × countries, so page through them with per_page. Mutually exclusive with date_range and mrnev.", "maximum": 100, "minimum": 1, "type": "integer" }, "page": { "default": 1, "description": "Pagination page number (1-based).", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (default: server default, max: 1000). One page holds at most 200 observations, which keeps a response within about 50 KB; a larger value is reduced to that cap and echoed as appliedFilters.perPage, and totalPages is counted at the reduced size, so page + 1 continues where a page ends; notice discloses the reduction whenever the result runs past one page.", "maximum": 1000, "minimum": 1, "type": "integer" } }, "required": [ "indicator_id", "countries" ], "type": "object" }, "name": "worldbank_get_data", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "data", "indicator", "nullCount", "appliedFilters", "totalCount", "currentPage", "totalPages" ] }, { "required": [ "error" ] } ], "properties": { "appliedFilters": { "additionalProperties": false, "description": "The effective parameters sent to the World Bank API — confirms country code normalization and which filters were in force for these observations.", "properties": { "countries": { "description": "Country codes as requested, normalized — array elements and strings separated by commas, semicolons, or pipes are split and rejoined with semicolons, the separator the API takes.", "type": "string" }, "dateRange": { "description": "Date window applied, omitted when none was requested.", "type": "string" }, "dimensionValue": { "description": "dimension_value as requested, omitted when none was given.", "type": "string" }, "frequency": { "description": "Period form applied (annual, quarterly, monthly), omitted when none was requested.", "enum": [ "annual", "quarterly", "monthly" ], "type": "string" }, "indicatorId": { "description": "Indicator ID queried.", "type": "string" }, "mrnev": { "description": "Most-recent-non-empty-values count applied, omitted when none was requested.", "type": "number" }, "mrv": { "description": "Most-recent-values count applied, omitted when none was requested.", "type": "number" }, "page": { "description": "Page number requested.", "type": "number" }, "perPage": { "description": "Results per page actually served — the requested size or server default, reduced to the page cap when larger. totalPages is counted at this size.", "type": "number" }, "requestedPerPage": { "description": "Page size asked for, present only when it exceeded the page cap and perPage was reduced.", "type": "number" } }, "required": [ "indicatorId", "countries", "page", "perPage" ], "type": "object" }, "currentPage": { "description": "Page number requested — past totalPages when the request ran off the end.", "type": "number" }, "data": { "description": "Indicator observations for this page. Null values are common for sparse series.", "items": { "additionalProperties": false, "description": "A single country×period observation.", "properties": { "countryCode": { "description": "ISO2 code of the country or aggregate (US, XD for High income).", "type": "string" }, "countryIso3": { "description": "Three-character code of the country or aggregate (USA, HIC) — the form the countries input takes. Empty only for an entity the World Bank country listing does not carry.", "type": "string" }, "countryName": { "description": "Country or aggregate name.", "type": "string" }, "date": { "description": "Period of observation: a year (2020), quarter (2020Q1), or month (2020M03).", "type": "string" }, "dimension": { "additionalProperties": false, "description": "The value of the dataset's extra dimension (sourceScoped.dimension.concept) this row belongs to. Present on source-scoped rows from a dataset that has one.", "properties": { "id": { "description": "Dimension value id, e.g. \"202503\".", "type": "string" }, "label": { "description": "Dimension value label, e.g. \"2025 Mar\".", "type": "string" } }, "required": [ "id", "label" ], "type": "object" }, "isAggregate": { "description": "True when this row is a regional or income-group aggregate rather than an individual country.", "type": "boolean" }, "obsStatus": { "description": "Observation status code (empty string when no special status; non-empty values signal data quality notes).", "type": "string" }, "value": { "description": "Indicator value. Null when data is not available for this country×year cell.", "type": [ "number", "null" ] } }, "required": [ "countryCode", "countryIso3", "countryName", "date", "value", "obsStatus", "isAggregate" ], "type": "object" }, "type": "array" }, "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode. Declared by this tool: `invalid_params`: More than one of date_range, mrv, and mrnev is provided, or frequency is provided with date_range. `mixed_all_selector`: countries combines \"all\" with one or more country codes. `reversed_date_range`: date_range names a range whose first period comes after its second. `multiple_indicators`: The indicator ID is \"all\", which selects every indicator rather than one. `indicator_not_found`: The indicator ID does not exist. `indicator_not_queryable`: The standard data endpoint does not serve the indicator, and no catalog source can serve it through the source-scoped data API instead — the catalog no longer lists the ID, the catalog lookup failed, or the source is not organized by country, series, and time plus at most one further dimension. `unknown_dimension_value`: dimension_value is not a value the indicator's dataset lists for its extra dimension. `dimension_not_applicable`: dimension_value is given for an indicator the standard data endpoint serves, or whose dataset has no dimension beyond country, series, and time. `source_scope_too_large`: A source-scoped query would read more rows (countries × periods × unpinned dimension values) than one request allows. `country_not_found`: One or more country codes are invalid. The message and countryCodes name the codes the World Bank country listing lacks, or every requested code when it lacks none. `indicator_and_country_not_found`: The indicator ID and the country codes are both invalid. The codes are named as on country_not_found. `upstream_inconsistent`: The World Bank API answered a data read, and its one re-read, with rows that do not fit the request — its response cache served another query's result — so nothing was served. Other values are possible when a failure originates below the handler.", "examples": [ "invalid_params", "mixed_all_selector", "reversed_date_range", "multiple_indicators", "indicator_not_found", "indicator_not_queryable", "unknown_dimension_value", "dimension_not_applicable", "source_scope_too_large", "country_not_found", "indicator_and_country_not_found", "upstream_inconsistent" ], "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "indicator": { "additionalProperties": false, "description": "Indicator metadata echoed from the response.", "properties": { "id": { "description": "Indicator ID echoed for chaining context.", "type": "string" }, "name": { "description": "Indicator name.", "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "lastUpdated": { "description": "Last update date of the World Bank source that served these values (YYYY-MM-DD) — the data vintage to cite with them. Omitted when upstream reports none, as for an empty result.", "type": "string" }, "notice": { "description": "Recovery hint for an empty result set — how to broaden the query when nothing matched, whether the series publishes the requested frequency, or the page range that exists when the requested page is past the end — a quarter or month date_range whose observations are all null, with the same span at the other period forms, a frequency page whose observations are all null, a page size reduced to the page cap, and, for source-scoped data, the requested country codes the serving dataset publishes nothing for.", "type": "string" }, "nullCount": { "description": "Count of null values on this page — indicates data sparsity for the requested filter.", "type": "number" }, "sourceScoped": { "additionalProperties": false, "description": "Present only when the standard data endpoint does not serve the indicator and its catalog source served the values instead. Absent for indicators the standard endpoint serves.", "properties": { "dimension": { "anyOf": [ { "additionalProperties": false, "properties": { "concept": { "description": "The extra dimension: Version, Classification, Sector, or Counterpart-Area.", "type": "string" }, "id": { "description": "Applied value id; null for every_value.", "type": [ "string", "null" ] }, "label": { "description": "Applied value label; null for every_value.", "type": [ "string", "null" ] }, "selection": { "description": "How the value was chosen: requested (dimension_value), only_value (the only one the dataset lists), world_total (WLD, all counterpart areas), newest_with_data (newest release holding a value for the requested countries and periods), newest (newest release; none holds a value in that scope), or every_value (no single value; each row carries its own).", "enum": [ "requested", "only_value", "world_total", "newest_with_data", "newest", "every_value" ], "type": "string" } }, "required": [ "concept", "selection", "id", "label" ], "type": "object" }, { "type": "null" } ], "description": "The dimension value applied; null when the dataset has no extra dimension." }, "note": { "description": "States that the values came from the source-scoped data API rather than the standard World Bank data endpoint, and may be archived or superseded figures.", "type": "string" }, "sourceId": { "description": "ID of the World Bank data source that served the values.", "type": "string" }, "sourceName": { "description": "Name of that data source, e.g. \"WDI Database Archives\".", "type": "string" } }, "required": [ "sourceId", "sourceName", "dimension", "note" ], "type": "object" }, "totalCount": { "description": "Total observations before pagination.", "type": "number" }, "totalPages": { "description": "Total number of pages.", "type": "number" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "indicator_id": { "description": "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.", "pattern": "^[A-Za-z0-9._-]+$", "type": "string" } }, "required": [ "indicator_id" ], "type": "object" }, "name": "worldbank_get_indicator", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "id", "name", "unit", "sourceId", "sourceName", "sourceNote", "sourceOrganization", "topics" ] }, { "required": [ "error" ] } ], "properties": { "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode. Declared by this tool: `indicator_not_found`: The indicator ID does not exist in the World Bank API. `multiple_indicators`: The ID is \"all\", or another selector the World Bank resolves to more than one indicator. Other values are possible when a failure originates below the handler.", "examples": [ "indicator_not_found", "multiple_indicators" ], "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "id": { "description": "Indicator ID.", "type": "string" }, "name": { "description": "Indicator name.", "type": "string" }, "sourceId": { "description": "Source dataset ID.", "type": "string" }, "sourceName": { "description": "Source dataset name.", "type": "string" }, "sourceNote": { "description": "Detailed indicator description from the source.", "type": "string" }, "sourceOrganization": { "description": "Organization that collects or publishes this data.", "type": "string" }, "topics": { "description": "Thematic topics this indicator belongs to.", "items": { "additionalProperties": false, "description": "A thematic topic entry.", "properties": { "id": { "description": "Topic ID.", "type": "string" }, "name": { "description": "Topic name.", "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" }, "unit": { "description": "Unit of measurement (empty when not specified).", "type": "string" } }, "type": "object" } }, { "description": "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, and lending groups. Returns the poverty headcount ratio, poverty gap, and poverty severity at any poverty line, plus mean and median welfare and population. Use it for inequality and distribution questions too — survey-based economy rows carry the Gini coefficient, mean log deviation, polarization, and the ten decile income/consumption shares, because PIP returns poverty and inequality in the same row. PIP is a separate dataset from the WDI series worldbank_get_data reads: it measures welfare in PPP dollars per person per day, at a PPP vintage ppp_version selects, and computes its aggregates at any poverty line, where worldbank_get_data carries only the published lines. Every row reports how it was produced. On an economy, estimationType \"survey\" rows carry the full inequality block; \"interpolation\", \"extrapolation\", and \"CMD estimation\" rows are gap-filled estimates for years no survey covers, and their gini, mld, polarization, and decileShares are null — a documented gap in the source data, not an error. Aggregate rows (isAggregate true) are \"actual\", \"nowcast\", or \"projection\", add popInPoverty, and carry no distributional block.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "countries": { "anyOf": [ { "description": "A single country code, a list separated by commas, semicolons, or pipes, or \"all\".", "pattern": "[^\\s;,|]", "type": "string" }, { "description": "An array of country codes; an element holding several codes separated by commas, semicolons, or pipes is split too.", "items": { "description": "A country code.", "type": "string" }, "minItems": 1, "type": "array" } ], "description": "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 estimates (AFG); \"all\" returns every economy. PIP's aggregates are served too: WLD; the World Bank regions AFE, AFW, EAS, ECS, LCN, MEA, NAC, SAS, SSF; the income groups HIC, LIC, LMIC (or LMC), UMIC (or UMC); and the lending groups IDX (IDA only), IDB or BLND (IDA blend), IBD or IBRD (IBRD only), and REST. Income groups follow the fiscal-year classification PIP's data release was built with — FY2026 (July 2025) for release 20260922 — applied to every year, so membership can differ from the current one worldbank_get_country reports. IDA (IDA total) is rejected because PIP computes no IDA total: ask for IDX and IDB together. Other aggregate codes (SSA, EAP, FCVY, MIC, LMY) are rejected, and welfare_type and reporting_level cannot be combined with an aggregate." }, "fill_gaps": { "default": true, "description": "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 a row per year rather than only the survey years. Those fallback rows carry no inequality data. Set false to return survey-derived rows only, accepting an empty result for years no survey covers and for economies PIP publishes only as model estimates. It also decides what \"MRV\" resolves to, and has no effect on aggregate rows.", "type": "boolean" }, "page": { "default": 1, "description": "Pagination page number (1-based).", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (default: server default, max: 1000). \"all\" countries across \"all\" years runs to several thousand rows. One page holds at most 70 estimates, which keeps a response within about 50 KB; a larger value, the server default included, is reduced to that cap and echoed as appliedFilters.perPage, and totalPages is counted at the reduced size; notice discloses the reduction whenever the result runs past one page.", "maximum": 1000, "minimum": 1, "type": "integer" }, "poverty_line": { "description": "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 value is echoed back on every row as povertyLine rather than assumed here. The poverty line does not affect the inequality fields, which describe the whole distribution.", "maximum": 2700, "minimum": 0, "type": "number" }, "ppp_version": { "anyOf": [ { "const": "", "type": "string" }, { "description": "A PPP vintage year.", "pattern": "^\\d{4}$", "type": "string" } ], "description": "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; any other value fails with the available vintages named. Omitted uses the newest vintage of that release. The vintage and release applied are echoed as appliedFilters.pppVersion and appliedFilters.releaseVersion." }, "reporting_level": { "anyOf": [ { "const": "", "type": "string" }, { "description": "Restrict to the national, urban, or rural estimate.", "enum": [ "national", "urban", "rural" ], "type": "string" } ], "description": "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 national with either urban or rural. Every row states its own reportingLevel." }, "welfare_type": { "anyOf": [ { "const": "", "type": "string" }, { "description": "Restrict to surveys measuring income, or to those measuring consumption.", "enum": [ "income", "consumption" ], "type": "string" } ], "description": "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 whichever each economy publishes, and both where an economy publishes both — thirty-five do, and those return two rows per year." }, "year": { "description": "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 resolves to PIP's latest estimate year, and with fill_gaps false to its latest survey year; an aggregate resolves to its newest reporting year. PIP coverage starts in 1963 and ends at the last year of the data release in use; a year outside that span fails with the span named.", "pattern": "^\\s*(?:\\d{4}|all|MRV)?\\s*$", "type": "string" } }, "required": [ "countries" ], "type": "object" }, "name": "worldbank_get_poverty", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "estimates", "appliedFilters", "totalCount", "currentPage", "totalPages" ] }, { "required": [ "error" ] } ], "properties": { "appliedFilters": { "additionalProperties": false, "description": "The effective parameters sent to PIP — confirms country code normalization and which filters were in force for these estimates.", "properties": { "countries": { "description": "Codes as queried, comma-joined across economies and aggregates: uppercased and deduplicated, two-character codes resolved to their three-character form (NG → NGA), and WDI group spellings read as PIP's (LMC → LMIC, IDB → BLND, IBD → IBRD). PIP's IDA-only group stays IDX, since IDA means IDA total. Every code here can be sent back as countries and asks for the same economy or group.", "type": "string" }, "fillGaps": { "description": "Whether gap-filling was permitted for this query, including the server default of true.", "type": "boolean" }, "page": { "description": "Page number requested.", "type": "number" }, "perPage": { "description": "Results per page actually served — the requested size or server default, reduced to the page cap when larger. totalPages is counted at this size.", "type": "number" }, "povertyLine": { "description": "Poverty line requested, omitted when the upstream default was used — in which case the applied value is on every row as povertyLine.", "type": "number" }, "pppVersion": { "description": "PPP vintage every dollar figure in these estimates is expressed in, whether requested or resolved as the newest vintage of the release.", "type": "string" }, "releaseVersion": { "description": "PIP data release the estimates come from, as its YYYYMMDD stamp — the newest release PIP lists. Survey and gap-filled rows share it.", "type": "string" }, "reportingLevel": { "description": "Reporting-level filter applied, omitted when none.", "type": "string" }, "requestedPerPage": { "description": "Page size asked for, requested or server default, present only when it exceeded the page cap and perPage was reduced.", "type": "number" }, "welfareType": { "description": "Welfare-type filter applied, omitted when none.", "type": "string" }, "year": { "description": "Year filter applied, omitted when none was requested.", "type": "string" } }, "required": [ "countries", "pppVersion", "releaseVersion", "fillGaps", "page", "perPage" ], "type": "object" }, "currentPage": { "description": "Page number requested — past totalPages when the request ran off the end.", "type": "number" }, "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode. Declared by this tool: `country_not_found`: No economy or aggregate PIP publishes goes by one or more of the codes, including a two-character code the World Bank country listing does not carry. `ambiguous_aggregate`: IDA or its ISO2 code XG names WDI's IDA total, which PIP does not compute. `unserved_aggregate`: An aggregate code this tool does not serve: an FCV or PovcalNet grouping from PIP's regions table (FCVY, SSA, EAP), or a WDI income aggregate PIP computes none for (MIC, LMY). `aggregate_filter_conflict`: welfare_type or reporting_level was set alongside an aggregate code. `invalid_parameter`: PIP rejected the value supplied for a query parameter other than country. `ppp_version_unavailable`: ppp_version names a PPP vintage PIP's current data release is not published at. `upstream_unavailable`: PIP answered with a server error, or the World Bank Indicators API country listing that resolves an ISO2 code could not be loaded. Other values are possible when a failure originates below the handler.", "examples": [ "country_not_found", "ambiguous_aggregate", "unserved_aggregate", "aggregate_filter_conflict", "invalid_parameter", "ppp_version_unavailable", "upstream_unavailable" ], "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "estimates": { "description": "Poverty and inequality estimates for this page — economies and aggregates in one list, ordered by code, year, reporting level, then welfare type.", "items": { "additionalProperties": false, "description": "One economy × year × reporting-level × welfare-type estimate, or one aggregate × year.", "properties": { "comparableSpell": { "description": "The span of years the comparable series behind this row covers, as PIP labels it (\"2022\", \"2011 - 2022\"). Null on gap-filled rows.", "type": [ "string", "null" ] }, "countryCode": { "description": "ISO3 code of the economy, or the aggregate code (SSF, LIC, WLD) on an aggregate row — IDX for PIP's IDA-only group. Accepted back as countries.", "type": "string" }, "countryName": { "description": "Economy or aggregate name — \"IDA only\" for IDX, as WDI names it.", "type": "string" }, "decileShares": { "anyOf": [ { "items": { "type": "number" }, "maxItems": 10, "minItems": 10, "type": "array" }, { "type": "null" } ], "description": "Share of total income or consumption held by each decile, poorest first, summing to 1. Null on gap-filled rows." }, "estimationType": { "description": "How the row was produced. On an economy: \"survey\" carries the full inequality block; \"interpolation\", \"extrapolation\", and \"CMD estimation\" are gap-filled and carry none, the last being what PIP publishes for economies it has no survey for at all. On an aggregate: \"actual\", \"nowcast\", or \"projection\".", "type": "string" }, "gini": { "description": "Gini coefficient of the welfare distribution, 0 (perfect equality) to 1. Null on gap-filled rows — see estimationType.", "type": [ "number", "null" ] }, "headcount": { "description": "Share of the population below the poverty line, as a fraction (0.0814 = 8.14%).", "type": [ "number", "null" ] }, "isAggregate": { "description": "True on a PIP aggregate — World, a region, an income group, or a lending group — whose median, distributional block, survey fields, welfareType, and reportingLevel are null.", "type": "boolean" }, "isInterpolated": { "description": "True on the interpolated and extrapolated rows. Read estimationType instead of relying on this alone — a \"CMD estimation\" row is also gap-filled but reports false here. Null on aggregate rows.", "type": [ "boolean", "null" ] }, "mean": { "description": "Mean daily welfare per person in PPP dollars.", "type": [ "number", "null" ] }, "median": { "description": "Median daily welfare per person in PPP dollars. Null on aggregate rows, which PIP publishes without one.", "type": [ "number", "null" ] }, "mld": { "description": "Mean log deviation, an inequality measure. Null on gap-filled rows.", "type": [ "number", "null" ] }, "polarization": { "description": "Wolfson polarization index. Null on gap-filled rows.", "type": [ "number", "null" ] }, "popInPoverty": { "description": "Number of people below the poverty line, as PIP publishes it on aggregate rows. Null on economy rows, where population × headcount gives it.", "type": [ "number", "null" ] }, "population": { "description": "Population the estimate covers — multiply by headcount for the number of people below the line.", "type": [ "number", "null" ] }, "povertyGap": { "description": "Mean shortfall below the poverty line across the whole population, as a fraction of the line — depth of poverty, not just its incidence.", "type": [ "number", "null" ] }, "povertyLine": { "description": "Poverty line the poverty measures were computed at, in PPP dollars per person per day, as applied upstream.", "type": "number" }, "povertySeverity": { "description": "Squared poverty gap, weighting the poorest most heavily — inequality among those below the line.", "type": [ "number", "null" ] }, "regionCode": { "description": "PIP region code of the economy (e.g. SAS, NAC, SSF); null on an aggregate row.", "type": [ "string", "null" ] }, "regionName": { "description": "PIP region name of the economy; null on an aggregate row.", "type": [ "string", "null" ] }, "reportingLevel": { "description": "Coverage of this estimate: national, urban, or rural. Null on an aggregate row.", "type": [ "string", "null" ] }, "reportingYear": { "description": "Calendar year the estimate reports on.", "type": "number" }, "surveyAcronym": { "description": "Short name of the underlying survey (empty on gap-filled rows and where PIP publishes none).", "type": "string" }, "surveyComparability": { "description": "PIP's series comparability code within the economy: 0 is its oldest comparable series and the code steps up each time comparability breaks, so two survey rows of one economy compare over time only when they share it. Null on gap-filled rows.", "type": [ "number", "null" ] }, "surveyYear": { "description": "Year of the survey behind the estimate, fractional when the survey spans a fiscal year (2022.58). Null on gap-filled rows, which trace to no single survey.", "type": [ "number", "null" ] }, "watts": { "description": "Watts index, a distribution-sensitive measure.", "type": [ "number", "null" ] }, "welfareType": { "description": "Whether the underlying survey measures income or consumption. The two are not directly comparable across economies. Null on an aggregate row, which spans both.", "type": [ "string", "null" ] } }, "required": [ "countryCode", "countryName", "regionCode", "regionName", "reportingYear", "reportingLevel", "welfareType", "povertyLine", "headcount", "povertyGap", "povertySeverity", "watts", "mean", "median", "gini", "mld", "polarization", "decileShares", "population", "popInPoverty", "surveyYear", "surveyAcronym", "surveyComparability", "comparableSpell", "estimationType", "isInterpolated", "isAggregate" ], "type": "object" }, "type": "array" }, "notice": { "description": "Context for an empty result set, for a page past the end of the results, for a page size reduced to the page cap, for a result carrying gap-filled or aggregate rows with no inequality data, and for economies fill_gaps false left out.", "type": "string" }, "totalCount": { "description": "Total estimates before pagination.", "type": "number" }, "totalPages": { "description": "Total number of pages.", "type": "number" } }, "type": "object" } }, { "description": "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 combine by AND. Aggregate entries are excluded by default, leaving individual countries only; set include_aggregates=true to also return region, income group, and world aggregate entities.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "include_aggregates": { "default": false, "description": "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_type, whichever code is given, so this changes nothing when either is set.", "type": "boolean" }, "income_level": { "description": "Filter by income group code: LIC (Low income), LMC (Lower middle income), UMC (Upper middle income), HIC (High income).", "type": "string" }, "lending_type": { "anyOf": [ { "const": "", "type": "string" }, { "description": "IDX (IDA), IBD (IBRD), IDB (Blend), or LNX (Not classified).", "enum": [ "IBD", "IDB", "IDX", "LNX" ], "type": "string" } ], "description": "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 lending groups; a country's lendingType field reports the name (IDA, IBRD, Blend, Not classified)." }, "page": { "default": 1, "description": "Pagination page number (1-based).", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (default: server default, max: 300). One page holds at most 150 entries, which keeps a response within about 50 KB; a larger value is reduced to that cap and echoed as appliedFilters.perPage, and totalPages is counted at the reduced size, so page + 1 continues where a page ends; notice discloses the reduction whenever the result runs past one page.", "maximum": 300, "minimum": 1, "type": "integer" }, "region": { "description": "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, Afghanistan & Pakistan), NAC (North America), SAS (South Asia), or SSF (Sub-Saharan Africa). Any other World Bank region or grouping code also filters, by membership: AFE (Africa Eastern and Southern), AFW (Africa Western and Central), ARB (Arab World), EUU (European Union), LDC (Least developed countries), and the rest of the codes the World Bank publishes for regions.", "type": "string" } }, "type": "object" }, "name": "worldbank_list_countries", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "countries", "appliedFilters", "totalCount", "currentPage", "totalPages" ] }, { "required": [ "error" ] } ], "properties": { "appliedFilters": { "additionalProperties": false, "description": "The effective listing parameters — which filters were in force and the page size served.", "properties": { "includeAggregates": { "description": "Whether aggregates were requested, including the default of false.", "type": "boolean" }, "incomeLevel": { "description": "Income level code applied, omitted when none.", "type": "string" }, "lendingType": { "description": "Lending type code applied, omitted when none.", "type": "string" }, "page": { "description": "Page number requested.", "type": "number" }, "perPage": { "description": "Results per page actually served — the requested size or server default, reduced to the page cap when larger. totalPages is counted at this size.", "type": "number" }, "region": { "description": "Region code applied, omitted when none.", "type": "string" }, "requestedPerPage": { "description": "Page size asked for, present only when it exceeded the page cap and perPage was reduced.", "type": "number" } }, "required": [ "includeAggregates", "page", "perPage" ], "type": "object" }, "countries": { "description": "Countries (and optionally aggregates) matching the filters.", "items": { "additionalProperties": false, "description": "A country or aggregate entry.", "properties": { "capitalCity": { "description": "Capital city name (empty for aggregates).", "type": "string" }, "id": { "description": "Country or aggregate ID (ISO2 or WB aggregate code).", "type": "string" }, "incomeLevel": { "additionalProperties": false, "description": "World Bank income classification.", "properties": { "id": { "description": "Income level code.", "type": "string" }, "name": { "description": "Income level name.", "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "isAggregate": { "description": "True when this entry is a regional or income-group aggregate rather than an individual country.", "type": "boolean" }, "iso2": { "description": "ISO2 country code.", "type": "string" }, "latitude": { "description": "Capital latitude (empty for aggregates).", "type": "string" }, "lendingType": { "description": "World Bank lending type name: IDA, IBRD, Blend, or Not classified (lending_type filters by the codes IDX, IBD, IDB, LNX). Aggregates report Aggregates.", "type": "string" }, "longitude": { "description": "Capital longitude (empty for aggregates).", "type": "string" }, "name": { "description": "Country or aggregate name.", "type": "string" }, "region": { "additionalProperties": false, "description": "World Bank region this country belongs to.", "properties": { "id": { "description": "Region code.", "type": "string" }, "name": { "description": "Region name.", "type": "string" } }, "required": [ "id", "name" ], "type": "object" } }, "required": [ "id", "iso2", "name", "region", "incomeLevel", "lendingType", "capitalCity", "longitude", "latitude", "isAggregate" ], "type": "object" }, "type": "array" }, "currentPage": { "description": "Page number requested — past totalPages when the request ran off the end.", "type": "number" }, "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: An invalid region or income_level code was provided. Other values are possible when a failure originates below the handler.", "examples": [ "invalid_filter" ], "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "notice": { "description": "Context for an empty page — which filters matched nothing, or the page range that exists when the requested page is past the end — or for a page size reduced to the page cap.", "type": "string" }, "totalCount": { "description": "Total matching entries before pagination (includes aggregates if include_aggregates=true).", "type": "number" }, "totalPages": { "description": "Total number of pages.", "type": "number" } }, "type": "object" } }, { "description": "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, one page at a time.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "page": { "default": 1, "description": "Pagination page number (1-based).", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (default: server default, max: 100).", "maximum": 100, "minimum": 1, "type": "integer" } }, "type": "object" }, "name": "worldbank_list_sources", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "sources", "totalCount", "currentPage", "totalPages" ] }, { "required": [ "error" ] } ], "properties": { "currentPage": { "description": "Page number requested — past totalPages when the request ran off the end.", "type": "number" }, "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode.", "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "notice": { "description": "Context for an empty page: the page range that exists when the requested page is past the end.", "type": "string" }, "sources": { "description": "World Bank data sources for this page.", "items": { "additionalProperties": false, "description": "A World Bank data source entry.", "properties": { "code": { "description": "Short dataset code.", "type": "string" }, "concepts": { "description": "Number of concepts (variables) in this source.", "type": "string" }, "dataAvailability": { "description": "Data availability status.", "type": "string" }, "id": { "description": "Source ID for use in worldbank_search_indicators.", "type": "string" }, "lastUpdated": { "description": "Date of last data update (YYYY-MM-DD or empty).", "type": "string" }, "metadataAvailability": { "description": "Metadata availability status.", "type": "string" }, "name": { "description": "Dataset name.", "type": "string" } }, "required": [ "id", "name", "code", "lastUpdated", "dataAvailability", "metadataAvailability", "concepts" ], "type": "object" }, "type": "array" }, "totalCount": { "description": "Total number of sources.", "type": "number" }, "totalPages": { "description": "Total number of pages.", "type": "number" } }, "type": "object" } }, { "description": "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.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": {}, "type": "object" }, "name": "worldbank_list_topics", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "topics" ] }, { "required": [ "error" ] } ], "properties": { "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode.", "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "topics": { "description": "All 21 World Bank thematic topics.", "items": { "additionalProperties": false, "description": "A thematic topic entry.", "properties": { "id": { "description": "Topic ID for use in worldbank_search_indicators.", "type": "string" }, "name": { "description": "Topic name.", "type": "string" }, "sourceNote": { "description": "Brief description of the topic.", "type": "string" } }, "required": [ "id", "name", "sourceNote" ], "type": "object" }, "type": "array" } }, "type": "object" } }, { "description": "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 every term against indicator ID, name, and full description, in any word order, across the whole catalog or the whole selected topic or source; punctuation is ignored, so the query needs at least one letter or digit. Exact ID or name matches rank first, then names starting with the phrase as whole words, then whole-phrase matches, then matches where every term is a whole word of the ID or name, then other ID/name matches, then description-only matches; within each of those, World Development Indicators series come first, then other live sources, then archives, and a series comes ahead of its own breakdowns by sex, area, or age. Each indicator ID appears once, even where the catalog publishes it under two sources. Each result carries the first 150 characters of its description; worldbank_get_indicator returns the whole of it. Find topic IDs with worldbank_list_topics and source IDs with worldbank_list_sources.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "page": { "default": 1, "description": "Pagination page number (1-based).", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (default: server default, max: 100).", "maximum": 100, "minimum": 1, "type": "integer" }, "query": { "description": "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 at least one letter or digit. At least one of query, topic_id, or source_id must be provided.", "type": "string" }, "source_id": { "description": "Filter by data source ID (e.g. \"2\" for World Development Indicators). Use worldbank_list_sources to browse valid IDs.", "pattern": "^\\s*\\d*\\s*$", "type": "string" }, "topic_id": { "description": "Filter by topic ID (e.g. \"1\" for Agriculture, \"3\" for Economy & Growth). Use worldbank_list_topics to browse valid IDs.", "pattern": "^\\s*\\d*\\s*$", "type": "string" } }, "type": "object" }, "name": "worldbank_search_indicators", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "indicators", "appliedFilters", "totalCount", "currentPage", "totalPages" ] }, { "required": [ "error" ] } ], "properties": { "appliedFilters": { "additionalProperties": false, "description": "The effective search parameters, field by field — confirms which filter combination produced these results without parsing the effectiveQuery string.", "properties": { "query": { "description": "Trimmed keyword query sent to the search, omitted when none was given.", "type": "string" }, "sourceId": { "description": "Source ID the results were scoped to, omitted when none was given.", "type": "string" }, "topicId": { "description": "Topic ID the results were scoped to, omitted when none was given.", "type": "string" } }, "type": "object" }, "currentPage": { "description": "Current page number.", "type": "number" }, "effectiveQuery": { "description": "Active filters echoed: keyword, topic ID, and/or source ID that were applied.", "type": "string" }, "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode. Declared by this tool: `missing_filter`: None of query, topic_id, or source_id were provided. `invalid_filter`: The topic_id or source_id does not exist upstream. `empty_query`: The query contains no letters or digits once punctuation is ignored. Other values are possible when a failure originates below the handler.", "examples": [ "missing_filter", "invalid_filter", "empty_query" ], "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "indicators": { "description": "Matching indicators for this page.", "items": { "additionalProperties": false, "description": "A matching indicator with metadata.", "properties": { "id": { "description": "Indicator ID (e.g. NY.GDP.PCAP.CD). Use as indicator_id in worldbank_get_data.", "type": "string" }, "name": { "description": "Indicator name.", "type": "string" }, "sourceId": { "description": "Source dataset ID.", "type": "string" }, "sourceName": { "description": "Source dataset name.", "type": "string" }, "sourceNote": { "description": "Indicator description, cut to its first 150 characters and marked with … when longer. worldbank_get_indicator returns it whole.", "type": "string" }, "topics": { "description": "Thematic topics this indicator belongs to.", "items": { "additionalProperties": false, "description": "A thematic topic entry.", "properties": { "id": { "description": "Topic ID.", "type": "string" }, "name": { "description": "Topic name.", "type": "string" } }, "required": [ "id", "name" ], "type": "object" }, "type": "array" } }, "required": [ "id", "name", "sourceId", "sourceName", "sourceNote", "topics" ], "type": "object" }, "type": "array" }, "notice": { "description": "Recovery hint for an empty page — how to broaden the search when no indicators matched, or the page range that exists when the requested page is past the end.", "type": "string" }, "totalCount": { "description": "Total matching indicators before pagination.", "type": "number" }, "totalPages": { "description": "Total number of pages.", "type": "number" } }, "type": "object" } }, { "description": "Search the World Bank lending portfolio — the individual loans, credits, and grants the Bank finances — by free text, country, region, status, financing window (IBRD, IDA, Grants, Other), and board approval date. Returns the project ID, name, borrowing country, region, status, board approval and closing dates, the commitment amount in USD with its IBRD, IDA, and grant parts, financing windows, major sectors, and a link to the project page. This is the operations catalogue, not the statistics catalogue: use it for \"what is the World Bank funding in Kenya\", \"which climate adaptation projects are active\", or \"how much was committed to education in South Asia since 2020\". For development statistics and time series, use worldbank_search_indicators and worldbank_get_data instead. Countries take the ISO3 or ISO2 codes the other tools take (BRA or BR), and multi-country operations carry a World Bank regional code such as 3A; WDI aggregates such as SSF or WLD are rejected, since the portfolio lists operations by economy — use region for those. Every filter is an exact match upstream and combines with the others by AND, so a narrow search can legitimately return nothing; when it does, the response says whether the country codes matched anything on their own.", "inputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "properties": { "approved_from": { "anyOf": [ { "const": "", "type": "string" }, { "description": "Earliest board approval date to include.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" } ], "description": "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 the Bank committed to the operation; pipeline projects carry a scheduled date in the future." }, "approved_to": { "anyOf": [ { "const": "", "type": "string" }, { "description": "Latest board approval date to include.", "pattern": "^\\d{4}-\\d{2}-\\d{2}$", "type": "string" } ], "description": "Latest board approval date, as YYYY-MM-DD and inclusive. It must be a real calendar day." }, "countries": { "anyOf": [ { "description": "A single country code, or a list of them separated by commas, semicolons, or pipes.", "type": "string" }, { "description": "An array of country codes; an element holding several codes separated by commas, semicolons, or pipes is split too.", "items": { "description": "An ISO3, ISO2, or World Bank regional code.", "type": "string" }, "type": "array" } ], "description": "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, or one string separated by commas, semicolons, or pipes — are combined as OR: a project matching any of them is returned. A value made only of separators is rejected rather than read as every country. Yemen, DR Congo, West Bank and Gaza, and Timor-Leste are searched under the legacy codes the portfolio files them by (RY, ZR, GZ, TP), which are also accepted as sent. A WDI aggregate (SSF, WLD, SAS) is rejected; use region for a regional search. Omit for every country." }, "financial_type": { "description": "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 financing window — 36% of the portfolio, older and dropped operations mostly — never matches. The Grants window says how an operation is financed; it is not the grantAmount figure.", "items": { "enum": [ "IBRD", "IDA", "Grants", "Other" ], "type": "string" }, "type": "array" }, "include_abstract": { "default": false, "description": "Include each project's abstract. Abstracts run long — a median of roughly 1,200 characters, up to 8,000 — so a page carrying them holds at most 8 projects rather than 80, and an abstract longer than 5,000 characters (about 2% of them) is cut there and marked with …, with notice naming the projects cut and each project's url leading to the full text; leave this off while narrowing a search and turn it on once the result set is small enough to read. Projects that publish no abstract report null either way, which appliedFilters.includeAbstract distinguishes.", "type": "boolean" }, "page": { "default": 1, "description": "Pagination page number (1-based).", "maximum": 9007199254740991, "minimum": 1, "type": "integer" }, "per_page": { "description": "Results per page (default: server default, max: 1000). One page holds at most 80 projects, or 8 with include_abstract, which keeps a response within about 50 KB; a larger value, the server default included, is reduced to that cap and echoed as appliedFilters.perPage, and totalPages is counted at the reduced size; notice discloses the reduction whenever the result runs past one page.", "maximum": 1000, "minimum": 1, "type": "integer" }, "query": { "description": "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, braces, an unmatched double quote, a slash between words, a trailing backslash, an AND or OR at either end, a trailing NOT, and # are not. Omit to browse the portfolio by filter alone. Results come newest board approval first either way.", "type": "string" }, "region": { "description": "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.", "items": { "enum": [ "East Asia and Pacific", "Europe and Central Asia", "Latin America and Caribbean", "Middle East, North Africa, Afghanistan, and Pakistan", "South Asia", "Eastern and Southern Africa", "Western and Central Africa", "Africa", "Other" ], "type": "string" }, "type": "array" }, "status": { "description": "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 approval. Most of the portfolio is closed, so omitting this returns mostly historical operations.", "items": { "enum": [ "Active", "Closed", "Dropped", "Pipeline" ], "type": "string" }, "type": "array" } }, "type": "object" }, "name": "worldbank_search_projects", "outputSchema": { "$schema": "https://json-schema.org/draft/2020-12/schema", "additionalProperties": false, "anyOf": [ { "not": { "required": [ "error" ] }, "required": [ "projects", "appliedFilters", "totalCount", "currentPage", "totalPages" ] }, { "required": [ "error" ] } ], "properties": { "appliedFilters": { "additionalProperties": false, "description": "The effective search sent upstream — confirms country-code normalization and which filters were in force for these results.", "properties": { "approvedFrom": { "description": "Earliest board approval date applied, omitted when none.", "type": "string" }, "approvedTo": { "description": "Latest board approval date applied, omitted when none.", "type": "string" }, "countries": { "description": "Country codes as sent upstream — each resolved to the code the portfolio keys on (BRA → BR, YEM or YE → RY), uppercased, deduplicated, and comma-joined here for readability, though the API itself takes them caret-separated. Omitted when no country filter was applied.", "type": "string" }, "financialType": { "description": "Financing windows applied, comma-joined, omitted when none.", "type": "string" }, "includeAbstract": { "description": "Whether abstracts were requested, including the server default of false. A null abstract means \"not requested\" when this is false and \"none published\" when it is true.", "type": "boolean" }, "page": { "description": "Page number requested.", "type": "number" }, "perPage": { "description": "Results per page actually served — the requested size or server default, reduced to the page cap when larger. totalPages is counted at this size.", "type": "number" }, "query": { "description": "Free-text query applied, omitted when none.", "type": "string" }, "region": { "description": "Regions applied, omitted when none.", "type": "string" }, "requestedPerPage": { "description": "Page size asked for, requested or server default, present only when it exceeded the page cap and perPage was reduced.", "type": "number" }, "status": { "description": "Statuses applied, omitted when none.", "type": "string" } }, "required": [ "includeAbstract", "page", "perPage" ], "type": "object" }, "currentPage": { "description": "Page number requested — past totalPages when the request ran off the end.", "type": "number" }, "error": { "additionalProperties": {}, "description": "Present when the call failed. Absent on success.", "properties": { "code": { "description": "JSON-RPC error code for this failure.", "maximum": 9007199254740991, "minimum": -9007199254740991, "type": "integer" }, "data": { "additionalProperties": {}, "properties": { "reason": { "description": "Machine-readable failure mode. Declared by this tool: `invalid_country_code`: A countries entry resolves to no economy: it is not two or three letters or digits, no economy in the World Bank country index has that three-character code, or it is a WDI aggregate such as SSF or WLD, which the portfolio lists no operations under. Also when countries holds only separators and so names no code at all. `invalid_date`: approved_from or approved_to is shaped YYYY-MM-DD but names no real day — a month outside 01–12, or a day outside its month. `reversed_date_range`: approved_from falls after approved_to, an interval no project can match. `invalid_query`: The Projects API could not parse query and answered HTTP 400, or query contains #, which the API answers with rows unrelated to the search. `page_out_of_range`: The requested page starts past the 100,000-result offset the Projects API serves. `upstream_unavailable`: The Projects API answered with a non-success status other than a query it could not parse — a rate limit, a timeout, a 5xx — or with an HTML error page, or the World Bank Indicators API country listing that resolves an ISO3 code could not be loaded. Other values are possible when a failure originates below the handler.", "examples": [ "invalid_country_code", "invalid_date", "reversed_date_range", "invalid_query", "page_out_of_range", "upstream_unavailable" ], "type": "string" }, "recovery": { "additionalProperties": {}, "description": "Actionable next step for the caller.", "properties": { "hint": { "type": "string" } }, "required": [ "hint" ], "type": "object" }, "retryable": { "description": "Whether retrying may succeed.", "type": "boolean" } }, "type": "object" }, "message": { "description": "Human-readable description of what went wrong.", "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "notice": { "description": "Context for an empty result set — including whether the country filter matched anything on its own — for a page past the end of the results, for a page size reduced to the page cap, or naming the projects whose abstracts were cut.", "type": "string" }, "projects": { "description": "Projects on this page, newest board approval date first with or without query, and projects with no board date last. Pagination walks the same order.", "items": { "additionalProperties": false, "description": "One World Bank lending operation.", "properties": { "abstract": { "description": "Project abstract, cut at 5,000 characters and marked with … when longer. Null when include_abstract was not requested and when the project publishes none — appliedFilters.includeAbstract separates the two.", "type": [ "string", "null" ] }, "boardApprovalDate": { "description": "Date the Board approved the operation, as YYYY-MM-DD. A future date belongs to a pipeline project with a scheduled board date.", "type": [ "string", "null" ] }, "closingDate": { "description": "Scheduled or actual closing date, as YYYY-MM-DD. Null on roughly 44% of the portfolio, which publishes none — almost all dropped operations among them.", "type": [ "string", "null" ] }, "countryCodes": { "description": "Two-character code of the borrowing country — the economy's ISO2 code, which chains into the other tools (YE for Yemen, though the portfolio files it under RY), or a World Bank regional code such as 3A for a multi-country operation. Upstream publishes it as a list, though every project in the portfolio carries exactly one.", "items": { "type": "string" }, "type": "array" }, "countryName": { "description": "Borrowing country, as the portfolio names it.", "type": "string" }, "financialTypes": { "description": "Financing windows behind the operation: IBRD, IDA, Grants, Other — the values financial_type filters on. A blended operation lists more than one; empty where the project publishes none.", "items": { "type": "string" }, "type": "array" }, "grantAmount": { "description": "Grant amount in USD: trust-fund grants and, on some operations, other agencies' co-financing recorded on the project, so it is not all World Bank money. Counted in totalCommitment. It is its own figure, unrelated to which financialTypes the project lists.", "type": [ "number", "null" ] }, "ibrdCommitment": { "description": "IBRD commitment in USD. Null when the project publishes no IBRD or IDA amount, as on a grant-only operation — not a commitment of zero.", "type": [ "number", "null" ] }, "id": { "description": "World Bank project ID, e.g. P513206.", "type": "string" }, "idaCommitment": { "description": "IDA commitment in USD, IDA grants included. Null when the project publishes no IBRD or IDA amount — not a commitment of zero.", "type": [ "number", "null" ] }, "majorSectors": { "description": "Major sectors the operation is classified under, e.g. Health, Education, Transportation. Empty where the portfolio publishes no sector classification.", "items": { "type": "string" }, "type": "array" }, "name": { "description": "Project name.", "type": "string" }, "regionName": { "description": "World Bank operational region.", "type": "string" }, "status": { "description": "Lifecycle stage: Active, Closed, Dropped, or Pipeline.", "type": "string" }, "totalCommitment": { "description": "Commitment amount in USD as the project page reports it: ibrdCommitment + idaCommitment + grantAmount. Null on 35.8% of the portfolio (28,153 projects, 2026-09-25), which publishes no amount — dropped and older operations mostly — and that is not the same as a commitment of zero. It can include other agencies' co-financing through grantAmount; World Bank lending alone is ibrdCommitment + idaCommitment.", "type": [ "number", "null" ] }, "url": { "description": "Project page on projects.worldbank.org.", "type": "string" } }, "required": [ "id", "name", "status", "countryCodes", "countryName", "regionName", "boardApprovalDate", "closingDate", "totalCommitment", "ibrdCommitment", "idaCommitment", "grantAmount", "financialTypes", "majorSectors", "abstract", "url" ], "type": "object" }, "type": "array" }, "totalCount": { "description": "Total projects matching the search, before pagination.", "type": "number" }, "totalPages": { "description": "Total number of pages.", "type": "number" } }, "type": "object" } } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:51a9b903fd144eba92b42201b577dfb2c6cee4d77ef599b52c98fe7f6d2cd398 | sha256sum