Documentation

StatCite is a free remote MCP server and REST API serving official economic statistics where every number carries a full citation, plus verification and conversion utilities. Base URL: https://statcite.com.

1. Connecting (all clients) 2. Core concepts 3. The citation object 4. MCP tools reference 5. REST API 6. Indicator registry (42 active) 7. Countries & aggregates 8. Sources & licensing 9. Fair use & caching 10. Changelog

1. Connecting

MCP endpoint: https://statcite.com/mcp, Streamable HTTP, stateless, no authentication. Protocol revisions 2026-07-28 / 2025-11-25 / 2025-06-18 / 2025-03-26, served dual-era on the one endpoint: 2026-07-28 clients send per-request _meta and the standard Mcp-Method/Mcp-Name headers and may call server/discover; session-era clients keep using initialize exactly as before. The server has never minted a session id, so nothing about this endpoint was stateful to begin with.

2. Core concepts

Registry indicators are friendly keys (inflation_cpi, gdp_growth, govt_debt_gdp, …) curated by an economist and mapped to authoritative series with fallbacks: World Bank WDI for cross-country annual data, the IMF DataMapper API (current-vintage WEO/Fiscal Monitor, with DBnomics as a vintage-pinned fallback) for fiscal series and gap-filling. A handful of US-only high-frequency registry keys (us_fed_funds_rate and similar) exist for FRED but are permanently disabled, see §8.

Explicit series ids address any supported series directly: worldbank/NY.GDP.MKTP.KD.ZG (needs country), imf/NGDP_RPCH (needs country; current-vintage IMF data), dbnomics/IMF/WEO:latest/BRB.NGDP_RPCH.pcent_change (a specific dated DBnomics edition, e.g. WEO:2025-04, is the reproducibility instrument for pinning an exact vintage). fred/… ids are recognized but always decline, FRED is disabled (§8).

Projections are labeled. IMF forward-year values carry a per-observation note and a series-level note; “latest” semantics prefer the latest value not marked as a projection (which may itself be a staff estimate). The projection boundary is a heuristic derived from each response's own data horizon (the IMF's actual/projection cutoff for a given country and series isn't a field this data exposes), so some earlier observations may also be IMF staff estimates. The notes say so, and a series that ends before the boundary year gets an explicit note rather than silently reading as a confirmed outturn.

Vintages, and what happens when they change mid-response. The primary IMF path (DataMapper) serves the IMF's current edition, with its own verbatim edition label passed through unrewritten. Never rephrased or inferred where the label is available. If that path is unavailable, StatCite falls back to the newest edition DBnomics has ingested, which can trail the IMF's own April/October release calendar; every IMF-backed response cites the resolved vintage, and a fallback that crosses editions carries an explicit disclosure. Because a substitute source can differ by vintage (a GDP rebasing moves fiscal series by whole points for identical historical years) or by statistical definition (World Bank and IMF current-account figures for the same country-year have differed by nearly two percentage points), verify_stat/verify_claims treat a registry verify served from a transient-failure fallback as cannot_verify. The fallback value is reported as indicative rather than judged, since the primary may recover and serve a different number for the same query. When the primary permanently lacks the series or country (e.g. Taiwan in WDI), the fallback is that country's stable serving source and the verdict is judged normally. See the fallback_used flag and citation for exactly which source and vintage was served.

Errors are advice. Failed calls return actionable messages (closest country matches, available year ranges, alternative series) as tool errors, never bare stack traces.

3. The citation object

Every numeric payload includes:

{
  "source":        "World Bank",
  "dataset":       "World Development Indicators",
  "series_id":     "FP.CPI.TOTL.ZG",
  "series_name":   "Inflation, consumer prices (annual %)",
  "source_url":    "https://data.worldbank.org/indicator/FP.CPI.TOTL.ZG?locations=BB",
  "api_url":       "…exact API call for reproducibility…",
  "license":       "CC BY 4.0",
  "attribution":   "The World Bank: World Development Indicators: Inflation, consumer prices (annual %)",
  "retrieved_at":  "2026-07-25",
  "citation_text": "World Bank, World Development Indicators, series FP.CPI.TOTL.ZG (…), data last updated 2026-07-13. Retrieved 2026-07-25 via StatCite (https://statcite.com). https://…",
  "notices":       ["…source-mandated disclaimers when applicable…"]
}

