Skip to content

Repository files navigation

EDS MCP Server

npm installs MCP Registry awesome-mcp-servers license

Let 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.

Ask your agent


⚡ 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
Loading

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
Loading

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)
Loading

Use Chrome or Firefox — Safari blocks the local callback (same as Adobe's AEM CLI). EDS_API_KEY works as the CI / fallback path.


🛠️ The 41 tools

Edge Delivery Services — publish, content, analytics

Publishing

  • eds_preview_page
  • eds_publish_page
  • eds_unpublish_page
  • eds_preview_and_publish
  • eds_get_status
  • eds_purge_cache
  • eds_bulk_preview
  • eds_bulk_publish
  • eds_get_job_status

Content

  • eds_get_page
  • eds_list_pages
  • eds_search_pages
  • eds_get_metadata
  • eds_get_sitemap
  • eds_get_redirects

Analytics & config

  • eds_get_cwv
  • eds_get_404s
  • eds_get_experiments
  • eds_get_config
  • eds_get_logs
  • eds_get_api_keys

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

  • eds_da_list_sources
  • eds_da_get_source
  • eds_da_get_versions

Write

  • eds_da_put_source
  • eds_da_delete_source
  • eds_da_copy_source
  • eds_da_move_source

Bulk ("clone") + safe writes

  • eds_da_export
  • eds_da_push
  • eds_da_rollback

eds_da_export / eds_da_push bring the efficiency of aem content clone to agents: export a whole DA subtree in one call, operate on it, and push the batch back in one call — no local checkout, no aem-cli. Same model, network-native.

Safe by default. eds_da_push takes dryRun: true to preview exactly what a bulk edit would do (create / update / unchanged, with line-diff counts) without writing a thing, and withUndo: true to make the write reversible — it returns an undo object you hand to eds_da_rollback to 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_TOKEN is an Adobe IMS access token for Document Authoring — grab it from an authenticated da.live session (the IMS access_token). Document paths assume .html when no extension is given (indexindex.html).

Content audit — find what's wrong, before you fix it

  • eds_audit_page
  • eds_audit_site
  • eds_audit_report
  • eds_audit_snapshot
  • eds_audit_trend
  • eds_audit_monitor

It tells you what's wrong. eds_audit_site sweeps 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 a domainperformance (Core Web Vitals) and 404s from Adobe's own real-user data. eds_audit_page does the same for one page. Read-only and safe to run anytime.

eds_audit_report turns 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 optional brand (agency name, logo, accent, "prepared for" client) to white-label the letterhead.

Track it over time. eds_audit_snapshot records 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_trend turns 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_monitor audits, diffs against the last snapshot, and reports a status — ok / degraded / broken — and, when you give it a webhook, 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_metadata
  • eds_bulk_fix_metadata
  • eds_fix_redirect
  • eds_fix_audit

It fixes what it finds — reversibly. eds_fix_metadata repairs 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). Pass publish: true to preview + publish so the change goes live.

eds_bulk_fix_metadata does 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_redirect closes the 404 loop: eds_audit_site surfaces the broken links from real-user data, and this adds the 301 redirect rules (to the site's redirects sheet) that fix them — one rule or many, idempotent, dry-run + undo. So the audit now has a fix for every major finding.

eds_fix_audit is 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 single eds_da_rollback undoes all of it. dryRun previews the whole plan; publish: true makes 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.

About

The MCP server for Adobe Edge Delivery Services — 41 tools. An AI agent can read, audit, track, monitor, fix (a page or the whole site), publish, and undo — all safely and reversibly.

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages