# Reported issues for federal-reserve-mcp-server

Pod holds 16 of 23 problems reported by people outside the maintainer team. Issues filed by the project's own owners, members and collaborators are excluded entirely — a maintainer's release checklist is not a warning to a prospective user.

Back to [federal-reserve-mcp-server](/mcp/federal-reserve-mcp-server).

## Most discussed

### bug(fedreserve_get_observations): calendar-invalid dates return series_not_found

### Server version

0.2.2

### mcp-ts-core version

^0.10.9

### Runtime

Bun

### Runtime version

Bun 1.3.11 / Node v26.3.1

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

`fedreserve_get_observations` validates `observation_start` / `observation_end` with `^\d{4}-\d{2}-\d{2}$`, which only checks digit shape, not calendar validity. A date like `2024-13-01` (month 13) or `2024-02-30` (Feb 30) matches the regex, reaches FRED, and FRED's resulting 400 is classified as

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/10) · 2026-05-23 · open · 4 comments

### refactor: rename to federal-reserve-mcp-server

## Summary

Rename `fred-mcp-server` → `federal-reserve-mcp-server` across the entire project and ecosystem. "fred" reads as a person's name — zero signal about Federal Reserve Economic Data. The rename makes the server immediately identifiable.

Continue publishing the npm package under the old name (`@cyanheads/fred-mcp-server`) alongside the new one so existing installs are not broken. Everything else (repo, Docker, MCP registry) moves to the new name outright.

## Touchpoints

### GitHub

- 

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/16) · 2026-05-24 · closed · 2 comments

### bug(fred_get_release): both release_id and release_search provided — release_id wins silently

### Server version

0.1.5

### mcp-ts-core version

0.9.6

### Runtime

Bun

### Runtime version

Bun 1.3+

### Transport

HTTP

### Description

The tool description states "Provide exactly one of release_id or release_search." The handler only validates the case where neither is provided. When both are supplied, `release_id` silently wins and `release_search` is ignored — no warning, no error.

### Steps to reproduce

1. Call `fred_get_release` with `{"release_id": 10, "release_search": "emplo

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/15) · 2026-05-23 · closed · 2 comments

### bug(fred_search_series): offset > 5000 produces opaque HTTP 400 without actionable guidance

### Server version

0.1.5

### mcp-ts-core version

0.9.6

### Runtime

Bun

### Runtime version

Bun 1.3+

### Transport

HTTP

### Description

`fred_search_series` accepts `offset` as an integer with no upper-bound validation. FRED's API enforces a maximum of 5000 searchable results (offset + limit ≤ 5000). When the offset exceeds this, the service returns HTTP 400 with body `{"error_message":"Bad Request. Exceeded 5000 maximum searchable results"}`. The server surfaces this as a generic vali

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/14) · 2026-05-23 · closed · 2 comments

### bug(fred_get_series,fred_get_observations): empty string series IDs pass Zod validation

### Server version

0.1.5

### mcp-ts-core version

0.9.6

### Runtime

Bun

### Runtime version

Bun 1.3+

### Transport

HTTP

### Description

An empty string `""` is accepted as a valid series ID by both `fred_get_series` and `fred_get_observations`. It passes Zod validation (the array item type is `z.string()` with no `min(1)`), reaches FRED, and returns a confusing error message with a blank ID.

**Repro:**
1. Call `fred_get_series` with `{"series_ids": [""]}` or `{"series_ids": ""}`
2. Ob

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/13) · 2026-05-23 · closed · 2 comments

### bug(fred_get_release,fred_browse_categories): nonexistent ID returns generic 400 instead of NotFound

### Server version

0.1.5

### mcp-ts-core version

0.9.6

### Runtime

Bun

### Runtime version

Bun 1.3+

### Transport

HTTP

### Description

Calling `fred_get_release` with a nonexistent `release_id` and `fred_browse_categories` with a nonexistent `category_id` both surface a generic upstream error instead of the declared domain error.

**Repro — fred_get_release:**
1. Call `fred_get_release` with `{"release_id": 999999}`
2. Observe: `isError: true`, `code: -32602` (ValidationError), `reaso

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/12) · 2026-05-23 · closed · 2 comments

### bug(fred_get_release): no-input validation error missing recovery hint

### Server version

0.1.5

### mcp-ts-core version

0.9.6

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

HTTP

### Description

When `fred_get_release` is called with no `release_id` and no `release_search`, the handler throws `validationError('Provide either release_id or release_search.')` instead of `ctx.fail(...)`. This means the error has no `data.reason` and no `data.recovery.hint` — the `content[0].text` shows only `"Error: Provide either release_id or release_search."`

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/11) · 2026-05-23 · closed · 2 comments

### bug(fred_get_series): empty array input returns silent empty response

### Server version

0.1.5

### mcp-ts-core version

0.9.6

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

HTTP

### Description

When `series_ids: []` is passed, the handler calls `Promise.allSettled([])`, returns `{ series: [], failed: [] }`, and `format()` produces an empty string. The response `content[0].text` is `""` with no indication that the call did nothing.

### Steps to reproduce

