{"version":"0.20.0","name":"kanvas_members","description":"Session membership: add/remove members, invite.create (optionally scoped to a group), invite.accept (the recipient's decision, confirm:true), invite.revoke. Ten-minute/earlier-invitation expiry applies; preserve guest boundaries. Required: operation. Required fields by operation: add(sessionId,username,role); remove(sessionId,userId); invite.create(requestId); invite.accept(invitationId,confirm); invite.revoke(invitationId).","inputSchema":{"type":"object","properties":{"operation":{"type":"string","enum":["add","remove","invite.create","invite.accept","invite.revoke"],"description":"Required operation; supply only the fields in its matching branch."},"sessionId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"username":{"type":"string","minLength":1,"maxLength":160},"role":{"type":"string","enum":["viewer","editor"]},"userId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"requestId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"label":{"type":"string","minLength":1,"maxLength":120},"groupId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"expiresInHours":{"type":"integer","minimum":1,"maximum":720},"invitationId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,128}$"},"confirm":{"type":"boolean","const":true}},"required":["operation"],"oneOf":[{"properties":{"operation":{"const":"add"},"sessionId":{},"username":{},"role":{}},"required":["operation","sessionId","username","role"],"additionalProperties":false,"description":"Grant an existing account the owner-requested role."},{"properties":{"operation":{"const":"remove"},"sessionId":{},"userId":{}},"required":["operation","sessionId","userId"],"additionalProperties":false,"description":"Revoke only the owner-selected member."},{"properties":{"operation":{"const":"invite.create"},"requestId":{},"label":{"default":"Join me on KANVAS"},"groupId":{},"expiresInHours":{"default":168}},"required":["operation","requestId"],"additionalProperties":false,"description":"Produce a shareable onboarding artifact without sending, enrolling or granting session access. groupId creates a single-use member invitation requiring explicit acceptance."},{"properties":{"operation":{"const":"invite.accept"},"invitationId":{},"confirm":{}},"required":["operation","invitationId","confirm"],"additionalProperties":false,"description":"Accept a single-use group invitation only after the person chooses to join."},{"properties":{"operation":{"const":"invite.revoke"},"invitationId":{}},"required":["operation","invitationId"],"additionalProperties":false,"description":"Issuer or group administrator revokes an invitation; existing membership is not removed."}],"examples":[{"operation":"add","sessionId":"s","username":"example_viewer","role":"viewer"},{"operation":"remove","sessionId":"s","userId":"user-id"},{"operation":"invite.create","requestId":"r2","label":"Join me on KANVAS"},{"operation":"invite.accept","invitationId":"invitation-id","confirm":true},{"operation":"invite.revoke","invitationId":"invitation-id"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}