# Reported issues for ferric-fred-mcp

Pod holds 15 of 15 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 [ferric-fred-mcp](/mcp/ferric-fred-mcp).

## Most discussed

### GeoFRED output leaves FRED's raw `meta` envelope unwrapped (inconsistent with macro tools)

Found by the agent-driven MCP audit (ADR-0028, harness in #54).

## Symptom
`get_regional_data` / `get_series_data` return the values two levels deep under FRED's raw wrapper:
```json
{ "meta": { "data": { "2026-05-01": [ {code, region, series_id, value}, ... ],
            "frequency": ..., "region": ..., "seasonality": ..., "title": ..., "units": ... } } }
```
The tool description says "Returns the values keyed by date," but the macro tools cleanly unwrap FRED's envelopes (e.g. `{count, series

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/57) · 2026-07-14 · closed · 2 comments

### Uniform local validation for empty required inputs (tag_names, search text)

Found by the agent-driven MCP audit (ADR-0028, harness in #54). NIT / polish.

## Symptom
Empty required arrays/strings fall through to FRED's terser messages:
- `get_tags_series { tag_names: [] }` / `get_related_tags { tag_names: [] }` → "The variable tag_names must be set."
- `search_series { text: "" }` → "Variable search_text is not set."

Meanwhile the `realtime_*` and `start_time/end_time` pairings are caught locally with polished `-32602` messages, so the input-validation experience is un

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/60) · 2026-07-14 · closed · 1 comment

### get_release_tables silently ignores release_id when element_id belongs to another release

Found by the agent-driven MCP audit (ADR-0028, harness in #54).

## Symptom
`{ release_id: 10, element_id: 12886 }` (release 10 = CPI; element 12886 belongs to release 53 = GDP) **succeeds** and returns release **53**'s GDP subtree — the `release_id: 10` is silently ignored. A well-formed element for release 10 (`36721`) returns release-10 data, so `element_id` fully overrides `release_id`. A consumer asking for CPI gets GDP with no warning.

## Suggested fix
Either validate that the returned el

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/59) · 2026-07-14 · closed · 1 comment

### tool score: get_release

**Behavior** 3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, openWorldHint, and destructiveHint, so the safety profile is known. The description adds that the tool returns name, press-release flag, and link, which is useful but not critical. No additional behavioral traits (e.g., rate limits) are disclosed, but the tool is simple and the annotations cover most needs.

Agents need t

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/34) · 2026-07-06 · closed · 1 comment

### GeoFRED / Maps API support (regional & geographic data)

## What

FRED's **Maps API** (formerly GeoFRED) is an entirely separate surface that the client does not cover: regional/geographic economic data and the shape files to map it (`shapes`, `series-group` metadata, `series-data`, and `regional-data`). Different base URL (`https://api.stlouisfed.org/geofred/`) from the core FRED API.

## Why it's core

It unlocks a whole data class — economic indicators by state/county/MSA/country, with geometry for choropleth mapping — that the current client can't

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/7) · 2026-07-05 · closed · 1 comment

### get_release_tables: output observation_date is an undocumented display string ('Jun 2026'), asymmetric with YYYY-MM-DD inputs

Found by the agent-driven MCP audit (ADR-0028).

## Symptom
With `include_observation_values: true`, series rows carry `"observation_date": "Jun 2026"` — FRED's human display label — whereas every *input* date param (including the tool's own `observation_date`) requires `YYYY-MM-DD`. A consumer can't feed the returned date back into any date param and can't parse it deterministically, and neither the tool description nor the `outputSchema` says the field is a display string distinct from the ISO

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/80) · 2026-07-19 · closed · 0 comments

### get_regional_data: county/MSA cross-sections overflow (262k chars) with no limit or paging

Found by the agent-driven MCP audit (ADR-0028).

## Symptom
`get_regional_data` at `region_type: "county"` returns a ~3000-region cross-section — the audit saw a **262,685-character** result that blew past the token cap and spilled to a file. Unlike the paginated series/tag tools, `get_regional_data` (and the library `regional_data_request`) expose **no `limit` or offset**, and the tool description gives no size warning.

Audit input: `{series_group: "882", region_type: "county", date: "2022-01-

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/79) · 2026-07-19 · closed · 0 comments

### get_observations: MCP 'aggregation' description says 'ignored' but the handler rejects it (and CLI silently ignores)

Found by the agent-driven MCP audit (ADR-0028); confirmed against source.

## Symptom — self-contradiction on the MCP surface
The `aggregation` param description says it is *ignored* without `frequency`:
- `crates/ferric-fred-mcp/src/main.rs:99` — `` /// `frequency`. Requires `frequency`; on its own it is ignored. ``

…but the handler **hard-rejects** it:
- `crates/ferric-fred-mcp/src/main.rs:567` — returns `-32602 aggregation requires frequency (FRED only aggregates when a target frequency is g

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/78) · 2026-07-19 · closed · 0 comments

