Register your application in the ClassLink Marketplace and obtain OAuth 2.0 client credentials for the OneRoster 1.2 endpoint
POST to the ClassLink token endpoint with client_credentials grant to receive an access token scoped to roster.readonly
GET /ims/oneroster/rostering/v1p2/orgs to retrieve the district and school org hierarchy
GET /ims/oneroster/rostering/v1p2/classes?limit=100&offset=0 paging with limit/offset to retrieve all active classes for the district
GET /ims/oneroster/rostering/v1p2/classes/{classSourcedId}/enrollments to retrieve teachers and students per class
Store the sourcedId values as stable identifiers; use dateLastModified on each object for incremental sync on subsequent runs
Known gotchas
ClassLink tenant admins must explicitly grant your app access in their LaunchPad dashboard before any API call succeeds — a 403 before this step is expected
OneRoster 1.2 uses a /rostering/v1p2 path prefix distinct from the older 1.1 /v1p1 prefix; mixing versions against the same tenant returns schema mismatches
Status field on enrollment objects can be 'active' or 'tobedeleted' — filter out 'tobedeleted' records rather than treating them as valid enrollments
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