Skip to main content
Glama

UNdata

CLI and MCP server for the UNdata SDMX REST API — UN Statistics Division open data. Query World Development Indicators, Millennium Development Goals and other UN datasets from your terminal, from analysis pipelines, or from any MCP client (Claude, Antigravity). No API key required.

Features

  • undata CLI — terminal access with table / json / csv / parquet output, runnable from anywhere

  • Full CLI ↔ MCP parity: the 7 tools, 3 prompts, and 3 reference docs are all reachable from both interfaces

  • 7 MCP tools: list dataflows, WDI data, country profile, series search, MDG data, generic query, multi-country compare

  • 3 prompts: economic analysis, development goals progress, country comparison — also via undata prompt

  • 3 resources: API guide, country codes, WDI series catalog — also via undata guide|countries|catalog

  • Disk cache so repeated research queries are instant across runs

  • Declarative dataflow registry — add a dataset with one entry, no new code

  • Built for humans and AIs: pretty tables + Markdown for people; clean JSON/CSV and --raw for agents and pipelines

Related MCP server: ESCAP Data Explorer MCP Server

Install (one command)

Requires uv. Installs both undata (CLI) and undata-mcp (server) onto your PATH.

# Windows (PowerShell)
./install.ps1                 # add -Export for Parquet support

# macOS / Linux
./install.sh                  # add --export for Parquet support

Or directly:

uv tool install .             # or:  uv tool install '.[export]'

After uv tool install, both commands live in uv's tool bin (e.g. ~/.local/bin), which uv puts on your PATH — so undata and undata-mcp run from any directory. If your shell can't find them yet, run uv tool update-shell and reopen the terminal.

Run without installing:

uvx --from . undata wdi PER

PyPI (future): the package is metadata-complete and ready to publish. Once published, install anywhere with pipx install undata-mcp / uvx undata-mcp. Publishing is a deliberate, public step (uv build && uv publish) and is intentionally left for you to trigger.

CLI usage

undata dataflows                                   # list available datasets (live)
undata datasets                                    # registered datasets + aliases (offline)

undata wdi PER --years 2015:2023                   # WDI for one country
undata wdi PER --series NY_GDP_PCAP_CD --format table
undata profile PER --year 2022                     # latest snapshot, all indicators
undata search education --country BRA              # find WDI series codes
undata mdg PER --years 2000:2020                   # Millennium Development Goals

undata compare PER COL BRA --series NY_GDP_PCAP_CD # multi-country comparison
undata compare PER COL --format csv -o out.csv     # export to CSV for analysis
undata compare PER COL --format parquet -o out.parquet

undata query wdi A..PER --years 2020:2023          # generic SDMX query (alias or id)

# Reference docs (same content the MCP serves as resources)
undata guide                                       # API guide (Markdown in a terminal, raw when piped)
undata countries --raw                             # ISO-3 country codes
undata catalog                                     # common WDI series codes by topic

# Guided analysis prompts (same templates the MCP exposes)
undata prompt                                      # list prompts
undata prompt country_economic_analysis -c PER --year 2022
undata prompt compare_countries -c PER,COL,BRA

undata mcp-config                                  # print an MCP client config snippet
undata --version
undata serve                                       # start the MCP server (= undata-mcp)

Global flags on every data command: --format table|json|csv|parquet (default table) and --output/-o FILE. Reference commands take --raw for plain-text (AI/pipeline) output.

MCP usage

Point your MCP client at the undata-mcp command. Example (.antigravity.json, already included):

{
  "mcpServers": {
    "undata": {
      "command": "uv",
      "args": ["--directory", "C:\\Users\\USER\\source\\MCPs\\UNdata-mcp", "run", "undata-mcp"]
    }
  }
}

undata-mcp and undata serve are equivalent.

Tool

Description

undata_list_dataflows

List available datasets

undata_get_wdi_data

World Development Indicators for a country

undata_get_country_profile

Latest snapshot across all WDI indicators

undata_search_wdi_series

Find series codes by keyword

undata_get_mdg_data

Millennium Development Goals data

undata_compare_countries

Compare WDI indicators across countries

undata_query

Generic SDMX query for any dataflow

Architecture

The logic lives in a shared service layer; the CLI and the MCP tools are thin adapters over it, so there is zero duplication between the two interfaces.

