About eds-mcp-server
eds-mcp-server provides tools for managing Adobe Edge Delivery Services sites, from reading content and auditing site health to editing and publishing changes. It is aimed at agents and site operators, with previewable writes and rollback for reversible updates.
Key features
- 01Read and search site content
- 02Audit SEO, accessibility, and freshness
- 03Preview, publish, and unpublish pages
- 04Edit Document Authoring sources in batches
- 05Undo changes with rollback
- 06Track audits and send webhook alerts
Use cases
- 01Find site-wide SEO and accessibility issues
- 02Preview and publish page updates
- 03Apply metadata fixes across a site
- 04Monitor audit changes and alert on health drops
MCP support
Exposes 41 tools for interacting with EDS content, publishing, analytics, audits, and Document Authoring. Read-only operations need no credentials; write, analytics, and source-editing tools require the corresponding credentials.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
npx -y @focusgts/eds-mcp-serverEDS_OWNERGitHub org/user that owns the EDS site repoEDS_REPOGitHub repository name for the EDS siteEDS_REFGit branch (default: main)EDS_API_KEYSecretAdmin API key for preview/publish/cache operationsEDS_DOMAIN_KEYSecretOpTel domain key for Core Web Vitals, 404s, and experiment queriesEDS_DA_TOKENSecretDocument Authoring IMS access token — enables the eds_da_* source and bulk toolsEDS_DA_ORGDocument Authoring org (defaults to EDS_OWNER)EDS_DA_REPODocument Authoring repo/site (defaults to EDS_REPO)Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
41Saved tool list · updated 2w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| path | string | Yes | Page path relative to the site root (e.g., /about or /blog/my-post) |
Details
From the project READMELet an AI agent run — and improve — your Adobe Edge Delivery site.
41 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/>41 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 41 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_trendeds_audit_monitor
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, client-ready HTML report — a Focus GTS Navigator letterhead, an executive summary, per-dimension health scores, a prioritized issue list with each suggested fix, and a Save-as-PDF button (uses your browser's own print — no dependency). Self-contained (no external assets), ready to open, host, or send to a stakeholder. Pass an optionalbrand(agency name, logo, accent, "prepared for" client) to white-label the letterhead.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.Watch it on autopilot.
eds_audit_monitoraudits, diffs against the last snapshot, and reports a status — ok / degraded / broken — and, when you give it awebhook, pings Slack/Discord the moment health breaks (a new critical, or a dimension fallen to poor). The server does the check + alert; you supply the schedule — a copy-paste scheduled GitHub Action or your agent runtime. Webhook is https-only and the payload carries no secrets.
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.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.