Agents should reproduce citation_text (or construct a citation from the fields) whenever presenting the number. These fields are stable API surface.

4. MCP tools reference

get_indicator

Official values for a registry indicator, any country. Params: indicator (required), country (required, ISO3/ISO2/name), start_year, end_year, transform (none|yoy|pct_change|index), latest_only (bool), strict_source (bool, reproducibility mode: if the primary source fails, error instead of serving the fallback source). Returns observations + citation + notes. When a transient primary failure did trigger fallback, the response carries fallback_used: true, a disclosure note naming both sources, and is served no-store so it never lingers in shared caches after the primary recovers.

verify_stat

Verdict on a claimed figure vs. the official series. Params: indicator (registry key or series id), country, period (usually a year, "2024"; quarters accepted as "2024-Q1", "2024Q1", or "2024 Q1", months as "2024-05" or "202405"), claimed_value (number), optional tolerance_abs (series units) / tolerance_pct (relative %) / strict_source (bool, never verify against a fallback source; error instead). Without strict_source, a fallback-sourced verify returns cannot_verify with the fallback value as indicative (fallback_used: true) rather than a match/mismatch verdict. Responses also carry observation_status (actual | modeled_estimate | estimate_or_actual | projection | unknown) and status_method. For IMF series the actual/estimate boundary is a horizon heuristic, so estimate_or_actual means exactly that, never a confirmed outturn; modeled_estimate flags series that are model outputs rather than direct measurements (e.g. ILO-modelled unemployment), for which "actual" would overclaim.

Verdicts: match (within rounding: ≤0.06 pp or ≤0.5% relative for percent-kind series, ≤0.5% relative for levels), close (≤0.3 pp or ≤2% relative for percent-kind, ≤5% relative for levels), mismatch, cannot_verify (no observation for that period, response lists the available range and nearby values, or the value was served from a transient-failure fallback and is reported as indicative, see §2). When the official observation is a zero, only the absolute band applies. Responses include is_projection: true when the matched official observation is an IMF WEO/Fiscal Monitor estimate/projection, in which case the explanation is qualified accordingly, plus the finer-grained observation_status/status_method fields (see the OpenAPI schema). Diagnostics flag year misattribution (claim matches an adjacent year), percent-vs-decimal slips (~100× ratio), scale confusion (10³/10⁶/10⁹/10¹² ratios), and sign flips (claim ≈ −official, the classic fiscal-balance sign-convention slip). Live verification responses repeat the revision caveat that the official value is the source's currently published figure; historical as_of results instead carry a vintage-specific caveat naming the WEO edition the verdict was judged against (see below).

Historical IMF-vintage verification (as_of). Pass an optional as_of date (e.g. "2019-04", "2019") to check a claim against a dated IMF WEO edition instead of today's live data. Two honesty bounds, both disclosed in every response. First, resolution is a conservative month calendar, not the IMF's exact release days: editions flip on 1 May and 1 November, but the IMF publishes in early-to-mid April and October (the April 2019 WEO was released 9 April 2019), so an as_of date inside a release month resolves to the previous edition even if the new one already existed. The response says so (as_of.resolution: "conservative_month_calendar" plus a note), and the exact-pinning escape hatch is get_series with a dated id like dbnomics/IMF/WEO:2019-04/…. Second, the source may change: only IMF WEO editions carry dated vintages, so as_of always verifies against WEO even for indicators whose live primary is World Bank WDI (gdp_growth, current_account_gdp) or the IMF Fiscal Monitor database (govt_revenue_gdp, govt_expenditure_gdp). A claim originally made from the live primary can differ from the WEO edition for methodological reasons, not only because of revisions, and as_of.source_changed_for_as_of flags exactly this. Since 1.9.0 the dated-vintage chain is IMF-first: editions the IMF publishes as first-party dated dataflows (api.imf.org, SDMX 3.0) are served from the IMF directly, with DBnomics's dated WEO editions as the deep archive (confirmed back to at least 2010-04), the citation names which one served. Only the six WEO-dated registry indicators support as_of; anything else rejects with advice, as do impossible calendar dates (2019-02-31 is rejected, never silently normalized). observation_status/is_projection are computed against that historical edition's own vintage year, not today's.

