
Federal Reserve Mcp Server
io.github.cyanheadsPublished by GitHub account cyanheadsv0.3.0Updated Oct 24, 2026
Search and fetch ~800K Federal Reserve economic time-series from the FRED API via MCP.
Overview
Lets an assistant search and fetch roughly 800,000 Federal Reserve (FRED) economic time series, browse categories and releases, and run SQL over large results.
- What you can do
- Search series by title, tags, notes or ID, with frequency, units, seasonal adjustment and tag filters, and fetch metadata for up to 50 series at once. Pull date-and-value observations for up to 10 series, with date ranges, unit transforms and frequency downsampling. Browse the FRED category tree and look up releases by ID or name, including upcoming release dates. Describe, query and optionally drop DataCanvas dataframes, running read-only DuckDB SQL over large observation results.
- When to use it
- Useful when you need US economic data — output, prices, employment, money, rates, housing or trade — inside an assistant session, for research, reporting or quick analysis of FRED series without leaving the chat.
- Requirements
- Runs locally via npx, bunx or Docker; Bun v1.4.0+ or Node.js v24+ for the npm route. A free FRED API key is required in FRED_API_KEY (120 requests/minute). Network access to the FRED API. SQL over observation tables needs CANVAS_PROVIDER_TYPE set to duckdb.
Installation
In SourceWeft
- Open Federal Reserve Mcp Server in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@cyanheads/federal-reserve-mcp-server
Search and fetch ~800K Federal Reserve economic time-series from the FRED API via MCP. STDIO or Streamable HTTP.
[Version] [License] [Docker] [MCP SDK] [npm] [TypeScript] [Bun]
[Install in Claude Desktop] [Install in Cursor] [Install in VS Code]
Overview
Economic data from FRED, the St. Louis Fed's database of ~800K time series on output, prices, employment, money, rates, housing, and trade. Search series, pull observations, browse categories and releases, and run SQL over large results.
Tools
Capability reference
fedreserve_search_series tool
- Full-text or series-ID search, with
frequency,units,seasonal_adjustment, andtag_namesfilters;filter_variableandfilter_valuemust be supplied together or the call returnsinvalid_filter - Pagination via
limit(default and max 1000) andoffset(max 4999; FRED caps searchable results at 5000) - Output includes
active_filtersandpopularity(0–100) when available; empty results suggest a broader query or category browsing
fedreserve_get_series tool
- Accepts one series ID or up to 50 per call
- Returns title, units, frequency, seasonal adjustment, observation range, popularity, and notes per series
- Failed IDs in a batch land in a
failedarray with error messages; a single unresolved ID throwsseries_not_found
fedreserve_get_observations tool
- Accepts one series ID or up to 10, with
observation_start/observation_end(YYYY-MM-DD), native unit transforms, and frequency downsampling viaaggregation_method(avg,sum,eop) - Returns date/value observations (values are strings that keep trailing zeros) plus per-series failures
- Multi-series or >500-row results go to a DataCanvas table with a 20-row preview; the
noticenamesdataset.nameand thefedreserve_dataframe_describeandfedreserve_dataframe_querycalls to run next. Without canvas, you get a truncated inline preview
fedreserve_browse_categories tool
- Omit
category_idto start at the root (ID 0); returns the category and its children, or up to 10 sample series for a leaf - An unknown
category_idthrowscategory_not_found
fedreserve_get_release tool
- Takes exactly one of
release_idorrelease_search(case-insensitive name substring) - Returns release name, link, notes, the next five scheduled dates, and a paginated series list (
series_limitmax 1000,series_offset) - An ambiguous name returns up to 10
search_alternatives; retry with the exactrelease_id
fedreserve_dataframe_describe tool
- Lists active DataCanvas dataframes, newest first, or one by
name - Each entry carries
source_tool,query_params,created_at,expires_at,row_count,truncated/max_rows, andcolumn_schema
fedreserve_dataframe_query tool
- Runs one read-only DuckDB SELECT against
df_<id>tables (joins, aggregates, window functions, CTEs); external files, system catalogs, and engine-setting functions are blocked row_limitcaps returned rows (default 1000, max 10000) andpreviewsets the inline sample; BIGINT results serialize as stringsregister_assaves the result as a new dataframe with its own TTL
fedreserve_dataframe_drop tool
- Opt-in: enabled by
FRED_DATAFRAME_DROP_ENABLED=true, otherwise registered as disabled - Drops the named dataframe early; returns
dropped: falsewhen it doesn't exist
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
FRED-specific:
- Requires a
FRED_API_KEYfor the FRED API (up to 120 requests/minute) - Unit transforms and frequency downsampling run on FRED's side against the full series history
- Large observation results spill to DataCanvas tables you can query with SQL
- Dataframe tools require
CANVAS_PROVIDER_TYPE=duckdband reportcanvas_unavailableotherwise
Agent-friendly output:
- Partial failures:
fedreserve_get_seriesandfedreserve_get_observationsreturn per-IDfailedrows instead of failing the whole request - Ambiguous release names return
search_alternativesinstead of a guess - Every dataframe carries
source_tool,query_params, and TTL fields - Without DataCanvas,
fedreserve_get_observationsreturns a truncated inline preview with an explanatorymessage
Getting started
Add the following to your MCP client configuration file. Obtain a free FRED API key at research.stlouisfed.org/docs/api/api_key.html.
Or with npx (no Bun required):
Or with Docker:
For Streamable HTTP, set the transport and start the server:
Prerequisites
- Bun v1.4.0 or higher (or Node.js v24+).
- A free FRED API key from stlouisfed.org. The key grants 120 requests/minute.
Installation
- Clone the repository:
- Navigate into the directory:
- Install dependencies:
- Configure environment:
Configuration
All configuration is validated at startup via Zod schemas in src/config/server-config.ts.
See .env.example for the full list of optional overrides.
Set CANVAS_PROVIDER_TYPE=duckdb to enable SQL over observation tables. npm installs and Docker images include the DuckDB runtime. Portable Claude Desktop bundles omit native bindings; use the npm or Docker installation for canvas mode.
Running the server
Local development
-
Build and run:
-
Run checks and tests:
Docker
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.
Project structure
Development guide
See CLAUDE.md for development guidelines and architectural rules. The short version:
- Handlers throw, framework catches — no
try/catchin tool logic - Use
ctx.logfor request-scoped logging,ctx.statefor tenant-scoped storage - Register new tools in
src/mcp-server/tools/definitions/index.ts - Wrap FRED API calls: validate raw response → normalize to domain type → return output schema; never fabricate missing fields
Contributing
Issues are welcome. Run checks and tests before submitting:
License
Apache-2.0 — see LICENSE for details.
Source: README.md at commit ae1a9b0
Tools
0Version history
4- v0.3.0LatestOct 18, 2026
- v0.2.5Oct 4, 2026
- v0.2.4Sep 21, 2026
- v0.2.3Sep 16, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.