Whether a person types a question or an agent calls a tool, every path through the ESAI MCP ends at the same consolidated Optimizely knowledge base. Here's what's running, and what each piece does.
✓ Live today
| Tool | What it does |
|---|---|
| list-modules | Lists the knowledge modules available to your key |
| get-module | Fetches a module's manifest; pass includeProfileIndex to also list every profile in it |
| get-module-doc | Fetches a module's supporting doc file |
| get-profiles | Fetches one or more (1+) knowledge profiles in a single call |
| search-profiles | Full-text keyword search across every profile's headings and body text — use when you don't already know a profile's name |
| list-skills | Lists the skills available to your key |
| get-skill | Fetches a skill's SKILL.md. For gated skills (the upgrade, build and audit skills) it returns a short stub until a run is started; pass the runToken from record-skill-start to get the full skill. The “I’m stuck” skill, cms-upgrade-help, is never gated: it is always served, so it stays reachable even from a stub. |
| get-skill-file | Fetches a supporting file from a skill; for gated skills pass the same runToken (a skill's token also covers the files of the companion skills it declares) |
| get-knowledge-version | Returns a module's (or pack's) current freshness marker |
| what-changed | Reports what changed in the knowledge base since a prior call, and which profiles are stale |
| list-context-packs | Lists the named context packs available |
| get-context-pack | Resolves a named pack against the live module registry and returns its knowledge slice |
| Tool | What it does |
|---|---|
| record-signal | Logs a usage or feedback signal |
| record-skill-start | Starts a skill run: pass the skill slug and your exact model ID (logged as reported, never rated or rejected). Returns the runToken that get-skill and get-skill-file need for gated skills, and opens a tracked run when a skill-run store is configured (a short-lived provisional token is issued if the store is unavailable). Not a source of the signalToken record-signal needs (that comes from get-module, get-profiles, get-module-doc, search-profiles, or get-context-pack) |
| record-skill-progress | Optional: appends an ordered phase/step event to a run (takes the runToken, or the runId from record-skill-start for a run of your own key when your client cannot send a token; if record-skill-start returned none, skip this call). Skills do not call it by default |
| record-skill-end | Closes a run with completed, halted or failed (takes the runToken, or the runId from record-skill-start for a run of your own key when your client cannot send a token; if record-skill-start returned none, skip this call) — a skill’s final step and every hard stop |
11 more tools exist in the full registry (27 total) but aren't shown here: record-knowledge and export-knowledge are role-gated (contributor/admin); get-contributions, get-learning-status, get-skill-run, list-skill-runs, list-signals, dismiss-signal, promote-signal, ask-opal, and opal-doc-watch are internal-admin-only (denylisted here too). None of the 11 are reachable from a partner integration.
optimizely-cms-expert is the steady-state expert module for Optimizely CMS, covering both the versioned PaaS CMS 13 and the versionless SaaS CMS, plus the surrounding platform — Graph, Opti ID, Forms, DAM, Visual Builder, and Opal. It doesn't run migrations; it answers "how does this work" and "is this supported" questions, and hands off to the upgrade skills when the real question turns out to be "how do I migrate."
Writes Optimizely CMS code across CMS 11–13 (PaaS) to current best practice.
Builds TypeScript / Next.js front-ends against Optimizely SaaS CMS, hydrated from Graph.
Wire Claude, Copilot, Cursor, or a custom agent into the MCP's 16 live tools.
Scans any stack and produces a compact, token-efficient index for AI context.