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