Skip to content

Releases: cyanheads/imf-mcp-server

v0.2.4: imf_query_dataset period validation

Choose a tag to compare

@cyanheads cyanheads released this 11 Jul 17:44
v0.2.4
be537bd

imf_query_dataset period validation

Reject malformed/reversed start_period and end_period before the upstream IMF call.

Fixed:

  • imf_query_dataset rejects malformed start_period/end_period and reversed ranges as ValidationError (invalid_period_format, invalid_period_range) before calling IMF (#11)
  • docs/design.md: key_dimension_mismatch and invalid_sql corrected from InvalidParams to ValidationError, matching source (#14)

83 tests pass; bun run devcheck clean.

CHANGELOG v0.2.4

v0.2.3: mcp-ts-core 0.10.14, shared-DSD codelist + identity fixes, stale-count sweep

Choose a tag to compare

@cyanheads cyanheads released this 11 Jul 17:02
v0.2.3
265ed7d

mcp-ts-core 0.10.14, shared-DSD codelist + identity fixes, stale-count sweep

Adopts @cyanheads/mcp-ts-core ^0.10.14 with a bun install supply-chain guard; fixes imf_get_database codelist resolution and dataflow identity for shared IMF DSDs.

Added:

  • dsd_version / structure_ref optional output fields on imf_get_database and the imf://database/{dataflow_id} resource (#12)

Fixed:

  • Codelist resolution for _PUB-suffixed and shared IMF DSDs — DSD resolved via the structure URN on the dataflow itself, not a DSD_<flow> guess; a 204 response is now a definitive miss instead of exhausting the retry budget (#10)
  • Dataflow identity (name/version/agencyId) no longer overwritten by shared DSD metadata (#12)

Changed:

  • Dropped the stale hardcoded 193 dataflow count from the tool description and package/plugin metadata (#13)

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.10.9 → ^0.10.14
  • js-yaml 3.14.2 → 3.15.0 (transitive; clears GHSA-h67p-54hq-rp68)

79 tests pass; bun run devcheck clean.

CHANGELOG v0.2.3

v0.2.2: mcp-ts-core ^0.10.9 adoption

Choose a tag to compare

@cyanheads cyanheads released this 20 Jun 11:50
v0.2.2
f2da255

mcp-ts-core ^0.10.9 adoption

Framework maintenance pass — adopts the 0.10.7–0.10.9 delta, re-syncs agent skills and devcheck scripts.

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.10.6 → ^0.10.9
  • @duckdb/node-api ^1.5.3-r.3 → ^1.5.4-r.1
  • @types/node ^25.9.3 → ^26.0.0
  • vitest ^4.1.8 → ^4.1.9

Changed:

  • DuckdbProvider.describe({ tableName }) binder-error fix — filtered describe() no longer raises an ambiguous-column Binder Error on canvas table-list queries
  • Canvas SQL gate classifies SELECT-shaped prepare failures as invalid_sql with DuckDB binder detail, not non_select_statement
  • ctx.content collector for image/audio blocks added to the framework Context

Added:

  • check-dependency-specifiers devcheck step — fails on floating specifiers in package.json + bun.lock workspaces
  • Plugin-manifest packaging checks via devcheck.config.json packaging.pluginManifests

69 tests pass; bun run devcheck clean.

v0.2.1: mcp-ts-core ^0.10.6 adoption, MCPB bundle cleaner

Choose a tag to compare

@cyanheads cyanheads released this 13 Jun 03:46
v0.2.1
a883116

mcp-ts-core ^0.10.6 adoption, MCPB bundle cleaner

Adopts framework 0.10.x APIs and adds packaging guards so the .mcpb bundle
ships no dependency agent docs.

Added:

  • scripts/clean-mcpb.ts — post-pack cleaner strips node_modules/** agent docs (skills/, .claude/, .agents/, SKILL.md) the .mcpbignore patterns cannot reach
  • lint-packaging bundle-content and identity guards
  • check-framework-antipatterns rule flagging z.coerce.boolean() on env flags

Changed:

  • imf_list_databases notice moved to the enrichment block (ctx.enrich.notice())
  • imf_dataframe_query / imf_query_dataset: invalid_sql and key_dimension_mismatch now ValidationError
  • imf_dataframe_query canvas query sets denySystemCatalogs: true
  • createApp() name/title set to imf-mcp-server
  • Dockerfile: APP_VERSION OCI label, .cache canvas dir, /healthz HEALTHCHECK
  • plugin npx args use the scoped name @cyanheads/imf-mcp-server

Dependency bumps:

  • @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
  • @biomejs/biome ^2.4.16 → ^2.5.0

69 tests pass; bun run devcheck clean.

v0.2.0: codelist_filter, server-side period filtering, null-padding removal, availability enrichment

Choose a tag to compare

@cyanheads cyanheads released this 10 Jun 22:34
v0.2.0
a137fa7

codelist_filter, server-side period filtering, null-padding removal, availability enrichment

Five issues addressed across imf_query_dataset and imf_get_database — makes period ranges, data coverage, and codelist discovery work as documented.

Added:

  • imf_get_database codelist_filter: case-insensitive substring over code ID and name; returns all matches uncapped — bypasses the 50-entry ceiling for large codelists like WEO INDICATOR (#8)
  • imf_query_dataset availability enrichment: on empty result, queries SDMX 2.1 availableconstraint before throwing no_data; series_count=0 states the code is not covered; series_count>0 reports per-dimension available codes and time range; degrades gracefully on fetch failure (#5)

Changed:

  • imf_query_dataset period filtering: start_period/end_period now filter server-side post-fetch, before canvas spill; handles upstream YYYY-MNN monthly format vs YYYY-MM input via normalizePeriod (#6)
  • imf_query_dataset null-padding removal: observations with both value=null and status=null dropped; rows with non-null status kept; all-null result falls through to no_data (#7)
  • imf_list_databases filter description: corrected from 'name or ID' to 'name, ID, or description' — behavior was already correct (#9)
  • imf_dataframe_describe / imf_dataframe_query canvas_not_found recovery: removed CANVAS_PROVIDER_TYPE env-var hint; recovery now reads 'Re-run imf_query_dataset to obtain a fresh canvas_id' (#9)
  • @types/node ^25.9.2 -> ^25.9.3

70 tests pass; bun run devcheck clean.

v0.1.4: Three tool fixes

Choose a tag to compare

@cyanheads cyanheads released this 07 Jun 06:32
v0.1.4
7224887

Three tool fixes

Fixed:

  • imf_dataframe_query: SQL validation (invalid_sql) now fires before the canvas-existence check; DML/DDL rejected regardless of CANVAS_PROVIDER_TYPE (#2)
  • imf_query_dataset: Scale "0" (IMF SDMX no-op sentinel for absent scale) suppressed from format() Series line; real unit/scale/decimals unaffected (#3)
  • imf_list_databases: When a substring filter matches nothing, notice field is now populated in structuredContent and rendered as a blockquote in content[] — previously silent empty result (#4)

50 tests pass; bun run devcheck clean.

v0.1.3: Public hosted endpoint

Choose a tag to compare

@cyanheads cyanheads released this 06 Jun 22:10
v0.1.3
b1013c7

Public hosted endpoint

Adds the public hosted instance at https://imf.caseyjhand.com/mcp.

Added:

  • server.json remotes array with streamable-http entry for MCP Registry discovery
  • README centered hosted-server link block
  • README "Public Hosted Instance" section with Streamable HTTP client config

Changed:

  • @types/node ^25.9.1 → ^25.9.2

bun run devcheck clean; build succeeds.

v0.1.2: IMF source attribution in data-returning tool output

Choose a tag to compare

@cyanheads cyanheads released this 05 Jun 15:40
v0.1.2
1ea5eb8

IMF source attribution in data-returning tool output

Both imf_query_dataset and imf_get_database now carry a source field
in structuredContent and format() output per IMF data terms.

Added:

  • source field in imf_query_dataset output (inline and canvas-spill paths) with attribution string: "Source: International Monetary Fund, , https://data.imf.org/" (#1)
  • source field in imf_get_database output with same attribution format (#1)
  • Data source section in README documenting attribution requirement

42 tests pass; bun run devcheck clean.

v0.1.1: Initial public release — IMF SDMX 3.0, DataCanvas SQL, security hardening

Choose a tag to compare

@cyanheads cyanheads released this 05 Jun 12:25
v0.1.1
ee02b0a

Initial public release — IMF SDMX 3.0, DataCanvas SQL, security hardening

First public release of @cyanheads/imf-mcp-server. Wraps the IMF SDMX 3.0 API (keyless) with 5 tools and 1 resource for querying 193 macroeconomic dataflows across 190 countries, with DuckDB-backed DataCanvas for SQL analytics over large result sets.

Added:

  • imf_list_databases — browse/filter 193 IMF SDMX dataflows
  • imf_get_database — fetch full DSD (dimensions + codelists) for any dataflow
  • imf_query_dataset — query by dimension key + time range; spills to DataCanvas when large
  • imf_dataframe_describe, imf_dataframe_query — SQL analytics over staged canvas tables
  • imf://database/{dataflow_id} resource — full dataflow metadata as JSON
  • DataCanvas support (CANVAS_PROVIDER_TYPE=duckdb) for multi-country SQL comparisons

Security:

  • Error messages in structure-fetch failures now expose only the dataflow ID, not the upstream API URL path

42 tests pass; bun run devcheck clean.