Finance Toolkit
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Description from the maker (original English)
Query IMF SDMX 3.0 macroeconomic dataflows — WEO, BOP, CPI, exchange rates, 190 countries.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
IMF_ENABLE_DATAFRAME_DROP, MCP_LOG_LEVELYou need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
https://imf.caseyjhand.com/mcpOpen Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"imf": {
"command": "npx",
"args": [
"-y",
"@cyanheads/imf-mcp-server"
],
"env": {
"IMF_ENABLE_DATAFRAME_DROP": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}Run this in your terminal
claude mcp add --transport http imf https://imf.caseyjhand.com/mcpclaude mcp add imf --env IMF_ENABLE_DATAFRAME_DROP=your-value --env MCP_LOG_LEVEL=your-value -- npx -y @cyanheads/imf-mcp-serverFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"imf": {
"url": "https://imf.caseyjhand.com/mcp"
}
}
}Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"imf": {
"command": "npx",
"args": [
"-y",
"@cyanheads/imf-mcp-server"
],
"env": {
"IMF_ENABLE_DATAFRAME_DROP": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"imf": {
"type": "http",
"url": "https://imf.caseyjhand.com/mcp"
}
}
}Paste into .vscode/mcp.json in your project
{
"servers": {
"imf": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cyanheads/imf-mcp-server"
],
"env": {
"IMF_ENABLE_DATAFRAME_DROP": "your-value",
"MCP_LOG_LEVEL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
ChatGPT connects only to servers on the internet:
https://imf.caseyjhand.com/mcpMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
IMF_ENABLE_DATAFRAME_DROP envMCP_LOG_LEVEL envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Tool names and descriptions exactly as the server reported them on Nov 7, 2026. The maker wrote them, not us; we show them as plain text.
imf_list_databasesList IMF SDMX dataflows available on the portal. Entry point for every query: imf_get_database and imf_query_dataset both require a dataflow id obtained here. Vintage (historical snapshot) dataflows such as WEO_2025_OCT_VINTAGE are excluded by default; set include_vintages=true t
imf_get_databaseFetch a dataflow's dimension list with a codelist preview for each dimension. Resolves human-readable terms to SDMX codes (e.g. "United States" → USA, "Constant prices" → NGDP_RPCH). Required before imf_query_dataset — SDMX keys are opaque without codelist lookups. Each codelist
imf_query_datasetQuery an IMF SDMX dataflow by dimension key over a time range. Returns observations with time_period, value, and status, plus the unit, scale, and decimals of each series — a key resolving to several series carries one entry per series in series_metadata, since unit and scale dif
imf_dataframe_describeList DataCanvas tables and columns staged by a prior imf_query_dataset call. Returns each table's name, row count, and column schema (name + DuckDB type). Required before imf_dataframe_query to discover the table and column names for SQL.
imf_dataframe_queryRun a read-only SQL SELECT against a DataCanvas table staged by imf_query_dataset. Supports multi-country comparisons, time-series aggregation, and cross-indicator joins. Requires imf_dataframe_describe first to discover table and column names. One SELECT statement per call; a le
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account cyanheads, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
Responded in 459 ms (HTTP 200)
No sign-in needed
Read 5 tool descriptions and found no hidden instructions to the AI
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 3 of 3 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
Either way works: install it on your computer or connect to the cloud version.
The GitHub repo last changed –, and the latest version (0.5.0) reached the registry 9 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
In the same category: Finance Toolkit, SolidInvoice, Korea Tax Calculator
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Create and send invoices and quotes, manage clients, and track payments in SolidInvoice.
Korean tax calculation and tax-audit judgment MCP: 96 tools with statutory citations.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
@cyanheads/imf-mcp-server Query IMF SDMX 3.0 macroeconomic data — 100+ dataflows across 190 countries, WEO projections, BOP, CPI, exchange rates, and national accounts via MCP. STDIO or Streamable HTTP. 6 Tools • 1 Resource • 1 Skill
Public Hosted Server: https://imf.caseyjhand.com/mcp
IMF macroeconomic data across 190 countries: World Economic Outlook projections, balance of payments, CPI, exchange rates, national accounts, and 100+ dataflows in all. Browse the catalog, resolve dimension codes, query time series, and run SQL over large multi-country results. No API key required.
| Tool | Description |
|---|---|
imf_list_databases | List IMF SDMX dataflows, with an optional word filter |
imf_get_database | Fetch a dataflow's dimensions and codelists to resolve terms to SDMX codes |
imf_query_dataset | Query a dataflow by dimension key over a time range |
imf_dataframe_describe | List DataCanvas tables and columns staged by imf_query_dataset |
imf_dataframe_query | Run a read-only SQL SELECT across staged DataCanvas tables |
imf_dataframe_drop | Remove one staged table or view; disabled by default |
| Resource | Description |
|---|---|
imf://database/{dataflow_id} | Discovery metadata for one dataflow: dimensions, codelist previews, and key_format |
| Skill | Description |
|---|---|
imf-guide | Routing a macro question to the dataflow that holds it, and reading results without mixing projections, group aggregates, or currency units. Served over MCP at skill://imf-guide/SKILL.md |
imf_list_databases toolfilter keeps dataflows whose ID, name, or description contains every word (split on spaces and commas, case-insensitive); vintage snapshots such as WEO_2025_OCT_VINTAGE are excluded unless include_vintages=truelimit (default 50) and offset; a page holds at most 200, and a larger limit (up to 1,000) echoes requested_limit/applied_limit. total_count and returned_count report the match and page sizesimf_get_database returns the full textimf_get_database toolUSA, not US) and returns key_format, the dot-separated dimension order imf_query_dataset requiresdimension_id to page one dimension with limit/offset (at most 200 per page, next_offset names the rest), and codelist_filter to keep codes whose ID or name contains every wordavailable_only=true pages only the codes the dataflow publishes, with series count and time coverage; agency_id/version are auto-detected when omittedimf_query_dataset tool+ combines codes at a position and * matches all of them; codes and dataflow_id are case-insensitive. start_period/end_period accept YYYY, YYYY-SN, YYYY-QN, YYYY-MM, or YYYY-MM-DD, and last_n_observations (1–1,000,000) keeps each series' last N observationstime_period, value, status, and series attributes (unit, scale, decimals, reference_period where published), with one series_metadata entry per series. Responses are held to 100,000 characters: with DataCanvas, larger results spill to it (output_mode: "canvas" forces staging, and staged reports storage); without it, the earliest observations return with truncated: true and retrieval_guidanceinvalid_key_code (with the nearest valid codes), wildcard_in_code_list, key_too_long, response_too_large, no_data, and no_data_in_range; a + key that partly returns lists the rest in missing_series. Upstream failures are data_unavailable and rate_limited, both retryable within a 45-second call budgetimf_dataframe_describe toolcanvas_id from an imf_query_dataset call that returned staged: true; call it before imf_dataframe_queryCANVAS_PROVIDER_TYPE=none, like the other dataframe toolsimf_dataframe_query toolSELECT per call; a leading WITH … SELECT is accepted, DML and DDL are rejectedtruncated: true means either cap trimmed the result. Page with a stable ORDER BY plus LIMIT/OFFSETstructuredContent keeps every value; response_too_large means a single row exceeds the budget even soCANVAS_PROVIDER_TYPE=noneimf_dataframe_drop toolimf_dataframe_describedropped: false rather than an errorIMF_ENABLE_DATAFRAME_DROP=true (DataCanvas must not be none) to register itimf://database/{dataflow_id} resourcekey_format, name, and descriptiondataflow_id comes from imf_list_databases; continuation metadata points to imf_get_database for codelists beyond the previewBuilt on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
IMF-specific:
Agent-friendly output:
key_format in every dataflow response states the dimension orderstatus flags (e.g. T, C, NA) for data-quality caveatsstaged and truncated are reported separately, and staged results carry canvas_id, table_name, and retrieval guidanceA public instance is available at https://imf.caseyjhand.com/mcp — no installation required. Point any MCP client at it via Streamable HTTP:
{
"mcpServers": { "imf-mcp-server": { "type": "streamable-http", "url": "https://imf.caseyjhand.com/mcp" } } }
No API key required. Add the following to your MCP client configuration file.
{
"mcpServers": { "imf-mcp-server": { "type": "stdio", "command": "bunx", "args": ["@cyanheads/imf-mcp-server@latest"], "env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" } } } }
Or with npx (no Bun required):
{
"mcpServers": { "imf-mcp-server": { "type": "stdio", "command": "npx", "args": ["-y", "@cyanheads/imf-mcp-server@latest"], "env": { "MCP_TRANSPORT_TYPE": "stdio", "MCP_LOG_LEVEL": "info" } } } }
Or with Docker:
{
"mcpServers": { "imf-mcp-server": { "type": "stdio", "command": "docker", "args": [ "run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/imf-mcp-server:latest" ] } } }
DataCanvas is on by default, so large result sets spill to tables the dataframe tools query with SQL; add CANVAS_PROVIDER_TYPE=none to the env block to turn it off. Add IMF_ENABLE_DATAFRAME_DROP=true only when agents should be able to remove staged tables.
For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
git clone https://github.com/cyanheads/imf-mcp-server.git
cd imf-mcp-server
bun install
cp .env.example .env
| Variable | Description | Default |
|---|---|---|
CANVAS_PROVIDER_TYPE | DataCanvas spill and the dataframe tools. none disables both. | duckdb |
IMF_ENABLE_DATAFRAME_DROP | Register imf_dataframe_drop. | false |
IMF_BASE_URL | IMF SDMX 3.0 base URL. | https://api.imf.org/external/sdmx/3.0 |
IMF_REQUEST_TIMEOUT_MS | Per-request timeout in milliseconds (integer, 1–2147483647). | 30000 |
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_PORT | Port for HTTP server. | 3010 |
MCP_SESSION_MODE | HTTP session handling: stateful, stateless, or auto. | stateless |
MCP_AUTH_MODE | Auth mode: none, jwt, or oauth. | none |
MCP_LOG_LEVEL | Log level (RFC 5424). | info |
OTEL_ENABLED | Enable OpenTelemetry instrumentation. | false |
See .env.example for the full list of optional overrides.
bun run rebuild
bun run start:stdio
bun run start:http
`
Only the beginning is shown; read the rest in the repo