StatCite
StatCite serves official, fully cited economic statistics and verifies claimed figures against them, so an AI can cite real numbers and catch invented or stale ones.
Get indicators with citations (
get_indicator): inflation, GDP, growth, unemployment, debt, trade, FDI, and more for 200+ economies, with source, series ID, URL, license, retrieval date, and a paste-ready citation.Verify a single claim (
verify_stat): returnsmatch / close / mismatch / cannot_verifywith diagnostics for wrong year, percent-vs-decimal, scaling, and sign errors; supports historical IMF-vintage checks viaas_of.Fact-check a whole draft (
verify_claims): batch-verify up to 15 macro claims per call in input order with a verdict summary.Resolve source disagreements (
compare_sources): fetch one indicator from every official source (e.g., World Bank vs IMF) side by side with spread and definitions.Fetch raw series (
get_series): World Bank, IMF, DBnomics, and Caribbean central bank series by explicit ID with year filters and transforms.Discover data (
search_indicators,search,fetch): find indicator keys and series IDs by topic; deep-research compatible search/fetch pair.Country briefs (
country_snapshot): one call for GDP, inflation, unemployment, debt, and other headline indicators, each cited.Inflation adjustment (
inflation_adjust): convert nominal amounts between years using official CPI with formula and citation.Currency conversion (
fx_convert): ECB daily rates for ~30 majors or World Bank annual averages for ~90 other currencies.Source metadata (
list_sources): coverage, licenses, and attribution rules for every source (FRED explicitly disabled).Agent prompts and resources: MCP prompts (
fact_check,country_brief,cite_this_stat) and resources (registry, licence ledger, SIDS list).Honesty guarantees: never guesses; unverifiable claims return
cannot_verifywith reasons, fallbacks are disclosed, projections are labeled, and all tools are read-only.
StatCite
Economic statistics your AI can actually cite, with a verifier that catches the ones it invents.
· Live status · AI accuracy benchmark · Licence ledger · Verification guide

