Content Addressing & User Consent
The R3 document's display section drives informed user consent — the resource describes what IT does, including irreversible actions. The agent's Person Server (PS) fetches the R3 document and presents it to the user before approving. The r3_s256 hash baked into the final auth token creates a permanent, content-addressed audit record: even if the resource later updates the document at the same URI, the approved semantics are pinned forever.
Agent requests two MCP tools: create_calendar_event and send_calendar_invite.
Resource maps these to an R3 document. This R3 document has a display.irreversible field — sent invitations cannot be recalled.
The resource token carries r3_uri (where the doc lives) and r3_s256 (SHA-256 of its content).
aud=PS URL in the resource token — this is a 3-party flow. The PS is the token authority and will handle consent.
The agent cannot read the R3 document. It only carries the hash — 'agent opacity'.
Step 1: POST /authorize + r3_operations → resource token (r3_uri + r3_s256)
calendar.example.com
application/json
sig=("@method" "@authority" "@path" "signature-key");created=1741825000;alg="ed2…
sig=jwt;jwt="eyJhbGciOiJFZERTQSIsImtpZCI6ImFnZW50LWtleS0xIiwidHlwIjoiYWEtYWdlbnQ…
sig=:Q29udGVudEFkZHJlc3NpbmdBdXRob3JpemVTaWduYXR1cmVCYXNlNjQ=:
{
"r3_operations": {
"vocabulary": "urn:aauth:vocabulary:mcp",
"operations": [
{
"tool": "create_calendar_event"
},
{
"tool": "send_calendar_invite"
}
]
}
}{"alg":"ES256","kid":"resource-key-1","typ"?:"aa-resource+jwt"}{"iss"?:"https://calendar.example.com","dwk"?:"aauth-resource.json","aud"?:"https://ps.example","jti"?:"rt-ca-890a","agent"?:"aauth:local@agent.example","agent_jkt"?:"NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs","r3_uri"?:"https://calendar.example.com/r3/a1b2c3d4e5f67890","r3_s256"?:"ZzKlMnOpQrStUvWxYz0123456789AbCdEfGhIjKlMn","iat"?:1741825000,"exp"?:1741825300}