AEM MCP Assistive Controls
Source: "Rolling Out MCP on AEM: Lessons from Early Production" — Pranay Rajput
(Pitney Bowes) & Divanshu Goyal (TechX), adaptTo() 2026, and Adobe's own MCP
docs (Using MCP with AEM as a Cloud Service).
MCP does not add permissions — it operates under the author's existing ACLs —
but it acts on those permissions literally, at machine speed, with none of
the judgment a human author brings. This skill is the assistive layer that
goes with the access: shared starting point, same baseline every time,
instead of five authors improvising five different approaches (some unsafe).
1. Narrate every action in plain language
Authors think about their work differently from developers — a tool name and
a status code don't tell them what actually happened. Before and after every
AEM MCP action, say what you're doing in the author's terms, not the API's:
- Before a write: "I'm about to update
<page/path> — this will replace the
current content on that path." Not just "calling patch_fragment."
- After success: confirm what changed, in one line, in plain language.
- After any failure: explain what the error means for them (see the 412
handling below), not just the raw error text.
Never let an author be left staring at a raw tool error with no
interpretation. If you don't know what an error means, say that plainly and
escalate rather than guessing.
2. Safe tool sequence — always read before you write
AEM's MCP tools are built around a read-then-write pattern; never skip the
read to save a step. For pages: get-aem-page-content before any patch. For
fragments: resolve_fragment_path → get_fragment (this is also where the
current ETag comes from) → build the change → patch_fragment with that
ETag. For a new fragment, check list_models / get_model first so the
content actually matches the model's schema instead of failing (or worse,
partially writing) on a mismatch.
Skipping straight to a write tool without the matching read tool first is
never correct — you won't have a valid ETag, and you're guessing at the
current state instead of confirming it.
3. ETag / HTTP 412 handling — never retry blindly
AEM uses ETags for optimistic concurrency control. Every write carries the
ETag captured in step 2, in If-Match. HTTP 412 means someone else changed
that content since it was last read.
- Never automatically retry a failed write after a 412. Re-reading a new
ETag and resubmitting the same payload silently overwrites whatever the
other change was — there is no warning banner, the later write just wins.
Automated retry on a version conflict is how silent data loss happens.
- On 412: stop immediately, tell the author in plain terms ("this content
changed since we last looked at it — I stopped before overwriting
anything"), and if possible show them what the current content looks like
now versus what they intended.
- Let the author decide next: redo the edit against the current content,
drop it, or go find out who else is editing that path. That decision is
always theirs, never a default you pick for them.
4. Read-only on production, ACL check before any write
- Default to read-only tools on production (
aem-content-read-only, or
the read-only scope of the unified server). Only reach for a write tool
(patch_fragment, create_fragment, put/delete page operations) when
the author has explicitly asked for that specific change — never chain an
unrequested write off the back of a read, and never use write access on
production "since it's available" during exploration or debugging.
- ACL check before write, every first touch. The first time in a session
you're about to write to a given content path — especially one that looks
old, unfamiliar, or outside what this author normally touches — pause and
confirm scope with the author before writing: "this path doesn't look like
one you've touched before, do you want me to proceed?" Permission debt is
real (stale group memberships from finished projects stay active for
years) and MCP will use every permission it's handed without judging
whether it should. This one check is what catches that before it becomes
an incident.
- Never invoke
aem-cloud-manager, aem-quickstart, or aem-dispatcher
on an author's behalf — those are operator/developer tools, not part of an
author's job regardless of what the credential technically allows. If a
task seems to need one, tell the author this looks like it needs a
developer/operator, don't reach for the tool because it happens to be
reachable.
- If a call against an out-of-scope server, an unexpected path, or a
production write succeeds when it shouldn't have, don't treat that as a
green light — flag it to the author as a likely permissions/ACL issue
rather than using it.
The one-line test
Before any write: have I read this path first in this session, do I have a
current ETag, and would the author understand right now what I'm about to
change and why? If any answer is no, stop and do that first. Before any
retry: am I about to resubmit a write after a 412? If yes, stop instead.
1---2name: aem-mcp-author-onboarding3description: Use whenever Claude is operating AEM MCP tools — aem-content, aem-content-read-only (or the unified AEM MCP server's /content and /content-readonly scopes), aem-cloud-manager, aem-quickstart, aem-dispatcher — on behalf of a content author, especially one still new to MCP. Acts as an assistive-control layer — narrating each action in plain language, enforcing a read-first safe tool sequence, checking scope before writes, defaulting production to read-only, and handling ETag/HTTP 412 concurrency conflicts safely — so authors always understand what's happening instead of just seeing pass/fail. Trigger on "AEM MCP", "get-aem-page-content", "patch_fragment", "ETag conflict", "412 error in AEM", or any AEM content read/write via MCP.4---56# AEM MCP Assistive Controls78Source: "Rolling Out MCP on AEM: Lessons from Early Production" — Pranay Rajput9(Pitney Bowes) & Divanshu Goyal (TechX), adaptTo() 2026, and Adobe's own MCP10docs ([Using MCP with AEM as a Cloud Service](https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/ai-in-aem/mcp-support/using-mcp-with-aem-as-a-cloud-service)).11MCP does not add permissions — it operates under the author's existing ACLs —12but it acts on those permissions literally, at machine speed, with none of13the judgment a human author brings. This skill is the assistive layer that14goes with the access: shared starting point, same baseline every time,15instead of five authors improvising five different approaches (some unsafe).1617## 1. Narrate every action in plain language1819Authors think about their work differently from developers — a tool name and20a status code don't tell them what actually happened. Before and after every21AEM MCP action, say what you're doing in the author's terms, not the API's:2223- Before a write: "I'm about to update `<page/path>` — this will replace the24 current content on that path." Not just "calling `patch_fragment`."25- After success: confirm what changed, in one line, in plain language.26- After any failure: explain what the error means for *them* (see the 41227 handling below), not just the raw error text.2829Never let an author be left staring at a raw tool error with no30interpretation. If you don't know what an error means, say that plainly and31escalate rather than guessing.3233## 2. Safe tool sequence — always read before you write3435AEM's MCP tools are built around a read-then-write pattern; never skip the36read to save a step. For pages: `get-aem-page-content` before any patch. For37fragments: `resolve_fragment_path` → `get_fragment` (this is also where the38current ETag comes from) → build the change → `patch_fragment` with that39ETag. For a new fragment, check `list_models` / `get_model` first so the40content actually matches the model's schema instead of failing (or worse,41partially writing) on a mismatch.4243Skipping straight to a write tool without the matching read tool first is44never correct — you won't have a valid ETag, and you're guessing at the45current state instead of confirming it.4647## 3. ETag / HTTP 412 handling — never retry blindly4849AEM uses ETags for optimistic concurrency control. Every write carries the50ETag captured in step 2, in `If-Match`. **HTTP 412 means someone else changed51that content since it was last read.**5253- **Never automatically retry a failed write after a 412.** Re-reading a new54 ETag and resubmitting the same payload silently overwrites whatever the55 other change was — there is no warning banner, the later write just wins.56 Automated retry on a version conflict is how silent data loss happens.57- On 412: stop immediately, tell the author in plain terms ("this content58 changed since we last looked at it — I stopped before overwriting59 anything"), and if possible show them what the current content looks like60 now versus what they intended.61- Let the author decide next: redo the edit against the current content,62 drop it, or go find out who else is editing that path. That decision is63 always theirs, never a default you pick for them.6465## 4. Read-only on production, ACL check before any write6667- **Default to read-only tools on production** (`aem-content-read-only`, or68 the read-only scope of the unified server). Only reach for a write tool69 (`patch_fragment`, `create_fragment`, `put`/`delete` page operations) when70 the author has explicitly asked for that specific change — never chain an71 unrequested write off the back of a read, and never use write access on72 production "since it's available" during exploration or debugging.73- **ACL check before write, every first touch.** The first time in a session74 you're about to write to a given content path — especially one that looks75 old, unfamiliar, or outside what this author normally touches — pause and76 confirm scope with the author before writing: "this path doesn't look like77 one you've touched before, do you want me to proceed?" Permission debt is78 real (stale group memberships from finished projects stay active for79 years) and MCP will use every permission it's handed without judging80 whether it *should*. This one check is what catches that before it becomes81 an incident.82- **Never invoke `aem-cloud-manager`, `aem-quickstart`, or `aem-dispatcher`**83 on an author's behalf — those are operator/developer tools, not part of an84 author's job regardless of what the credential technically allows. If a85 task seems to need one, tell the author this looks like it needs a86 developer/operator, don't reach for the tool because it happens to be87 reachable.88- If a call against an out-of-scope server, an unexpected path, or a89 production write succeeds when it shouldn't have, don't treat that as a90 green light — flag it to the author as a likely permissions/ACL issue91 rather than using it.9293## The one-line test9495Before any write: *have I read this path first in this session, do I have a96current ETag, and would the author understand right now what I'm about to97change and why?* If any answer is no, stop and do that first. Before any98retry: *am I about to resubmit a write after a 412?* If yes, stop instead.