UNPKG

fred-mcp-server

Version:

Federal Reserve Economic Data (FRED) MCP Server - Access all 800,000+ economic time series with search, browse, and data retrieval capabilities

66 lines (65 loc) 2.27 kB
/** * FRED API Client * * Core functionality for fetching data from the FRED API */ import { SERIES_REGISTRY } from "./registry.js"; import { makeRequest } from "../common/request.js"; /** * Fetches economic data for a specific FRED series * * @param seriesId - FRED series identifier (e.g., "CPIAUCSL") * @param options - Query parameters for filtering the data * @returns Formatted series data with metadata */ export async function fetchSeriesData(seriesId, options) { try { // Prepare query parameters const queryParams = { series_id: seriesId }; // Add optional parameters if provided if (options.start_date) queryParams.observation_start = options.start_date; if (options.end_date) queryParams.observation_end = options.end_date; if (options.limit) queryParams.limit = options.limit; if (options.sort_order) queryParams.sort_order = options.sort_order; // Make the request to FRED API const response = await makeRequest("series/observations", queryParams); // Get metadata for this series const metadata = SERIES_REGISTRY[seriesId] || { title: `FRED Data Series: ${seriesId}`, description: `Economic data from FRED series ${seriesId}`, units: "Value" }; // Transform the data for easier consumption const formattedData = response.observations.map(obs => ({ date: obs.date, value: parseFloat(obs.value), units: metadata.units, })); const responseData = { title: metadata.title, description: metadata.description, source: "Federal Reserve Economic Data (FRED)", series_id: seriesId, total_observations: response.count, data: formattedData }; return { content: [{ type: "text", text: JSON.stringify(responseData, null, 2) }] }; } catch (error) { if (error instanceof Error) { throw new Error(`Failed to retrieve ${seriesId} data: ${error.message}`); } throw error; } }