services/   core async logic (get_wdi_data, compare_countries, …)  ← single source of truth
  ↑     ↑
tools/    cli/     thin adapters (MCP tools / Typer commands)
registry.py   declarative DataflowSpec + build_key() — add datasets by config
cache.py      pluggable CacheBackend: MemoryCache (server) / DiskCache (CLI)
client.py     async httpx client, cache injected
formatters.py pure CSV → dict shaping

Adding a new dataset = one DataflowSpec entry in registry.py (and, if its output shape differs, one small service function). New interfaces (REST API, notebooks) can reuse services/ unchanged.

Configuration

Copy .env.example to .env (all optional):

UNDATA_CACHE_TTL=600           # response cache seconds (0 = disabled)
UNDATA_TIMEOUT=60              # HTTP timeout seconds (SDMX can be slow)
UNDATA_CACHE_BACKEND=memory   # memory | disk (CLI forces disk automatically)
UNDATA_CACHE_DIR=...          # override the disk cache location

Tests

uv run pytest tests/ -v

Available Tools

7 tools
undata_compare_countriesA

Compare World Development Indicators across several countries at once. Use ISO-3 codes (e.g., ['PER', 'COL', 'BRA']). Optionally restrict to specific WDI series codes and a year range. Returns a comparison organized by series → country → year, ideal for comparative analysis across countries.

ParametersJSON Schema
NameRequiredDescriptionDefault
seriesNo
end_yearNo
countriesYes
start_yearNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description carries the behavioral burden. The description discloses the return structure (organized by series → country → year) which is useful behavioral context. However, it doesn't describe data limits, response size, pagination, error handling, or whether missing data for a country is handled gracefully. It's a read-only query but that's implied rather than stated.

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?

Three sentences, each delivering meaningful information: what it does, how to call it, and what the return looks like. No filler or repetition. It could arguably drop the last clause but the return structure note is genuinely useful for an agent predicting output shape. Well front-loaded.

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

Completeness3/5

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

With 4 parameters, no output schema, and no annotations, the description does a reasonable job but has gaps. It explains the countries parameter (ISO-3 codes), series (WDI codes), and year range, and gives the output structure. However, for a comparative analysis tool across countries, it doesn't address cardinality/limits (max countries per call), nor whether missing series for certain countries returns nulls or errors. Decent but could be richer.

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 0%, so the description must compensate for undocumented parameters. The description adds some meaning: it mentions ISO-3 codes for 'countries', WDI series codes for 'series', and a year range for start/end_year. However, it doesn't clarify the year format (string vs number), whether end_year is inclusive, or the null-handling behavior of the optional parameters beyond the defaults.

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

Purpose4/5

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

The description states a clear purpose: compare World Development Indicators across multiple countries. It specifies the verb 'compare', the resource ('World Development Indicators'), and the multi-country scoping, which distinguishes it from the sibling tools dealing with single-country data (get_country_profile) or listing/searching (list_dataflows, search_wdi_series). It doesn't explicitly differentiate from get_wdi_data but the comparative framing is distinct enough.

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 concrete usage guidance: use ISO-3 country codes, optionally restrict to WDI series codes and a year range. It explains the comparison is organized by series → country → year. It gives clear context for when to use it (comparative analysis across countries) but doesn't explicitly state 'when not to use' or name alternative tools, so not a 5.

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

undata_get_country_profileB

Get a comprehensive economic and social snapshot for a country using WDI. Returns the latest available value for each indicator in the requested period. Useful for a quick overview of a country's development status. Use ISO-3 country codes (e.g., 'PER', 'USA', 'BRA').

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
countryYes

TDQS

B3.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the tool is read-only by nature ('returns the latest available value') and that it's a snapshot/overview rather than exhaustive. However, it doesn't clarify how many indicators are returned, whether the output is structured per-indicator, or any pagination/limits behavior. The period-scoping behavior (latest value in requested period) is a useful disclosure.

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 efficient: three sentences conveying purpose, behavior, and parameter format. It's front-loaded with the main purpose. There's no wasted text, though a brief note about the year parameter format would have been valuable within the same sentence budget.

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

Completeness3/5

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

