UNPKG

@rockship/apollo-io-mcp

Version:

A powerful Model Context Protocol (MCP) server implementation for seamless Apollo.io API integration, enabling AI assistants to interact with Apollo.io data

64 lines 2.38 kB
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js"; import express from "express"; import { createMcpServer } from "../common/mcp-server.js"; import { getServerConfig, setupExpressApp, setupGracefulShutdown, setupHealthCheck, setupListenServer, } from "../common/server-utils.js"; let server; function createSSEServer() { const app = express(); const transports = {}; setupExpressApp(app); setupHealthCheck(app, transports); // Legacy SSE endpoint for older clients app.get("/sse", async (req, res) => { // Create SSE transport for legacy clients const transport = new SSEServerTransport("/messages", res); transports[transport.sessionId] = transport; const apiKey = req.query.apiKey || process.env.APOLLO_IO_API_KEY; if (!apiKey) { res.status(400).json({ error: "API key is required" }); return; } if (!server) { server = createMcpServer(apiKey); } res.on("close", () => { delete transports[transport.sessionId]; console.log(`SSE connection closed for sessionId: ${transport.sessionId}`); }); // Connect to the MCP server await server.connect(transport); console.log(`SSE connection established with sessionId: ${transport.sessionId}`); }); // Legacy message endpoint for older clients app.post("/messages", async (req, res) => { const sessionId = req.query.sessionId; const transport = transports[sessionId]; if (transport) { await transport.handlePostMessage(req, res, req.body); } else { res.status(400).send("No transport found for sessionId"); } }); return app; } /** * Start the SSE server with proper error handling and graceful shutdown */ async function startServer() { try { const config = getServerConfig("HTTP_PORT", "8080"); const sseServer = createSSEServer(); const server = setupListenServer(sseServer, "SSE", config); setupGracefulShutdown(server, "SSE"); } catch (error) { console.error("❌ Failed to start server:", error); process.exit(1); } } startServer().catch((error) => { console.error("❌ Server startup failed:", error); process.exit(1); }); //# sourceMappingURL=index.js.map