Skip to main content
Glama

Server Details

Query 29,500+ World Bank development indicators for 200+ countries across 60+ years.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL
Repository
cyanheads/worldbank-mcp-server
GitHub Stars
3
Server Listing
worldbank-mcp-server

Available Tools

9 tools
worldbank_get_countryGet World Bank CountryA
Read-onlyIdempotent
Inspect

Fetches full metadata for a specific country or aggregate entity: region, income level, capital, coordinates, and lending type. Accepts ISO2 codes (US, DE), ISO3 codes (USA, DEU), or World Bank aggregate codes (EAS, HIC, WLD).

ParametersJSON Schema
NameRequiredDescriptionDefault
country_codeYesCountry code. Accepts ISO2 (US), ISO3 (USA), or aggregate code (EAS, HIC, WLD). Use worldbank_list_countries to browse valid codes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoCountry or aggregate ID.
iso2NoISO2 country code.
nameNoCountry or aggregate name.
errorNoPresent when the call failed. Absent on success.
regionNoWorld Bank region this country belongs to.
latitudeNoCapital latitude (empty for aggregates).
longitudeNoCapital longitude (empty for aggregates).
capitalCityNoCapital city name (empty for aggregates).
incomeLevelNoWorld Bank income classification.
isAggregateNoTrue when this entry is a regional or income-group aggregate.
lendingTypeNoWorld Bank lending type classification.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only and idempotent. The description adds behavioral context by specifying the accepted code formats (ISO2, ISO3, aggregates) and the list of metadata fields returned, which are not specified in annotations. This informs the agent about acceptable inputs and expected output content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The first sentence states the action and outputs, the second clarifies input formats. Information is front-loaded and every word contributes.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter lookup tool with annotations covering safety and a full output schema, the description is complete. It specifies accepted inputs, lists the fields returned, and is consistent with the read-only nature. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema description already fully documents the parameter, including accepted code types and a pointer to browse valid codes. The description repeats these code types without adding new information, providing no additional semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'fetches' and the resource 'full metadata for a specific country or aggregate entity', listing the types of data returned (region, income level, capital, coordinates, lending type). This distinguishes it from sibling tools that handle time-series data or search operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for fetching country metadata but does not explicitly contrast with alternatives like worldbank_get_data or worldbank_search_indicators. It mentions accepted code formats, but does not directly state when to use this tool versus others. The schema suggests using worldbank_list_countries to browse codes, but that is not in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_get_dataGet World Bank Indicator DataA
Read-onlyIdempotent
Inspect

Queries World Bank indicator values for one or more countries across a time range. The primary data-access tool — use worldbank_search_indicators to find indicator_id values. Returns observations with null values when data is not available for a country×year cell (common for sparse series). Specify either date_range (historical analysis) or mrv (most recent N values), not both. For "all" countries, use pagination (per_page up to 1000) — the API returns several hundred entries per indicator.

ParametersJSON Schema
NameRequiredDescriptionDefault
mrvNoReturn the N most recent available values per country (1–100), clamped upstream to the length of the series. Rows are mrv × countries, so page through them with per_page. Mutually exclusive with date_range.
pageNoPagination page number (1-based).
per_pageNoResults per page (default: server default, max: 1000). Use higher values for "all" country queries.
countriesYesCountry 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" for every entry (use pagination). Pass a single string or an array of codes for multi-country queries. At least one code is required — an empty value is rejected rather than treated as "all".
date_rangeNoTime 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 window and an observation match whenever the periods overlap, so a year window also selects the quarters and months inside it. A window covering no part of the series returns zero observations rather than the full series. Mutually exclusive with mrv.
indicator_idYesIndicator code to query (e.g. NY.GDP.PCAP.CD, SP.POP.TOTL). Use worldbank_search_indicators to find valid IDs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataNoIndicator observations for this page. Null values are common for sparse series.
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery hint for sparse or empty result sets — suggests how to broaden the query.
indicatorNoIndicator metadata echoed from the response.
nullCountNoCount of null values on this page — indicates data sparsity for the requested filter.
totalCountNoTotal observations before pagination.
totalPagesNoTotal number of pages.
currentPageNoCurrent page number.
appliedFiltersNoThe effective parameters sent to the World Bank API — confirms country code normalization and which filters were in force for these observations.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, open-world, and idempotent hints. The description goes beyond by disclosing that observations may contain null values for sparse country-year cells, and explains pagination behavior for 'all' queries. It also details the mutual exclusivity of date_range and mrv. These behavioral insights are valuable and do not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, about four sentences, with the primary purpose stated first. It front-loads the core action, then delivers essential caveats (nulls, exclusivity, pagination) in a logical sequence. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich schema, output schema presence, and annotation coverage, the description sufficiently covers all necessary information for an agent to call the tool correctly. It addresses the main use case, edge cases with nulls, parameter exclusivity, and pagination, leaving no obvious gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with detailed descriptions for every parameter, including accepted formats, mutual exclusivity, and pagination semantics. The description adds minimal extra parameter meaning beyond reinforcing the null-value behavior and the note about pagination for 'all', but does not provide significant new per-parameter insight beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Queries World Bank indicator values for one or more countries across a time range.' It identifies itself as the primary data-access tool and explicitly points to worldbank_search_indicators for finding indicator IDs, distinguishing it from the search sibling. The wording is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit guidance on when to use this tool (primary data access) and names the alternative (worldbank_search_indicators) for finding IDs. It also explains the mutual exclusivity of date_range and mrv, and advises pagination for 'all' country queries. While it doesn't enumerate exclusions between other siblings, the context is sufficient for appropriate selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_get_indicatorGet World Bank IndicatorA
Read-onlyIdempotent
Inspect

