UNPKG

@iflow-mcp/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

74 lines (73 loc) 2.31 kB
#!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { registerFREDTools } from "./fred/tools.js"; import { readFileSync } from "fs"; import { fileURLToPath } from "url"; import { dirname, join } from "path"; /** * Create and configure a new FRED MCP server */ export function createServer() { // Get package.json version const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const packageJsonPath = join(__dirname, "..", "package.json"); const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8")); /** * Main FRED MCP Server * * Provides access to Federal Reserve Economic Data through the * Model Context Protocol */ const server = new McpServer({ name: "fred", version: packageJson.version, description: "Federal Reserve Economic Data (FRED) MCP Server for retrieving economic data series" }); // Register FRED tools registerFREDTools(server); return server; } /** * Connect and start the MCP server */ export async function startServer(server, transport) { console.error("FRED MCP Server starting..."); try { await server.connect(transport); console.error("FRED MCP Server running on stdio"); // Keep the process running process.on('SIGINT', () => { console.error("Server shutting down..."); process.exit(0); }); return true; } catch (error) { console.error("Failed to start server:", error); return false; } } /** * Main entry point */ async function main() { const server = createServer(); const transport = new StdioServerTransport(); const success = await startServer(server, transport); if (!success) { process.exit(1); } } // Flag to control execution for testing export const TESTING_DISABLED_AUTO_START = false; // Simplified startup logic - always run main unless testing is disabled if (!TESTING_DISABLED_AUTO_START) { main().catch((error) => { console.error("Fatal error in main():", error); process.exit(1); }); } // Export main for testing export { main };