
Exchange Rates Mcp Server
Wraps the ECB's exchange rate data via the Frankfurter API with seven tools covering currency lookup, spot rates, historical conversions, and time series queries. You get point-in-time FX rates back to 1999, automatic cross-rate triangulation through EUR, and weekend/holiday date snapping with clear flags when the API returns a prior business day. Long time series (over 90 days) spill into a DuckDB-backed DataCanvas workspace where you can run SQL aggregations and window functions. Built on mcp-ts-core, runs over stdio or streamable HTTP, and needs no API keys. Useful when you need reliable historical currency data or want to analyze multi-year exchange rate trends without managing your own dataset.
- GitHub stars
- 1
- tools
- 7
- transport
- STDIO, HTTP
- env vars
- 9
- last updated
- Nov 3, 2026
Install
From registry metadata$ npx add-mcp https://exchange-rates.caseyjhand.com/mcp --name exchange-ratesRun in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.
Review the command, arguments and environment values before installing. MCP servers run with your local permissions.
Other ways
Claude Code
$ claude mcp add --transport http exchange-rates https://exchange-rates.caseyjhand.com/mcpRun in your terminal. Add --scope user to make it available in every project.
Tools
Verified live · 7 toolsVerified live against the running server on Nov 6, 2026.
fx_list_currenciesList current Frankfurter v1 currency codes and names with as_of, the latest served rate date. include_retired=true adds historical codes absent from the current set. Optional official ECB start_date/end_date are outer coverage bounds, not uninterrupted availability; a dated en...1 params
List current Frankfurter v1 currency codes and names with as_of, the latest served rate date. include_retired=true adds historical codes absent from the current set. Optional official ECB start_date/end_date are outer coverage bounds, not uninterrupted availability; a dated en...
include_retiredbooleanfx_get_ratesGet all available exchange rates for one base currency in a single snapshot. Useful for bulk comparison and seeding downstream tools. Returns a map of quote currency → rate, the actual snapshot date, and whether a historical date was snapped from a weekend/holiday to the prior...3 params
Get all available exchange rates for one base currency in a single snapshot. Useful for bulk comparison and seeding downstream tools. Returns a map of quote currency → rate, the actual snapshot date, and whether a historical date was snapped from a weekend/holiday to the prior...
base_currency*stringdatestringsymbolsarrayfx_get_rateGet the exchange rate for a currency pair on a given date (default: latest). Returns the rate, the actual rate date (which may differ from the requested date on weekends/holidays — daily observations may skip non-publication days), and source provenance. Cross-rates are triang...3 params
Get the exchange rate for a currency pair on a given date (default: latest). Returns the rate, the actual rate date (which may differ from the requested date on weekends/holidays — daily observations may skip non-publication days), and source provenance. Cross-rates are triang...
base_currency*stringdatestringquote_currency*stringfx_convert_currencyConvert an amount between any two currencies at the latest or a historical rate. Returns the converted amount, the rate used, the actual rate date, and whether the date was snapped from a weekend/holiday to the prior business day. Cross-rates are triangulated through EUR autom...4 params
Convert an amount between any two currencies at the latest or a historical rate. Returns the converted amount, the rate used, the actual rate date, and whether the date was snapped from a weekend/holiday to the prior business day. Cross-rates are triangulated through EUR autom...
amount*numberbase_currency*stringdatestringquote_currency*stringfx_get_timeseriesGet historical daily Frankfurter v1 rates over an inclusive date range. Same-date EUR legs are divided without intermediate rounding; only days with both currencies appear, including observed self-pairs at 1 and historical retired currencies. Missing-leg served days produce co...6 params
Get historical daily Frankfurter v1 rates over an inclusive date range. Same-date EUR legs are divided without intermediate rounding; only days with both currencies appear, including observed self-pairs at 1 and historical retired currencies. Missing-leg served days produce co...
base_currency*stringcanvas_idstringend_date*stringlimitintegerquote_currency*stringstart_date*stringfx_dataframe_describeList tables and columns staged on a DataCanvas from a prior fx_get_timeseries call. Required first step before fx_dataframe_query — use it to discover table names and column schemas. Requires DataCanvas, which is on by default — a deployment that turns it off does not list thi...1 params
List tables and columns staged on a DataCanvas from a prior fx_get_timeseries call. Required first step before fx_dataframe_query — use it to discover table names and column schemas. Requires DataCanvas, which is on by default — a deployment that turns it off does not list thi...
canvas_id*stringfx_dataframe_queryRun a read-only SQL SELECT against DataCanvas tables staged by fx_get_timeseries. Supports aggregations, GROUP BY, window functions, and JOINs across multiple registered tables. Run fx_dataframe_describe first to discover table names and column schemas. Requires DataCanvas, wh...3 params
Run a read-only SQL SELECT against DataCanvas tables staged by fx_get_timeseries. Supports aggregations, GROUP BY, window functions, and JOINs across multiple registered tables. Run fx_dataframe_describe first to discover table names and column schemas. Requires DataCanvas, wh...
canvas_id*stringquery*stringrow_limitintegerSponsors
Configuration
FRANKFURTER_BASE_URLdefault: https://api.frankfurter.dev/v1Frankfurter API base URL. Override for local testing or self-hosted instances.
FX_TIMESERIES_CANVAS_THRESHOLD_DAYSdefault: 90Day range above which fx_get_timeseries considers automatic DataCanvas staging for SQL analytics. Without canvas_id, series that fit the preview remain inline. DataCanvas is on by default; CANVAS_PROVIDER_TYPE=none returns ranges inline when canvas_id is omitted and rejects expli
FX_ENABLE_CANVAS_DROPdefault: falseEnable fx_dataframe_drop, which permanently removes one staged table or view from a DataCanvas. Disabled by default; the tool is not registered (absent from tools/list) until set to true.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_TRANSPORT_TYPEdefault: httpSelects the HTTP transport.
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.
Readme
@cyanheads/exchange-rates-mcp-server
Convert currencies, get FX rates, and query historical Frankfurter v1 exchange rate data via MCP. STDIO or Streamable HTTP.
Details
- Repository
- github.com/cyanheads/exchange-rates-mcp-server
- Category
- Data & Analytics
- Package
@cyanheads/exchange-rates-mcp-server- Transport
- STDIO, HTTP
- Registry
- MCP registry, active
- Resources
- 6
- Tools verified
- Nov 6, 2026
More from cyanheads
- Fcc Broadband Mcp Server1
- Nist Nvd Mcp Server1
- Pokeapi Mcp Server1
- Reference Data Mcp Server1
- Usda Mcp Server1
- Epa Mcp Server2
- Osv Advisory Mcp Server2
- Gbif Biodiversity Mcp Server1
- Pentest Mcp Server1
- Workflows Mcp Server32
- Noaa Cdo Mcp Server5
- Ntfy Mcp Server25
- Macos Mcp Server4
- Clipboard Mcp Server3
- Guardian Mcp Server2
- Mailchimp Mcp Server2
- Sports Mcp Server2
- Whois Mcp Server2
- Federal Reserve Mcp Server1
- Shift Mcp Server1
- Anime Mcp Server2
- Survey Mcp Server4
- Mcp Ts Template145
- nist-nvd-mcp-server