@myea/aem-mcp-handler
Version:
Advanced AEM MCP request handler with intelligent search, multi-locale support, and comprehensive content management capabilities
87 lines (86 loc) • 3.02 kB
JavaScript
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
import { AEMConnector } from './aem-connector.js';
import { MCPRequestHandler } from './mcp-handler.js';
import dotenv from 'dotenv';
// Load environment variables
dotenv.config();
// Initialize the MCP server
const server = new Server({
name: 'aem-mcp-handler',
version: '1.0.0',
}, {
capabilities: {
tools: {},
},
});
// Initialize AEM connector and MCP handler
const aemConnector = new AEMConnector();
const mcpHandler = new MCPRequestHandler(aemConnector);
// Get available methods from the handler
const availableMethods = mcpHandler.getAvailableMethods();
// Convert handler methods to MCP tools
const tools = availableMethods.map(method => ({
name: method.name,
description: method.description,
inputSchema: {
type: 'object',
properties: method.parameters.reduce((props, param) => {
props[param] = { type: 'string', description: `${param} parameter` };
return props;
}, {}),
required: method.parameters.filter(p => !p.includes('optional'))
}
}));
// List tools handler
server.setRequestHandler(ListToolsRequestSchema, async () => {
return { tools };
});
// Tool execution handler
server.setRequestHandler(CallToolRequestSchema, async (request) => {
const { name, arguments: args } = request.params;
try {
console.error(`[MCP Server] Executing: ${name}`);
console.error(`[MCP Server] Arguments:`, JSON.stringify(args, null, 2));
const result = await mcpHandler.handleRequest(name, args || {});
return {
content: [
{
type: 'text',
text: JSON.stringify(result, null, 2)
}
]
};
}
catch (error) {
console.error(`[MCP Server] Error executing ${name}:`, error);
return {
content: [
{
type: 'text',
text: JSON.stringify({
success: false,
error: error.message,
stack: error.stack
}, null, 2)
}
],
isError: true
};
}
});
// Start the server
async function main() {
console.error('[MCP Server] Starting AEM MCP Handler Server...');
console.error(`[MCP Server] AEM Host: ${process.env.AEM_HOST || 'http://localhost:4502'}`);
console.error(`[MCP Server] Available tools: ${tools.length}`);
const transport = new StdioServerTransport();
await server.connect(transport);
console.error('[MCP Server] Server running and ready for connections');
}
main().catch((error) => {
console.error('[MCP Server] Fatal error:', error);
process.exit(1);
});