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