UNPKG

@larksuiteoapi/lark-mcp

Version:
55 lines (54 loc) 2.14 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.initSSEServer = initSSEServer; const express_1 = __importDefault(require("express")); const sse_js_1 = require("@modelcontextprotocol/sdk/server/sse.js"); const utils_1 = require("./utils"); function initSSEServer(getNewServer, options) { const app = (0, express_1.default)(); const transports = {}; app.get('/sse', async (req, res) => { try { const options = (0, utils_1.parseMCPServerOptionsFromRequest)(req); if (!options.success) { res.status(400).send('Error handling SSE request' + options.message); return; } const mcpServer = getNewServer(options.data); const transport = new sse_js_1.SSEServerTransport('/messages', res); transports[transport.sessionId] = transport; res.on('close', () => { transport.close(); mcpServer.close(); delete transports[transport.sessionId]; }); await mcpServer.connect(transport); } catch (error) { console.error('Error handling SSE request:', error); if (!res.headersSent) { res.status(500).send('Error handling SSE request'); } } }); app.post('/messages', async (req, res) => { const sessionId = req.query.sessionId; const transport = transports[sessionId]; if (!transport) { res.status(400).send('No transport found for sessionId'); return; } await transport.handlePostMessage(req, res); }); app.listen(options.port, options.host, (error) => { if (error) { console.error('Server error:', error); process.exit(1); } console.log(`Server is running on port ${options.port}`); console.log(`SSE endpoint: http://${options.host}:${options.port}/sse`); }); }