## Most recent

### Make the L2 'test the class, not the instance' stance explicit — adopt or deliberately decline proptest (ADR-0029 G2)

Follow-up **G2** surfaced by [ADR-0029](docs/adr/0029-shared-disciplines-across-the-sibling-rust-mcp-repos.md) (the cross-repo shared-disciplines index).

## Context
ADR-0029's **L2** row records ferric-fred as **PARTIAL / gap** on the shared "test the class, not the instance; pin every stated assumption" discipline (canonical owner: `rustrolabe` ADR-0107 — universals → property tests, finite enums → exhaustive iteration, type invariants → `compile_fail` doctests). Today ferric-fred uses layered

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/73) · 2026-07-16 · closed · 0 comments

### get_observations: validate/document the aggregation & frequency constraints

Found by the agent-driven MCP audit (ADR-0028, harness in #54). Two related rough edges on `get_observations`, both inconsistent with the excellent local pairing validation the server already does for `realtime_*` and `start_time/end_time`.

## (a) \`aggregation\` without \`frequency\` is a silent no-op
`{ series_id: "GNPCA", aggregation: "sum" }` returns the untransformed values with no warning. The schema says aggregation is "used together with a `frequency`." Since the server already enforces

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/58) · 2026-07-14 · closed · 0 comments

### GeoFRED tools surface a raw HTTP 500 for a bad or non-regional series id

Found by the agent-driven MCP audit (ADR-0028, harness in #54) and reproduced by hand (deterministic).

## Symptom
`get_series_data` / `get_series_group` return an opaque `FRED API error (HTTP 500): Internal Server Error` for both a nonexistent id **and** a valid-but-non-regional series:
```
get_series_group { series_id: "GNPCA" }   -> HTTP 500 Internal Server Error
get_series_data  { series_id: "NOTAREAL" } -> HTTP 500 Internal Server Error
```
`GNPCA` is a perfectly valid *macro* series — it's

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/56) · 2026-07-14 · closed · 0 comments

### get_release_tables duplicates descendants: non-root nodes appear in both `roots` and their parent's `children`

Found by the agent-driven MCP audit (ADR-0028, harness in #54) and reproduced by hand.

## Symptom
For a multi-level subtree request, `roots` contains **every** descendant flattened, while `children` is *also* populated — so non-root nodes are reachable via two paths and a consumer walking the tree double-counts series.

Repro — `get_release_tables { release_id: 53, element_id: 12886 }` yields:
```
id:12887 parent:12886 children=[12888,12889]
id:12888 parent:12887 children=[]   <- also in roots,

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/55) · 2026-07-14 · closed · 0 comments

### Slim the workspace README into a concise landing page (fix version staleness, surface Glama score)

## Problem
The workspace `README.md` (246 lines) is both **stale** and **oversized**:

- **Stale versions.** It states *"`0.3.1` of all three crates is published"* — but the crates are now `ferric-fred` 0.3.2 / `ferric-fred-cli` 0.3.2 / `ferric-fred-mcp` **0.3.3**, and they are **no longer in lockstep** (the mcp crate is ahead after the tool-annotations release). Any hardcoded version is wrong the moment a single crate bumps.
- **Oversized / duplicative.** The bulk is a ~40-line CLI example gall

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/31) · 2026-07-06 · closed · 0 comments

### Add MCP tool output schemas (feature-gated JsonSchema on library return types)

## Motivation
Glama's per-tool quality scores repeatedly note *"no output schema"* as the main completeness gap (after the annotations gap, now closed in #29). Output schemas let MCP clients/agents know the **exact shape of a tool's return value** without guessing — a genuine best practice, not just a score bump.

This is the deliberate follow-up to #29 (tool annotations).

## Background: what rmcp supports
`rmcp 2.1.0`'s `#[tool]` macro can attach an `outputSchema` two ways:
1. **Auto-derive** 

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/30) · 2026-07-06 · closed · 0 comments

### release/tables: fold in observation values (include_observation_values)

## What

`release/tables` currently ships **structure-only** — the table tree without the actual numbers. [ADR-0017](docs/adr/0017-release-tables-tree.md) explicitly deferred the observation-value dimension:

> **Scope boundary — defer observation values.** … `include_observation_values` / `observation_date` (and the per-element value fields) …

## Proposed approach

- Add `include_observation_values` (bool) and `observation_date` (date) to `ReleaseTablesRequest`.
- Extend `ReleaseTableElement` 

[Read the thread](https://github.com/agpalindrome/ferric-fred/issues/9) · 2026-07-05 · closed · 0 comments

The remaining reports are on [the project's issue tracker](https://github.com/ojhermann-org/ferric-fred/issues).
