aem-mcp-server
Version:
AEM MCP server. Chat with your AEM instance for content, component, and asset operations.
2 lines (1 loc) • 1.63 kB
JavaScript
;import{MCPRequestHandler as d}from"./mcp.aem-handler.js";import{LOGGER as h}from"../utils/logger.js";export class InstanceRegistry{handlers=new Map;defaultInstance;constructor(e){const a=this.parseInstances(e);for(const t of a){const n={host:t.host,user:t.user,pass:t.pass,id:t.id,secret:t.secret};this.handlers.set(t.name,new d(n)),h.log(`Registered AEM instance: "${t.name}" \u2192 ${t.host}`)}this.defaultInstance=a[0].name,h.log(`Default instance: "${this.defaultInstance}"`)}parseInstances(e){if(e.instances){const a=e.instances.split(",").map(n=>n.trim()).filter(Boolean),t=[];for(const n of a){const s=n.split(":");if(s.length<4){h.error(`Invalid instance format: "${n}" \u2014 expected "name:host:user:pass" or "name:https://host:user:pass"`);continue}let o,r,l,c;if(s[1]?.startsWith("//")||s[2]?.startsWith("//")){o=s[0],r=s[1]+":"+s[2];let i=3;s[i]&&/^\d+$/.test(s[i])&&(r+=":"+s[i],i++),l=s[i]||"admin",c=s.slice(i+1).join(":")||"admin"}else o=s[0],r=s[1],l=s[2],c=s.slice(3).join(":"),r.startsWith("http")||(r=`http://${r}`);t.push({name:o,host:r,user:l||"admin",pass:c||"admin"})}if(t.length===0)throw new Error("No valid instances parsed from --instances flag");return t}return[{name:"default",host:e.host||"http://localhost:4502",user:e.user||"admin",pass:e.pass||"admin",id:e.id,secret:e.secret}]}getHandler(e){const a=e||this.defaultInstance,t=this.handlers.get(a);if(!t){const n=Array.from(this.handlers.keys()).join(", ");throw new Error(`Unknown AEM instance: "${a}". Available: ${n}`)}return t}getDefaultName(){return this.defaultInstance}getInstanceNames(){return Array.from(this.handlers.keys())}}