UNPKG

@larksuiteoapi/lark-mcp

Version:
71 lines (70 loc) 2.77 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.initStreamableServer = initStreamableServer; const express_1 = __importDefault(require("express")); const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js"); const utils_1 = require("./utils"); function initStreamableServer(getNewServer, options) { const app = (0, express_1.default)(); app.use(express_1.default.json()); app.post('/mcp', async (req, res) => { try { const options = (0, utils_1.parseMCPServerOptionsFromRequest)(req); if (!options.success) { res.status(400).json({ jsonrpc: '2.0', error: { code: -32603, message: 'Error handling MCP request:' + options.message }, id: null, }); return; } const server = getNewServer(options.data); const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: undefined }); res.on('close', () => { console.log('Request closed'); transport.close(); server.close(); }); await server.connect(transport); await transport.handleRequest(req, res, req.body); } catch (error) { console.error('Error handling MCP request:', error); if (!res.headersSent) { res.status(500).json({ jsonrpc: '2.0', error: { code: -32603, message: 'Internal server error' }, id: null, }); } } }); app.get('/mcp', async (req, res) => { console.log('Received GET MCP request'); res.writeHead(405).end(JSON.stringify({ jsonrpc: '2.0', error: { code: -32000, message: 'Method not allowed.' }, id: null, })); }); app.delete('/mcp', async (req, res) => { console.log('Received DELETE MCP request'); res.writeHead(405).end(JSON.stringify({ jsonrpc: '2.0', error: { code: -32000, message: 'Method not allowed.' }, id: null, })); }); // Start the server 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(`Streamable endpoint: http://${options.host}:${options.port}/mcp`); }); }