aem-mcp-server-globant
v2.1.0
Published
Hybrid Model Context Protocol server for Adobe Experience Manager - combines clean architecture with comprehensive features
Maintainers
Readme
AEM MCP Server (Hybrid Edition)
A Model Context Protocol (MCP) server for Adobe Experience Manager (AEM) that combines the clean architecture of the implementation with the comprehensive features of the Current implementation.
What's New in Hybrid Edition
Features
Content Management
- Query JCR content using QueryBuilder API
- Read, create, update, and delete nodes
- Move and copy nodes with reference updates
- Execute JCR SQL2/XPath queries
- Search pages by title or content
Page Management
- Create pages with automatic template selection
- Update page properties and metadata
- Delete pages with confirmation
- Move and copy pages with reference updates
- Page tree navigation and hierarchy
- List pages with pagination
- Content extraction: text and images
- Publishing: activate/deactivate pages
- Replication status checking
Component Management
- List and search components
- Get component details
- Add components to pages
- Update component properties
- Delete components
- Scan page components
- Bulk update components
- Find component usage across site
- Update image paths
- Client library management
Asset Management (DAM)
- Search assets by name, metadata, or type
- Get asset metadata
- Create asset folders
- Update asset metadata and tags
- Get asset renditions
- Upload assets (base64)
- Tag assets
Workflow Management
- Start workflow instances
- List active/completed workflows
- Get workflow status
- Complete workflow steps
- Cancel, suspend, resume workflows
- List workflow models
Version Control
- Get version history
- Create versions with labels
- Restore previous versions
- Compare versions
- Delete versions
System Administration
- System information
- Health checks
- OSGi bundle management
- Replication agent monitoring
- User and group listing
- Query performance analysis
Installation
This server is published on npm as aem-mcp-server-globant. No clone, build, or local Node project is required — your MCP client runs it on demand via npx. The only thing you provide is your own AEM URL and credentials.
Prerequisites
- Node.js 18+ (so
npxis available) - Access to an AEM instance
Add to your MCP client
Add the following to your client's MCP configuration (e.g. Claude Desktop's claude_desktop_config.json, .cursor/mcp.json, or a project .mcp.json), then restart the client:
{
"mcpServers": {
"aem": {
"command": "npx",
"args": ["-y", "aem-mcp-server-globant"],
"env": {
"AEM_BASE_URL": "https://your-aem-host:4502",
"AEM_USERNAME": "your-user",
"AEM_PASSWORD": "your-password"
}
}
}
}Claude Code (one command, no JSON editing)
claude mcp add aem \
-e AEM_BASE_URL=https://your-aem-host:4502 \
-e AEM_USERNAME=your-user \
-e AEM_PASSWORD=your-password \
-- npx -y aem-mcp-server-globantThat's it — npx downloads and caches the package automatically on first run.
From source (for development)
Only needed if you want to modify the server:
- Install dependencies:
cd aem-mcp-server-zarza
npm install- Build the TypeScript:
npm run buildConfiguration
Set the following environment variables:
| Variable | Description | Required |
|----------|-------------|----------|
| AEM_BASE_URL | AEM instance URL (e.g., http://localhost:4502) | Yes |
| AEM_USERNAME | AEM username | Yes |
| AEM_PASSWORD | AEM password | Yes |
| AEM_TIMEOUT | Request timeout in ms (default: 30000) | No |
| AEM_INSECURE | Ignore SSL errors (not recommended) | No |
Example .env file
AEM_BASE_URL=http://localhost:4502
AEM_USERNAME=admin
AEM_PASSWORD=admin
AEM_TIMEOUT=30000Claude Desktop Configuration
Config file location:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
Use the npx configuration shown in Installation above — no local path required.
Running from source instead
If you built the server locally (see From source), point the client at your compiled entry file:
{
"mcpServers": {
"aem": {
"command": "node",
"args": ["/path/to/aem-mcp-server-zarza/dist/index.js"],
"env": {
"AEM_BASE_URL": "http://localhost:4502",
"AEM_USERNAME": "admin",
"AEM_PASSWORD": "admin"
}
}
}
}Available Tools (45+)
Content Tools
aem_query- Query content using QueryBuilderaem_getNode- Get node detailsaem_searchContent- Search contentaem_createNode- Create JCR nodesaem_updateNode- Update node propertiesaem_deleteNode- Delete nodesaem_moveNode- Move/rename nodesaem_copyNode- Copy nodesaem_listChildren- List child nodesaem_executeJCRQuery- Execute SQL2/XPath queries
Page Tools
aem_createPage- Create pages with auto-templateaem_updatePage- Update page propertiesaem_deletePage- Delete pagesaem_getPage- Get page detailsaem_listPages- List pages with paginationaem_getPageTree- Page hierarchyaem_movePage- Move pagesaem_copyPage- Copy pagesaem_listTemplates- List templatesaem_getTemplateStructure- Template detailsaem_getPageContent- Full page contentaem_getPageTextContent- Extract textaem_getPageImages- Extract imagesaem_activatePage- Publish pagesaem_deactivatePage- Unpublish pagesaem_getReplicationStatus- Check replicationaem_fetchSites- List sitesaem_searchPages- Search pages
Component Tools
aem_listComponents- List componentsaem_searchComponents- Search componentsaem_getComponent- Component detailsaem_addComponent- Add to pageaem_updateComponent- Update propertiesaem_deleteComponent- Remove from pageaem_scanPageComponents- Scan pageaem_bulkUpdateComponents- Bulk operationsaem_findComponentUsage- Find usagesaem_updateImagePath- Update imagesaem_listComponentGroups- Component groupsaem_listClientlibs- Client librariesaem_getContainerStructure- Container structure
Asset Tools
aem_searchAssets- Search DAMaem_getAsset- Asset metadataaem_listAssets- List folder assetsaem_getAssetFolders- Folder structureaem_createAssetFolder- Create foldersaem_updateAssetMetadata- Update metadataaem_deleteAsset- Delete assetsaem_getAssetRenditions- List renditionsaem_tagAsset- Tag assetsaem_getTags- List tagsaem_uploadAsset- Upload files
Workflow Tools
aem_startWorkflow- Start workflowsaem_listActiveWorkflows- Active workflowsaem_getWorkflowStatus- Workflow statusaem_completeWorkflowStep- Complete stepsaem_cancelWorkflow- Cancel workflowsaem_suspendWorkflow- Suspend workflowsaem_resumeWorkflow- Resume workflowsaem_getWorkflowModels- List models
Version Tools
aem_getVersionHistory- Version historyaem_createVersion- Create versionsaem_restoreVersion- Restore versionsaem_compareVersions- Compare versionsaem_deleteVersion- Delete versions
System Tools
aem_getSystemInfo- System informationaem_getStatus- AEM statusaem_healthCheck- Health checksaem_listBundles- OSGi bundlesaem_getBundle- Bundle detailsaem_listReplicationAgents- Replication agentsaem_getReplicationQueue- Queue statusaem_listUsers- List usersaem_listGroups- List groupsaem_listPackages- CRX packagesaem_listSlingModels- Sling Modelsaem_explainQuery- Query analysisaem_slowQueries- Slow queries
MCP Resources
The server exposes these MCP resources:
aem://content- Content repository treeaem://dam- DAM folder structureaem://system- System informationaem://components- Component libraryaem://templates- Page templatesaem://{path}- Any JCR path
Architecture
aem-mcp-server/
├── src/
│ ├── index.ts # Main entry point with Resource + Tool handlers
│ ├── tools/
│ │ ├── content.ts # Content operations (10 tools)
│ │ ├── pages.ts # Page operations (17 tools)
│ │ ├── assets.ts # DAM operations (11 tools)
│ │ ├── components.ts # Component operations (14 tools)
│ │ ├── workflows.ts # Workflow operations (7 tools)
│ │ ├── versions.ts # Version control (5 tools)
│ │ └── system.ts # System admin (14 tools)
│ ├── utils/
│ │ └── aem-client.ts # Enhanced native fetch client
│ └── types/
│ └── index.ts # Comprehensive TypeScript types
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.mdError Handling
The hybrid edition includes comprehensive error handling:
- Structured error codes:
INVALID_PATH,PATH_NOT_FOUND,AUTHENTICATION_ERROR, etc. - Retry logic: Automatic retry for transient network errors
- Fallback methods: Alternative APIs when primary fails
- Detailed messages: Clear error descriptions with context
Development
Build
npm run buildWatch Mode
npm run devType Checking
npm run typecheckLinting
npm run lintHybrid Design Principles
- Clean Architecture: Tools organized by domain in separate files
- Native Fetch: Modern HTTP client without axios dependency
- Resource Support: MCP resources for content browsing
- Comprehensive Features: All operations from both original implementations
- Type Safety: Full TypeScript coverage
- Error Resilience: Robust error handling and recovery
