aem-mcp-server
Version:
AEM Model Context Protocol (MCP) server
2 lines (1 loc) • 1.42 kB
JavaScript
;import{randomUUID as p}from"node:crypto";import{StreamableHTTPServerTransport as u}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as c}from"@modelcontextprotocol/sdk/types.js";import{transports as n}from"./mcp.transports.js";import{createMCPServer as R}from"./mcp.server.js";import{LOGGER as t}from"../utils/logger.js";export const handleRequest=async(e,s,i)=>{t.log("1.Received MCP request:",e.body);const{jsonrpc:d,id:l,method:m,params:f}=e.body;if(d!=="2.0"||!m){s.status(400).json({jsonrpc:"2.0",id:l||null,error:{code:-32600,message:"Invalid Request",data:"Must be valid JSON-RPC 2.0"}});return}try{const r=e.headers["mcp-session-id"];let o;if(r&&n[r])t.log(`Session exists: ${r}`),o=n[r];else if(!r&&c(e.body)){o=new u({sessionIdGenerator:()=>p(),enableJsonResponse:!0,onsessioninitialized:a=>{t.log(`Session initialized with ID: ${a}`),n[a]=o}}),t.log("Connecting to MCP server with CLI params:",i),await R(i).connect(o),await o.handleRequest(e,s,e.body);return}else{t.log("Invalid request - no session ID or not initialization request"),s.status(400).json({jsonrpc:"2.0",error:{code:-32e3,message:"Bad Request: No valid session ID provided"},id:null});return}await o.handleRequest(e,s,e.body)}catch(r){t.error("Error handling MCP request:",r),s.headersSent||s.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null})}};