Given there's no output schema and no annotations, the description carries the full burden. It covers purpose, behavior (latest value semantics), and country-code format. Gaps remain: no description of the return structure, no year format guidance, and no relationship to sibling data-fetching tools. For a tool with 2 simple params and no output schema, it's moderately complete but leaves the agent guessing about response shape and year semantics.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for parameter documentation. It explains the 'country' parameter format (ISO-3 codes with examples). However, the 'year' parameter is undocumented in both description and schema beyond a nullable string with default null. The description partially compensates by implying year scoping, but this is vague and provides no format guidance (e.g., 'YYYY' vs range).

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

Purpose4/5

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

The description clearly states what the tool does: get a comprehensive economic and social snapshot for a country using WDI. It distinguishes itself from siblings like undata_get_wdi_data by noting it returns 'the latest available value for each indicator in the requested period' for a quick overview. However, it doesn't explicitly contrast with sibling tools like undata_compare_countries, so differentiation is partial.

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 context ('useful for a quick overview') but provides no exclusions or when-not-to-use guidance. It mentions ISO-3 country codes must be used, which is helpful. However, it doesn't differentiate when to prefer this over undata_get_wdi_data or undata_compare_countries, which are close siblings.

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

undata_get_mdg_dataB

Get Millennium Development Goals (MDG) data for a country. Contains poverty, education, health, gender, and environmental indicators from 2000-2020. Data covers 200+ countries. Use ISO-3 country codes (e.g., 'PER', 'USA', 'BRA', 'COL'). Returns data organized by series code showing values over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryYes
end_yearNo
start_yearNo

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It describes the return format as organized by series code over time, which is helpful. However, it doesn't disclose rate limits, whether year filtering defaults to the full range, or behavior for invalid country codes. Given no annotations and a read-style operation, the description provides moderate behavioral context but leaves gaps.

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?

Three sentences, all informative and front-loaded with the core purpose. The ISO-3 code guidance is immediately actionable. No filler or repetition. Could be more efficient but is reasonably compact.

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

Completeness3/5

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

