@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
JavaScript
;
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;
}
}