mcpwright.

fred-mcp

Economic data, with a memory.

An MCP server for FRED® — 800,000+ U.S. and international time series — plus the part nobody else ships: ALFRED® vintage data. Ask for any series exactly as it was known on a past date, or walk a single data point through every revision it ever had. Because the numbers you remember aren't the numbers they had. Read-only, live API with a revision-aware cache, your own free key.

See it in action

One prompt in Claude Code, start to finish:

Using fred, what did Q4 2008 GDP look like to policymakers in February 2009 — and how different is the picture today?

What happened

  1. Claude called get_series_as_of("GDPC1", "2009-02-15") — real GDP exactly as known that day: Q4-2008 at $11,599.4B against Q3's $11,712.4B, a −3.8% annualized decline. Even the units are of the era — the vintage metadata says chained 2000 dollars.
  2. Then get_observations("GDPC1") for today's data: the same quarter now reads $16,485.4B vs $16,854.3B (chained 2017 dollars) — a −8.5% annualized collapse, more than twice as steep as anyone knew at the time.
  3. That's the point of the vintage lane: TARP and the stimulus were debated on −3.8%. An agent reasoning about what decision-makers knew from current data is quietly wrong — get_series_as_of makes as-published data a first-class question.

Every figure above came from the FRED API through the tools — run live, not from the model's memory.

What you can ask

Real exchanges, run live against the FRED API (answers as of June 2026 — ask again and they're current).

Was the May 2020 COVID unemployment rate ever revised?

get_revision_history("UNRATE", "2020-05-01"): first published as 13.3% on 2020-06-05, nudged to 13.2%, back to 13.3, and stands at 13.2% today — every revision with the date it was published.

What mortgage rate did the Fed see going into the March 2022 liftoff meeting?

get_series_as_of("MORTGAGE30US", "2022-03-16"): the latest print known that morning was 3.85%. get_latest today: 6.48%.

How has inflation trended over the past year?

get_observations("CPIAUCSL", transform="pct_change_yoy"): 2.4% → 3.3% → 3.8% → 4.2% over Feb–May 2026 — re-accelerating, with the transform done server-side so the model never does arithmetic on raw index levels.

What's the unemployment rate right now — and when's the next jobs report?

get_latest("UNRATE"): 4.3% (May 2026), next scheduled release 2026-07-02 — the release calendar is wired in, so "wait for the next print" is answerable too.

How often does GDP actually get revised?

get_vintage_dates("GDPC1"): 415 vintages since 1991-12-04 — roughly one a month. A "final" GDP number is a polite fiction, which is rather the theme of this server.

Tools

ToolWhat it does
search_seriesFind series IDs by free text ("unemployment rate" → UNRATE), best matches first.
get_seriesOne series' full metadata and verbatim notes (third-party copyright notices included, never stripped).
get_observationsA date window of values with server-side transforms (pct_change_yoy, …) and frequency downsampling.
get_latestThe most recent value plus the next scheduled release date. Skips the "." rows daily series publish on holidays.
compare_series2–5 series aligned on one date axis (with a guardrail: mixed native frequencies must be harmonized explicitly).
get_release_calendarUpcoming data releases — "what comes out this week?"
get_series_as_ofThe signature. A series exactly as it was known on a past date — values and metadata pinned to the vintage.
get_revision_historyThe signature, part two. One data point's life: earliest archived print → every revision (dated) → today, with the total drift.
get_vintage_datesWhen a series was released or revised; bounds what the vintage tools can see.

Current values get revised — that's not a flaw in the data, it's how statistics work — so the tool descriptions say so, and the vintage lane exists. ALFRED's archive starts late for some series (GDP's vintages begin in 1991); the tools report archive_starts honestly rather than passing off an archived value as the original print.

Install

Requires Python 3.12+, uv, and your own free FRED API key (takes seconds: request one here — keys are personal under the FRED terms).

Claude Code

claude mcp add fred -e FRED_API_KEY=your-key-here -- uvx mcpwright-fred

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "fred": {
      "command": "uvx",
      "args": ["mcpwright-fred"],
      "env": { "FRED_API_KEY": "your-key-here" }
    }
  }
}

OpenAI & other MCP clients

It's a standard stdio MCP server — so it works beyond Claude: the OpenAI Agents SDK, Cursor, VS Code, Cline, Goose, Zed, and more all launch it the same way.

{
  "mcpServers": {
    "fred": {
      "command": "uvx",
      "args": ["mcpwright-fred"],
      "env": { "FRED_API_KEY": "your-key-here" }
    }
  }
}

Live API calls with a revision-aware in-memory cache: vintage reads are immutable (what was known on a date never changes) and cache long; current data stays fresh; requests are throttled well under FRED's rate limit. Nothing is mirrored or persisted. FRED_MCP_CACHE=0 disables caching entirely.

Source, full tool reference, and roadmap → github.com/mcpwright/fred-mcp

Questions or ideas? → Discussions  ·  found a bug? → Issues

This product uses the FRED® API but is not endorsed or certified by the Federal Reserve Bank of St. Louis. Use is subject to the FRED® API Terms of Use. FRED® and ALFRED® are registered trademarks of the Federal Reserve Bank of St. Louis. Some series are owned by third parties — their notes carry the owners' terms, and the tools pass those through verbatim.