# Reported issues for exchange-rates-mcp-server

Pod holds 8 of 8 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [exchange-rates-mcp-server](/mcp/exchange-rates-mcp-server).

## Most discussed

### feat(errors): unsupported_currency omits the 30 accepted ECB codes it just checked against

### Use case

`unsupportedCurrency()` names the rejected currency code but never the ECB's accepted set, so a caller that guesses a currency outside ECB coverage (ARS, AED, RUB, TWD, VND are ordinary requests the ECB does not publish) has to spend a second `fx_list_currencies` call before it can correct or abandon the request. The live set is small — `GET https://api.frankfurter.dev/v1/currencies` returned exactly 30 codes on 2026-09-12 (`AUD BRL CAD CHF CNY CZK DKK EUR GBP HKD HUF IDR ILS INR…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/17) · 2026-08-18 · closed · 1 comment

### bug(fx_get_timeseries): spilled response omits the dataframe-tool pointer

### Server version

0.2.1

### mcp-ts-core version

0.11.0

### Runtime

Bun

### Runtime version

1.3.14

### Transport

stdio

### Description

Related: #11

When `fx_get_timeseries` spills a long range to DataCanvas, the response returns `canvas_id` and `table_name` but no guidance naming the tools that read them. A model holding an opaque 10-character canvas ID has to already know this server registers `fx_dataframe_describe` and `fx_dataframe_query` before it can reach the staged series —…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/16) · 2026-08-13 · closed · 1 comment

### feat(fx_get_rates): surface historical date snapping

### Use case

`fx_get_rates` returns the provider's actual `rate_date`, but nothing in the response tells a caller whether a historical request landed on the date it asked for. `fx_get_rate` and `fx_convert_currency` already expose `date_snapped: boolean` plus an explicit weekend/holiday notice for exactly this. A caller building a multi-currency snapshot for a specific historical date (e.g. a month-end close) currently has to retain its own request date and diff it against `rate_date` to know…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/15) · 2026-08-11 · closed · 1 comment

### bug(fx_get_rates): mark live API access as open-world

### Server version

0.3.1 (also present at the originally-filed 0.2.1 — reconfirmed against current `main`)

### mcp-ts-core version

0.12.3 (also present at the originally-filed 0.11.0)

### Runtime

Bun

### Runtime version

N/A — this is a static tool-definition defect (the annotation value declared in `fx-get-rates.tool.ts`), not runtime- or transport-dependent. Reproduces identically under Bun or Node, any transport.

### Transport

stdio

### OS

N/A — not runtime-dependent (see Runtime…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/14) · 2026-08-11 · closed · 1 comment

### bug(fx_dataframe_query): escape Markdown table cells

### Server version

0.3.1

### mcp-ts-core version

0.12.8

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`fx_dataframe_query`'s `format()` interpolates raw cell values into a Markdown table with no escaping. A cell containing `|` splits into extra table columns; `<...>` is interpreted as HTML by Markdown renderers; `*`, `_`, `[...]`/`(...)`, and literal newlines are interpreted as Markdown emphasis, links, and row breaks instead of…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/13) · 2026-08-11 · closed · 1 comment

### bug(fx_dataframe_query): bound immediate query results

### Server version

0.3.1

### mcp-ts-core version

0.12.8

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`fx_dataframe_query`'s `format()` independently slices `content` to the first 50 rows while `structuredContent.rows` carries every row DataCanvas's `query()` returns (up to its 10,000-row default cap). The two response surfaces diverge as soon as a result exceeds 50 rows — far below the DataCanvas cap — and nothing bounds…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/12) · 2026-08-11 · closed · 1 comment

### bug(fx_get_timeseries): bound inline ranges and provide pagination

### Server version

0.2.1

### mcp-ts-core version

0.11.0

### Runtime

Bun

### Runtime version

1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

When DataCanvas is disabled (`CANVAS_PROVIDER_TYPE` unset), `fx_get_timeseries` returns the entire requested range inline in `structuredContent` regardless of size. There is no `limit`/`offset`/cursor input and no truncation signal on this path, so a wide date range can return a multi-hundred-KB payload with no way for the caller to…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/11) · 2026-08-11 · closed · 1 comment

### bug(fx_get_rates): empty symbols returns an unfiltered snapshot

### Server version

0.2.1

### mcp-ts-core version

0.11.0

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### Description

An explicit empty `symbols` array is accepted and silently treated as though the filter were omitted. A caller that constructs an empty selection receives every available quote instead of a validation error.

### Steps to reproduce

Call `fx_get_rates` with:

```json
{
  "base_currency": "USD",
  "symbols": []
}
```

### Actual…

[Read the thread](https://github.com/cyanheads/exchange-rates-mcp-server/issues/10) · 2026-08-11 · closed · 1 comment

## Most recent

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/exchange-rates-mcp-server/issues).
