UNPKG

@cnbcool/mcp-server

Version:

CNB MCP Server. A comprehensive MCP server that provides seamless integration to the CNB's API(https://cnb.cool), offering a wide range of tools for repository management, pipelines operations and collaboration features

72 lines (71 loc) 2.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transports = void 0; exports.createStreamableTransport = createStreamableTransport; exports.createStatelessStreamableTransport = createStatelessStreamableTransport; const node_crypto_1 = require("node:crypto"); const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js"); const types_js_1 = require("@modelcontextprotocol/sdk/types.js"); const createMcpServer_1 = require("./createMcpServer"); // Store transports for each session type exports.transports = { streamable: {}, sse: {} }; async function createStreamableTransport(req) { const sessionId = req.headers['mcp-session-id']; // Reuse existing transport if (sessionId && exports.transports.streamable[sessionId]) { const transport = exports.transports.streamable[sessionId]; if (!(transport instanceof streamableHttp_js_1.StreamableHTTPServerTransport)) { throw { status: 400, message: 'Session exists but uses a different transport protocol' }; } return transport; } // New initialization request if (!sessionId && (0, types_js_1.isInitializeRequest)(req.body)) { const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: () => (0, node_crypto_1.randomUUID)(), onsessioninitialized: (sessionId) => { exports.transports.streamable[sessionId] = transport; } }); // Clean up transport when closed transport.onclose = () => { if (transport.sessionId) { delete exports.transports.streamable[transport.sessionId]; } }; const mcpServer = (0, createMcpServer_1.createMcpServer)(req); await mcpServer.connect(transport); return transport; } throw { status: 400, message: 'No valid session ID provided' }; } async function createStatelessStreamableTransport(req, res) { try { const mcpServer = (0, createMcpServer_1.createMcpServer)(req); const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({ sessionIdGenerator: undefined }); res.on('close', () => { void transport.close(); void mcpServer.close(); }); await mcpServer.connect(transport); return transport; } catch (error) { console.error('Error handling MCP request:', error); if (!res.headersSent) { throw new Error('Internal Server Error'); } throw error; } }