@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
JavaScript
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 };