Fetches complete metadata for a single World Bank indicator by its ID: name, description, source dataset, source organization, unit, and thematic topics. Use worldbank_search_indicators to discover indicator IDs if you only know the concept.

ParametersJSON Schema
NameRequiredDescriptionDefault
indicator_idYesIndicator code (e.g. NY.GDP.PCAP.CD, SP.POP.TOTL). Use worldbank_search_indicators to find valid IDs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoIndicator ID.
nameNoIndicator name.
unitNoUnit of measurement (empty when not specified).
errorNoPresent when the call failed. Absent on success.
topicsNoThematic topics this indicator belongs to.
sourceIdNoSource dataset ID.
sourceNameNoSource dataset name.
sourceNoteNoDetailed indicator description from the source.
sourceOrganizationNoOrganization that collects or publishes this data.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral detail about what data is returned (the full metadata list) and does not contradict the annotations. It provides enough transparency for a read-only metadata lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundancy. The first sentence states the purpose and outputs, the second gives routing guidance. Every word earns its place, and the key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only lookup with an output schema, the description covers purpose, usage, routing, and return contents. It even guides the agent to the search tool for ID discovery. Nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains the indicator_id format with examples and directs to worldbank_search_indicators for invalid IDs. The description reinforces this but adds no new semantic meaning beyond what the schema provides. Baseline 3 is appropriate given the high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'Fetches' and the resource 'complete metadata for a single World Bank indicator by its ID', then enumerates the exact fields returned (name, description, source dataset, source organization, unit, thematic topics). It clearly differentiates from sibling tools like worldbank_search_indicators by focusing on a single known ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: 'Use worldbank_search_indicators to discover indicator IDs if you only know the concept.' This tells the agent when to use this tool (when an ID is already known) and when to use the alternative, leaving no ambiguity about tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_get_povertyGet World Bank Poverty and Inequality EstimatesA
Read-onlyIdempotent
Inspect