Revision probe (automatic). On a mismatch for any of the six WEO-dated indicators, the response also carries revision_check: the claim is re-judged against the previous IMF WEO edition. matches_previous_vintage: true means the figure was likely accurate when written and has since been revised. A revision event, not necessarily an author error. When the previous edition cannot be retrieved, status: "unavailable" is returned and no judgment is offered. next_edition_expected carries the calendar-expected next WEO release ("expected" phrasing only). Suppressed under as_of and strict_source.

verify_claims

Batch verification. Fact-check a whole draft in one call instead of calling verify_stat once per figure. Workflow: extract every checkable macro claim from the text (indicator + country + period + claimed value), then submit them together. Params: claims. An array of 1–15 objects, each { indicator, country?, period, claimed_value, tolerance_abs?, tolerance_pct?, as_of? } (the same fields as verify_stat). Plus an optional call-level strict_source that applies verify_stat's reproducibility mode to every claim in the batch. The 15-claim cap exists because each claim costs upstream subrequests within the free-tier budget; split larger drafts into batches of up to 15 and call once per batch.

Each claim runs through the same verdict engine as verify_stat, including its optional per-claim as_of field (see §4 verify_stat) for revision-aware verification. The response is { summary, results, note? }: summary counts verdicts across the batch (total, match, close, mismatch, cannot_verify, error); results come back in input order, each either { ok: true, claim, verification }. Where verification is the full verify_stat payload (verdict, official value, difference, diagnostics, is_projection, citation). Or { ok: false, claim, error }. Errors are isolated per claim: an unresolvable claim (unknown indicator or country, upstream trouble) reports its error in place and counts under summary.error without sinking the rest of the batch. When any judged claim matched an IMF WEO/Fiscal Monitor projection-period observation, a top-level note says how many.

Over REST this is the API's only non-GET route, POST /v1/verify_claims with a JSON body:

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},
    {"indicator":"govt_debt_gdp","country":"JPN","period":"2024","claimed_value":250}
  ]}'

A GET on the endpoint returns 405 with usage advice; a non-JSON content-type returns 415; a malformed body or invalid claims array returns 422.

get_series

