Eds Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Eds Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<div align="center">
EDS MCP Server
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.
</div>
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.
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.
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.
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.<table> <tr><td valign="top" width="33%">
Publishing
eds_preview_pageeds_publish_pageeds_unpublish_pageeds_preview_and_publisheds_get_statuseds_purge_cacheeds_bulk_previeweds_bulk_publisheds_get_job_status</td><td valign="top" width="33%">
Content
eds_get_pageeds_list_pageseds_search_pageseds_get_metadataeds_get_sitemapeds_get_redirects</td><td valign="top" width="33%">
Analytics & config
eds_get_cwveds_get_404seds_get_experimentseds_get_configeds_get_logseds_get_api_keys</td></tr> </table>
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.
<table> <tr><td valign="top" width="33%">
Read
eds_da_list_sourceseds_da_get_sourceeds_da_get_versions</td><td valign="top" width="33%">
Write
eds_da_put_sourceeds_da_delete_sourceeds_da_copy_sourceeds_da_move_source</td><td valign="top" width="33%">
Bulk ("clone") + safe writes
eds_da_exporteds_da_pusheds_da_rollback</td></tr> </table>
`eds_da_export` / `eds_da_push` bring 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).
eds_audit_pageeds_audit_siteeds_audit_reporteds_audit_snapshoteds_audit_trendeds_audit_monitorIt 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_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_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](examples/monitor.yml) or your agent runtime. Webhook is https-only and the payload carries no secrets.
eds_fix_metadataeds_bulk_fix_metadataeds_fix_redirecteds_fix_auditIt 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_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_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_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 singleeds_da_rollbackundoes all of it.dryRunpreviews the whole plan;publish: truemakes it live.
<details open> <summary><b>Claude Code</b> — one command</summary>
claude mcp add eds -e EDS_OWNER=your-org -e EDS_REPO=your-site -- npx @focusgts/eds-mcp-server</details>
<details> <summary><b>Cursor</b> — <code>.cursor/mcp.json</code></summary>
{
"mcpServers": {
"eds": {
"command": "npx",
"args": ["@focusgts/eds-mcp-server"],
"env": { "EDS_OWNER": "your-org", "EDS_REPO": "your-site" }
}
}
}</details>
<details> <summary><b>VS Code (GitHub Copilot)</b> — <code>.vscode/mcp.json</code></summary>
{
"servers": {
"eds": {
"command": "npx",
"args": ["@focusgts/eds-mcp-server"],
"env": { "EDS_OWNER": "your-org", "EDS_REPO": "your-site" }
}
}
}</details>
| 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.
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.
Built following Adobe's MCP conventions (derived from adobe-rnd/da-mcp):
@modelcontextprotocol/sdk + zod, stateless per requesteds_{verb}_{noun} · stdio transportfetch() (Node 18+) — no HTTP dependenciesgit clone https://github.com/Focus-GTS/eds-mcp-server.git
cd eds-mcp-server && npm install && npm run build && npm test| 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 |
<div align="center">
Built by [FocusGTS](https://focusgts.com) — Adobe Silver Solution Partner · Apache-2.0 <br/>Not affiliated with or endorsed by Adobe Inc.
</div>
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.