After a successful LTI 1.3 launch, inspect the JWT for the Names and Role Provisioning Services claim (https://purl.imsglobal.org/spec/lti-nrps/claim/namesroleservice) to obtain the context_memberships_url
Request an OAuth 2.0 client credentials token from the platform's token endpoint using your tool's private key-signed JWT assertion, requesting the scope https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly
GET the context_memberships_url with the bearer token and the Accept header set to application/vnd.ims.lti-nrps.v2.membershipcontainer+json to retrieve the member list; follow the next link header for pagination
For grading, locate the Assignment and Grade Services claim (https://purl.imsglobal.org/spec/lti-ags/claim/endpoint) in the JWT to get the lineitems URL
POST a score to the lineitem's scores endpoint with Content-Type application/vnd.ims.lis.v1.score+json, including userId, scoreGiven, scoreMaximum, activityProgress, and gradingProgress fields
Known gotchas
NRPS and AGS each require separate OAuth 2.0 scopes; requesting only one scope does not grant access to the other service
A lineitem is not automatically created for every launch; if the LMS did not pass a lineitem URL in the AGS claim, your tool must create one via POST to the lineitems endpoint before posting scores
The userId in AGS score submissions must match the sub claim from the LTI launch JWT for that learner, not an internal user ID from your tool's database
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