Raw series by explicit id. Params: series_id (required), country (for worldbank/*), start_year, end_year, transform. fred/… ids are recognized but always declined. FRED is disabled on this server (§8), with cross-country alternatives suggested.

Registry keys served from SDMX sources (not tools): policy_rate, euro_area_hicp

Two registry keys are served from SDMX APIs rather than the World Bank/IMF chain. policy_rate returns the BIS central-bank policy rate (monthly; the 49 economies the BIS compiles, economies outside that set return an honest no-published-data response rather than a substitute). euro_area_hicp returns monthly euro-area harmonised inflation from the ECB Data Portal, and is a euro-area aggregate only: request it with country="euro area"; a national country is rejected rather than silently answered with the aggregate. Both carry an upstream freshness check. If the newest published observation is older than the expectation for its frequency, the response carries a disclosure note, because a stalled dataflow returns HTTP 200 with well-formed but stale data rather than an error.

compare_sources

One indicator for one country fetched from every official source in its chain independently, e.g. World Bank WDI and the IMF WEO/Fiscal Monitor. Each value with its own citation, plus spread statistics. Params: indicator (registry key), country, optional period (year; default is the latest period every responding source shares). Differences between sources are methodological or vintage differences (central vs general government coverage, calendar vs fiscal years, edition lags), never "source X is wrong". Cite the source whose definition matches your claim. A source that is down reports its error in place without sinking the comparison. REST: GET /v1/compare?indicator=&country=&period=.

search_indicators

Free-text search over the registry, plus DBnomics dataset discovery (IMF, OECD, Eurostat, BIS…). Param: query.

country_snapshot

Headline picture in one call: GDP, growth, GDP per capita, inflation, unemployment, population, current account, trade, FDI, life expectancy (World Bank, single batched request) + general government debt (IMF WEO). Param: country. Items each carry their own citation; unavailable indicators are listed in missing.

inflation_adjust

Params: amount, from_year, to_year, country (default USA). Method: CPI ratio on World Bank FP.CPI.TOTL (base-invariant); formula and both index values are disclosed. Annual-average precision, with the CPI-vs-deflator caveat noted.

fx_convert

Params: amount, from, to (ISO 4217), date (YYYY-MM-DD daily / YYYY annual / omit for latest). Rails: ECB daily reference rates (~30 currencies, since 1999) via Frankfurter; World Bank official annual-average rates (PA.NUS.FCRF) for ~90 more currencies via a USD bridge. precision field reports daily, annual_average, or mixed; the method string shows the arithmetic.

list_sources

Sources, coverage, licenses, required attribution lines. Now a full licence ledger: every source carries license_verdict (served | flow_through | refused), license_note (the basis for the verdict), and license_verified_on. Refused sources (FRED, UN Comtrade) are listed with the reason each was declined. The ECCB and the Central Bank of Barbados are served, on written permission obtained by the operator, and their ledger entries state that basis. Human-readable version: the sources page.

Deep-research compatibility pair (OpenAI connector schema). search(query) returns {results:[{id,title,url}]} with ids like indicator/inflation_cpi/BRB; fetch(id) returns {id,title,text,url,metadata} where text contains recent observations and the full citation.

Also on every citation: export_formats, an object with bibtex and apa strings, ready to paste. They are derived from this citation's own fields, so they can never disagree with citation_text. You do not have to build a reference entry by hand:

"export_formats": {
  "bibtex": "@misc{worldbank_FP.CPI.TOTL.ZG_BRB, title = {{Inflation, consumer prices (annual %)}}, author = {{World Bank}}, ...}",
  "apa":    "World Bank. (2026). Inflation, consumer prices (annual %) [Data set]. World Development Indicators. Retrieved ..."
}

Prompts and resources

Beyond the twelve tools, the server exposes three prompts and three resources. In clients that support them (Claude among them) the prompts appear as slash commands as soon as you connect, so this is usually the quickest way to see the server working:

PromptWhat it does
fact_checkPaste a draft. Every macro claim in it is extracted and checked against the official series, with a verdict and citation per claim.
country_briefA headline economic picture of one country, every figure carrying its own citation.
cite_this_statTurn one figure into a properly formatted, verified citation.
Resource URIContents
statcite://registry/indicatorsThe full 48-key registry in one read, so an agent never has to page through search results to learn what exists.
statcite://registry/sourcesThe licence ledger: verdict, basis and verification date per source.
statcite://registry/sidsThe curated 39-state small-island developing states grouping.

5. REST API

Same engine over plain GET. For scripts, notebooks, spreadsheets, and Custom GPT Actions. Machine-readable spec: /openapi.json. CORS: open. Responses are cacheable (Cache-Control: public).

GET /v1                                   → endpoint index
GET /v1/indicators                        → the indicator registry (48 keys, 42 active)
GET /v1/indicator/{key}?country=BRB&start_year=2015&transform=yoy&latest_only=true
GET /v1/series?id=worldbank/NY.GDP.MKTP.KD.ZG&country=USA
GET /v1/search?q=government+debt
GET /v1/snapshot/{country}
GET /v1/verify?indicator=inflation_cpi&country=USA&period=2023&value=4.1
POST /v1/verify_claims                    → JSON body { claims: [...] }, 1–15 claims (the only non-GET route)
GET /v1/inflation?amount=100&from_year=1995&to_year=2024&country=USA
GET /v1/fx?amount=100&from=USD&to=BBD&date=2024
GET /v1/compare?indicator=govt_debt_gdp&country=BRB&period=2023
GET /v1/status                            → version + live upstream probes (for a poller or badge)
GET /v1/series?id=caribstat/ECCB/total-public-sector-debt/AIA.a#Total Public Sector Debt
GET /v1/sources
GET /health

Errors: 400 missing/invalid parameters, 422 resolvable-but-failed requests (unknown country, out-of-range year, message includes suggestions), 502 upstream source trouble, 404 unknown endpoint. On /v1/verify_claims: 405 for GET (use POST), 415 for a non-JSON content-type, 422 for a malformed body.

6. Indicator registry

48 registry keys, of which 42 are active. The six US-only FRED-reserved keys are recognized but permanently decline (§8). Machine surfaces say so too: GET /v1/indicators entries and search_indicators results carry active (and disabled_reason on the six disabled keys), so an agent never has to discover a dead key by calling it. Keys are stable; new indicators are added without breaking existing ones.

KeySeriesUnitSources (order = fallback chain)
gdp_growthGDP growth (annual %)% (annual, real)World Bank WDI; IMF DataMapper; IMF WEO (DBnomics fallback)
gdp_current_usdGDP (current US$)current US$World Bank WDI
gdp_per_capita_usdGDP per capita (current US$)current US$World Bank WDI
gdp_per_capita_pppGDP per capita, PPP (current international $)current international $ (PPP)World Bank WDI
gni_per_capita_atlasGNI per capita, Atlas method (current US$)current US$World Bank WDI
inflation_cpiInflation, consumer prices (annual %)% (annual average)World Bank WDI
cpi_indexConsumer price index (2010 = 100)index, 2010 = 100World Bank WDI
gdp_deflator_growthInflation, GDP deflator (annual %)%World Bank WDI
unemployment_rateUnemployment, total (% of labor force, modeled ILO estimate)% of labor forceWorld Bank WDI
labor_force_participationLabor force participation rate (% of population 15+, modeled ILO)% of population ages 15+World Bank WDI
populationPopulation, totalpeopleWorld Bank WDI
population_growthPopulation growth (annual %)%World Bank WDI
current_account_gdpCurrent account balance (% of GDP)% of GDPWorld Bank WDI; IMF DataMapper; IMF WEO (DBnomics fallback)
govt_debt_gdpGeneral government gross debt (% of GDP)% of GDPIMF DataMapper; IMF WEO (DBnomics fallback); World Bank WDI
fiscal_balance_gdpGeneral government net lending/borrowing (% of GDP)% of GDPIMF DataMapper; IMF WEO (DBnomics fallback)
govt_revenue_gdpGeneral government revenue (% of GDP)% of GDPIMF DataMapper (Fiscal Monitor); IMF WEO (DBnomics fallback)
govt_expenditure_gdpGeneral government total expenditure (% of GDP)% of GDPIMF DataMapper (Fiscal Monitor); IMF WEO (DBnomics fallback)
tax_revenue_gdpTax revenue (% of GDP)% of GDPWorld Bank WDI
trade_gdpTrade (% of GDP)% of GDPWorld Bank WDI
exports_gdpExports of goods and services (% of GDP)% of GDPWorld Bank WDI
imports_gdpImports of goods and services (% of GDP)% of GDPWorld Bank WDI
fdi_inflows_gdpForeign direct investment, net inflows (% of GDP)% of GDPWorld Bank WDI
remittances_gdpPersonal remittances, received (% of GDP)% of GDPWorld Bank WDI
gross_capital_formation_gdpGross capital formation (% of GDP)% of GDPWorld Bank WDI
gross_savings_gdpGross savings (% of GDP)% of GDPWorld Bank WDI
official_fx_rateOfficial exchange rate (LCU per US$, period average)LCU per US$World Bank WDI
reserves_months_importsTotal reserves in months of importsmonths of importsWorld Bank WDI
reserves_total_usdTotal reserves (includes gold, current US$)current US$World Bank WDI
lending_rateLending interest rate (%)%World Bank WDI
deposit_rateDeposit interest rate (%)%World Bank WDI
real_interest_rateReal interest rate (%)%World Bank WDI
broad_money_gdpBroad money (% of GDP)% of GDPWorld Bank WDI
giniGini indexindex (0–100)World Bank WDI
poverty_headcount_intlPoverty headcount ratio at $2.15/day, 2017 PPP (% of population)% of populationWorld Bank WDI
life_expectancyLife expectancy at birth, total (years)yearsWorld Bank WDI
urban_population_shareUrban population (% of total population)% of populationWorld Bank WDI
us_fed_funds_rateUS federal funds effective rate (monthly, %)%FRED (US), disabled
us_10y_treasuryUS 10-year Treasury constant maturity yield (daily, %)%FRED (US), disabled
us_cpi_monthlyUS CPI for all urban consumers (monthly index, 1982–84 = 100)index, 1982–84 = 100FRED (US), disabled
us_unemployment_monthlyUS unemployment rate (monthly, %)%FRED (US), disabled
us_nonfarm_payrollsUS total nonfarm payrolls (monthly, thousands of persons)thousands of personsFRED (US), disabled
us_real_gdpUS real GDP (quarterly, chained 2017 dollars, SAAR)billions of chained 2017 US$FRED (US), disabled
debt_service_exports_pctTotal debt service (% of exports of goods, services and primary income)% of exportsWorld Bank WDI
euro_area_hicpEuro area HICP inflation (annual rate)%ECB Data Portal
external_debt_service_usdTotal debt service on external debt (TDS, current US$)current US$World Bank WDI
external_debt_stock_usdExternal debt stocks, total (DOD, current US$)current US$World Bank WDI
policy_rateCentral bank policy rate% per annumBIS statistics
tourism_receipts_exportsInternational tourism, receipts (% of total exports)% of total exportsWorld Bank WDI
Fiscal indicators (govt_debt_gdp, fiscal_balance_gdp, govt_revenue_gdp, govt_expenditure_gdp) intentionally use IMF general-government series as primary. The World Bank WDI central-government debt series has far patchier coverage. govt_revenue_gdp/govt_expenditure_gdp are served from the IMF's Fiscal Monitor database (the same general-government concept as the WEO database, at full precision); the other two are served from the WEO database itself (values rounded to one decimal by the DataMapper API). US-prefixed keys are reserved for FRED-backed high-frequency series; FRED is permanently disabled (§8) because its terms of use prohibit AI/ML use and caching/redistribution, so these keys always decline.

7. Countries & aggregates

Pass ISO3 (USA, BRB), ISO2 (US, BB), or English names. Common aliases resolve (UK, South Korea, Ivory Coast, Türkiye). Aggregates: WLD (world), EUU (EU), EMU (euro area), OED (OECD), income groups (HIC, LIC, LMC, UMC), and World Bank regions. Unresolvable names return suggestions.

8. Sources & licensing

StatCite does not originate the underlying statistical observations; derived values (transforms, inflation adjustment, FX bridging) and verification verdicts are calculated transparently from cited source data, with the method and inputs disclosed in each response. Underlying licenses: World Bank CC BY 4.0; IMF data. Published IMF statistical data may be copied, redistributed and used (including in derivative works) under the IMF's special terms for data: attribute as "Source: International Monetary Fund, <database>, <link>" (each citation supplies this line), do not alter the data in ways affecting its accuracy, communicate these terms to your own downstream users, and where the data is sold as a standalone product disclose that it is available free of charge from the IMF; BIS statistics. Reproduction and redistribution with attribution; ECB Data Portal content. Reproduction with attribution; ECB reference rates (informational, attribution); Eurostat CC BY 4.0 via DBnomics; FRED is not served: its Services Terms of Use (clauses (p) and (q), fred.stlouisfed.org/legal) reserve FRED content from AI/ML/LLM and generative-AI use, and from being stored, cached or redistributed to third parties. The license and attribution fields in each citation state what applies to that exact number.

9. Fair use & caching

10. Changelog

© 2026 StatCite · Privacy · Terms · hello@statcite.com