Queries poverty and inequality estimates from the World Bank Poverty and Inequality Platform (PIP) for one or more countries. Returns the poverty headcount ratio, poverty gap, and poverty severity at any poverty line, plus mean and median welfare and population. This is also the tool for inequality and distribution questions — survey-based 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 and covers individual economies only, so regional and income-group aggregate codes are not accepted. Every row reports how it was produced. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPagination page number (1-based).
yearNoReporting year to return. A four-digit year (2022), "all" for the full history, or "MRV" for the most recent year available. Omitted behaves as "all". PIP coverage starts in 1963 and runs to the current year.
per_pageNoResults per page (default: server default, max: 1000). "all" countries across "all" years runs to a few thousand rows.
countriesYesCountry codes. PIP identifies economies by ISO3 code (IND, USA, BRA); "all" returns every economy it covers. Pass a single code, an array, or one string separated by commas or semicolons. Regional, income-group, and world aggregate codes (WLD, SSF, HIC) are not served by this dataset — query the individual economies instead.
fill_gapsNoWhen 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.
poverty_lineNoPoverty line in PPP dollars per person per day — any threshold, not only the published ones. Omitted uses the international poverty line of the PIP release currently served, 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.
welfare_typeNoRestrict 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.
reporting_levelNoRestrict 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoContext for an empty result set, or for a result carrying gap-filled rows with no inequality data.
estimatesNoPoverty and inequality estimates for this page, ordered by country, year, reporting level, then welfare type.
totalCountNoTotal estimates before pagination.
totalPagesNoTotal number of pages.
currentPageNoCurrent page number.
appliedFiltersNoThe effective parameters sent to PIP — confirms country code normalization and which filters were in force for these estimates.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, and idempotent, so the description builds on that. It discloses crucial behavioral traits: estimationType distinctions (survey vs interpolation/extrapolation/CMD), null gini/mld/polarization/decileShares for gap-filled rows, fill_gaps fallback behavior, welfare_type non-comparability and double-row cases for 35 economies, reporting_level splits for 10 economies, and the poverty_line echoing as povertyLine. This goes far beyond the annotation hints and prevents misinterpretation of null values.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph, long but front-loaded with the core purpose and then systematically covering dataset distinction, behavioral notes, and field semantics. Every sentence earns its place; it is redundant only in a minor way (e.g., 'Every row reports how it was produced' is repeated by the estimationType explanation). The density is justified by the tool's complexity, though some agents may benefit from bullet points.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with a rich output schema, this description covers the essentials: dataset provenance, field semantics, estimation-type behavior, null handling, coverage period, and parameter-specific quirks. It leaves nothing that an agent needs to know for correct selection and invocation. The presence of an output schema means return structure is not its responsibility. It is complete for both routing and use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description adds substantial meaning. It explains the countries parameter's rejection of aggregate codes with examples (WLD, SSF, HIC), the fill_gaps toggle's consequence on row presence, welfare_type's comparability caveat and multi-row behavior, reporting_level's specific split counts, and poverty_line's independence from inequality fields. These details are not in the schema and materially improve correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Queries poverty and inequality estimates from the World Bank Poverty and Inequality Platform (PIP) for one or more countries.' It then enumerates the exact metrics returned (headcount ratio, poverty gap, severity, mean/median welfare, population) and explicitly separates itself from the WDI dataset via worldbank_get_data, making the tool uniquely identifiable among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly contrasts with worldbank_get_data ('PIP is a separate dataset from the WDI series worldbank_get_data reads') and frames itself as 'the tool for inequality and distribution questions.' It also gives a clear exclusion: regional and income-group aggregate codes are not accepted, guiding agents to query individual economies instead. This is proactive routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_list_countriesList World Bank CountriesA
Read-onlyIdempotent
Inspect

Lists countries and regional aggregates with metadata: ISO codes, region, income level, capital, and coordinates. Filterable by region code (e.g. EAS, SSF, NAC) and income level (LIC, LMC, UMC, HIC). By default, excludes regional/income-group aggregate entries and returns individual countries only. Set include_aggregates=true to also see region, income group, and world aggregate entities.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPagination page number (1-based).
regionNoFilter by World Bank region code. Valid codes: EAS (East Asia & Pacific), ECS (Europe & Central Asia), LCN (Latin America & Caribbean), MEA (Middle East & North Africa), NAC (North America), SAS (South Asia), SSF (Sub-Saharan Africa).
per_pageNoResults per page (default: server default, max: 300).
income_levelNoFilter by income group code: LIC (Low income), LMC (Lower middle income), UMC (Upper middle income), HIC (High income).
include_aggregatesNoWhen true, includes regional, income-group, and world aggregate entries alongside individual countries. Default false (individual countries only).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
countriesNoCountries (and optionally aggregates) matching the filters.
totalCountNoTotal matching entries before pagination (includes aggregates if include_aggregates=true).
totalPagesNoTotal number of pages.
currentPageNoCurrent page number.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, and idempotentHint=true, covering safety and idempotency. The description adds value by disclosing the default filtering behavior (excludes aggregates) and the optional inclusion of aggregate entities, which is not fully captured by annotations. It also specifies the metadata fields returned, giving the agent a clearer picture of the output. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences: the first establishes the tool's purpose and content, and the second explains the default and the flag to change it. There is no redundancy, and the most important information (what it lists and the default) is front-loaded. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a full input schema and an output schema present, the description does not need to detail return formats. It adequately covers the core behavior (listing, filtering, aggregate control) and aligns with the annotations. An agent can correctly invoke the tool for a listing task without missing essential information, given the schema and annotations cover the rest.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all five parameters are documented in the schema with meaning. The description restates the filters and include_aggregates, but adds no new semantic nuance beyond what the schema already provides (e.g., it does not explain interaction effects or pagination behavior). Given the schema's thoroughness, the description adds minimal extra value, aligning with the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Lists') and a clear resource ('countries and regional aggregates'), and enumerates the metadata included (ISO codes, region, income level, capital, coordinates). It distinguishes itself from siblings like worldbank_get_country by focusing on listing, while also clarifying the default exclusion of aggregates. This is unambiguous and directly informative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool (to list countries) and explains the default behavior (individual countries only) and how to opt into aggregates (include_aggregates=true). However, it does not explicitly mention alternative tools or state when not to use it, such as when a specific country is needed. Thus it meets the 'clear context, no exclusions' bar but stops short of explicit alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_list_sourcesList World Bank Data SourcesA
Read-onlyIdempotent
Inspect