Every figure, verdict and citation above is real output from a live call, captured by tools/make-demo-gif.py at build time. A model recalling 98% is not a strawman: it was roughly right a few years earlier, which is exactly how stale recall sounds.
Free remote MCP server + REST API serving official economic statistics from the World Bank, IMF WEO and Fiscal Monitor (current vintage via the IMF DataMapper API, with a DBnomics fallback), BIS policy rates, ECB reference rates, and two regional central banks (the Eastern Caribbean Central Bank and the Central Bank of Barbados, covering Anguilla and Montserrat, which the World Bank does not report), where every number ships with its full citation: source, dataset, series ID, canonical URL, licence, retrieval date, a ready-to-paste citation sentence, and BibTeX/APA export formats.
The differentiator is verification, not lookup: verify_stat checks a claimed figure against the official series and returns match / close / mismatch / cannot_verify with diagnostics for the classic errors (wrong year, percent-vs-decimal, millions-vs-billions, sign flips). On a mismatch it re-judges the claim against the previous IMF vintage, so "was right when written, since revised" is never confused with "wrong". When the source cannot support a verdict, it says cannot_verify with the reason. It never guesses.
Three things people use it for
Fact-check a draft. The
fact_checkMCP prompt +verify_claimsaudit every macro figure in a document, in batches of 15, each verdict carrying the citation for the correct number.Cited data for agent reports.
get_indicatorandcountry_snapshotreturn official series with paste-ready citations, honest projection labelling, and machine-readable "no published value exists" instead of silent gaps.Resolve source disagreements.
compare_sourcesfetches one indicator from every official source in its chain and shows the spread (e.g. general-vs-central government debt definitions), each value with its own citation.
Install in one line
Client | How |
Claude (web/desktop) | Open StatCite in Claude's connector directory and click Connect. Fallback: Settings → Connectors → Add custom connector → |
Claude Code |
|
Cursor | Install in Cursor · or |
VS Code | Install in VS Code · Insiders · or |
ChatGPT | Developer mode → add MCP server, No Authentication (implements the deep-research |
Cline / stdio-only |
|
No signup, no API key, no OAuth.
Related MCP server: World Bank Indicators MCP Server
Make your agent use it without being asked
Connecting a server puts the tools on the shelf. It does not make an agent reach for them, and an agent that is confident about a number will usually answer from memory. One standing rule fixes that. Paste this into CLAUDE.md or AGENTS.md, into Cursor Settings → Rules, or into your ChatGPT project instructions:
Before stating any country-level economic figure, get it from StatCite (get_indicator) or check it (verify_stat), even if you think you know it, and include the citation_text it returns.Try it in 5 seconds
curl "https://statcite.com/v1/verify?indicator=inflation_cpi&country=USA&period=2023&value=4.1"
curl "https://statcite.com/v1/indicator/govt_debt_gdp?country=JPN&latest_only=true"
curl "https://statcite.com/v1/fx?amount=100&from=USD&to=BBD"
curl -X POST "https://statcite.com/v1/verify_claims" -H "content-type: application/json" \
-d '{"claims":[{"indicator":"inflation_cpi","country":"USA","period":"2023","claimed_value":4.1}]}'Tools
get_indicator · verify_stat · verify_claims · compare_sources · get_series · search_indicators · country_snapshot · inflation_adjust · fx_convert · list_sources · search · fetch, plus 3 MCP prompts (fact_check, country_brief, cite_this_stat) and 3 resources (registry, licence ledger, SIDS list). 42 active curated indicators, 200+ economies, ~120 currencies. All read-only. Details: docs, and the verification guide for the method.
Repo layout
server/ Cloudflare Worker: MCP endpoint + REST API + tests (zero runtime deps)
site/ statcite.com static site (landing, docs, llms.txt, OpenAPI, legal)
apify/ Metered twin: Apify actor (pay-per-event) bundling the same core
skill/ Claude skill teaching agents the verify-then-cite workflow
distribution/ Registry manifests, submission steps, launch copy
bench/ pre-registered AI-accuracy benchmark: COVENANT.md, METHODOLOGY.md, question bank, frozen snapshots, runs/ (R1 REPORT + ADDENDA)
docs/ Research report, strategy, launch plan, monetization roadmap
BRIEF.md Context + mandate for anyone (human or agent) picking this up
HANDOFF.md Deployment runbook (the mechanical steps to take it live)
CLAUDE.md Working guide: commands, architecture, invariantsDevelop
cd server
npm install
npm test # fixture-backed, no network
npm run smoke # live end-to-end against real upstream APIs
npm run dev # wrangler dev (local Workers runtime + static site)
npm run deploy # wrangler deployData & licensing
StatCite does not originate the underlying statistical observations. Derived values and verification verdicts are calculated transparently from cited source data with the method disclosed. World Bank (CC BY 4.0); IMF (published IMF statistical data may be copied, redistributed and used in derivative works with attribution as "Source: International Monetary Fund, <database>, <link>", plus data-integrity, downstream-communication and free-of-charge-disclosure conditions, all carried verbatim in every citation's license field); BIS (reproduction and redistribution with attribution); ECB (attribution; reference rates informational); Eurostat via DBnomics (CC BY 4.0); FRED is not served. Its Services Terms of Use (clauses (p) and (q), https://fred.stlouisfed.org/legal/) reserve FRED content from AI/ML use and from caching or redistribution. IMF WEO/Fiscal Monitor projections are labeled as projections. The primary IMF path is the DataMapper API (current edition, verbatim edition label). If unavailable, StatCite falls back to the newest edition DBnomics has ingested, which can lag the IMF's release calendar, so responses cite the resolved vintage, flag stale ones, and every fallback is disclosed (verify_stat/verify_claims return cannot_verify with the fallback value as indicative when the primary failed transiently, rather than judging against a substitute that may differ by definition or vintage. A series the primary permanently lacks is judged against its stable fallback source with disclosure). Server code: MIT.
Built and curated by a professional economist. Contact: hello@statcite.com
Available Tools
12 toolscompare_sourcesCompare an indicator's value across its official sourcesARead-onlyIdempotentInspect
Fetch one indicator for one country from EVERY official source in its chain independently (e.g. World Bank WDI and the IMF WEO/Fiscal Monitor) and see the values side by side, each with its own citation, plus the spread between them. Use when sources disagree, when you need to know WHICH official number to cite, or to check how large the methodological gap is (central vs general government, calendar vs fiscal year, vintage differences). Differences are methodological, never an error by a source. The result says which definition each value carries. Sources that are down report their error in place without sinking the comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | Optional year to compare at, e.g. '2023'. Default: the latest period all responding sources share. | |
| country | Yes | ISO3/ISO2 code or English name. | |
| indicator | Yes | Registry key, e.g. 'govt_debt_gdp', 'gdp_growth'. See search_indicators. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive, and the description adds substantial behavioral context: independent fetching per source, per-value citations, spread calculation, methodological rather than error-based differences, and resilient handling of down sources. This goes well beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: function, concrete examples, use cases, interpretation caveat, expected output, and failure behavior. The most important action and scope are front-loaded, and the description is dense without being bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only comparison tool with no output schema, the description covers what the result contains (values, citations, spread, definitions), how to interpret differences, and what happens when sources fail. An agent has enough context to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents indicator, country, and period. The description reinforces the single-indicator/single-country scope and gives indicator examples, but does not add meaningfully beyond what the input schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Fetch...from EVERY official source...independently') and resource ('one indicator for one country'), with concrete examples and the side-by-side plus spread output. Clearly distinguishable from siblings like get_indicator or get_series, which retrieve single series rather than cross-source comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use: when sources disagree, when you need to know which official number to cite, or to assess methodological gaps. It gives clear context but does not name alternative sibling tools or state when not to use it, so it stops just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
country_snapshotCountry snapshot, headline indicators with citationsARead-onlyIdempotentInspect
One call for a country's headline economic picture: GDP, GDP growth, GDP per capita, inflation, unemployment, population, current account, trade openness, FDI, life expectancy (World Bank) plus general government debt (IMF DataMapper API, current vintage). Each value carries its own citation. Ideal for country briefs and report openers.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ISO3/ISO2 code or English name. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: data sources (World Bank, IMF DataMapper API), current vintage, and the fact that each value carries its own citation. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficient: purpose, indicator list, sources, and use case are all covered in a compact block. Every sentence adds value and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter, read-only snapshot tool with no output schema, the description gives a complete picture: what indicators are returned, where the data comes from, and how results are cited. An agent has enough information to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the only parameter (country: ISO3/ISO2 code or English name), so schema coverage is 100%. The description adds no additional parameter semantics, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states this is a one-call snapshot for a country's headline economic picture and enumerates the exact indicators included (GDP, inflation, unemployment, etc.). It distinguishes itself from sibling tools like get_indicator or get_series, which target individual indicators or series.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the ideal use case: 'Ideal for country briefs and report openers.' This provides clear context for when an agent should choose this tool, though it does not explicitly discuss alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetchFetch (deep-research compatible)ARead-onlyIdempotentInspect
Fetch full data for a result id returned by search (format: 'indicator//'). Returns the recent observations and the full citation as text.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| text | Yes | |
| title | Yes | |
| metadata | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, indicating safe, non-destructive, idempotent behavior. The description adds that it returns observations and citation as text, providing useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each providing key information: what the tool does and what it returns. No extraneous words, front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema (not shown but indicated), the description does not need to detail return structure. It mentions observations and citation, which is sufficient for a simple fetch operation. Could add more on expected usage context but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter 'id' with 0% schema description coverage. The description compensates by specifying the expected format ('indicator/<key>/<ISO3>'), which adds essential semantic meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it fetches full data for a result id from search, with specific format 'indicator/<key>/<ISO3>'. It distinguishes from search (which returns ids) by providing full data, and from similar tools like get_indicator by specifying return of observations and citation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states this tool is for result ids returned by search, implying usage after search. It does not provide explicit when-not or alternatives, but the sibling context and timing imply appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fx_convertConvert currencies with official reference ratesARead-onlyIdempotentInspect
Convert an amount between currencies using ECB daily reference rates (~30 majors, any date since 1999) or, for ~90 other currencies (BBD, XCD, JMD, KES, …), official annual-average rates from the World Bank. With the method and citations stated explicitly. Pass date='YYYY-MM-DD' for daily or 'YYYY' for annual-average conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | 3-letter ISO code, e.g. 'BBD'. | |
| date | No | 'YYYY-MM-DD' (daily, ECB set) or 'YYYY' (annual average). Default: latest. | |
| from | Yes | 3-letter ISO code, e.g. 'USD'. | |
| amount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint=true, idempotentHint=true, and destrructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the two-regime rate regime, temporal coverage ('any date since 1999'), and the promise that output states method and citations explicitly. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste: the main operation and sources are front-loaded, the output behavior (explicit method/citations) earns its sentence, and the date-format instruction is placed last where it reads as a takeaway. Every sentence adds information; nothing is repeated from the schema or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and addresses it by stating the conversion result includes explicit method and citations. It covers what, which sources, which currencies, which dates, and how to format dates. Minor gaps remain around edge cases (unsupported codes, weekend dates for ECB) but nothing an agent needs for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 75%, the description adds meaning the schema lacks: it maps from/to ISO codes into two concrete currency classes (the ~30 ECB majors vs the ~90 World Bank currencies like BBD, XCD, JMD, KES), and it clarifies the date parameter's dual format semantics and temporal reach. The 'amount' parameter remains implicitly defined (the number to convert), which is a minor gap at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Convert an amount between currencies') and goes further by naming the two official rate sources (ECB daily, World Bank annual-average). It is immediately distinguishable from siblings like inflation_adjust (inflation adjustment) and get_series/get_indicator (data retrieval), so an agent can tell what this tool uniquely does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usable context: it tells the agent which date format to pass ('YYYY-MM-DD' for daily, 'YYYY' for annual-average) and ties each format to a currency class (~30 ECB majors vs ~90 World Bank currencies). It stops short of explicit exclusions or routing to alternatives such as inflation_adjust, but the invocation context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indicatorGet an economic indicator (with citation)ARead-onlyIdempotentInspect
Get official values for a common economic indicator. Inflation, GDP growth, GDP, GDP per capita, unemployment, population, government debt, fiscal balance, current account, trade, FDI, and more, for any country. Returns the observations plus a full citation (source, dataset, series id, canonical URL, license, retrieval date) ready to cite in a report. Use ISO3 codes or plain country names. Start here for most questions; use search_indicators if unsure of the indicator key. Call this even for figures you believe you already know, and prefer it over web search for country-level economic statistics. Not for company financials, stock or crypto prices, or subnational data.
| Name | Required | Description | Default |
|---|---|---|---|
| country | Yes | ISO3/ISO2 code or English name, e.g. 'USA', 'Barbados', 'euro area'. | |
| end_year | No | Last year to include (optional). | |
| indicator | Yes | Registry key, e.g. 'inflation_cpi', 'gdp_growth', 'unemployment_rate', 'govt_debt_gdp'. See search_indicators. | |
| transform | No | Optional transform computed by StatCite. | |
| start_year | No | First year to include (optional). | |
| latest_only | No | Return only the most recent non-null observation. | |
| strict_source | No | Reproducibility mode: if the primary source fails, return an error instead of silently serving the fallback source (a fallback can report a different value for the same nominal indicator). Default false; fallback responses always carry fallback_used=true and a disclosure note. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| unit | No | |
| notes | Yes | |
| country | No | |
| citation | Yes | |
| frequency | No | |
| series_id | Yes | |
| observations | Yes | |
| fallback_used | No | |
| stale_primary | No | |
| fallback_reason | No | |
| stale_primary_years | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the operation is read-only, idempotent, and non-destructive, so the description's main value is contextual: it promises a full citation with source, dataset, series id, canonical URL, license, and retrieval date, and notes that fallback responses carry a disclosure. It also clarifies the data are official values, which is useful provenance context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Seven concise sentences, each with a distinct job: scope, return value, input conventions, routing, trust instruction, and exclusions. The most important facts are front-loaded before guidance and exclusions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool backed by a complete input schema and an output schema, the description covers the remaining context: what data comes back (observations + citation), what source/scope is promised (official, country-level), and when to look elsewhere. Nothing essential for an agent's selection or invocation appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has a description, so the description need not repeat details. It does add a few examples and heuristics (ISO3 codes or plain names, 'registry key', 'use search_indicators'), but these add marginal value rather than essential semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence names a specific verb ('Get official values') and resource ('a common economic indicator'), and the paragraph enumerates supported indicators and countries. It differentiates from siblings by saying 'Start here for most questions' and explicitly routing to search_indicators when the indicator key is unknown.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Start here for most questions', 'Call this even for figures you believe you already know', and 'prefer it over web search for country-level economic statistics'. It also states what it is not for — company financials, stock/crypto prices, subnational data — and names the relevant alternative, search_indicators.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_seriesGet a raw series by explicit idARead-onlyIdempotentInspect
Fetch any supported series by explicit id: 'worldbank/' (needs country), 'imf/' (needs country; current-vintage IMF WEO/Fiscal Monitor via the DataMapper API), 'caribstat/<ECCB|CBB>//' (Eastern Caribbean Central Bank and Central Bank of Barbados tables, including Anguilla and Montserrat, which the World Bank does not report; find ids with search_indicators), or 'dbnomics///' (IMF WEO, OECD, Eurostat and more via DBnomics, dated editions, e.g. 'WEO:2025-04', for vintage-pinned reproducibility). 'fred/' ids are recognized only so the service can return an explanatory disabled response. FRED is permanently disabled here and those ids are never retrievable. Supports year filters and transforms (yoy, pct_change, index). Every response carries a full citation. Prefer get_indicator for common indicators.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Required for worldbank/* series. | |
| end_year | No | ||
| series_id | Yes | e.g. 'worldbank/NY.GDP.MKTP.KD.ZG', 'imf/NGDP_RPCH', 'dbnomics/IMF/WEO:latest/BRB.NGDP_RPCH.pcent_change'. | |
| transform | No | ||
| start_year | No | ||
| latest_only | No | Return only the most recent non-null observation. | |
| strict_source | No | Reproducibility mode for registry-key ids: never substitute the fallback source. No effect on explicit source-prefixed ids (they already pin one source). |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| unit | No | |
| notes | Yes | |
| country | No | |
| citation | Yes | |
| frequency | No | |
| series_id | Yes | |
| observations | Yes | |
| fallback_used | No | |
| stale_primary | No | |
| fallback_reason | No | |
| stale_primary_years | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses important behavior: FRED ids return an explanatory disabled response rather than data, every response carries a full citation, and strict_source controls fallback substitution for reproducibility. These are genuine operational details not available from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but nearly every clause carries necessary information about id formats, source behavior, and usage routing. It is front-loaded with the main action and the detail is organized into scannable clauses rather than rambling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with seven parameters and multiple source-specific formats, the description covers the id schemes, country preconditions, disabled FRED case, filters and transforms, citation behavior, and the preferred sibling tool. Since an output schema is present, return-value formatting does not need to be restated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 57% schema coverage, the description compensates substantially by documenting series_id formats, country requirements per source, vintage pinning, and transform support. It leaves some details, such as exact start_year/end_year boundaries, to inference, but the most complex parameter surface is well explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Fetch any supported series by explicit id.' It goes beyond a bare statement by enumerating the supported id formats and ends with routing to get_indicator, which distinguishes it from a likely sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit routing guidance: use this tool for explicit source-prefixed ids, use get_indicator for common indicators, and use search_indicators to find caribstat ids. It also warns that FRED ids are permanently disabled, preventing futile calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inflation_adjustAdjust an amount for inflation between two yearsARead-onlyIdempotentInspect
Convert a nominal amount between years using official CPI: 'what is 100 in 1995 money worth in today's money?' Works for any country with CPI data (default USA). Returns the adjusted amount, the exact index values and formula used, and the citation. Annual-average precision.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | ||
| country | No | Default 'USA'. | |
| to_year | Yes | ||
| from_year | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a read-only, idempotent, non-destructive operation. The description adds valuable behavioral context by detailing the exact return values (adjusted amount, index values, formula, citation) and noting annual-average precision, which goes beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two sentences that front-load the primary purpose, include an illustrative example, and convey key details about country support, return values, and precision. No redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema, so the description's mention of return values and precision is important. It covers the core function well, but does not mention potential limitations such as year range constraints or data availability, which would be useful for full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (country has a description). The description compensates by explaining amounts and years via the example and stating the default country. It does not detail each parameter individually, but the provided context is sufficient for a user to infer correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts a nominal amount between years using official CPI, with a concrete example ('what is 100 in 1995 money worth in today's money?'). This specific verb+resource combination distinguishes it from siblings like fx_convert, which handles currency conversion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (inflation adjustment for any country with CPI data, default USA) and provides an illustrative example. However, it does not explicitly mention alternatives or exclusions, such as using fx_convert for currency exchange rather than inflation adjustment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sourcesList data sources, licenses, and attribution rulesARead-onlyIdempotentInspect
The official sources behind StatCite (World Bank WDI, IMF WEO & Fiscal Monitor via the IMF DataMapper API with DBnomics as a vintage-pinned fallback, BIS central bank policy rates, ECB reference rates and the ECB Data Portal, the Eastern Caribbean Central Bank and the Central Bank of Barbados, FRED disabled), what each covers, its license, and the attribution line to use when citing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive behavior, so the description adds useful operational context: it names the covered sources, notes that FRED is disabled, and describes DBnomics as a vintage-pinned fallback. It does not mention authentication or rate limits, but the added source/fallback details go beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single long sentence that front-loads the source enumeration before stating what is actually returned. The parenthetical list of providers is informative but heavy, making it less concise than ideal for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with no output schema, the description adequately states the returned information: coverage, license, and attribution line. It also enumerates the sources, which helps the agent understand the scope, though it could explicitly mention the return format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline score of 4 applies. The schema is fully covered and the description does not need to explain any parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description conveys that the tool returns the official sources behind StatCite, what each covers, its license, and the attribution line to use when citing. The purpose is clear, but the description does not explicitly differentiate this list from siblings like compare_sources or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit guidance on when to use this tool versus alternatives such as compare_sources or search. Usage is only implied by the content being about source metadata and citation attribution.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchSearch (deep-research compatible)ARead-onlyIdempotentInspect
Search official economic statistics by free text, e.g. 'inflation barbados' or 'government debt japan'. Returns result ids that can be passed to fetch. Designed for deep-research connectors; for richer control use get_indicator / get_series.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, openWorld). Description adds that it returns result ids for passing to fetch and deep-research orientation, which goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool (1 param, no nested objects), the description covers purpose, input, output (returned ids), and usage context. Output schema exists but isn't shown; the description partially compensates by noting the result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has one 'query' parameter with no description. Description adds free text examples, giving practical guidance. However, no format constraints (e.g., boolean operators) are mentioned, leaving slight ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action ('Search'), the resource ('official economic statistics'), and the method ('by free text'). Provides concrete examples. Distinguishes from sibling tools like get_indicator/get_series.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Designed for deep-research connectors; for richer control use get_indicator / get_series', giving clear when-to-use and when-not-to-alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_indicatorsSearch available indicators and datasetsARead-onlyIdempotentInspect
Search StatCite's curated indicator registry (World Bank WDI, IMF DataMapper/WEO/Fiscal Monitor, BIS policy rates, ECB HICP) and the Eastern Caribbean Central Bank and Central Bank of Barbados tables by topic, such as 'inflation', 'debt', 'unemployment' or 'poverty', and discover additional DBnomics datasets. Returns indicator keys usable with get_indicator/verify_stat, and caribstat series ids usable with get_series, with units and source notes.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Free-text topic, e.g. 'government debt' or 'fx reserves'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, so safety is covered; the description adds real value by disclosing registry coverage, the return payload shape (keys plus units and source notes), and that it can surface additional DBnomics datasets. It omits any mention of result limits, ranking, or pagination, so it is not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence, though it is long and reads as a run-on. The most decision-relevant content (what registry and which sources) is front-loaded, and nothing is padding, but it could be split for scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by describing what is returned (indicator keys, caribstat series ids, units, source notes) and which tools consume them. For a single-param search tool with full annotation coverage, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter and schema coverage is 100%, so the schema already carries the load; per the rubric baseline is 3. The description's example topic strings loosely illustrate free-text query intent but add no syntax, format, or matching behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (curated indicator registry) and enumerates the concrete sources covered (World Bank WDI, IMF, BIS, ECB, ECCB, Central Bank of Barbados, DBnomics). Example topics ('inflation', 'debt') make the scope unmistakable and distinguish it from generic siblings like search and list_sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent downstream: results are 'indicator keys usable with get_indicator/verify_stat' and 'caribstat series ids usable with get_series'. That is clear when-to-use context, but it never contrasts itself with the sibling 'search' tool or states when a direct get_indicator/get_series call should be preferred over searching first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_claimsVerify a batch of claimed statistics (fact-check a whole draft)ARead-onlyIdempotentInspect
Fact-check a whole draft or report in one call instead of calling verify_stat once per figure: extract every checkable macro claim from the text. Indicator + country + period + claimed value, and submit them together. Each claim gets the same verdict engine as verify_stat (match, close, mismatch, cannot_verify, with diagnostics), and every verified result carries the full citation for the official number. Same honesty contract as verify_stat: unverifiable claims come back cannot_verify with the reason, never a guessed verdict. Accepts 1–15 claims per call (free-tier subrequest budget). Split larger drafts into multiple calls of up to 15. Results come back in input order with a verdict-count summary; a claim that cannot be resolved (unknown indicator or country) reports its error in place without sinking the rest of the batch.
| Name | Required | Description | Default |
|---|---|---|---|
| claims | Yes | The claims extracted from the draft, in the order they appear (max 15 per call). | |
| strict_source | No | Reproducibility mode for the whole batch: never verify any claim against a fallback source, such claims error in place instead. Default false; without it, a claim served from a transient-failure fallback returns cannot_verify with the fallback value as indicative rather than a match/mismatch verdict. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, and the description adds substantial behavioral context on top: the honesty contract ('never a guessed verdict'), error isolation ('reports its error in place without sinking the rest of the batch'), ordering ('results come back in input order'), and strict-source fallback behavior. This goes well beyond what annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and sibling distinction, then adds dense, non-redundant behavioral and usage details. Every sentence earns its place: batching rationale, verdict engine equivalence, honesty contract, batch limits, ordering, and error isolation are all useful and specific.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does, when to use it, how to batch claims, error behavior, fallback semantics, and output characteristics. Since an output schema exists, detailed return-value explanation is unnecessary, and nothing essential for correctly selecting or invoking this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful context by explaining the claims array's purpose ('extract every checkable macro claim from the text'), the rationale for the 15-item cap ('free-tier subrequest budget'), and the batch behavior tied to strict_source. It does not deeply redefine each parameter, but it enriches the schema's already strong descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Fact-check a whole draft or report in one call' and explicitly contrasts itself with verify_stat by saying 'instead of calling verify_stat once per figure.' This clearly differentiates the batch tool from its sibling and tells an agent exactly what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance by naming verify_stat as the alternative and explaining the batch approach. It also provides concrete usage limits and splitting instructions: 'Accepts 1–15 claims per call' and 'Split larger drafts into multiple calls of up to 15.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_statVerify a claimed statistic against the official sourceARead-onlyIdempotentInspect
Check a claimed economic figure (from a draft, article, or memory) against the official statistical series and get a verdict: match, close, mismatch, or cannot_verify. With the official value, the difference, diagnostics for classic errors (wrong year, percent-vs-decimal, unit scaling), and a full citation for the correct number. Honesty contract: when the official source cannot support a judgment (source down, no published value, fallback vintage risk), the verdict is cannot_verify with the reason, never a guess. Supports historical IMF-vintage checks via as_of. Use this before publishing any economic statistic in a report, brief, or article, including figures you are confident about, since a confidently recalled number is the kind most likely to have been revised.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | Historical IMF-vintage verification: judge the claim against the dated IMF WEO edition resolved from this date, e.g. '2019-04', '2019', instead of today's live data. Resolution is a conservative month calendar (editions flip May 1 / Nov 1, not the IMF's exact release days) and always verifies against a dated WEO edition even when the indicator's live primary is World Bank WDI or the IMF Fiscal Monitor. The response's as_of object and notes disclose both, so present results as 'matched the IMF WEO {vintage} edition', never 'was true at the time'. Recent editions serve from the IMF's own dated vintage dataflows (api.imf.org) directly, with DBnomics's dated editions as the deep archive, the citation names which one served. Only supported for the six WEO-dated registry indicators (gdp_growth, current_account_gdp, govt_debt_gdp, fiscal_balance_gdp, govt_revenue_gdp, govt_expenditure_gdp); rejects with advice otherwise, and impossible calendar dates are rejected. | |
| period | Yes | Period of the claim, usually a year: '2024'. | |
| country | No | Country for registry indicators / World Bank series. | |
| indicator | Yes | Registry key ('inflation_cpi', 'gdp_growth', …) or explicit series id ('worldbank/FP.CPI.TOTL.ZG', 'imf/NGDP_RPCH', 'dbnomics/IMF/WEO:latest/USA.NGDP_RPCH.pcent_change'). | |
| claimed_value | Yes | The value as claimed (in the series' own units). | |
| strict_source | No | Reproducibility mode: never verify against a fallback source, error instead if the primary source fails. Default false; without it, a verify served from a transient-failure fallback returns cannot_verify with the fallback value as indicative (fallback_used=true), while a fallback for a series the primary permanently lacks (e.g. Taiwan in WDI) is judged normally with disclosure. | |
| tolerance_abs | No | Optional absolute tolerance in series units (e.g. 0.1 percentage points). | |
| tolerance_pct | No | Optional relative tolerance in percent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| period | Yes | |
| series | Yes | |
| verdict | Yes | |
| citation | Yes | |
| difference | Yes | |
| diagnostics | Yes | |
| explanation | Yes | |
| claimed_value | Yes | |
| is_projection | Yes | |
| status_method | Yes | |
| official_value | Yes | |
| observation_status | Yes | |
| relative_difference_pct | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/openWorld annotations by disclosing the honesty contract (cannot_verify with reason rather than a guess), fallback-source behavior for transient vs. permanent source gaps, and the conservative month-calendar vintage resolution caveat. These are exactly the behavioral traits an agent needs and that annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the verdict outcome and value-add, then layers the honesty contract and usage trigger. It is a dense block of long sentences — slightly verbose for what it conveys — but each sentence carries distinct information with minimal waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a verification tool with an output schema already present, the description covers purpose, verdict semantics, error/diagnostic behavior, fallback caveats, and historical-mode limits — nothing material to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries detailed semantics for as_of, strict_source, tolerances, etc. The description reinforces the historical as_of capability and diagnostic outputs, but adds little parameter detail the schema lacks — the appropriate baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Check') and resource ('a claimed economic figure') against the 'official statistical series,' and even enumerates the outcome space (match, close, mismatch, cannot_verify). This cleanly separates it from retrieval siblings (get_indicator, get_series) and from the batch-oriented verify_claims.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear, actionable usage context — 'Use this before publishing any economic statistic in a report, brief, or article' — and adds a non-obvious trigger ('including figures you are confident about, since a confidently recalled number is the kind most likely to have been revised'). It does not, however, explicitly distinguish itself from the sibling verify_claims or explain when the single-stat path is preferred over the plural one.
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.
2 tool updates
v1.14.0- Changed
get_indicator2 fields changed- added
Output schema / properties / stale_primaryAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / stale_primary_yearsAdded value: +{ + "type": "number" +}
- Changed
get_series2 fields changed- added
Output schema / properties / stale_primaryAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / stale_primary_yearsAdded value: +{ + "type": "number" +}
2 tool updates
v1.12.2- Changed
get_indicator1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "citation": { + "additionalProperties": true, + "properties": { + "citation_text": { + "type": "string" + }, + "license": { + "type": "string" + }, + "retrieved_at": { + "type": "string" + }, + "series_id": { + "type": "string" + }, + "source": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "source", + "series_id", + "source_url", + "license", + "retrieved_at", + "citation_text" + ], + "type": "object" + }, + "country": { + "additionalProperties": true, + "properties": { + "iso3": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "iso3", + "name" + ], + "type": "object" + }, + "fallback_reason": { + "enum": [ + "transient", + "definitive" + ], + "type": "string" + }, + "fallback_used": { + "type": "boolean" + }, + "frequency": { + "type": "string" + }, + "name": { + "type": "string" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "observations": { + "items": { + "additionalProperties": true, + "properties": { + "note": { + "type": "string" + }, + "period": { + "type": "string" + }, + "value": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "period", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "series_id": { + "type": "string" + }, + "unit": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "series_id", + "name", + "observations", + "citation", + "notes" + ], + "type": "object" +}
- Changed
get_series2 fields changed- added
Input schema / properties / latest_onlyAdded value: +{ + "description": "Return only the most recent non-null observation.", + "type": "boolean" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "citation": { + "additionalProperties": true, + "properties": { + "citation_text": { + "type": "string" + }, + "license": { + "type": "string" + }, + "retrieved_at": { + "type": "string" + }, + "series_id": { + "type": "string" + }, + "source": { + "type": "string" + }, + "source_url": { + "type": "string" + } + }, + "required": [ + "source", + "series_id", + "source_url", + "license", + "retrieved_at", + "citation_text" + ], + "type": "object" + }, + "country": { + "additionalProperties": true, + "properties": { + "iso3": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "iso3", + "name" + ], + "type": "object" + }, + "fallback_reason": { + "enum": [ + "transient", + "definitive" + ], + "type": "string" + }, + "fallback_used": { + "type": "boolean" + }, + "frequency": { + "type": "string" + }, + "name": { + "type": "string" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "observations": { + "items": { + "additionalProperties": true, + "properties": { + "note": { + "type": "string" + }, + "period": { + "type": "string" + }, + "value": { + "type": [ + "number", + "null" + ] + } + }, + "required": [ + "period", + "value" + ], + "type": "object" + }, + "type": "array" + }, + "series_id": { + "type": "string" + }, + "unit": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "series_id", + "name", + "observations", + "citation", + "notes" + ], + "type": "object" +}
2 tool updates
v1.11.3- Changed
verify_claims2 fields changed- changed
Input schema / properties / claims / items / properties / as_of / descriptionPrevious value: -"Historical IMF-vintage verification for this claim: judge against the dated IMF WEO edition resolved from this date (e.g. '2019-04') instead of today's live data — conservative month-calendar resolution, dated WEO editions only (served from the IMF's own vintage dataflows first, DBnomics's dated editions as the deep archive); the result's as_of object discloses both. Only for the 6 WEO-dated registry indicators."New value: +"Historical IMF-vintage verification for this claim: judge against the dated IMF WEO edition resolved from this date (e.g. '2019-04') instead of today's live data. Conservative month-calendar resolution, dated WEO editions only (served from the IMF's own vintage dataflows first, DBnomics's dated editions as the deep archive); the result's as_of object discloses both. Only for the 6 WEO-dated registry indicators." - changed
Input schema / properties / strict_source / descriptionPrevious value: -"Reproducibility mode for the whole batch: never verify any claim against a fallback source — such claims error in place instead. Default false; without it, a claim served from a transient-failure fallback returns cannot_verify with the fallback value as indicative rather than a match/mismatch verdict."New value: +"Reproducibility mode for the whole batch: never verify any claim against a fallback source, such claims error in place instead. Default false; without it, a claim served from a transient-failure fallback returns cannot_verify with the fallback value as indicative rather than a match/mismatch verdict."
- Changed
verify_stat2 fields changed- changed
Input schema / properties / as_of / descriptionPrevious value: -"Historical IMF-vintage verification: judge the claim against the dated IMF WEO edition resolved from this date — e.g. '2019-04', '2019' — instead of today's live data. Resolution is a conservative month calendar (editions flip May 1 / Nov 1, not the IMF's exact release days) and always verifies against a dated WEO edition even when the indicator's live primary is World Bank WDI or the IMF Fiscal Monitor — the response's as_of object and notes disclose both, so present results as 'matched the IMF WEO {vintage} edition', never 'was true at the time'. Recent editions serve from the IMF's own dated vintage dataflows (api.imf.org) directly, with DBnomics's dated editions as the deep archive — the citation names which one served. Only supported for the six WEO-dated registry indicators (gdp_growth, current_account_gdp, govt_debt_gdp, fiscal_balance_gdp, govt_revenue_gdp, govt_expenditure_gdp); rejects with advice otherwise, and impossible calendar dates are rejected."New value: +"Historical IMF-vintage verification: judge the claim against the dated IMF WEO edition resolved from this date, e.g. '2019-04', '2019', instead of today's live data. Resolution is a conservative month calendar (editions flip May 1 / Nov 1, not the IMF's exact release days) and always verifies against a dated WEO edition even when the indicator's live primary is World Bank WDI or the IMF Fiscal Monitor. The response's as_of object and notes disclose both, so present results as 'matched the IMF WEO {vintage} edition', never 'was true at the time'. Recent editions serve from the IMF's own dated vintage dataflows (api.imf.org) directly, with DBnomics's dated editions as the deep archive, the citation names which one served. Only supported for the six WEO-dated registry indicators (gdp_growth, current_account_gdp, govt_debt_gdp, fiscal_balance_gdp, govt_revenue_gdp, govt_expenditure_gdp); rejects with advice otherwise, and impossible calendar dates are rejected." - changed
Input schema / properties / strict_source / descriptionPrevious value: -"Reproducibility mode: never verify against a fallback source — error instead if the primary source fails. Default false; without it, a verify served from a transient-failure fallback returns cannot_verify with the fallback value as indicative (fallback_used=true), while a fallback for a series the primary permanently lacks (e.g. Taiwan in WDI) is judged normally with disclosure."New value: +"Reproducibility mode: never verify against a fallback source, error instead if the primary source fails. Default false; without it, a verify served from a transient-failure fallback returns cannot_verify with the fallback value as indicative (fallback_used=true), while a fallback for a series the primary permanently lacks (e.g. Taiwan in WDI) is judged normally with disclosure."
3 tool updates
v1.11.0- Added
compare_sources - Changed
verify_claims2 fields changed- changed
Input schema / properties / claims / items / properties / as_of / descriptionPrevious value: -"Historical IMF-vintage verification for this claim: judge against the dated IMF WEO edition resolved from this date (e.g. '2019-04') instead of today's live data — conservative month-calendar resolution, WEO archive only; the result's as_of object discloses both. Only for the 6 registry indicators with a dated IMF DBnomics definition."New value: +"Historical IMF-vintage verification for this claim: judge against the dated IMF WEO edition resolved from this date (e.g. '2019-04') instead of today's live data — conservative month-calendar resolution, dated WEO editions only (served from the IMF's own vintage dataflows first, DBnomics's dated editions as the deep archive); the result's as_of object discloses both. Only for the 6 WEO-dated registry indicators." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "results": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "type": "array" + }, + "summary": { + "additionalProperties": false, + "properties": { + "cannot_verify": { + "type": "number" + }, + "close": { + "type": "number" + }, + "error": { + "type": "number" + }, + "match": { + "type": "number" + }, + "mismatch": { + "type": "number" + }, + "total": { + "type": "number" + } + }, + "required": [ + "total", + "match", + "close", + "mismatch", + "cannot_verify", + "error" + ], + "type": "object" + } + }, + "required": [ + "summary", + "results" + ], + "type": "object" +}
- Changed
verify_stat2 fields changed- changed
Input schema / properties / as_of / descriptionPrevious value: -"Historical IMF-vintage verification: judge the claim against the dated IMF WEO edition resolved from this date — e.g. '2019-04', '2019' — instead of today's live data. Resolution is a conservative month calendar (editions flip May 1 / Nov 1, not the IMF's exact release days) and always uses the WEO archive even when the indicator's live primary is World Bank WDI or the IMF Fiscal Monitor — the response's as_of object and notes disclose both, so present results as 'matched the IMF WEO {vintage} edition', never 'was true at the time'. Only supported for registry indicators with a dated IMF DBnomics definition (gdp_growth, current_account_gdp, govt_debt_gdp, fiscal_balance_gdp, govt_revenue_gdp, govt_expenditure_gdp); rejects with advice otherwise, and impossible calendar dates are rejected."New value: +"Historical IMF-vintage verification: judge the claim against the dated IMF WEO edition resolved from this date — e.g. '2019-04', '2019' — instead of today's live data. Resolution is a conservative month calendar (editions flip May 1 / Nov 1, not the IMF's exact release days) and always verifies against a dated WEO edition even when the indicator's live primary is World Bank WDI or the IMF Fiscal Monitor — the response's as_of object and notes disclose both, so present results as 'matched the IMF WEO {vintage} edition', never 'was true at the time'. Recent editions serve from the IMF's own dated vintage dataflows (api.imf.org) directly, with DBnomics's dated editions as the deep archive — the citation names which one served. Only supported for the six WEO-dated registry indicators (gdp_growth, current_account_gdp, govt_debt_gdp, fiscal_balance_gdp, govt_revenue_gdp, govt_expenditure_gdp); rejects with advice otherwise, and impossible calendar dates are rejected." - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "citation": { + "additionalProperties": true, + "type": "object" + }, + "claimed_value": { + "type": "number" + }, + "diagnostics": { + "items": { + "type": "string" + }, + "type": "array" + }, + "difference": { + "type": [ + "number", + "null" + ] + }, + "explanation": { + "type": "string" + }, + "is_projection": { + "type": "boolean" + }, + "notes": { + "items": { + "type": "string" + }, + "type": "array" + }, + "observation_status": { + "type": "string" + }, + "official_value": { + "type": [ + "number", + "null" + ] + }, + "period": { + "type": "string" + }, + "relative_difference_pct": { + "type": [ + "number", + "null" + ] + }, + "series": { + "additionalProperties": true, + "type": "object" + }, + "status_method": { + "type": "string" + }, + "verdict": { + "enum": [ + "match", + "close", + "mismatch", + "cannot_verify" + ], + "type": "string" + } + }, + "required": [ + "verdict", + "claimed_value", + "official_value", + "is_projection", + "observation_status", + "status_method", + "period", + "difference", + "relative_difference_pct", + "explanation", + "diagnostics", + "series", + "citation", + "notes" + ], + "type": "object" +}
11 tool updates
- First observed
country_snapshot - First observed
fetch - First observed
fx_convert - First observed
get_indicator - First observed
get_series - First observed
inflation_adjust - First observed
list_sources - First observed
search - First observed
search_indicators - First observed
verify_claims - First observed
verify_stat
TDQS
Scored across 12 tools
Most tools have clearly distinct purposes: get_indicator for common indicators, get_series for explicit IDs, verify_stat for single claims, verify_claims for batch, search vs search_indicators differ in granularity. Minor overlap exists between get_indicator and get_series, but descriptions clarify when to use each.
Names follow a mostly verb_noun pattern (get_, verify_, search_, compare_, list_), with a few exceptions like country_snapshot, inflation_adjust, and fx_convert. All snake_case, but the verb usage is not perfectly uniform across the set.
12 tools is well-scoped for an economic statistics server covering retrieval, search, verification, comparison, conversion, and source documentation. Each tool serves a distinct function without redundancy.
The tool surface comprehensively covers the domain: data retrieval (multiple levels), search, verification (single and batch), source comparison, country snapshots, inflation and currency conversion, and source listing. No obvious dead ends or missing lifecycle steps.
Maintenance
Related MCP Connectors
Statistics from 28 agencies: FRED, Eurostat, ECB, World Bank, OECD. Cited values, computed answers.
Macroeconomic and other official data from 170+ publishers, resolved from natural language with provenance.
Macro indicators from World Bank, FRED, IMF, and OECD via unified query surface.
Macro data for AI agents: GDP, inflation, unemployment and more (World Bank, US BLS). No keys.
Related MCP Servers
- AlicenseAqualityCmaintenanceQuery 2,500+ verified public datasets (World Bank, IMF, Eurostat, OECD, WHO) from your AI agent. Search, analyze, and visualize data, and publish charts — with verified SEC + official source data.28112 npm1MIT
- AlicenseAqualityCmaintenanceProvides 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.5MIT
- AlicenseAqualityCmaintenanceMCP server serving official statistics from major data agencies (Statistics Canada, FRED, BLS, World Bank, etc.) as tools with provenance and verification, enabling search, retrieval, analysis, and monitoring via natural language.1159 npmMIT
- AlicenseAqualityBmaintenanceEnables querying international macro statistics, company identity data via LEI, and FX rates from dozens of free keyless providers through unified tools.12MIT