fred-mcp

fred-mcp

Enables querying and retrieving Federal Reserve Economic Data (FRED) including series, categories, releases, sources, and tags, with support for stdio and HTTP transports and bring-your-own-key authentication.

Category
Visit Server

README

Federal Reserve Economic Data MCP Server

[!NOTE] This open-source project is not affiliated with, sponsored by, or endorsed by the Federal Reserve or the Federal Reserve Bank of St. Louis. "FRED" is a registered trademark of the Federal Reserve Bank of St. Louis, used here for descriptive purposes only.

A production-grade Model Context Protocol server for FRED® economic data. Covers all 31 endpoints exposed by fred-py-api.

Features

  • Full FRED API v1 coverage: series, categories, releases, sources, and tags
  • FastMCP 3.x with structured tool output and proper ToolError handling
  • Dual-mode credentials: environment variable (stdio) or per-client HTTP header (remote BYOK)
  • Transports: stdio, streamable-http, and sse
  • Docker image published to GHCR

Installation

pip install fred-mcp

Requires Python 3.10+.

Get a free FRED API key at fredaccount.stlouisfed.org/apikey.

Setup

Remote hosted server (recommended)

Use the public hosted server with bring your own key (BYOK): no install and no shared server-side API key. Each client sends its own FRED API key in the X-FRED-API-Key header.

Transport: streamable HTTP. Endpoint: https://fred-mcp-prod.fly.dev/mcp.

Add this to your MCP client's configuration file and restart the client:

{
  "mcpServers": {
    "fred-mcp": {
      "url": "https://fred-mcp-prod.fly.dev/mcp",
      "headers": {
        "X-FRED-API-Key": "<your fred api key>"
      }
    }
  }
}

Programmatic example with the FastMCP client:

from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

transport = StreamableHttpTransport(
    "https://fred-mcp-prod.fly.dev/mcp",
    headers={"X-FRED-API-Key": "your_fred_api_key"},
)
async with Client(transport=transport) as client:
    await client.ping()

Local (stdio)

For clients that spawn a local process, install fred-mcp and use:

{
  "mcpServers": {
    "fred-mcp": {
      "command": "fred-mcp",
      "env": {
        "FRED_API_KEY": "<your fred api key>"
      }
    }
  }
}

Or run directly from the terminal:

export FRED_API_KEY=your_api_key
fred-mcp

Self-hosted HTTP

Deploy your own instance and use the same url + headers configuration, substituting your host for the endpoint above. No shared server-side key is required when clients send X-FRED-API-Key.

For public internet deployment, terminate TLS at a reverse proxy (nginx, Caddy, Cloudflare). Do not expose plain HTTP with API keys.

Docker

Run the server:

docker run -d -p 8000:8000 \
  --name fred-mcp-server \
  ghcr.io/zachspar/fred-mcp/fred-mcp-server:latest

Connect with your FRED API key in the X-FRED-API-Key header (same JSON shape as the remote hosted example, with url set to your deployment).

For stdio via Docker:

{
  "mcpServers": {
    "fred-mcp": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "MCP_SERVER_TRANSPORT=stdio",
        "-e", "FRED_API_KEY=<your fred api key>",
        "ghcr.io/zachspar/fred-mcp/fred-mcp-server:latest"
      ]
    }
  }
}

Optional server-side fallback key

Set FRED_API_KEY on the server for clients that cannot send custom headers. Header takes precedence when both are present.

Variable Default Description
FRED_API_KEY FRED API key (required for stdio; optional HTTP fallback)
FRED_API_KEY_HEADER X-FRED-API-Key HTTP header name for BYOK
MCP_SERVER_TRANSPORT stdio stdio, streamable-http, or sse
MCP_SERVER_HOST localhost Bind host for HTTP transports
MCP_SERVER_PORT 8000 Bind port for HTTP transports

Tools (31)

Series

Tool Description
get_series Series metadata
get_series_categories Categories for a series
get_series_observations Data values / observations
get_series_release Release that publishes a series
search_series Search series by text or ID
search_series_tags Tags for a series search
search_series_related_tags Related tags for a series search
get_series_tags Tags on a series
get_series_updates Recently updated series
get_series_vintage_dates Vintage / revision dates

Categories

Tool Description
get_category Category metadata
get_category_children Child categories
get_category_related Related categories
get_category_series Series in a category
get_category_tags Tags in a category
get_category_related_tags Related tags in a category

Releases

Tool Description
list_releases All releases
list_release_dates Release dates across releases
get_release Release metadata
get_release_dates Dates for one release
get_release_series Series in a release
get_release_sources Sources for a release
get_release_tags Tags for a release
get_release_related_tags Related tags for a release
get_release_tables Release tables

Sources

Tool Description
list_sources All data sources
get_source Source metadata
get_source_releases Releases from a source

Tags

Tool Description
list_tags Search / list tags
get_related_tags Related tags
get_tags_series Series matching tags

Migration from 0.x

Version 1.0.0 renames tools to snake_case and upgrades to FastMCP 3.x.

Old name (0.x) New name (1.0)
FREDSeries get_series
FREDSeriesCategories get_series_categories
FREDSeriesObservations get_series_observations
FREDSeriesRelease get_series_release
FREDSeriesSearch search_series
FREDSeriesSearchTags search_series_tags
FREDSeriesSearchRelatedTags search_series_related_tags
FREDSeriesTags get_series_tags
FREDSeriesUpdates get_series_updates
FREDSeriesVintageDates get_series_vintage_dates

21 additional tools were added for categories, releases, sources, and tags.

Error responses now use MCP ToolError (isError: true) instead of {"error": ...} payloads.

Development

python3.13 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest
ruff check src tests

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured