MCPcopy Create free account
hub / github.com/PSPDFKit/nutrient-document-engine-mcp-server / startHttpServer

Function startHttpServer

src/index.ts:200–305  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

198 process.on('SIGINT', async () => {
199 await server.close();
200 process.exit(0);
201 });
202
203 await server.connect(transport);
204 logger.info(null, `Nutrient Document Engine MCP server ${getVersion()} running on stdio`);
205}
206
207async function startHttpServer() {
208 const env = getEnvironment();
209 const dashboardEnabled = !!(env.DASHBOARD_USERNAME && env.DASHBOARD_PASSWORD);
210 const app = createExpressApp(dashboardEnabled, env.MCP_HTTP_AUTH_TOKEN);
211
212 // Map to store transports by session ID
213 const transports: { [sessionId: string]: StreamableHTTPServerTransport } = {};
214
215 // Handle POST requests for client-to-server communication
216 app.post('/mcp', async (req, res) => {
217 try {
218 // Check for existing session ID
219 const sessionId = req.headers['mcp-session-id'] as string | undefined;
220 let transport: StreamableHTTPServerTransport;
221
222 if (sessionId && transports[sessionId]) {
223 // Reuse existing transport
224 transport = transports[sessionId];
225 } else if (!sessionId && isInitializeRequest(req.body)) {
226 // New initialization request
227 transport = new StreamableHTTPServerTransport({
228 sessionIdGenerator: () => randomUUID(),
229 onsessioninitialized: sessionId => {
230 // Store the transport by session ID
231 transports[sessionId] = transport;
232 },
233 });
234
235 // Clean up transport when closed
236 transport.onclose = () => {
237 if (transport.sessionId) {
238 delete transports[transport.sessionId];
239 logger.info(null, `Close Session : ${transport.sessionId}`);
240 }
241 };
242
243 const server = createMCPServer();
244 await server.connect(transport);
245
246 logger.info(null, `Open Session : ${transport.sessionId}`);
247 } else {
248 // Invalid request
249 res.status(400).json({
250 jsonrpc: '2.0',
251 error: {
252 code: -32000,
253 message: 'Bad Request: No valid session ID provided',
254 },
255 id: null,
256 });
257 return;

Callers 1

mainFunction · 0.85

Calls 5

createExpressAppFunction · 0.85
getVersionFunction · 0.85
infoMethod · 0.80
errorMethod · 0.80
createMCPServerFunction · 0.70

Tested by

no test coverage detected