Lists the 70+ World Bank data sources (datasets) such as World Development Indicators, IDS, and Doing Business. Returns source IDs and names for use as source_id in worldbank_search_indicators. Supports pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPagination page number (1-based).
per_pageNoResults per page (default: server default, max: 100).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
sourcesNoWorld Bank data sources for this page.
totalCountNoTotal number of sources.
totalPagesNoTotal number of pages.
currentPageNoCurrent page number.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, so the safety profile is covered. The description adds value by noting the tool returns source IDs and names and supports pagination, which are behavioral details beyond the annotations. No contradiction exists, and the added context is helpful for the agent to know what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no fluff. The primary purpose is front-loaded ('Lists the 70+ World Bank data sources'), followed by the return content and the pagination note. Every phrase earns its place, making it highly scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, existing output schema (indicated by context), and comprehensive annotations covering safety, the description covers all necessary context. It states the resource, the output fields, the downstream usage, and pagination. No critical information is missing for an agent to correctly select and invoke this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'page' and 'per_page' have descriptive comments (pagination number and results per page, with defaults and max). The description only repeats 'supports pagination' which adds no meaning beyond the schema. Per the baseline, when the schema is sufficiently descriptive, the description does not need to add parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the exact resource (World Bank data sources) and the verb 'lists', names specific examples (WDI, IDS, Doing Business), and states the output is source IDs and names. Critically, it differentiates its purpose by explicitly targeting use as source_id in worldbank_search_indicators, distinguishing it from sibling list tools like worldbank_list_countries and worldbank_list_topics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use the tool: 'for use as source_id in worldbank_search_indicators', which tells the agent this is a preparatory step before searching indicators. However, it does not explicitly mention when not to use it or contrast with alternatives, so it lacks a full exclusionary statement. The intended usage is clear but not exhaustively defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_list_topicsList World Bank TopicsA
Read-onlyIdempotent
Inspect

Lists all 21 World Bank thematic topics (Economy & Growth, Health, Education, etc.) with descriptions. Use to browse the indicator space or find a topic_id for worldbank_search_indicators.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
topicsNoAll 21 World Bank thematic topics.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, covering safety and idempotency. The description adds minor useful context such as the exact count (21) and the fact that descriptions are included, but discloses no additional behavioral traits (e.g., pagination, sorting). Since the annotations carry the safety profile, this is acceptable but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the main action ('Lists all 21...') immediately. The second sentence adds a use case without redundancy. Every word earns its place; no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with no parameters, an existing output schema (so return format is not needed), and annotations covering safety, the description is complete. It states what the tool returns (topics with descriptions), the count, and the practical use case. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100% (the schema has an empty properties object). Per the rubric, a 0-parameter tool gets a baseline of 4. The description adds nothing about parameters because there are none, which is correct. No further param info is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Lists') and the resource ('World Bank thematic topics') with a specific scope ('all 21'). It also gives examples of the content ('Economy & Growth, Health, Education, etc. with descriptions'). This distinguishes it from sibling tools like worldbank_list_countries or worldbank_search_indicators, as it is specifically about the topic list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance: 'Use to browse the indicator space or find a topic_id for worldbank_search_indicators.' This tells the agent when to invoke it. However, it does not explicitly state when not to use it or name alternative tools for other scenarios, though the reference to worldbank_search_indicators implies a downstream alternative. A fully explicit exclusion would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_search_indicatorsSearch World Bank IndicatorsA
Read-onlyIdempotent
Inspect

