Authenticate by obtaining a JWT token from /oauth2/access_token using the client credentials grant with your application's client_id and client_secret registered in the Open edX Django OAuth Toolkit
List courses on the instance with GET /api/courses/v1/courses/?page_size=100, following the next field in the pagination object for subsequent pages
Retrieve course enrollment for a specific user with GET /api/enrollment/v1/enrollment/<username>,<course_id>
Check completion status per block using GET /completion/v1/course_completion/ with query params username and course_key to retrieve block-level completion data
For grades, call GET /api/grades/v1/courses/<course_key>/?username=<username> to retrieve the course grade summary including percent and letter_grade
Known gotchas
Open edX API endpoints differ between named releases (Maple, Nutmeg, Palm, etc.); an endpoint path valid in one release may be deprecated or moved in another — pin your integration to a specific release version
The completion API tracks XBlock-level completion, not course-level completion; you must aggregate block completions yourself to determine whether a learner has completed the full course
OAuth client credentials must be created by a platform administrator in the LMS Django admin panel; there is no self-service registration endpoint by default in a standard Open edX deployment
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp