Read the CLR 2.0 specification at https://www.imsglobal.org/spec/clr/v2p0; understand that a ClrCredential wraps an array of verifiableCredential entries, each of which may be an Open Badges 3.0 AchievementCredential
Construct the ClrCredential JSON-LD document with @context including https://purl.imsglobal.org/spec/clr/v2p0/context.json, a learner DID as credentialSubject.id, and a learnerOf array of AchievementCredential objects
Sign the ClrCredential using a DataIntegrityProof (eddsa-rdfc-2022 or ecdsa-rdfc-2019) with your institution's issuer DID
Register your system as a CLR Host or Consumer via OAuth 2.0 dynamic client registration at the platform's discovery endpoint (/.well-known/openid-configuration); request scope https://purl.imsglobal.org/spec/clr/v2p0/scope/credentials.readonly or .upsert
POST the signed ClrCredential to /ims/clr/v2p0/credentials; on success, the response includes a clrCredentialId for future retrieval
Retrieve via GET /ims/clr/v2p0/credentials?limit=100&offset=0 using pagination to list all credentials for a learner
Known gotchas
CLR 2.0 requires PKCE when using Authorization Code Grant; omitting the code_challenge and code_challenge_method parameters results in authorization server rejection
Nested AchievementCredentials inside the ClrCredential must each have their own valid proof; an unsigned inner credential causes overall CLR verification failure
The CLR 2.0 API uses its own context URL (purl.imsglobal.org/spec/clr/v2p0) separate from Open Badges 3.0; mixing context URIs from different spec versions breaks JSON-LD expansion
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