loading…
Search for a command to run...
loading…
An MCP server that enables interaction with Adobe Experience Manager (AEM) Assets through the Author API. It allows users to browse folders, search for assets,
An MCP server that enables interaction with Adobe Experience Manager (AEM) Assets through the Author API. It allows users to browse folders, search for assets, retrieve detailed asset information, and perform bulk metadata updates using natural language.
A dual-implementation server for Adobe Experience Manager (AEM) Assets API:
rest-api/) - For ChatGPT Custom GPTs via Actions (FastAPI)mcp-server/) - For ChatGPT Custom GPTs with MCP support (FastMCP)Both implementations share the same core AEM client logic and provide identical functionality.
aem-assets-mcp-server/
├── rest-api/ ← REST API implementation (Vercel)
│ ├── app/ - FastAPI application
│ ├── requirements.txt
│ └── vercel.json
├── mcp-server/ ← MCP Server implementation (Cloud Run)
│ ├── app/ - FastMCP application
│ ├── Dockerfile
│ └── requirements.txt
├── shared/ ← Common AEM client logic
│ ├── aem_client.py - AEM API client
│ ├── jwt_auth.py - JWT authentication
│ ├── models.py - Data models
│ └── constants.py - Configuration constants
└── .github/workflows/ - CI/CD pipelines
Both implementations provide identical tools to interact with AEM Assets:
| Feature | REST API (Vercel) | MCP Server (Cloud Run) |
|---|---|---|
| Target Platform | ChatGPT Actions | ChatGPT with MCP support |
| Protocol | HTTP REST | JSON-RPC over SSE |
| Deployment | Vercel (serverless) | Google Cloud Run (containers) |
| Schema | OpenAPI 3.0 | MCP Protocol |
| Best For | Standard ChatGPT integrations | Native MCP clients (ChatGPT, Claude Desktop) |
Recommendation:
https://author-pXXXXXX-eXXXXXXX.adobeaemcloud.com)/adobe/* APIs):/api/assets API):gcloud CLI.
├── rest-api/ # REST API Implementation (Vercel)
│ ├── app/
│ │ ├── __init__.py
│ │ └── main.py # FastAPI application
│ ├── requirements.txt
│ ├── vercel.json # Vercel deployment config
│ └── openapi-schema.json # ChatGPT Actions schema
├── mcp-server/ # MCP Server Implementation (Cloud Run)
│ ├── app/
│ │ ├── __init__.py
│ │ └── main.py # FastMCP application
│ ├── requirements.txt
│ └── Dockerfile # Container configuration
├── shared/ # Shared AEM Client Logic
│ ├── __init__.py
│ ├── aem_client.py # AEM API client (OAuth + JWT)
│ ├── jwt_auth.py # JWT Service Account auth
│ ├── models.py # Pydantic data models
│ └── constants.py # Configuration constants
├── terraform/ # Infrastructure as Code
│ ├── main.tf
│ ├── variables.tf
│ └── terraform.tfvars.example
├── .github/workflows/ # CI/CD Pipelines
│ ├── deploy-cloud-run.yml # MCP Server → Cloud Run
│ ├── terraform-apply.yml # Terraform deployment
│ └── test.yml # Testing workflow
├── vercel.json # Root Vercel config (points to rest-api/)
└── README.md
Choose your implementation path:
cd "SC Practice 20260130 - Assets MCP"
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r rest-api/requirements.txt
# Copy example env
cp rest-api/env.example .env
# Edit with your AEM credentials
# Required:
# - AEM_BASE_URL
# - AEM_CLIENT_ID
# - AEM_CLIENT_SECRET
# - AEM_SERVICE_ACCOUNT_JSON (path to service-account.json)
nano .env
See GET_CREDENTIALS.md for how to get your credentials.
cd rest-api
uvicorn app.main:app --reload
Visit http://localhost:8000 to see the server info.
See DEPLOYMENT_VERCEL.md for detailed instructions.
Option A: Local Deployment (Fastest)
# Install Vercel CLI
npm i -g vercel
# Deploy (from project root)
vercel
# Add environment variables via Vercel dashboard:
# - AEM_BASE_URL
# - AEM_CLIENT_ID
# - AEM_CLIENT_SECRET
# - AEM_SERVICE_ACCOUNT_JSON (paste JSON content)
# Deploy to production
vercel --prod
Option B: GitHub Actions (Automated CI/CD)
Set up once, then automatically deploy on every push to main:
VERCEL_TOKENVERCEL_ORG_IDVERCEL_PROJECT_IDmain or manually trigger workflowYour API will be available at: https://your-project.vercel.app/api/mcp
Use the OpenAPI schema at rest-api/openapi-schema.json to configure ChatGPT Actions.
pip install -r mcp-server/requirements.txt
cp rest-api/env.example .env
nano .env # Add your AEM credentials
cd mcp-server
python -m app.main
The MCP server will start with SSE transport on port 8080.
See DEPLOYMENT_CLOUDRUN.md for detailed instructions.
Quick steps using GitHub Actions:
GCP_PROJECT_IDGCP_REGIONGCP_WORKLOAD_IDENTITY_PROVIDERGCP_SERVICE_ACCOUNTAEM_BASE_URLAEM_CLIENT_IDecho -n "your_client_secret" | gcloud secrets create aem-client-secret --data-file=-
echo -n "$(cat service-account.json)" | gcloud secrets create aem-service-account-json --data-file=-
Your MCP server will be available at: https://aem-assets-mcp-server-xxxxx.run.app
Connect from ChatGPT using the MCP server URL.
# List folders
curl -X POST http://localhost:8000/api/mcp \
-H "Content-Type: application/json" \
-d '{"tool": "list_folders", "arguments": {"path": "/"}}'
# List assets in a folder
curl -X POST http://localhost:8000/api/mcp \
-H "Content-Type: application/json" \
-d '{"tool": "list_assets_by_folder", "arguments": {"folderPath": "/MyFolder"}}'
See TESTING.md for comprehensive testing guide including:
Both implementations use the same environment variables:
| Variable | Description | Required | Example |
|---|---|---|---|
AEM_BASE_URL |
AEM Author instance URL | ✅ | https://author-pXXXXXX.adobeaemcloud.com |
AEM_CLIENT_ID |
OAuth Client ID | ✅ | a41e805f8c3042d3bba66ff1c05f1e94 |
AEM_CLIENT_SECRET |
OAuth Client Secret | ✅ | p8e-xxx... |
AEM_SERVICE_ACCOUNT_JSON |
JWT Service Account (file path or JSON string) | ✅ | ./service-account.json |
API endpoints and scopes are configured in shared/constants.py:
/adobe/assets, /adobe/folders (OAuth)/api/assets (JWT)https://ims-na1.adobelogin.com/ims/token/v3openid,AdobeID,aem.assets.author,aem.foldersrest-api/openapi-schema.json.env files or service-account.jsonIssue: JWT authentication not working in Cloud Run
AEM_SERVICE_ACCOUNT_JSON must contain JSON string, not file pathgcloud secrets create aem-service-account-json --data-file=service-account.jsonIssue: Permission denied on Secret Manager
roles/secretmanager.secretAccessor:gcloud secrets add-iam-policy-binding aem-client-secret \
--member="serviceAccount:[email protected]" \
--role="roles/secretmanager.secretAccessor"
Issue: 403 Forbidden from AEM
Issue: Vercel deployment fails
vercel.json points to rest-api/app/main.pySee TESTING.md for more troubleshooting steps.
MIT License - See LICENSE file for details
cd terraform
# Copy and edit variables
cp terraform.tfvars.example terraform.tfvars
nano terraform.tfvars
# Initialize Terraform
terraform init
# Preview changes
terraform plan
# Deploy infrastructure
terraform apply
# Build and tag
docker build -t gcr.io/YOUR_PROJECT/aem-mcp-server .
---
Made with ❤️ for AEM + AI Integration
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"aem-assets-mcp-server": {
"command": "npx",
"args": []
}
}
}