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 → https://statcite.com/mcp |
| Claude Code | /plugin marketplace add asokore/statcite then /plugin install statcite@statcite (also installs the verify-then-cite skill), or just the server: claude mcp add --transport http statcite https://statcite.com/mcp |
| Cursor | Install in Cursor · or {"mcpServers":{"statcite":{"url":"https://statcite.com/mcp"}}} |
| VS Code | Install in VS Code · Insiders · or code --add-mcp '{"name":"statcite","type":"http","url":"https://statcite.com/mcp"}' |
| ChatGPT | Developer mode → add MCP server, No Authentication (implements the deep-research search/fetch pair) |
| Cline / stdio-only | npx -y [email protected] https://statcite.com/mcp (pinned, so a client restart never pulls a new release. See llms-install.md) |
No signup, no API key, no OAuth.
Side effects
StatCite is a remote server. Over HTTP, calling it installs nothing and runs nothing on your machine. This is what each kind of call does, and where.
| Operation | Calls out from StatCite's server | Writes on your machine | Writes anywhere else | Recorded by StatCite |
|---|---|---|---|---|
get_indicator, get_series, compare_sources, country_snapshot, inflation_adjust, fx_convert, fetch | Yes, to the official source APIs named in the citation (World Bank, IMF, ECB, BIS and DBnomics, with exchange rates through Frankfurter, a relay of ECB reference rates), plus the published CaribStat corpus of ECCB and Central Bank of Barbados series at asokore.github.io/caribstat | No | No | One aggregate usage row |
verify_stat, verify_claims | Yes, the same source APIs, to fetch the official figure | No | No | One aggregate usage row, with the verdict kind |
search_indicators | Only to DBnomics, and only when fewer than five results were found locally | No | No | One aggregate usage row |
search | No | No | No | One aggregate usage row |
list_sources | No | No | No | One aggregate usage row |
| Connecting a client over HTTP | No | Only the server entry your client saves in its own config | No | Nothing |
The stdio bridge (mcp-remote) | No | npx downloads mcp-remote into the npm cache and runs it locally, and mcp-remote creates its own config folder (~/.mcp-auth unless MCP_REMOTE_CONFIG_DIR is set) | No | Nothing |
The usage row holds the transport, the tool name, the registry indicator key, the ISO3 country code, the verify verdict kind, the outcome and the duration. Every one of those comes from a closed list, so nothing you type is stored. No IP address, user agent, header, session id, query text or claimed value is recorded. The code is server/src/core/analytics.ts and the policy is at statcite.com/privacy.
Every get_indicator and get_series result also carries a limitations list: codes for what the figure is not, such as a projection, a fallback source's figure, a modelled estimate, a value rounded by the source or a number StatCite computed. A latest value more than 3 years older than the year it was retrieved carries stale_latest, and an IMF value before the projection boundary StatCite infers carries outturn_unconfirmed, because the IMF data StatCite reads does not mark which years are outturns. Each code is read from a structured field of the result or from the indicator registry, and an empty list means none of those conditions was detected.
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, invariants
Develop
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 deploy
Data & 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: [email protected]