Releases: cyanheads/exchange-rates-mcp-server
Release list
v0.1.5: mcp-ts-core ^0.10.9 adoption
mcp-ts-core ^0.10.9 adoption
Framework maintenance pass picking up DataCanvas and packaging fixes.
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@biomejs/biome^2.4.16 → ^2.5.0@types/node^25.9.3 → ^26.0.0vitest^4.1.8 → ^4.1.9
Added:
check-dependency-specifiersdevcheck step — rejects floating specifiers (latest,*, dist-tags) in package.json and bun.lock workspaces (cyanheads/mcp-ts-core#246)- Plugin-manifest packaging checks via
packaging.pluginManifests— validates plugin.json identity and install args (cyanheads/mcp-ts-core#240)
Changed:
fx_dataframe_describe/fx_dataframe_querypick up framework DataCanvas fixes: describe() filter-qualification binder error resolved; SELECT-shaped prepare failures now classify as invalid_sql with DuckDB binder detail (cyanheads/mcp-ts-core#235, #236)- 14 vendored skills + 5 devcheck scripts re-synced; outbound User-Agent string synced
45 tests pass; bun run devcheck clean.
v0.1.4: mcp-ts-core ^0.10.6 adoption, ValidationError classification
mcp-ts-core ^0.10.6 adoption, ValidationError classification
Adopts @cyanheads/mcp-ts-core ^0.10.6 and tracks its error model.
Added:
- fx_dataframe_query: truncated output field; format() flags a capped result set (N+ (capped))
- scripts/clean-mcpb.ts: strips dependency-shipped agent docs from the MCPB bundle (node_modules-nested skills/.claude/.agents/SKILL.md)
- Dockerfile: bun-native HEALTHCHECK and APP_VERSION-fed OCI version label
Changed:
- Input-validation failures now classify as ValidationError (-32007) instead of InvalidParams (-32602), across all FX tools, fx_dataframe_query, and fx://rates/latest/{base}
- createApp name/title and .codex-plugin displayName pinned to the unscoped exchange-rates-mcp-server
- lint-packaging.ts: bundle-content + identity guards; check-framework-antipatterns.ts: z.coerce.boolean() env-flag rule
- Anchored .mcpbignore dev-dir patterns; resynced vendored skills, added the techniques skill
Dependencies:
- @cyanheads/mcp-ts-core ^0.9.21 → ^0.10.6
- @types/node ^25.9.2 → ^25.9.3
45 tests pass; bun run devcheck clean.
v0.1.3: InvalidParams for unsupported currency, description phrasing fixes
InvalidParams for unsupported currency, description phrasing fixes
Two patch fixes to error handling and definition language.
Fixed:
fx://rates/latest/{base}— unsupported currency now returns InvalidParams (-32602) instead of InternalError (-32603) (#1)fx_convert_currencydescription — removed trailing audience-coaching sentence (#2)fx://currenciesdescription — removed "Injectable context" audience-coaching sentence (#2)
43 tests pass; bun run devcheck clean.
v0.1.2: Public hosted endpoint
Public hosted endpoint
Registers the public hosted instance at exchange-rates.caseyjhand.com/mcp in the MCP Registry and README.
Added:
- Public hosted endpoint in server.json remotes (type: streamable-http)
- README: centered hosted server link + Public Hosted Instance Getting Started subsection
Changed:
@types/node^25.9.1 → ^25.9.2@cyanheads/mcp-ts-coreheld at ^0.9.21 (allowlisted in devcheck.config.json)
bun run devcheck clean; bun run rebuild succeeded.
v0.1.1: Initial public release
Initial public release
ECB reference FX rates and currency conversion via the Frankfurter API (keyless, ~30 currencies, 1999-01-04 to present).
Added:
- 7 tools: fx_list_currencies, fx_get_rates, fx_get_rate, fx_convert_currency, fx_get_timeseries, fx_dataframe_describe, fx_dataframe_query
- 2 resources: fx://rates/latest/{base}, fx://currencies
- DataCanvas support — fx_get_timeseries spills long ranges (>90 days) to DuckDB for SQL analytics
Security:
- Input injection hardening: assertCurrencyFormat() + assertDateFormat() guards on all service inputs
- URL parameter encoding via URLSearchParams and encodeURIComponent() throughout FrankfurterService
43 tests pass; bun run devcheck clean.