EDS MCP Server
The EDS MCP Server provides 20 tools for AI agents (Claude Code, Cursor, GitHub Copilot, etc.) to fully manage Adobe Edge Delivery Services sites.
Publishing & Content Management
Preview, publish, unpublish pages; combined preview-and-publish workflow
Bulk preview/publish (up to 100 pages per operation)
Purge CDN cache; check page/resource status (preview, live, timestamps)
Content & Site Structure
Fetch rendered page HTML, list/search pages (up to 1,000 results)
Retrieve site metadata, sitemap (with last-modified dates), and redirect rules
Analytics & Observability
Core Web Vitals (LCP, CLS, INP, TTFB) from RUM data (up to 90 days)
404 error reports (broken URLs, hit counts, referrers)
A/B experiment results (variant views, clicks, conversion rates)
Activity logs (recent preview, publish, and config actions)
Configuration & Administration
Read site config (fstab, headers, redirects)
List API keys with roles and creation dates
Authentication & Setup
Read-only tools require no credentials; write tools need an admin token
Supports browser-based sign-in (cached token) or
EDS_API_KEYenv var for CI/automationSetup:
npx @focusgts/eds-mcp-serverwithEDS_OWNERandEDS_REPO
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.
⚡ Do it in three lines
claude mcp add eds -e EDS_OWNER=your-org -e EDS_REPO=your-site -- npx @focusgts/eds-mcp-serverThen 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" .-> BIt 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 --> FThe 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
eds_preview_pageeds_publish_pageeds_unpublish_pageeds_preview_and_publisheds_get_statuseds_purge_cacheeds_bulk_previeweds_bulk_publisheds_get_job_status
Content
eds_get_pageeds_list_pageseds_search_pageseds_get_metadataeds_get_sitemapeds_get_redirects
Analytics & config
eds_get_cwveds_get_404seds_get_experimentseds_get_configeds_get_logseds_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_sourceseds_da_get_sourceeds_da_get_versions
Write
eds_da_put_sourceeds_da_delete_sourceeds_da_copy_sourceeds_da_move_source
Bulk ("clone") + safe writes
eds_da_exporteds_da_pusheds_da_rollback
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 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 |
| Yes | GitHub org/user that owns the EDS site repo |
| Yes | GitHub repository name |
| No | Git branch (default: |
| No | Admin token (see Authentication). Browser login is the alternative. |
| No | OpTel domain key for analytics queries (CWV, 404s, experiments) |
| No | Document Authoring IMS access token — enables the |
| No | DA org (defaults to |
| No | DA repo/site (defaults to |
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 loginOpens 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-serverTo 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 requestTool naming:
eds_{verb}_{noun}· stdio transportNative
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
AI skills for EDS content ops — first third-party contributor merged into Adobe's official skills repo | |
CLI + GitHub Action for automated site grading and PR gating | |
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 toolseds_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
Scored across 41 tools
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.
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.
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.
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
Related MCP Connectors
Marketo MCP server for AI. 130 tools to operate Marketo from Claude, Cursor, or ChatGPT.
Unified 15-tool SEO, SERP, clean Markdown & GEO (LLM citation Share-of-Voice) MCP server.
Create, edit, preview, publish, and manage web pages from MCP-capable AI clients.
Meta Ads and Google Ads MCP server: 250+ tools for Claude, ChatGPT, Cursor and Codex.
Related MCP Servers
- -licenseBqualityNot gradedmaintenanceMCP 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.19 npm10-
- AlicenseNot gradedqualityDmaintenanceA 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
- AlicenseCqualityDmaintenanceA SitecoreMCP version that can be used in enterprises100146 npmApache 2.0
- AlicenseNot gradedqualityBmaintenanceThe 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 npmApache 2.0