Query IMF SDMX 3.0 macroeconomic data β 193 dataflows, WEO, BOP, CPI, exchange rates, 190 countries.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Query IMF SDMX 3.0 macroeconomic data β hundreds of dataflows across 190 countries, WEO projections, BOP, CPI, exchange rates, and national accounts via MCP. STDIO or Streamable HTTP.
Public Hosted Server: https://imf.caseyjhand.com/mcp
Six tools covering the full IMF SDMX 3.0 query workflow, plus a DuckDB-backed canvas layer for SQL analytics over large multi-country result sets:
| Tool | Description |
|---|---|
imf_list_databases | List IMF SDMX dataflows available on the portal, a page at a time, with optional name/ID/description substring filtering |
imf_get_database | Fetch a dataflow's dimensions and page either its codelists or the codes with published data β resolves human terms to SDMX codes before querying |
imf_query_dataset | Query a dataflow by dimension key over a time range; large result sets spill to DataCanvas |
imf_dataframe_describe | List DataCanvas tables and columns staged by a prior imf_query_dataset call |
imf_dataframe_query | Run a read-only SQL SELECT across staged DataCanvas tables for multi-country comparisons and aggregations |
imf_dataframe_drop | Remove one staged table or view without affecting other tables on the canvas; disabled by default |
imf_list_databasesEntry point for every IMF query workflow β browse and filter the dataflow catalog, a page at a time.
include_vintages=true to include themlimit (default 50, max 200) and offset. total_count is the number of matches, returned_count the size of the page, and a notice names the next offset while matches remainimf_get_database and the imf://database/{dataflow_id} resource return the full text for the dataflow you settle onimf_get_databaseResolve human-readable terms to SDMX dimension codes before querying.
WGT_TYPE β Weight Type), and a codelist preview (e.g. "United States" β USA, "Constant prices" β NGDP_RPCH)key_format field shows the exact dot-separated dimension order required by imf_query_datasetdimension_id to page one codelist with limit/offset; codelist_filter still applies its case-insensitive substring match before pagingavailable_only=true to replace codelists with codes reported by the dataflow-wide availability constraint. The response includes total series and time coverage, joins each available code to its DSD label with an ID fallback, and applies dimension_id, codelist_filter, limit, and offset after availability filtering. Omit dimension_id for a bounded preview of every structure dimension, including empty dimensions the constraint does not mentionimf_query_datasetQuery an IMF SDMX dataflow by dimension key over a time range.
USA.NGDP_RPCH.A for WEO annual GDP at constant prices, percent change)+ combines codes at one position (e.g. USA+GBR+DEU.NGDP_RPCH.A); * matches every code at a position (*.NGDP_RPCH.A for all countries, CAN.*.A for every indicator). Every position needs a code or a * β a blank segment matches nothing upstream and is rejectedstart_period / end_period accept YYYY, YYYY-SN, YYYY-QN, YYYY-MM, or a calendar-valid YYYY-MM-DD whatever the series frequency, and cover the whole period they name β end_period: 2023 includes 2023-M12 and 2023-Q4time_period, value, status, and series attributes (unit, scale, decimals). Period labels come back as upstream emits them β 2023, 2023-S1, 2023-Q1, 2023-M01, 2023-01-05 β and any of them can be passed straight back in as a boundseries_metadata, one unit/scale/decimals entry per series_key, because attributes differ between them: in USA.NGDPD+NGDP_RPCH.*, NGDPD is USD at scale 9 while NGDP_RPCH is PT and unscaled. Canvas rows carry their own series' attributes too. A single-series query keeps the flat series_attributes and no listunit is the upstream code β PT, USD, XDC, IX, NUM. Every key shape reports the same unit: the portal drops the unit block when a key uses + on the dimension that carries it, and one extra attributes-only request recovers it, so USA.NGDP_RPCH+NGDPD.A and USA.NGDP_RPCH+NGDPD.* both report USD and PT. That key shape is the only one that costs the second request; every other query makes one. A unit: null therefore means the dataflow publishes none, which many do0 is the upstream sentinel for "no multiplier" β formatted output names it rather than printing a bare 0, and structuredContent keeps the raw codeoutput_mode: "canvas" to explicitly stage any result, using canvas_id as the destination when suppliedstaged reports whether the complete result is on DataCanvas; truncated reports only whether observations is an incomplete preview. Staged results always return canvas_id, table_name, and describe-before-query guidance in both MCP result channelsno_data errors include availability context from the upstream constraint endpoint: a dataflow that publishes no series at all is reported as such and points at a different dataflow, since no key would work; otherwise series_count=0 means the code has no coverage and dataflow_availability names codes that do, while series_count>0 means the combination is wrong and available_codes lists what does have data per dimension, stating how many of how many it is showing when a dimension is too long to list in fullno_data_in_range, reporting the range the series actually spans β the fix is the range, not the keyimf_dataframe_describe / imf_dataframe_query / imf_dataframe_dropIn-conversation SQL analytics over the observation tables that imf_query_dataset stages on a DuckDB-backed canvas.
When imf_query_dataset returns staged: true, the full dataset is registered as a named table on the canvas. The workflow:
imf_query_dataset β let large results spill automatically or set output_mode: "canvas"; when staged: true, note the canvas_id and table_nameimf_dataframe_describe with the canvas_id to discover table schemaimf_dataframe_query with a SELECT statement for aggregations, cross-country comparisons, or time-series analysisimf_dataframe_drop with a name from imf_dataframe_describe to remove only that table or viewNo reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/imf-mcp-server)<a href="https://allmcps.com/mcp/imf-mcp-server"><img src="https://allmcps.com/api/badge/imf-mcp-server?style=directory" alt="Imf MCP Server on AllMCPs" /></a>