@larksuiteoapi/lark-mcp
Version:
Feishu/Lark OpenAPI MCP
55 lines (54 loc) • 2.14 kB
JavaScript
;
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`);
});
}