Skip to main content
Glama

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

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.


Related MCP server: AEM MCP Server

🧠 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_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 (index → index.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 domain — performance (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 mcp add eds -e EDS_OWNER=your-org -e EDS_REPO=your-site -- npx @focusgts/eds-mcp-server
{
  "mcpServers": {
    "eds": {
      "command": "npx",
      "args": ["@focusgts/eds-mcp-server"],
      "env": { "EDS_OWNER": "your-org", "EDS_REPO": "your-site" }
    }
  }
}
{
  "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.

Available Tools

41 tools
eds_audit_monitorA

Watch a site on a schedule: run the audit, DIFF it against the last snapshot, and report a status — ok / degraded / broken (a new critical issue, or a dimension fallen to poor). Records the new snapshot (shares the eds_audit_snapshot/eds_audit_trend history). Pass a webhook (https Slack/Discord/generic URL) to get pinged when the status crosses alertOn (default 'broken') — the payload is compact and carries only public audit data, never secrets. This is the 'automate it' primitive: the SERVER does the check + alert; you supply the schedule (a cron / a scheduled GitHub Action — see examples/monitor.yml — or your agent runtime). Requires EDS_DA_TOKEN. Same audit options as eds_audit_site.

Inputs: days, domain, alertOn, publish, +6 more.

eds_audit_pageA

Audit a single page for SEO and accessibility issues (missing title/description, no H1, images without alt text, missing landmarks, etc.). Returns a prioritized list of findings with suggested fixes. Read-only.

Inputs: path (required).

eds_audit_reportA

Run a site audit and return a beautiful, self-contained, client-ready HTML report — a Focus GTS Navigator letterhead, an executive summary, per-dimension health scores, a prioritized issue list with suggested fixes, and a "Save as PDF" button (browser print, no dependency). Navigator-branded by default. Optionally pass brand (your own agency name, logo as a data: URI, hex accentColor, preparedFor client name) to white-label the letterhead, and/or an executiveSummary you write; the Navigator footer credit always stays. Same audit options as eds_audit_site. Read-only.

Inputs: days, brand, domain, maxPages, +3 more.

eds_audit_siteA

Sweep the whole site (or a subtree) and return a prioritized list of content-quality issues across SEO, accessibility, freshness, sitemap coverage, and — when a domain is supplied — performance (Core Web Vitals) and 404s from real-user data. Read-only; safe to run anytime. Pair with the eds_da_* write tools to fix what it finds.

Inputs: days, domain, maxPages, dimensions, +1 more.

eds_audit_snapshotA

Run the site audit and RECORD its scores to a history sheet in the site's own Document Authoring content (default /audit-history.json, kept private/unpublished), so health can be tracked over time. Returns the overall score AND the change since the last snapshot (e.g. "89, ▲7 vs 2026-08-09"). One row per day — a same-day re-run updates that day's row. dryRun previews the row; publish:true makes the sheet live. Requires EDS_DA_TOKEN. Pair with eds_audit_trend to see the line. Same audit options as eds_audit_site.

Inputs: days, domain, dryRun, publish, +4 more.

eds_audit_trendA

Show site health OVER TIME from the recorded snapshots — returns a self-contained, theme-aware HTML trend view (an SVG sparkline of the overall score plus per-dimension movement since the last snapshot), ready to save or share. Reads the history sheet written by eds_audit_snapshot. Pass format:'text' for a short plain-text summary instead of HTML. Requires EDS_DA_TOKEN. Read-only.

Inputs: format, historyPath.

eds_bulk_fix_metadataA

Fix SEO/social metadata across MANY pages in one reversible operation. Takes a list of { path, metadata } (the agent supplies each page's values after auditing). Writes all changed pages in a single batch and returns ONE undo object that reverts the entire batch via eds_da_rollback. dryRun previews the whole plan; publish:true previews+publishes the batch live. Requires EDS_DA_TOKEN. Pair with eds_audit_site to fix a site's findings at once.

Inputs: pages (required), dryRun, publish.

eds_bulk_previewA

Start an asynchronous bulk preview job over many pages in one call. Returns a job handle immediately; poll eds_get_job_status for progress. Use for section updates or content migrations.

Inputs: paths (required), forceUpdate.

eds_bulk_publishA

Start an asynchronous bulk publish job from preview to the live production domain over many pages in one call. Returns a job handle immediately; poll eds_get_job_status for progress.

Inputs: paths (required), forceUpdate.

eds_da_copy_sourceA

Copy an authored source document to another path in Document Authoring. Requires EDS_DA_TOKEN.

Inputs: to (required), from (required).

eds_da_delete_sourceA

Delete an authored source document from Document Authoring. Requires EDS_DA_TOKEN.

Inputs: path (required).

eds_da_exportA

Bulk-export a whole Document Authoring subtree in one call: recursively fetch every document under a path and return all their sources together. The efficient "clone" read for operating on many pages at once (vs. one get per page). Requires EDS_DA_TOKEN.

Inputs: path (required), maxFiles.

eds_da_get_sourceA

Get the raw authored source (typically HTML) of a Document Authoring document — the source of truth, not the rendered/previewed output. Requires EDS_DA_TOKEN.

Inputs: path (required).

eds_da_get_versionsA

Get the version history of a Document Authoring source document. Requires EDS_DA_TOKEN.

Inputs: path (required).

eds_da_list_sourcesA

List authored source documents and folders in Document Authoring (DA) under a path. Requires EDS_DA_TOKEN.

Inputs: path.

eds_da_move_sourceB

Move (rename) an authored source document to another path in Document Authoring. Requires EDS_DA_TOKEN.

Inputs: to (required), from (required).

eds_da_pushA

Bulk-push many edited Document Authoring documents back in one call. Set dryRun to PREVIEW what would change (create/update/unchanged) without writing anything — safest to run this first. Set withUndo to make the write reversible (returns an undo object for eds_da_rollback). Requires EDS_DA_TOKEN.

Inputs: documents (required), dryRun, withUndo.

eds_da_put_sourceA

Create or update (upsert) the authored source of a Document Authoring document. Requires EDS_DA_TOKEN.

Inputs: path (required), content (required), contentType.

eds_da_rollbackA

Undo a previous eds_da_push. Pass the exact undo object returned by a push that used withUndo — it restores overwritten documents and deletes newly-created ones. Requires EDS_DA_TOKEN.

Inputs: undo (required).

eds_fix_auditA

Fix what the audit found — across metadata AND redirects — in ONE reversible operation. After eds_audit_site/eds_audit_report, findings that carry a fix are repairable here: pass metadata fixes (per page) and/or redirects ({ source, destination }) with the values YOU wrote from the findings — this tool never invents copy. Everything is pushed in a single batch, so ONE eds_da_rollback undoes the whole thing. dryRun previews the combined plan; publish:true makes it live. Requires EDS_DA_TOKEN. This is the 'Fix it' button in agent form: audit → you supply values → one safe, reversible apply.

Inputs: dryRun, publish, metadata, redirects.

eds_fix_metadataA

Fix a page's SEO/social metadata (title, description, Open Graph image) by editing its Document Authoring source. Adds or updates the page's Metadata block idempotently, through the safe-writes path (dry-run + undo). The AGENT supplies the values (e.g. write a good meta description); this tool writes them correctly and reversibly. Requires EDS_DA_TOKEN. Set publish:true to preview+publish so the change goes live.

Inputs: path (required), metadata (required), dryRun, publish, +1 more.

eds_fix_redirectA

Fix broken links (404s) by adding redirect rules to the site's redirects sheet — the EDS mechanism that serves 301 redirects. Pass one or many { source, destination } rules (source = relative path like /old-page; destination = a relative path or full URL). Idempotent (updates a rule for an existing source, never duplicates). Routed through the safe-writes path (dry-run + undo); publish:true publishes the sheet so redirects go live. Requires EDS_DA_TOKEN. Pair with eds_audit_site (which surfaces the top 404s from real-user data).

Inputs: redirects (required), dryRun, publish.

eds_get_404sA

Get a report of 404 errors for an EDS site including hit counts and referrer sources

Inputs: domain (required), days.

eds_get_api_keysA

List the API keys configured for the EDS site including their roles and creation dates

Inputs: no named parameters.

eds_get_configA

Read the site configuration from the EDS config endpoint (fstab, headers, redirects, etc.)

Inputs: no named parameters.

eds_get_cwvB

Get Core Web Vitals (LCP, CLS, INP, TTFB) for an EDS site from the RUM data pipeline

Inputs: domain (required), days.

eds_get_experimentsA

Get A/B experiment results for an EDS site including variant views, clicks, and conversion rates

Inputs: domain (required), experiment.

eds_get_job_statusA

Check the progress of an asynchronous bulk job started by eds_bulk_preview or eds_bulk_publish. Reports state (created/running/stopped) and processed/failed counts.

Inputs: name (required), topic (required).

eds_get_logsA

Get the project activity log showing recent preview, publish, and configuration actions

Inputs: limit.

eds_get_metadataA

Fetch the site-wide metadata sheet (metadata.json) containing SEO and social meta values

Inputs: no named parameters.

eds_get_pageA

Fetch the rendered HTML content of an EDS page via the .plain.html endpoint

Inputs: path (required).

eds_get_redirectsA

Fetch and parse the site redirects spreadsheet (redirects.json). Returns all redirect rules with source, destination, and type (301/302).

Inputs: no named parameters.

eds_get_sitemapA

Fetch and parse the site sitemap.xml, returning all URLs with last-modified dates

Inputs: no named parameters.

eds_get_statusA

Get the current preview, live, and code-bus status for an EDS resource including URLs and modification timestamps

Inputs: path (required).

eds_list_pagesA

List pages from the site query index with pagination support

Inputs: limit, offset.

eds_preview_and_publishB

Preview a page and then immediately publish it to live in a single atomic operation. The most common EDS workflow.

Inputs: path (required).

eds_preview_pageA

Trigger preview for an EDS page so changes from the content source are reflected on the preview domain (*.aem.page)

Inputs: path (required).

eds_publish_pageB

Publish an EDS page from preview to the live production domain (*.aem.live)

Inputs: path (required).

eds_purge_cacheA

Purge the CDN cache for an EDS page path so the next request fetches fresh content

Inputs: path (required).

eds_search_pagesA

Search for pages by keyword across titles, descriptions, and paths in the site query index

Inputs: query (required), limit, offset.

eds_unpublish_pageA

Remove an EDS page from the live production site. The page will no longer be publicly accessible.

Inputs: path (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 41 tools

    Disambiguation4/5

    Most tools separate cleanly by resource and action, and the consistent prefixing/describing makes preview, publish, DA source, audit, and fix workflows mostly distinct. Some confusion is possible between eds_audit_site, eds_audit_report, and eds_audit_snapshot, which all run the same audit with different outputs, and eds_preview_and_publish duplicates a two-step workflow.

    Naming Consistency4/5

    Names generally follow an eds_<domain>_<action>_<object> pattern, and the eds_da_* and eds_audit_* grouping is easy to recognize. Minor deviations like eds_preview_and_publish and eds_audit_report break the verb-first convention, but there is no chaotic mixing of styles.

    Tool Count2/5

    41 tools is beyond the threshold where a tool set starts to feel bloated, even for a fairly broad EDS management domain. Several audit/reporting variants and single-purpose helpers could be consolidated without losing capability.

    Completeness4/5

    The tool set covers the main EDS lifecycle very well: page preview/publish/unpublish, CDN cache, DA source CRUD plus move/copy/versions/export/push/rollback, and a full audit-to-fix path. Peripheral gaps exist, such as API key creation/deletion and config editing, but they are not central to the server's apparent purpose.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • -
      license
      B
      quality
      Not graded
      maintenance
      MCP server for Akamai APIs. 198 tools covering Property Manager, Edge DNS, CPS, WAF, and reporting. Built with TypeScript, featuring modular architecture, comprehensive testing, and multi-account support. Make Akamai accessible to AI assistants.
      1
      9 npm
      10
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      A comprehensive Model Context Protocol server for Adobe Experience Manager that provides 35+ REST/JSON-RPC API methods for complete content, component, asset, and template management. Enables AI-powered AEM automation through natural language interfaces with support for page operations, component CRUD, asset management, and publishing workflows.
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      The first full-featured MCP server for Adobe Experience Platform: 29 tools across schemas, datasets, profiles, segments, query service, and GDPR/CCPA privacy operations. Extends Adobe's read-only beta with production-grade write operations.
      72 npm
      Apache 2.0