Searches the 29,500+ World Bank indicator catalog by keyword, topic, or source. Returns indicator IDs and metadata for chaining into worldbank_get_data. At least one of query, topic_id, or source_id must be provided. A keyword query matches every term against indicator ID, name, and description, in any word order, across the whole catalog or the whole selected topic or source; punctuation in the query is ignored. Exact ID or name matches rank first, then whole-phrase matches, then ID/name matches, then description-only matches. Each indicator ID appears once, even where the catalog publishes it under two sources. Use worldbank_list_topics for topic IDs, worldbank_list_sources for source IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPagination page number (1-based).
queryNoKeyword 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. At least one of query, topic_id, or source_id must be provided.
per_pageNoResults per page (default: server default, max: 100).
topic_idNoFilter by topic ID (e.g. "1" for Agriculture, "3" for Economy & Growth). Use worldbank_list_topics to browse valid IDs.
source_idNoFilter by data source ID (e.g. "2" for World Development Indicators). Use worldbank_list_sources to browse valid IDs.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoRecovery hint when no indicators matched — suggests how to broaden the search.
indicatorsNoMatching indicators for this page.
totalCountNoTotal matching indicators before pagination.
totalPagesNoTotal number of pages.
currentPageNoCurrent page number.
appliedFiltersNoThe effective search parameters, field by field — confirms which filter combination produced these results without parsing the effectiveQuery string.
effectiveQueryNoActive filters echoed: keyword, topic ID, and/or source ID that were applied.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint, but the description goes well beyond by detailing the matching algorithm (every term must match, punctuation ignored), the ranking order (exact ID/name, phrase, etc.), and deduplication behavior (each indicator ID appears once). This provides valuable behavioral context not available in annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: first sentence states purpose and return, second states the constraint, then matching behavior, then dedup, and finally references to companion tools. Every sentence contributes new information; there is no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a search tool with multiple filters and ranking logic, the description covers all necessary aspects: what it returns, how matching works, ranking, deduplication, the minimum filter requirement, and how to obtain valid filter values. Given an output schema exists for return format, the description is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with parameter descriptions, but the tool description adds significant meaning by explaining how the query parameter matches terms across ID, name, and description, and how topic_id/source_id act as filters with references to list tools. It also clarifies the 'at least one' constraint, which the schema doesn't enforce as required fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('Searches') and resource ('the 29,500+ World Bank indicator catalog'), and immediately differentiates from siblings like worldbank_search_projects by specifying keyword, topic, or source filters. It also states the return value and its downstream use ('chaining into worldbank_get_data'), making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the precondition 'At least one of query, topic_id, or source_id must be provided' and directs users to worldbank_list_topics and worldbank_list_sources for valid IDs. The mention of chaining into worldbank_get_data clearly implies this is the search step before data retrieval, and the distinction from other search tools is clear from context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

worldbank_search_projectsSearch World Bank ProjectsA
Read-onlyIdempotent
Inspect

