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.
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.
claude mcp add --transport http statcite https://statcite.com/mcpsearch/fetch tool pair for connected servers, but StatCite implements it anyway. It remains the interface used by deep research and company knowledge.{"mcpServers":{"statcite":{"url":"https://statcite.com/mcp"}}} in mcp.json.{"servers":{"statcite":{"type":"http","url":"https://statcite.com/mcp"}}} in .vscode/mcp.json.npx -y mcp-remote@latest https://statcite.com/mcp (mcp-remote ≥ 0.1.16).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.
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.
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.
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.
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.
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.
policy_rate, euro_area_hicpTwo 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.
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=.
Free-text search over the registry, plus DBnomics dataset discovery (IMF, OECD, Eurostat, BIS…). Param: query.
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.
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.
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.
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 ..."
}
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:
| Prompt | What it does |
|---|---|
fact_check | Paste a draft. Every macro claim in it is extracted and checked against the official series, with a verdict and citation per claim. |
country_brief | A headline economic picture of one country, every figure carrying its own citation. |
cite_this_stat | Turn one figure into a properly formatted, verified citation. |
| Resource URI | Contents |
|---|---|
statcite://registry/indicators | The full 48-key registry in one read, so an agent never has to page through search results to learn what exists. |
statcite://registry/sources | The licence ledger: verdict, basis and verification date per source. |
statcite://registry/sids | The curated 39-state small-island developing states grouping. |
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.
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.
| Key | Series | Unit | Sources (order = fallback chain) |
|---|---|---|---|
gdp_growth | GDP growth (annual %) | % (annual, real) | World Bank WDI; IMF DataMapper; IMF WEO (DBnomics fallback) |
gdp_current_usd | GDP (current US$) | current US$ | World Bank WDI |
gdp_per_capita_usd | GDP per capita (current US$) | current US$ | World Bank WDI |
gdp_per_capita_ppp | GDP per capita, PPP (current international $) | current international $ (PPP) | World Bank WDI |
gni_per_capita_atlas | GNI per capita, Atlas method (current US$) | current US$ | World Bank WDI |
inflation_cpi | Inflation, consumer prices (annual %) | % (annual average) | World Bank WDI |
cpi_index | Consumer price index (2010 = 100) | index, 2010 = 100 | World Bank WDI |
gdp_deflator_growth | Inflation, GDP deflator (annual %) | % | World Bank WDI |
unemployment_rate | Unemployment, total (% of labor force, modeled ILO estimate) | % of labor force | World Bank WDI |
labor_force_participation | Labor force participation rate (% of population 15+, modeled ILO) | % of population ages 15+ | World Bank WDI |
population | Population, total | people | World Bank WDI |
population_growth | Population growth (annual %) | % | World Bank WDI |
current_account_gdp | Current account balance (% of GDP) | % of GDP | World Bank WDI; IMF DataMapper; IMF WEO (DBnomics fallback) |
govt_debt_gdp | General government gross debt (% of GDP) | % of GDP | IMF DataMapper; IMF WEO (DBnomics fallback); World Bank WDI |
fiscal_balance_gdp | General government net lending/borrowing (% of GDP) | % of GDP | IMF DataMapper; IMF WEO (DBnomics fallback) |
govt_revenue_gdp | General government revenue (% of GDP) | % of GDP | IMF DataMapper (Fiscal Monitor); IMF WEO (DBnomics fallback) |
govt_expenditure_gdp | General government total expenditure (% of GDP) | % of GDP | IMF DataMapper (Fiscal Monitor); IMF WEO (DBnomics fallback) |
tax_revenue_gdp | Tax revenue (% of GDP) | % of GDP | World Bank WDI |
trade_gdp | Trade (% of GDP) | % of GDP | World Bank WDI |
exports_gdp | Exports of goods and services (% of GDP) | % of GDP | World Bank WDI |
imports_gdp | Imports of goods and services (% of GDP) | % of GDP | World Bank WDI |
fdi_inflows_gdp | Foreign direct investment, net inflows (% of GDP) | % of GDP | World Bank WDI |
remittances_gdp | Personal remittances, received (% of GDP) | % of GDP | World Bank WDI |
gross_capital_formation_gdp | Gross capital formation (% of GDP) | % of GDP | World Bank WDI |
gross_savings_gdp | Gross savings (% of GDP) | % of GDP | World Bank WDI |
official_fx_rate | Official exchange rate (LCU per US$, period average) | LCU per US$ | World Bank WDI |
reserves_months_imports | Total reserves in months of imports | months of imports | World Bank WDI |
reserves_total_usd | Total reserves (includes gold, current US$) | current US$ | World Bank WDI |
lending_rate | Lending interest rate (%) | % | World Bank WDI |
deposit_rate | Deposit interest rate (%) | % | World Bank WDI |
real_interest_rate | Real interest rate (%) | % | World Bank WDI |
broad_money_gdp | Broad money (% of GDP) | % of GDP | World Bank WDI |
gini | Gini index | index (0–100) | World Bank WDI |
poverty_headcount_intl | Poverty headcount ratio at $2.15/day, 2017 PPP (% of population) | % of population | World Bank WDI |
life_expectancy | Life expectancy at birth, total (years) | years | World Bank WDI |
urban_population_share | Urban population (% of total population) | % of population | World Bank WDI |
us_fed_funds_rate | US federal funds effective rate (monthly, %) | % | FRED (US), disabled |
us_10y_treasury | US 10-year Treasury constant maturity yield (daily, %) | % | FRED (US), disabled |
us_cpi_monthly | US CPI for all urban consumers (monthly index, 1982–84 = 100) | index, 1982–84 = 100 | FRED (US), disabled |
us_unemployment_monthly | US unemployment rate (monthly, %) | % | FRED (US), disabled |
us_nonfarm_payrolls | US total nonfarm payrolls (monthly, thousands of persons) | thousands of persons | FRED (US), disabled |
us_real_gdp | US real GDP (quarterly, chained 2017 dollars, SAAR) | billions of chained 2017 US$ | FRED (US), disabled |
debt_service_exports_pct | Total debt service (% of exports of goods, services and primary income) | % of exports | World Bank WDI |
euro_area_hicp | Euro area HICP inflation (annual rate) | % | ECB Data Portal |
external_debt_service_usd | Total debt service on external debt (TDS, current US$) | current US$ | World Bank WDI |
external_debt_stock_usd | External debt stocks, total (DOD, current US$) | current US$ | World Bank WDI |
policy_rate | Central bank policy rate | % per annum | BIS statistics |
tourism_receipts_exports | International tourism, receipts (% of total exports) | % of total exports | World Bank WDI |
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.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.
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.
GET /mcp stays 405 but now returns a JSON descriptor (name, version, protocol versions, docs, REST and llms.txt links) instead of zero bytes, so an agent sniffing the endpoint gets a working start. The homepage JSON-LD gains a DataCatalog of six publisher-attributed datasets with live example URLs, and its description now names BIS and both Caribbean central banks. /.well-known/security.txt published. The Apify actor bundle is rebuilt from current core, picking up this week's search, catalogue and territory fixes.euro_area_hicp stopped ranking for Barbados and Jamaica queries that returned 422 when followed. /docs no longer scrolls sideways on a phone, where two inline code spans widened the page to 465px in a 375px viewport. openapi.json now documents the caribstat/ id form and the row and occurrence selectors, which it had never mentioned. The licence ledger is stated correctly on this page and in llms-full.txt: ECCB and the Central Bank of Barbados are served, not refused. The country_snapshot description no longer claims a fixed indicator count, which varies from 5 to 11 by economy.transform=yoy returned 5.18 labelled “current US$” where the real figure is 7,597,571,450, and an index rebase kept the source’s base year beside a note naming a different one. Transforms now return their own unit and the citation discloses that values are computed rather than as-published. Query booleans accept 1/yes/on and reject anything unparseable with a 400, so strict_source=1 can no longer silently downgrade a reproducibility guarantee. 19 real economies, Montserrat and Anguilla among them, were missing from the country table, which meant a made-up three-letter code could be described as an economy the World Bank does not cover; that distinction is now explicit. Also: HEAD supported with Allow on every 405, /v1/fx rejects future dates itself instead of blaming the ECB, /v1/status marks cached probes, compare_sources no longer misses overlaps spanning decades, and the BIS coverage claim corrected to the 49 economies actually served.no_published_data: true, so an agent branches on a field instead of parsing prose.initialize handshake, sessions and ping in favour of per-request metadata; StatCite now answers both eras, choosing per request from the version the request declares. New for modern clients: mandatory server/discover, resultType on every result, ttlMs/cacheScope on cacheable results, and enforced agreement between the MCP-Protocol-Version/Mcp-Method/Mcp-Name headers and the request body (mismatch is refused with -32020). Session-era clients are unaffected. That no-change guarantee has its own regression tests.as_of provenance now names the source that actually served, and the DBnomics ledger note corrected.as_of/revision-probe chain. Fixes a live degradation where the revision probe reported the previous edition unavailable purely because the aggregator had not yet ingested it. Licence-ledger entry imf_sdmx_vintage added and verified; two silent-failure guards (SDMX-JSON 2.0.0 value-keyed periods; HTTP-200-with-no-series treated as a malformed key, never as absence of published data) covered by mutation-verified tests.policy_rate, 49 economies, explicit code allowlist after a live BIS-code/ISO2 collision) and ECB Data Portal euro-area HICP (euro_area_hicp); per-response staleness assertion on SDMX flows; live smoke hardened with transient-retry.mismatch on a WEO-dated indicator is re-judged against the previous IMF edition and the response says whether the claim matched the prior vintage (revision event vs author error).compare_sources tool + /v1/compare (one indicator, every publishing source, side by side with per-source citations and the spread); licence ledger on list_sources/GET /v1/sources (verdict, basis note and verification date per source, including refused sources with reasons); citation export_formats (BibTeX/APA); machine-readable honest absence (no_published_data vs available_range); typo-tolerant country resolution; four new debt/tourism registry keys; SIDS resource.fact_check, country_brief, cite_this_stat) and MCP resources (registry + source/licence tables, generated from the serving constants so they cannot drift); structured output on the verify tools; merged /v1/status endpoint with live upstream probes; scheduled CI smoke against production.GET /v1/indicators entries and search_indicators results carry active + disabled_reason, a disabled key's search result says "do not call" instead of a normal usage instruction, and the get_series tool description no longer implies a server FRED key could enable fred/… ids. Documentation drift fixed: modeled_estimate added to the docs' observation_status list, the revision-caveat sentence now distinguishes live from historical as_of results, llms-full.txt shows the full six-field as_of object in the verify_stat return contract and adds as_of to the REST parameter list. Site: Tow Center statistic reworded to describe what the study measured (source-identification failures), the 2026 deep-research study labelled as an arXiv preprint, "SLA-backed platform" replaced with a plain statement that Apify's own terms govern the metered offering, connect tabs now include accessible tab semantics and a test prompt, plus a live try-it verifier backed by GET /v1/verify. (Also reviewed and rejected: the claim that custom connectors are unavailable on Claude's Free plan, Anthropic's current documentation confirms Free includes one custom connector, so the site's wording stands.)as_of honesty pass (third external review response): the feature is now described everywhere as historical IMF-vintage verification, never exact date-sensitive "truth at the time". The vintage resolver is a conservative month calendar (editions flip 1 May / 1 Nov), not the IMF's actual release days, and the response now discloses this (as_of.resolution) plus a release-month ambiguity note with an exact-pinning escape hatch. Impossible calendar dates (2019-02-31) are rejected instead of silently normalized to a different date. Historical results no longer carry the contradictory "reflects the current published figure" note (a vintage-specific caveat replaces it). New as_of.source_changed_for_as_of + note disclose when the archive source differs from the indicator's live primary (World Bank WDI or IMF Fiscal Monitor). New observation_status: "modeled_estimate" for the ILO-modeled unemployment/participation indicators, "actual" was too strong a claim for model outputs. fallback_reason added to the OpenAPI schema; public indicator counts corrected to "42 active" (six FRED-reserved keys always decline).verify_stat/verify_claims gain an optional as_of date that pins the verdict to the IMF WEO/Fiscal Monitor edition current on that date (resolved via the April/October release calendar and fetched from that dated DBnomics edition directly) instead of today's live data, "was this true when it was made?" Scoped to the six registry indicators with a dated IMF DBnomics definition; anything else rejects with advice. Response carries as_of: { requested, resolved_vintage }.fred/… series id and the six US-only FRED-backed registry keys remain recognized but always decline, pointing to World Bank/IMF alternatives; the underlying key check no longer treats a configured FRED_API_KEY as sufficient to enable it.cannot_verify with the fallback value as indicative (generalizing 1.3.0’s vintage-crossing rule, World Bank↔IMF substitution differs by definition, not just vintage; a fallback for a series the primary permanently lacks is judged normally with disclosure); new observation_status/status_method fields distinguish actual from estimate_or_actual (IMF pre-boundary values may be staff estimates) and disclose the heuristic; latest_only note no longer claims "outturn" for IMF series; country snapshots propagate fallback_used and are served no-store when any item was fallback-sourced; IMF citation license text aligned with the IMF's terms as then understood (that wording conflated the IMF's Content and Data regimes and was corrected in 1.8.2, see above); doc-version and stat-source-link corrections.gdp_growth, current_account_gdp, govt_debt_gdp, fiscal_balance_gdp, govt_revenue_gdp, govt_expenditure_gdp now serve from the IMF DataMapper API (current WEO/Fiscal Monitor edition) as primary, with DBnomics as a vintage-pinned fallback. Closing the WEO-vintage-lag limitation from 1.2.0; new imf/<CODE> explicit series id; the actual/projection boundary is now derived from each response's own data horizon rather than the served edition label, so it survives cache skew; verify_stat/verify_claims return cannot_verify (not a match/mismatch verdict) when a fallback crosses IMF vintages, since a vintage change can move a value by more than rounding even for identical historical years.strict_source reproducibility mode on get_indicator/get_series/verify_stat/verify_claims; fallback_used flag + no-store caching on fallback-sourced responses; deeper transient-failure retries before any fallback; WEO stale-vintage disclosure notes; more precise IMF/FRED licensing language; honest WEO estimate-boundary caveat.verify_claims batch verification (MCP + POST /v1/verify_claims), FRED end-to-end test coverage.© 2026 StatCite · Privacy · Terms · hello@statcite.com