The tool has 3 parameters with 0% schema coverage, no annotations, and no output schema. The description covers the tool's scope, return structure, and country code format, but leaves start_year/end_year semantics unexplained and provides no guidance on what happens with invalid input or how the series structure is nested. Adequate for a moderate-complexity read tool but not fully complete.

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 0%, so the description must compensate. It explains the 'country' parameter format (ISO-3 codes with examples) but says nothing about start_year and end_year semantics (e.g., whether they must be valid years within 2000-2020, whether they're inclusive, or string vs int format). Since 2 of 3 parameters are completely unaddressed, the description only partially compensates.

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

Purpose4/5

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

The description clearly states the tool gets MDG data for a country, lists content categories (poverty, education, health, gender, environment), time span (2000-2020), and output structure (series code by time). It distinguishes itself from siblings via the MDG indicator focus, though it doesn't explicitly name sibling alternatives.

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?

It provides clear context on what data is included and explicitly instructs on ISO-3 country codes with examples. However, it doesn't contrast this with sibling tools like undata_get_wdi_data (World Development Indicators) or undata_compare_countries, so an agent may not know when to prefer this over those alternatives.

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

undata_get_wdi_dataA

Get World Development Indicators (WDI) data from UNdata. Returns economic and social indicators for a country across years. Use ISO-3 country codes (e.g., 'PER' for Peru, 'USA', 'BRA', 'COL', 'CHN'). Optionally filter by specific series codes or year range. Returns data organized by series → year → value.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryYes
end_yearNo
start_yearNo
series_filterNo

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return organization (series → year → value) which is useful. However, it doesn't mention pagination, data availability limits, whether invalid country codes error out, or rate-limit behavior. The description adds value but lacks deeper behavioral disclosure.

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?

Three compact sentences with zero waste. Each sentence earns its place: purpose, usage format, and return shape. The ISO-3 examples are efficient and instantly actionable.

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

Completeness3/5

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

For a data-retrieval tool with zero annotations and no output schema, the description covers core purpose and parameter hints well. However, it omits what a series code looks like, whether results are limited/paginated, year range constraints, and error handling for invalid inputs. Adequate but not comprehensive.

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 0%, so the description must compensate for 4 undocumented parameters. It does explain the country parameter (ISO-3 codes with examples) and mentions series_filter and year range conceptually, but doesn't detail the series_filter value format or how start_year/end_year interrelate. Partial compensation for the coverage gap.

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?

Specific verb+resource+scope: 'Get World Development Indicators (WDI) data from UNdata' clearly identifies source and content type. It describes return shape (economic and social indicators for a country across years) and differentiates from siblings by focusing on the WDI dataset specifically.

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?

Provides concrete usage context including ISO-3 country code format with examples ('PER', 'USA', 'BRA', 'COL', 'CHN') and optional filtering by series codes or year range. Doesn't explicitly exclude when not to use it versus siblings like undata_query or undata_get_mdg_data, but the ISO-3 guidance is genuinely useful.

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

undata_list_dataflowsA

List all available UNdata SDMX dataflows (datasets). Returns dataset IDs, names, agencies, and descriptions. Use this first to discover what data is available, then use the 'id' in other tools like undata_get_wdi_data or undata_query.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose the return payload shape (dataset IDs, names, agencies, descriptions), which is useful. However, it doesn't mention list size, pagination, rate limits, or whether the list is exhaustive/filtered. Given a simple read/list operation with good payload disclosure, a 3 is appropriate.

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?

Three concise sentences, no filler. Each sentence earns its place: what it returns, what to do with the output, and how it fits into the tool workflow. The front-loaded purpose makes it immediately scannable.

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 zero-parameter discovery tool with no output schema and simple complexity, the description fully covers what's needed: what's returned and how to use the results. No gaps remain for an agent to guess at call semantics or return interpretation.

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%, so there are no parameters to explain. The description adds value by explaining what the returned values mean and how to use a returned identifier downstream, compensating for the absence of any structured parameter documentation. The 0-param baseline of 4 is appropriate.

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 has a specific verb+resource ('List all available UNdata SDMX dataflows'), clearly states what's returned (dataset IDs, names, agencies, descriptions), and explicitly positions it as the discovery entry point distinct from sibling tools that consume the 'id'. This strongly differentiates it from the other undata_* sibling tools.

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 says 'Use this first to discover what data is available, then use the 'id' in other tools like undata_get_wdi_data or undata_query.' This gives clear guidance on when to invoke this tool (as a first step) and names concrete alternative/next-step tools, providing strong usage direction.

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

undata_queryA

Generic SDMX query for any UNdata dataflow. Use when the specific WDI or MDG tools don't cover your dataflow. The key is an SDMX dimension key: dimensions separated by dots, blank means 'all values'. Examples: WDI all Peru annual: flow_ref='DF_UNDATA_WDI', key='A..PER'. MDG all Peru: flow_ref='DF_UNDATA_MDG', key='......PER..'. WDI all countries one year: flow_ref='DF_UNDATA_WDI', key='A..', start_year='2022', end_year='2022'. Returns raw parsed rows (limit to avoid huge responses).

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYes
limitNo
end_yearNo
flow_refYes
start_yearNo

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It discloses that it 'Returns raw parsed rows' and warns to 'limit to avoid huge responses,' which is useful. However, it doesn't disclose the query's performance characteristics, potential rate limits, failure modes, or how errors surface. The limit/disclosure is helpful but incomplete for a generic tool covering arbitrary dataflows.

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 reasonably compact given the complexity of explaining SDMX dimension keys. The examples are front-loaded and directly instructive. It packs a lot of signal into a moderate length. Could be slightly tighter, but the examples are valuable and earn their space.

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

Completeness3/5

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

For a generic tool with no output schema and no annotations, the description does a good job explaining core mechanics. However, it doesn't cover error handling, whether invalid dimension keys fail fast, the meaning of the returned 'raw parsed rows' structure, or how to explore available dataflows (though undata_list_dataflows exists as a sibling). The examples cover common use patterns well but leave edge cases undocumented.

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 description coverage is 0%, so the description must compensate. It does so well: it explains the key parameter format in detail ('dimensions separated by dots, blank means all values'), shows flow_ref usage with example values, and demonstrates start_year/end_year usage. It explains the key parameter thoroughly but doesn't separately elaborate on limit beyond mentioning responses can get huge. Still, strong compensation for the 0% coverage.

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

Purpose4/5

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

The description clearly states it's a 'Generic SDMX query for any UNdata dataflow' with a specific verb+resource. It provides concrete usage examples and explains the dimension key format. It distinguishes itself from siblings by explicitly saying to use it 'when the specific WDI or MDG tools don't cover your dataflow,' which differentiates it from undata_get_wdi_data and undata_get_mdg_data.

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 gives explicit guidance on when to use this tool ('Use when the specific WDI or MDG tools don't cover your dataflow') and provides three concrete examples with flow_ref/key pairs covering different scenarios. It doesn't name alternative sibling tools explicitly but points to the category of WDI/MDG specific tools. Could be improved by naming alternatives directly, hence not a 5.

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

undata_search_wdi_seriesA

Search for WDI series codes by keyword to find what indicators are available. Use keywords like 'gdp', 'poverty', 'education', 'health', 'population', 'inflation'. Returns matching series codes and sample values. Use the series_code output in undata_get_wdi_data's series_filter parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo2022
countryNoPER
keywordYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses that the tool returns 'matching series codes and sample values' and explains the output feeds another tool, adding value. However, it doesn't disclose response format details, pagination, result limits, or whether default year/country parameters affect results—gaps given zero annotation support.

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?

Three sentences with no filler. The description front-loads the core purpose and includes practical usage tips (example keywords, downstream tool reference). Not quite a 5 because it could reorganize to put the output-chaining instruction more prominently.

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

Completeness3/5

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

The tool has 3 parameters at 0% schema coverage, no output schema, and no annotations—so the description bears full weight. It covers purpose, examples, and downstream chaining, which is solid. But the unexplained year/country parameters and lack of clarity about what 'sample values' means leave gaps for an agent needing complete operational understanding.

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 0%, so the description must compensate. It explains keyword semantics well (search term for desired topic) and notes the series_code output purpose. However, the year and country parameters are entirely unexplained in both the schema and description—the agent won't know why defaults of '2022' and 'PER' matter for a search operation, which is a meaningful gap.

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 uses a specific verb+resource combination ('Search for WDI series codes by keyword') and clarifies the goal is to discover available indicators. It explicitly distinguishes its role from siblings by explaining how it feeds into undata_get_wdi_data, a unique differentiator not present in other sibling definitions.

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 it (to discover which indicators are available) and gives concrete example keywords. It names the downstream tool (undata_get_wdi_data) and instructs the agent to use the series_code output in the series_filter parameter, but doesn't explicitly state when NOT to use it or name alternatives.

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.

  1. 7 tool updatesv0.2.0
    • First observedundata_compare_countries
    • First observedundata_get_country_profile
    • First observedundata_get_mdg_data
    • First observedundata_get_wdi_data
    • First observedundata_list_dataflows
    • First observedundata_query
    • First observedundata_search_wdi_series

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation4/5

Most tools are clearly distinct (list_dataflows, search_series, get_country_profile, compare_countries). However, undata_get_wdi_data and undata_get_mdg_data overlap somewhat in that both return time-series indicator data for countries, and undata_get_mdg_data could arguably be handled by a parameter on get_wdi_data. The generic undata_query also overlaps with all of them, but its descriptions frame it as a fallback, which reduces confusion.

Naming Consistency4/5

The tools consistently use the undata_ prefix followed by verb_object patterns like list_dataflows, get_wdi_data, get_country_profile, search_wdi_series, compare_countries. Minor inconsistency: get_mdg_data lacks a qualifier matching the pattern of get_wdi_data (could be 'get_undata_mdg_data') and the prefix styles are otherwise uniform.

Tool Count5/5

Seven tools is a well-scoped set for a data access server. Each tool serves a distinct purpose: discovery, search, specific datasets (WDI, MDG), profiles, comparison, and generic querying. This feels well-balanced without redundancy.

Completeness4/5

The tool surface covers the full discovery-to-retrieval workflow well: list dataflows to discover, search series, retrieve specific datasets, get country profiles, and compare. A minor gap is that the server appears read-only (no export or metadata endpoint explicitly), and undata_get_mdg_data could have been folded into the generic query with a parameter, but the overall coverage is strong.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for accessing World Bank data, enabling indicator search, data retrieval, country comparisons, trend analysis, rankings, and chart generation.
    6
    2
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    An MCP server that provides official statistical data for development indicators in Asia-Pacific. It wraps the ESCAP Data Explorer API, letting any MCP-compatible host query SDG and thematic data through natural language.
    5
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables to discover, inspect, query, and profile live NYC Open Data through a CLI and MCP server, providing a developer-first interface to Socrata APIs.
    3 npm
    MIT