1. Call `fred_get_series` with `{ "series_ids": [] }`
2. Observe `content[0].text` and 

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/9) · 2026-05-23 · closed · 2 comments

## Most recent

### feat(config): default MCP_SESSION_MODE to stateless across env, Docker, and src

`Dockerfile` sets `ENV MCP_SESSION_MODE="stateless"`, but `.env.example` carries a commented `# MCP_SESSION_MODE=stateful`, whose comment documents the value set as `stateful | stateless (default: stateful)`. The container and the same code run via `bunx`, `npm start`, or from source therefore resolve to different session modes — stateless in Docker, stateful everywhere else, since the framework schema defaults to `auto` and `auto` resolves to `stateful`.

Related: cyanheads/mcp-ts-core#376

## 

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/23) · 2026-08-22 · open · 0 comments

### test(enrichment): no coverage for the new totalCount enrichment on three tools

`fedreserve_search_series`, `fedreserve_get_release`, and `fedreserve_dataframe_query` each declare an `enrichment: { totalCount }` block and call `ctx.enrich.total(...)` in their handlers, but no test in `tests/tools/` asserts that the value is populated.

### Affected files

- `src/mcp-server/tools/definitions/fedreserve-search-series.tool.ts` — `ctx.enrich.total(resp.count)`
- `src/mcp-server/tools/definitions/fedreserve-get-release.tool.ts` — `ctx.enrich.total(seriesResp.count ?? 0)`
- `src/

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/22) · 2026-08-21 · open · 0 comments

### bug(fedreserve_get_observations): unbounded requests surface FRED sentinel bounds as the actual observation range

### Server version

0.2.2

### mcp-ts-core version

^0.12.3

### Runtime

Bun

### Transport

stdio

### Description

When a request omits `observation_start`/`observation_end`, the [FRED observations endpoint](https://fred.stlouisfed.org/docs/api/fred/observations.html) reports its full-table bounds as sentinels — verified live: `observation_start: "1600-01-01"`, `observation_end: "9999-12-31"` while real data spans ~1948 to present. The tool passes these through verbatim into fields described 

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/21) · 2026-08-21 · open · 0 comments

### bug(fedreserve_get_release): scheduled_dates structurally empty — release dates fetched capped at 5 ascending

### Server version

0.2.2

### mcp-ts-core version

^0.12.3

### Runtime

Bun

### Transport

stdio

### Description

`getReleaseDates()` hardcodes `limit: '5'` and sends no `sort_order` (`src/services/fred/fred-service.ts`, `/release/dates` call). The [FRED release/dates endpoint](https://fred.stlouisfed.org/docs/api/fred/release_dates.html) returns dates **ascending**, so the handler's `d >= today` filter only ever sees the 5 oldest dates on record. Any future-dated release entry is invisible 

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/20) · 2026-08-21 · open · 0 comments

### feat(fedreserve_get_observations): name the dataframe tools in the canvas spill response

When observations spill to DataCanvas, `fedreserve_get_observations` returns an opaque `df_XXXXX_XXXXX` handle in `dataset.name` and nothing in `structuredContent` says how to reach the staged rows. The only runtime pointer is emitted from `format()`, so it lands in `content[]` alone — a client that forwards only `structuredContent` receives the handle with no instruction attached. Callers that miss the pointer report the truncation and stop, or re-call the tool with a narrower date range, re-fe

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/19) · 2026-08-13 · open · 0 comments

### bug(fedreserve_search_series): incomplete filter pairs silently no-op

### Server version

0.2.2

### mcp-ts-core version

^0.10.9

### Runtime

Bun

### Runtime version

Bun 1.3.11 / Node v26.3.1

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

`fedreserve_search_series` accepts `filter_variable` and `filter_value` independently, but either one alone silently behaves like no filter was supplied. That makes typo or partial filter calls look successful while returning broader results than requested.

### Steps to reproduce

1. Call `fedre

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/18) · 2026-06-30 · open · 0 comments

### bug(fedreserve_get_observations): canvas_id input is ignored

### Server version

0.2.2

### mcp-ts-core version

^0.10.9

### Runtime

Bun

### Runtime version

Bun 1.3.11 / Node v26.3.1

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

`fedreserve_get_observations` exposes `canvas_id` as an input for reusing a prior observations canvas, but the handler never reads it. When the second request spills, the server materializes a separate dataframe; when the second request is short enough not to spill, no dataframe is updated at all

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/17) · 2026-06-30 · open · 0 comments

### bug(fred_get_observations): truncateInline starves subsequent series of preview rows when canvas is unavailable

### Server version

0.1.5

### mcp-ts-core version

0.9.6

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

HTTP

### Description

When canvas is unavailable and a multi-series request is made, `truncateInline` distributes the 20-row preview budget sequentially. The first series consumes all 20 rows; every subsequent series gets `observations: []` and `observation_count: 0`. The agent has no way to tell whether a series with count=0 had no data or was simply crowded out by the tr

[Read the thread](https://github.com/cyanheads/federal-reserve-mcp-server/issues/8) · 2026-05-23 · closed · 2 comments

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