aem-mcp-server
Version:
AEM Model Context Protocol (MCP) server
2 lines (1 loc) • 1.41 kB
JavaScript
;import{randomUUID as c}from"node:crypto";import{StreamableHTTPServerTransport as m}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as u}from"@modelcontextprotocol/sdk/types.js";import{transports as n}from"./mcp.transports.js";import{createMCPServer as p}from"./mcp.server.js";export const handleRequest=async(e,s,t)=>{console.log("1.Received MCP request:",e.body);const{jsonrpc:a,id:l,method:d,params:v}=e.body;if(a!=="2.0"||!d){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 o=e.headers["mcp-session-id"];let r;if(o&&n[o])console.log(`Session exists: ${o}`),r=n[o];else if(!o&&u(e.body)){r=new m({sessionIdGenerator:()=>c(),enableJsonResponse:!0,onsessioninitialized:i=>{console.log(`Session initialized with ID: ${i}`),n[i]=r}}),console.log("Connecting to MCP server with CLI params:",t),await p(t).connect(r),await r.handleRequest(e,s,e.body);return}else{console.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 r.handleRequest(e,s,e.body)}catch(o){console.error("Error handling MCP request:",o),s.headersSent||s.status(500).json({jsonrpc:"2.0",error:{code:-32603,message:"Internal server error"},id:null})}};