People & access
Create users, enroll (single + bulk), grant course/instructor roles, gate admin escalation, reset attempts, retire accounts.
claude mcp add --transport http openedx https://mcp.<LMS_HOST>/mcp \--header "Authorization: Bearer <YOUR_MCP_KEY>"People & access
Create users, enroll (single + bulk), grant course/instructor roles, gate admin escalation, reset attempts, retire accounts.
Courses & authoring
Read outlines, build section→component trees, edit blocks, update schedule / grading / advanced settings, publish — straight into the CMS modulestore.
Certificates & reports
Generate / regenerate / invalidate certificates; kick off async grade and roster exports and fetch their download links.
Analytics
Enrollment counts, course + user listings, per-learner grades — cheap cached reads, no heavy queries.
is_staff / superuser — live
One authority: the platform’s own flags, re-checked every request. Demote a user and every key they hold dies on the next call.
Least-privilege scopes
Nine scopes narrow each key. destructive is additive; granting admin needs
a dedicated grant:admin scope.
Dry-run + confirm
High-impact and destructive tools preview first and return a single-use, payload-bound confirm token before anything is written.
Rate-limited + audited
Per-tool fixed-window limits stop runaway agents; every write is recorded in an append-only audit log before it happens.
Every operation calls native openedx-platform Python APIs — no core fork,
no Hasura, no external identity, no multi-tenant model. Ships as two standard
Open edX djangoapp plugins (LMS + CMS) plus a thin MCP proxy. Ulmo release.