Hooks Claude into the St. Louis Federal Reserve's FRED database with 800,000+ economic time series. Search across series titles and tags, fetch metadata and observations with date filtering, browse the category tree, and inspect releases. Handles multi-series requests in parallel and spills large result sets to DataCanvas tables you can query with SQL. Supports FRED's native unit transformations like percent change and log scale, plus frequency downsampling. Useful when you need GDP figures, unemployment rates, inflation data, or any other Fed-tracked economic indicator without leaving your MCP client. Requires a free FRED API key.
Search and fetch ~800K Federal Reserve economic time-series from the FRED API via MCP. STDIO or Streamable HTTP.
Five FRED tools plus three DataCanvas tools for querying spilled observation results via SQL:
| Tool | Description |
|---|---|
fedreserve_search_series | Full-text search across FRED series titles, units, frequency, and tags — returns matching series IDs with metadata |
fedreserve_get_series | Fetch metadata for one or more series (title, units, frequency, seasonal adjustment, observation range) |
fedreserve_get_observations | Fetch date+value observation data for one or more series with date-range filtering and unit transformations |
fedreserve_browse_categories | Navigate the FRED category tree; drill into a category to see child categories and a series sample |
fedreserve_get_release | Look up a FRED release by ID or name search — returns release metadata and its associated series list |
fedreserve_dataframe_describe | List active DataCanvas dataframes registered by this server (canvas IDs, row counts, schemas) |
fedreserve_dataframe_query | Run a SELECT query against a registered DataCanvas dataframe |
fedreserve_dataframe_drop | Drop a DataCanvas dataframe by name (opt-in via FRED_DATAFRAME_DROP_ENABLED=true) |
fedreserve_search_seriesSearch for FRED series by free-text query across titles, tags, and notes.
limit and offsetfedreserve_get_release insteadfedreserve_get_seriesFetch metadata for one or more FRED series.
fedreserve_get_observationsFetch observation data (date + value pairs) for one or more series.
observation_start, observation_end)lin, chg, ch1, pch, pc1, pca, cch, cca, logavg, sum, eop)dataset.name handle for SQL querying via fedreserve_dataframe_queryfedreserve_browse_categoriesNavigate the FRED category hierarchy.
category_id to start at the root (ID 0)category_id to see child categories and a series sample for leaf categoriesfedreserve_get_releaseInspect a FRED data release and its associated series.
release_id (integer) or release_search (case-insensitive substring match)series_limit and series_offset to page through large releasesBuilt on @cyanheads/mcp-ts-core:
none, jwt, oauth)in-memory, filesystem, Supabase, Cloudflare KV/R2/D1FRED-specific:
api.stlouisfed.org/fred)Promise.allSettled with partial success reportingfedreserve_dataframe_queryAdd the following to your MCP client configuration file. Obtain a free FRED API key at research.stlouisfed.org/docs/api/api_key.html.
{
"mcpServers": {
"federal-reserve-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/federal-reserve-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"FRED_API_KEY": "your-api-key"
}
}
}
}
Or with npx (no Bun required):
{
"mcpServers": {
"federal-reserve-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/federal-reserve-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info",
"FRED_API_KEY": "your-api-key"
}
}
}
}
Or with Docker:
{
"mcpServers": {
"federal-reserve-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"-e", "FRED_API_KEY=your-api-key",
"ghcr.io/cyanheads/federal-reserve-mcp-server:latest"
]
}
}
}
For Streamable HTTP, set the transport and start the server:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 FRED_API_KEY=... bun run start:http
# Server listens at http://localhost:3010/mcp
git clone https://github.com/cyanheads/federal-reserve-mcp-server.git
cd federal-reserve-mcp-server
bun install
cp .env.example .env
# edit .env and set FRED_API_KEY
All configuration is validated at startup via Zod schemas in src/config/server-config.ts.
| Variable | Description | Default |
|---|---|---|
FRED_API_KEY | Required. API key from stlouisfed.org. | — |
FRED_BASE_URL | Override the FRED API base URL. | https://api.stlouisfed.org/fred |
FRED_DATASET_TTL_SECONDS | Sliding TTL for DataCanvas-registered observation tables (seconds). | 86400 |
FRED_DATAFRAME_DROP_ENABLED | Set true to expose the fedreserve_dataframe_drop tool. | false |
CANVAS_PROVIDER_TYPE | Set to duckdb to enable DataCanvas SQL querying for observation results. | — |
MCP_TRANSPORT_TYPE | Transport: stdio or http. | stdio |
MCP_HTTP_PORT | Port for HTTP server. | 3010 |
MCP_AUTH_MODE | Auth mode: none, jwt, or oauth. | none |
MCP_LOG_LEVEL | Log level (RFC 5424). | info |
LOGS_DIR | Directory for log files (Node.js only). | <project-root>/logs |
STORAGE_PROVIDER_TYPE | Storage backend. | in-memory |
OTEL_ENABLED | Enable OpenTelemetry instrumentation. | false |
See .env.example for the full list of optional overrides.
Build and run:
# One-time build
bun run rebuild
# Run the built server
bun run start:stdio
# or
bun run start:http
Run checks and tests:
bun run devcheck # Lint, format, typecheck, security
bun run test # Vitest test suite
bun run lint:mcp # Validate MCP definitions against spec
docker build -t federal-reserve-mcp-server .
docker run --rm -e FRED_API_KEY=your-key -e MCP_TRANSPORT_TYPE=http -p 3010:3010 federal-reserve-mcp-server
The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/federal-reserve-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.
| Directory | Purpose |
|---|---|
src/index.ts | createApp() entry point — registers tools and inits services. |
src/config | Server-specific environment variable parsing and validation with Zod. |
src/mcp-server/tools | Tool definitions (*.tool.ts). Eight tools across FRED domain and DataCanvas. |
src/services/fred | FRED API service — HTTP client, retry, 429 handling, key injection. |
src/services/canvas-bridge | DataCanvas adapter — table naming, TTL/provenance tracking, SQL gate extras. |
tests/ | Unit and integration tests mirroring src/. |
docs/ | Design and planning documents. |
See CLAUDE.md for development guidelines and architectural rules. The short version:
try/catch in tool logicctx.log for request-scoped logging, ctx.state for tenant-scoped storagesrc/mcp-server/tools/definitions/index.tsIssues and pull requests are welcome. Run checks and tests before submitting:
bun run devcheck
bun run test
Apache-2.0 — see LICENSE for details.
FRED_API_KEY*FRED API key from stlouisfed.org. Required to make any API calls.
FRED_BASE_URLdefault: https://api.stlouisfed.org/fredOverride the FRED API base URL.
FRED_DATASET_TTL_SECONDSdefault: 86400Sliding TTL for DataCanvas-registered observation tables (seconds).
FRED_DATAFRAME_DROP_ENABLEDdefault: falseSet to 'true' to expose the fred_dataframe_drop tool.
MCP_LOG_LEVELdefault: infoSets the minimum log level for output (e.g., 'debug', 'info', 'warn').
MCP_HTTP_HOSTdefault: 127.0.0.1The hostname for the HTTP server.
MCP_HTTP_PORTdefault: 3010The port to run the HTTP server on.
MCP_HTTP_ENDPOINT_PATHdefault: /mcpThe endpoint path for the MCP server.
MCP_AUTH_MODEdefault: noneAuthentication mode to use: 'none', 'jwt', or 'oauth'.
com.mcparmory/google-search
io.github.pipeworx-io/brave-search
marcopesani/mcp-server-serper
brave/brave-search-mcp-server
com.mcparmory/google-search-console
acamolese/google-search-console-mcp