Aep
Full-CRUD server for AEP, Journey Optimizer and CJA. 61 tools from one OAuth credential.
- Transport
- Not stated
- Package
- —
- Registry id
- com.focusgts/aep
No install snippet on purpose. A working MCP config is a command, its arguments and an environment block — the last two are where API keys live, so this catalogue never stores them and cannot publish them. Follow the link above for the authors' own instructions.
61 tools across 14 categories. Full read AND write. Self-hosted, Apache-2.0, no invitation required. Experience Platform, Journey Optimizer and Customer Journey Analytics — from one OAuth credential.
Ingest a batch → compose a schema → activate an audience → honour an erasure. Every mutation gated by a fail-closed write guard that asks Adobe what kind of sandbox it's in.
⚡ Do it in three lines
claude mcp add aep \
-e AEP_CLIENT_ID=... -e AEP_CLIENT_SECRET=... \
-e AEP_ORG_ID=...@AdobeOrg -e AEP_SANDBOX_NAME=your-dev-sandbox \
-- npx -y @focusgts/aep-mcp-server
Then just ask your agent:
"Create a schema with the Demographic Details field group, then a dataset on it." "Ingest this NDJSON file and tell me when the batch lands." "Build an audience of customers who bought twice this quarter and activate it." "Delete every record for this email address — dry run first."
Writes are off until you ask for them, and safe mode only unlocks sandboxes Adobe classifies as development.
The loop that makes it different
flowchart LR A["📐 Compose<br/>schema from field groups"] --> B["🗂️ Create<br/>dataset"] B --> C["📥 Ingest<br/>batch · upload · complete"] C --> D["🎯 Activate<br/>segment → destination"] D --> E["🧹 Govern<br/>erasure · expiration · quota"] E -. "re-audit the tenant" .-> A
Adobe's first-party gateway can tell you what's in your Experience Platform tenant. It cannot create a dataset, land a batch, activate an audience, or submit an erasure. This does — and does it behind a guard that fails closed.
🧠 How it works
flowchart LR
A["AI agent<br/>(Claude · Cursor · Copilot)"] -- MCP / stdio --> B["aep-mcp-server<br/>61 tools"]
B --> W{{"write guard<br/>fail-closed"}}
W --> C["Schema Registry · Catalog<br/>Ingestion · Lifecycle · Privacy"]
C --> F["Your AEP sandbox<br/>platform.adobe.io"]
B --> J["Journey Optimizer<br/>read-only"]
J --> K["ajo campaigns"]
B --> Q["Customer Journey Analytics<br/>read-only, no sandbox"]
Q --> L["cja.adobe.io"]
The agent calls tools; the server talks to live Adobe APIs over OAuth Server-to-Server. The write guard sits in the HTTP client, not in each tool, so all 61 inherit it and none can forget it. Blocked calls never reach Adobe.
🛡️ Safe by default
Three postures. Reads are never restricted in any mode.
AEP_MODE |
Writes permitted | Use it when |
|---|---|---|
read-only |
Never, in any sandbox | Handing the server to someone to explore an environment you don't want touched |
safe (default) |
Only where Adobe classifies the sandbox development |
Evaluating, or letting an agent work without risking production |
production |
Anywhere, including production | You run your own change control and don't want the server second-guessing you |
From the project's README.