Let an AI agent run — and improve — your Adobe Edge Delivery site.
40 tools. No extra dependencies beyond the MCP SDK. Works with any EDS site. The first MCP server purpose-built for Edge Delivery Services.
Read your content → audit it → fix what's wrong → publish → undo any of it. One page or the whole site, in a single reversible operation. Preview before every write; undo after.
⚡ Do it in three lines
claude mcp add eds -e EDS_OWNER=your-org -e EDS_REPO=your-site -- npx @focusgts/eds-mcp-server
Then just ask your agent:
"Audit the whole site and show me what's hurting SEO." "Fix the meta description on every page that's missing one — preview first, then publish." "Actually, undo that whole batch." "Preview and publish the homepage."
That's it — no local AEM, no scripts, no glue code. Every write is previewable and reversible.
The loop that makes it different
flowchart LR
A["📖 Read<br/>authored content (DA)"] --> B["🔍 Audit<br/>SEO · a11y · perf · freshness"]
B --> C["🛠️ Fix<br/>one page or the whole site"]
C --> D["🚀 Publish<br/>preview + live"]
D --> E["↩️ Undo<br/>one call reverts it all"]
E -. "re-audit to zero" .-> B
It doesn't just drive your site — it improves it, safely. Point it at an EDS site and an agent can find what's wrong and repair it, one page or the whole site in a single batch that a single eds_da_rollback reverts. No other MCP server — including Adobe's own — does this end-to-end.
🧠 How it works
flowchart LR
A["AI agent<br/>(Claude Code · Cursor · Copilot)"] -- MCP / stdio --> B["eds-mcp-server<br/>40 tools"]
B --> C["Admin API<br/>admin.hlx.page"]
B --> D["Content API<br/>*.aem.live"]
B --> E["RUM / OpTel<br/>Core Web Vitals"]
B --> G["Document Authoring<br/>admin.da.live"]
C --> F["Your EDS site"]
D --> F
E --> F
G --> F
The agent calls tools; the server talks to the live EDS infrastructure. Read-only tools (content, sitemap, metadata) need no credentials at all.
🔑 One-click sign-in
No more pasting a fresh admin token every day:
sequenceDiagram
participant You
participant CLI as eds-mcp-server login
participant Adobe as admin.hlx.page
You->>CLI: npx @focusgts/eds-mcp-server login
CLI->>Adobe: open browser (client_id=aem-cli)
You->>Adobe: sign in & approve
Adobe-->>CLI: siteToken → localhost callback
CLI-->>You: cached ~/.aem/auth-token.json (reused automatically)
Use Chrome or Firefox — Safari blocks the local callback (same as Adobe's AEM CLI).
EDS_API_KEYworks as the CI / fallback path.
🛠️ The 40 tools
Edge Delivery Services — publish, content, analytics
|
Publishing
|
Content
|
Analytics & config
|
Document Authoring (DA) — the authored source, not the rendered output
Nine tools reach a site's Document Authoring source directly (admin.da.live), the source of truth behind an EDS site. Requires EDS_DA_TOKEN.
|
Read
|
Write
|
Bulk ("clone") + safe writes
|
eds_da_export/eds_da_pushbring the efficiency ofaem content cloneto agents: export a whole DA subtree in one call, operate on it, and push the batch back in one call — no local checkout, noaem-cli. Same model, network-native.Safe by default.
eds_da_pushtakesdryRun: trueto preview exactly what a bulk edit would do (create / update / unchanged, with line-diff counts) without writing a thing, andwithUndo: trueto make the write reversible — it returns anundoobject you hand toeds_da_rollbackto restore prior content and remove any docs the push created. Preview before writing, undo after: the difference between an impressive demo and something you'd point at a production site.
EDS_DA_TOKENis an Adobe IMS access token for Document Authoring — grab it from an authenticated da.live session (the IMSaccess_token). Document paths assume.htmlwhen no extension is given (index→index.html).
Content audit — find what's wrong, before you fix it
eds_audit_pageeds_audit_siteeds_audit_reporteds_audit_snapshoteds_audit_trend
It tells you what's wrong.
eds_audit_sitesweeps the whole site (or a subtree) and returns a prioritized list of issues across SEO (missing titles/descriptions, no H1, blocked from indexing), accessibility (images without alt text, missing landmarks, unlabeled form inputs), freshness (pages not updated in over a year), sitemap coverage, and — with adomain— performance (Core Web Vitals) and 404s from Adobe's own real-user data.eds_audit_pagedoes the same for one page. Read-only and safe to run anytime.
eds_audit_reportturns that audit into a beautiful, shareable HTML report — per-dimension health scores, a prioritized issue list, and each suggested fix — self-contained (no external assets), ready to open, host, or send to a stakeholder.Track it over time.
eds_audit_snapshotrecords each audit's scores to a history sheet in your site's own content (private by default) and tells you the change since last time — "89, ▲7 since last week."eds_audit_trendturns that history into a shareable HTML sparkline of your score over time plus per-dimension movement. One snapshot is a mirror; the trend is the story.
Safe fixes — repair what the audit finds
eds_fix_metadataeds_bulk_fix_metadataeds_fix_redirecteds_fix_audit
It fixes what it finds — reversibly.
eds_fix_metadatarepairs a page's title, meta description and Open Graph image by editing its Document Authoring source, routed through the same dry-run + undo path as the write tools. The agent supplies the content (e.g. writes a fitting description); the tool writes it correctly and idempotently (merges into the page's Metadata block, never duplicates it). Passpublish: trueto preview + publish so the change goes live.
eds_bulk_fix_metadatadoes it across a whole site in one reversible operation — pass a list of{ path, metadata }, and it writes every changed page in a single batch that returns one undo reverting all of it. The full loop:eds_audit_site→ fix the batch → publish → re-audit to zero — with a single undo if anything looks off.
eds_fix_redirectcloses the 404 loop:eds_audit_sitesurfaces the broken links from real-user data, and this adds the 301 redirect rules (to the site'sredirectssheet) that fix them — one rule or many, idempotent, dry-run + undo. So the audit now has a fix for every major finding.
eds_fix_auditis the "fix it" button in agent form: after an audit, apply its fixable findings — metadata and redirects together — in one reversible batch. Findings the report marks ✦ Fixable carry a machine-readable fix; you supply the values (the tool never invents copy), and every change is pushed at once so a singleeds_da_rollbackundoes all of it.dryRunpreviews the whole plan;publish: truemakes it live.
🔌 Add it to your tool
Claude Code — one command
claude mcp add eds -e EDS_OWNER=your-org -e EDS_REPO=your-site -- npx @focusgts/eds-mcp-server
Cursor — .cursor/mcp.json
{
"mcpServers": {
"eds": {
"command": "npx",
"args": ["@focusgts/eds-mcp-server"],
"env": { "EDS_OWNER": "your-org", "EDS_REPO": "your-site" }
}
}
}
VS Code (GitHub Copilot) — .vscode/mcp.json
{
"servers": {
"eds": {
"command": "npx",
"args": ["@focusgts/eds-mcp-server"],
"env": { "EDS_OWNER": "your-org", "EDS_REPO": "your-site" }
}
}
}
⚙️ Configuration
| Variable | Required | Description |
|---|---|---|
EDS_OWNER | Yes | GitHub org/user that owns the EDS site repo |
EDS_REPO | Yes | GitHub repository name |
EDS_REF | No | Git branch (default: main) |
EDS_API_KEY | No | Admin token (see Authentication). Browser login is the alternative. |
EDS_DOMAIN_KEY | No | OpTel domain key for analytics queries (CWV, 404s, experiments) |
EDS_DA_TOKEN | No | Document Authoring IMS access token — enables the eds_da_* source & bulk tools |
EDS_DA_ORG | No | DA org (defaults to EDS_OWNER) |
EDS_DA_REPO | No | DA repo/site (defaults to EDS_REPO) |
Read-only tools (content, sitemap, metadata) need no keys. Write tools (preview, publish, cache) need an admin token. Analytics tools need EDS_DOMAIN_KEY. DA source tools need EDS_DA_TOKEN.
🔐 Authentication
Admin operations require an EDS Admin token. Two ways to provide one.
Browser sign-in (recommended for interactive use)
EDS_OWNER=your-org EDS_REPO=your-site npx @focusgts/eds-mcp-server login
Opens your browser to Adobe's admin.hlx.page login (the same flow as the AEM CLI). The admin site token caches at ~/.aem/auth-token.json (mode 0600, ~24h) and is reused automatically. Use Chrome or Firefox — Safari blocks the local callback.
EDS_API_KEY (CI / automation, and the fallback) — always takes precedence when set.
EDS_OWNER=your-org EDS_REPO=your-site EDS_API_KEY=<your-admin-token> npx @focusgts/eds-mcp-server
To get a token (per Adobe's API key docs): sign in at https://admin.hlx.page/login, then copy the auth_token cookie value from DevTools — or copy the x-auth-token header from an authenticated AEM Sidekick request. For a durable credential, configure a site API key.
🏗️ Architecture
Built following Adobe's MCP conventions (derived from adobe-rnd/da-mcp):
- TypeScript +
@modelcontextprotocol/sdk+zod, stateless per request - Tool naming:
eds_{verb}_{noun}· stdio transport - Native
fetch()(Node 18+) — no HTTP dependencies
git clone https://github.com/Focus-GTS/eds-mcp-server.git
cd eds-mcp-server && npm install && npm run build && npm test
🧩 Part of the FocusGTS EDS suite
| eds-content-ops-skills | AI skills for EDS content ops — first third-party contributor merged into Adobe's official skills repo |
| eds-ops | CLI + GitHub Action for automated site grading and PR gating |
| EDS Score | Free browser-based site health analyzer |
Built by FocusGTS — Adobe Silver Solution Partner · Apache-2.0
Not affiliated with or endorsed by Adobe Inc.