AEM MCP Server is a full-featured Model Context Protocol (MCP) server for Adobe Experience Manager (AEM). It provides a simple integration with any AI Agent. This project is designed for non-technical persons who want to manage AEM via natural language.
- Manage your AEM instance with natural language — content, components, assets, workflows
- Works with any MCP-compatible client:
- AI IDEs — Cursor, VS Code + Copilot, Windsurf, Cline, JetBrains AI Assistant, Zed
- CLI agents — Claude Code, GitHub Copilot CLI, Gemini CLI, Amazon Q CLI
- Chat & desktop apps — Claude Desktop, ChatGPT Desktop, Goose
- Supports both AEMaaCS and self-hosted AEM instances
- Two transport modes — stdio via
npx(recommended, zero install) and streamable HTTP
- Node.js 20.19.0+ || 22.12.0+ || 23+
- Access to an AEM instance (local or remote)
No installation needed — the AI agent downloads and spawns the process automatically via npx.
Add to your project's MCP config (.mcp.json, .vscode/mcp.json, .cursor/mcp.json, etc.):
{
"mcpServers": {
"AEM": {
"command": "npx",
"args": ["-y", "aem-mcp-server", "-t", "stdio", "-H", "http://localhost:4502", "-u", "admin", "-p", "admin"]
}
}
}Secrets: Since MCP config files are typically committed to the repo, avoid hardcoding credentials. Use your client's env var syntax instead:
Client Syntax Claude Code ( .mcp.json)${AEM_PASSWORD}or${AEM_PASSWORD:-admin}VS Code / Copilot ${input:aem-password}(prompts securely) orenvFileCursor ${env:AEM_PASSWORD}Example with env var references (Claude Code):
{ "mcpServers": { "AEM": { "command": "npx", "args": ["-y", "aem-mcp-server", "-t", "stdio", "-H", "${AEM_HOST:-http://localhost:4502}", "-u", "${AEM_USER:-admin}", "-p", "${AEM_PASSWORD:-admin}"] } } }
For scenarios where you need a persistent server (shared team server, multiple clients connecting simultaneously, etc.), install globally and start the server manually:
npm install aem-mcp-server -g
aem-mcp -H=http://localhost:4502 -u=admin -p=adminThen point your AI agent to the URL:
{
"mcpServers": {
"AEM": {
"url": "http://127.0.0.1:8502/mcp"
}
}
}Options:
--version Show version number [boolean]
-H, --host [string] [default: "http://localhost:4502"]
-u, --user [string] [default: "admin"]
-p, --pass [string] [default: "admin"]
-i, --id clientId [string] [default: ""]
-s, --secret clientSecret [string] [default: ""]
-m, --mcpPort [number] [default: 8502]
-t, --transport Transport mode: http (default) or stdio
[string] [choices: "http", "stdio"] [default: "http"]
-I, --instances Named AEM instances: "local:http://localhost:4502:admin:admin
,qa:https://qa.example.com:user:pass" [string] [default: ""]
-h, --help Show help [boolean]
Authentication:
- For AEMaaCS, use
clientIdandclientSecretfor OAuth S2S authentication. More info. - For self-hosted AEM, use
user/pass. Default credentials areadmin:admin.
Multi-instance: Connect to multiple AEM instances simultaneously:
aem-mcp --instances "author:http://localhost:4502:admin:admin,publish:http://localhost:4503:admin:admin"All tools will get an instance parameter to target a specific instance.
- 57 MCP Tools covering pages, components, assets, workflows, content fragments, and experience fragments
- MCP Resources — agents discover components, sites, templates, and workflow models upfront via
resources/list, eliminating discovery roundtrips - Tool Annotations — every tool tagged with
group,readOnly, andcomplexityso agents can make smarter tool selection decisions - Response Verbosity —
verbosityparameter (summary/standard/full) on content-reading tools strips JCR internals and truncates long text - Actionable Errors — error responses include
suggestionandalternativesfields for self-healing agent workflows - Component Operations: Update, scan, add, convert, and bulk-manage AEM components (including Experience Fragments)
- Content & Experience Fragments: Full CRUD + variation management for both CF and XF
- Advanced Search: QueryBuilder, fulltext, fuzzy, and enhanced page search
- Replication & Workflows: Publish/unpublish content, start/advance/delegate workflow stages
- Text & Image Extraction: Extract all text and images from pages, including fragments
- Template & Structure Discovery: List templates, analyze page/component structure
- Multi-instance: Connect to multiple AEM instances simultaneously; tools and resources are instance-aware
- Security: Basic auth and OAuth S2S, environment-based config, safe operation defaults
Once configured in your AI IDE, just ask in natural language:
List all components on MyPage
The server exposes read-only MCP resources so agents can discover AEM catalogs without tool calls:
| Resource URI | Description |
|---|---|
aem://{instance}/components |
All components (name, resourceType, title, group) |
aem://{instance}/sites |
Site roots and language structure under /content |
aem://{instance}/templates |
Available page templates (path, title) |
aem://{instance}/workflow-models |
Workflow models (ID, title, description) |
Resources return summary data only. In multi-instance mode, each instance gets its own set of resource URIs.
For detailed API documentation, please refer to the API Docs.
- https://github.com/easingthemes/aem-mcp-server (Used as a base for this project)
- https://github.com/indrasishbanerjee/aem-mcp-server (Used as a base for #1)
- https://www.npmjs.com/package/@myea/aem-mcp-handler (Looks like an original source of #2)