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
- 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. - 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. - 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_ofmakes 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
| Tool | What it does |
|---|---|
search_series | Find series IDs by free text ("unemployment rate" → UNRATE), best matches first. |
get_series | One series' full metadata and verbatim notes (third-party copyright notices included, never stripped). |
get_observations | A date window of values with server-side transforms (pct_change_yoy, …) and frequency downsampling. |
get_latest | The most recent value plus the next scheduled release date. Skips the "." rows daily series publish on holidays. |
compare_series | 2–5 series aligned on one date axis (with a guardrail: mixed native frequencies must be harmonized explicitly). |
get_release_calendar | Upcoming data releases — "what comes out this week?" |
get_series_as_of | The signature. A series exactly as it was known on a past date — values and metadata pinned to the vintage. |
get_revision_history | The signature, part two. One data point's life: earliest archived print → every revision (dated) → today, with the total drift. |
get_vintage_dates | When 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.