Searches the World Bank lending portfolio — the individual loans, credits, and grants the Bank finances — by free text, country, region, status, and board approval date. Returns the project ID, name, borrowing country, region, status, board approval and closing dates, total commitment in USD, financing instrument, 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 are identified by ISO2 code here (BR, IN, ZA), which is the one place this server departs from the ISO3 codes its other tools take — worldbank_get_country reports a country's iso2 field for either form, and multi-country operations carry a World Bank regional code such as 3A instead. 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPagination page number (1-based).
queryNoFree-text search across project names, abstracts, and objectives. Every word must appear, so extra words narrow the result. Omit to browse the portfolio by filter alone, newest board approvals first.
regionNoWorld 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.
statusNoLifecycle 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.
per_pageNoResults per page (default: server default, max: 1000, which is also the most the API will return for one request).
countriesNoBorrowing countries, by the two-character code this API keys on: ISO2 for an economy (BR), or a World Bank regional code for a multi-country operation (3A for Africa, 4E for East Asia and Pacific). Several codes are combined as OR — a project matching any of them is returned. Omit for every country.
approved_toNoLatest board approval date, as YYYY-MM-DD and inclusive.
approved_fromNoEarliest board approval date, as YYYY-MM-DD and inclusive. Board approval is the date the Bank committed to the operation; pipeline projects carry a scheduled date in the future.
include_abstractNoInclude each project's abstract. Abstracts run long — a median of roughly 1,200 characters — so a full page of them roughly doubles the response; 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoContext for an empty result set — including whether the country filter matched anything on its own — or for a page past the end of the results.
projectsNoProjects on this page, newest board approval date first — the order the API returns and the order pagination walks.
totalCountNoTotal projects matching the search, before pagination.
totalPagesNoTotal number of pages.
currentPageNoCurrent page number.
appliedFiltersNoThe effective search sent upstream — confirms country-code normalization and which filters were in force for these results.

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description goes far beyond that by explaining that filters are exact matches combined with AND, that narrow searches can legitimately return nothing, and that the response reports whether country codes matched on their own. It also details ISO2 vs. ISO3 handling, regional codes for multi-country operations, and the lifecycle stage definitions (Active, Pipeline, Closed, Dropped) — all behavioral nuances an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place. It is front-loaded with the core purpose, then systematically covers disambiguation, filter semantics, parameter nuance, and edge-case behavior. There is no filler or repetition, and the structure flows logically from 'what' to 'how' to 'when not to use it'.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter search tool with an output schema, the description is remarkably complete. It covers return fields, filter combination logic, country code conventions, regional codes, status definitions, date semantics, pagination hints, and the special behavior of include_abstract. It also anticipates likely mistakes (ISO2 vs ISO3, regional codes, empty results) and addresses them inline. Even with an output schema present, the description preempts most practical ambiguities an agent could face.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema description coverage is 100%, the description adds substantial meaning not present in the schema. It clarifies that 'region' uses operational lending regions rather than WDI aggregate codes, that 'countries' accepts ISO2 or regional codes with OR semantics, that 'approved_from/to' are inclusive dates and that board approval date is the commitment date (with pipeline projects carrying a scheduled future date). It also explains the size and appropriate usage of 'include_abstract', which is exactly the kind of pragmatic parameter guidance agents need.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('searches') and a precise resource (the World Bank lending portfolio), enumerates the filter dimensions and the returned fields, and explicitly contrasts it with the statistics catalogue. It names sibling tools (worldbank_search_indicators, worldbank_get_data) that serve different purposes, making it unmistakable which tool to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance with concrete example queries ('what is the World Bank funding in Kenya', 'which climate adaptation projects are active') and explicitly routes users to worldbank_search_indicators/worldbank_get_data for statistics and time series. It also flags the ISO2/ISO3 departure, which is a critical operational detail for this server.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updates
    • Changedworldbank_get_country6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "iso2",
        +      "name",
        +      "region",
        +      "incomeLevel",
        +      "lendingType",
        +      "capitalCity",
        +      "longitude",
        +      "latitude",
        +      "isAggregate"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "country_not_found"
        +          ],
        +          "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "iso2",
        -  "name",
        -  "region",
        -  "incomeLevel",
        -  "lendingType",
        -  "capitalCity",
        -  "longitude",
        -  "latitude",
        -  "isAggregate"
        -]
    • Changedworldbank_get_data6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "data",
        +      "indicator",
        +      "nullCount",
        +      "appliedFilters",
        +      "totalCount",
        +      "currentPage",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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`: Both date_range and mrv are provided simultaneously. `indicator_not_found`: The indicator ID does not exist. `country_not_found`: One or more country codes are invalid. `indicator_and_country_not_found`: The indicator ID and the country codes are both invalid. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "invalid_params",
        +            "indicator_not_found",
        +            "country_not_found",
        +            "indicator_and_country_not_found"
        +          ],
        +          "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "data",
        -  "indicator",
        -  "nullCount",
        -  "appliedFilters",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]
    • Changedworldbank_get_indicator6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "id",
        +      "name",
        +      "unit",
        +      "sourceId",
        +      "sourceName",
        +      "sourceNote",
        +      "sourceOrganization",
        +      "topics"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "indicator_not_found"
        +          ],
        +          "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "id",
        -  "name",
        -  "unit",
        -  "sourceId",
        -  "sourceName",
        -  "sourceNote",
        -  "sourceOrganization",
        -  "topics"
        -]
    • Changedworldbank_get_poverty6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "estimates",
        +      "appliedFilters",
        +      "totalCount",
        +      "currentPage",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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`: PIP does not recognize one or more of the country codes. `invalid_parameter`: PIP rejected the value supplied for a query parameter other than country. `upstream_unavailable`: PIP answered with a server error, which an aggregate country code also produces. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "country_not_found",
        +            "invalid_parameter",
        +            "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "estimates",
        -  "appliedFilters",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]
    • Changedworldbank_list_countries6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "countries",
        +      "totalCount",
        +      "currentPage",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "countries",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]
    • Changedworldbank_list_sources6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "sources",
        +      "totalCount",
        +      "currentPage",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "sources",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]
    • Changedworldbank_list_topics6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "topics"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "topics"
        -]
    • Changedworldbank_search_indicators6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "indicators",
        +      "appliedFilters",
        +      "totalCount",
        +      "currentPage",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "missing_filter",
        +            "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "indicators",
        -  "appliedFilters",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]
    • Changedworldbank_search_projects6 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / additionalProperties
        Added value: +false
      • changedOutput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedOutput schema / anyOf
        Added value: +[
        +  {
        +    "not": {
        +      "required": [
        +        "error"
        +      ]
        +    },
        +    "required": [
        +      "projects",
        +      "appliedFilters",
        +      "totalCount",
        +      "currentPage",
        +      "totalPages"
        +    ]
        +  },
        +  {
        +    "required": [
        +      "error"
        +    ]
        +  }
        +]
      • addedOutput schema / properties / error
        Added value: +{
        +  "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: `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 or an HTML error page. Other values are possible when a failure originates below the handler.",
        +          "examples": [
        +            "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"
        +}
      • removedOutput schema / required
        Removed value: -[
        -  "projects",
        -  "appliedFilters",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]
  2. 1 tool update
    • Addedworldbank_search_projects
  3. 1 tool update
    • Addedworldbank_get_poverty
  4. 2 tool updates
    • Changedworldbank_get_data2 fields changed
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "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 sent to the API — an array input is joined with semicolons, so this shows the normalized value.",
        +      "type": "string"
        +    },
        +    "dateRange": {
        +      "description": "Date window applied, omitted when none was requested.",
        +      "type": "string"
        +    },
        +    "indicatorId": {
        +      "description": "Indicator ID queried.",
        +      "type": "string"
        +    },
        +    "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 used, including the server default.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "indicatorId",
        +    "countries",
        +    "page",
        +    "perPage"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "data",
        -  "indicator",
        -  "nullCount",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]New value: +[
        +  "data",
        +  "indicator",
        +  "nullCount",
        +  "appliedFilters",
        +  "totalCount",
        +  "currentPage",
        +  "totalPages"
        +]
    • Changedworldbank_search_indicators2 fields changed
      • addedOutput schema / properties / appliedFilters
        Added value: +{
        +  "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"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "indicators",
        -  "totalCount",
        -  "currentPage",
        -  "totalPages"
        -]New value: +[
        +  "indicators",
        +  "appliedFilters",
        +  "totalCount",
        +  "currentPage",
        +  "totalPages"
        +]
  5. 1 tool update
    • Changedworldbank_get_data6 fields changed
      • changedInput schema / properties / countries / anyOf
        Previous value: -[
        -  {
        -    "description": "A single country code or \"all\".",
        -    "type": "string"
        -  },
        -  {
        -    "description": "An array of country codes.",
        -    "items": {
        -      "description": "A country code.",
        -      "type": "string"
        -    },
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "description": "A single country code or \"all\".",
        +    "pattern": "[^\\s;]",
        +    "type": "string"
        +  },
        +  {
        +    "description": "An array of country codes.",
        +    "items": {
        +      "description": "A country code.",
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / countries / description
        Previous 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\" for all 266 entries (use pagination). Pass a single string or an array of codes for multi-country queries."New 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\" for every entry (use pagination). Pass a single string or an array of codes for multi-country queries. At least one code is required — an empty value is rejected rather than treated as \"all\"."
      • changedInput schema / properties / date_range / description
        Previous value: -"Year or year range in YYYY or YYYY:YYYY format (e.g. \"2020\" or \"2010:2023\"). Mutually exclusive with mrv."New value: +"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 window and an observation match whenever the periods overlap, so a year window also selects the quarters and months inside it. A window covering no part of the series returns zero observations rather than the full series. Mutually exclusive with mrv."
      • addedInput schema / properties / date_range / pattern
        Added value: +"^\\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*$"
      • changedInput schema / properties / mrv / description
        Previous value: -"Return the N most recent available values (1–10). Mutually exclusive with date_range."New value: +"Return the N most recent available values per country (1–100), clamped upstream to the length of the series. Rows are mrv × countries, so page through them with per_page. Mutually exclusive with date_range."
      • changedInput schema / properties / mrv / maximum
        Previous value: -10New value: +100
  6. 1 tool update
    • Changedworldbank_search_indicators1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Keyword search terms. At least one of query, topic_id, or source_id must be provided."New value: +"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. At least one of query, topic_id, or source_id must be provided."
  7. 4 tool updates
    • Changedworldbank_get_data8 fields changed
      • addedOutput schema / properties / currentPage
        Added value: +{
        +  "description": "Current page number.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery hint for sparse or empty result sets — suggests how to broaden the query.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / page
        Removed value: -{
        -  "description": "Current page number.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / pages
        Removed value: -{
        -  "description": "Total number of pages.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / total
        Removed value: -{
        -  "description": "Total observations before pagination.",
        -  "type": "number"
        -}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total observations before pagination.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Total number of pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "data",
        -  "indicator",
        -  "total",
        -  "page",
        -  "pages",
        -  "nullCount"
        -]New value: +[
        +  "data",
        +  "indicator",
        +  "nullCount",
        +  "totalCount",
        +  "currentPage",
        +  "totalPages"
        +]
    • Changedworldbank_list_countries7 fields changed
      • addedOutput schema / properties / currentPage
        Added value: +{
        +  "description": "Current page number.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / page
        Removed value: -{
        -  "description": "Current page number.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / pages
        Removed value: -{
        -  "description": "Total number of pages.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / total
        Removed value: -{
        -  "description": "Total matching entries before pagination (includes aggregates if include_aggregates=true).",
        -  "type": "number"
        -}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total matching entries before pagination (includes aggregates if include_aggregates=true).",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Total number of pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "countries",
        -  "total",
        -  "page",
        -  "pages"
        -]New value: +[
        +  "countries",
        +  "totalCount",
        +  "currentPage",
        +  "totalPages"
        +]
    • Changedworldbank_list_sources7 fields changed
      • addedOutput schema / properties / currentPage
        Added value: +{
        +  "description": "Current page number.",
        +  "type": "number"
        +}
      • removedOutput schema / properties / page
        Removed value: -{
        -  "description": "Current page number.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / pages
        Removed value: -{
        -  "description": "Total number of pages.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / total
        Removed value: -{
        -  "description": "Total number of sources.",
        -  "type": "number"
        -}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total number of sources.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Total number of pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "sources",
        -  "total",
        -  "page",
        -  "pages"
        -]New value: +[
        +  "sources",
        +  "totalCount",
        +  "currentPage",
        +  "totalPages"
        +]
    • Changedworldbank_search_indicators10 fields changed
      • addedOutput schema / properties / currentPage
        Added value: +{
        +  "description": "Current page number.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / effectiveQuery
        Added value: +{
        +  "description": "Active filters echoed: keyword, topic ID, and/or source ID that were applied.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / message
        Removed value: -{
        -  "description": "Recovery hint when no indicators matched — suggests how to broaden the search.",
        -  "type": "string"
        -}
      • addedOutput schema / properties / notice
        Added value: +{
        +  "description": "Recovery hint when no indicators matched — suggests how to broaden the search.",
        +  "type": "string"
        +}
      • removedOutput schema / properties / page
        Removed value: -{
        -  "description": "Current page number.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / pages
        Removed value: -{
        -  "description": "Total number of pages.",
        -  "type": "number"
        -}
      • removedOutput schema / properties / total
        Removed value: -{
        -  "description": "Total matching indicators before pagination.",
        -  "type": "number"
        -}
      • addedOutput schema / properties / totalCount
        Added value: +{
        +  "description": "Total matching indicators before pagination.",
        +  "type": "number"
        +}
      • addedOutput schema / properties / totalPages
        Added value: +{
        +  "description": "Total number of pages.",
        +  "type": "number"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "indicators",
        -  "total",
        -  "page",
        -  "pages"
        -]New value: +[
        +  "indicators",
        +  "totalCount",
        +  "currentPage",
        +  "totalPages"
        +]
  8. 7 tool updates
    • First observedworldbank_get_country
    • First observedworldbank_get_data
    • First observedworldbank_get_indicator
    • First observedworldbank_list_countries
    • First observedworldbank_list_sources
    • First observedworldbank_list_topics
    • First observedworldbank_search_indicators

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables access to World Bank Data360 API with 1000+ economic and social indicators across 200+ countries and 60+ years of historical data, allowing searches, temporal coverage checks, and filtered data retrieval through natural language queries.
    5
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides access to World Bank economic and country data without an API key, allowing users to search countries, fetch indicator time series, and compare latest values.
    5
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A4.5/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: metadata retrieval (worldbank_get_country, worldbank_get_indicator, worldbank_list_countries, worldbank_list_sources, worldbank_list_topics), data querying (worldbank_get_data, worldbank_get_poverty), and searching (worldbank_search_indicators, worldbank_search_projects). No two tools overlap in function; even search_indicators vs get_indicator are complementary (search returns IDs, get fetches details).

Naming Consistency5/5

All tools follow a uniform pattern: the 'worldbank_' prefix followed by a consistent verb_noun structure (get_country, get_data, list_sources, search_indicators). The convention is applied uniformly across all 9 tools, with no mixed styles or deviating verbs.

Tool Count5/5

9 tools is well-scoped for a World Bank data server. It covers metadata, discovery, data access, and project search without redundancy. The number is neither too sparse nor overwhelming, and each tool serves a clear role in the domain.

Completeness5/5

The tool surface covers the core workflows: browsing the catalog (topics, sources, indicators), fetching metadata, retrieving time-series data, accessing poverty/inequality data, and exploring the lending portfolio. There are no obvious gaps; the inclusion of pagination and clear chaining (e.g., search → get) makes the set comprehensive.