{"version":"0.20.0","name":"kanvas_planner","description":"Negotiated plans (use calendar template for read-only events): read (items, pending proposals, conflicts; includeIcs returns iCalendar once committed), edit items, propose moves/additions/removals with reasons, review (accept/reject), finalize (commit). Conflicts are reported, never auto-resolved. Required: operation. Required fields by operation: read(sessionId,displayId); edit(sessionId,displayId,expectedRevision,requestId); propose(sessionId,displayId,expectedRevision,requestId,proposals); review(sessionId,displayId,expectedRevision,requestId); finalize(sessionId,displayId,expectedRevision,requestId).","inputSchema":{"type":"object","properties":{"operation":{"type":"string","enum":["read","edit","propose","review","finalize"],"description":"Required operation; supply only the fields in its matching branch."},"sessionId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"displayId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"includeIcs":{"description":"iCalendar text of a committed plan.","type":"boolean"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"upsertItems":{"description":"New id adds; same id replaces.","minItems":1,"maxItems":200,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_.:-]+$"},"title":{"type":"string","minLength":1,"maxLength":120},"start":{"type":"string","maxLength":40},"end":{"type":"string","maxLength":40},"allDay":{"description":"start and end are dates; end is exclusive","type":"boolean"},"category":{"type":"string","minLength":1,"maxLength":40},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"notes":{"type":"string","maxLength":500},"constraints":{"description":"Declared wishes; Kanvas only flags violations","type":"object","properties":{"notBefore":{"type":"string","maxLength":40},"deadline":{"type":"string","maxLength":40},"bufferAfterMinutes":{"type":"integer","minimum":1,"maximum":1440},"fixed":{"type":"boolean"}},"additionalProperties":false}},"required":["id","title","start","end"],"additionalProperties":false}},"removeItemIds":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_.:-]+$"}},"plannerView":{"type":"string","enum":["day","three-day","week","month"]},"anchorDate":{"description":"A date inside the period shown.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"categories":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":40},"label":{"type":"string","minLength":1,"maxLength":60},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["id","label"],"additionalProperties":false}},"discardProposals":{"description":"Drop all pending proposals.","type":"boolean"},"proposals":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_.:-]+$"},"action":{"type":"string","enum":["move","add","remove"]},"itemId":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_.:-]+$","description":"move/remove: an existing item; add: the new item id"},"item":{"description":"move: changed fields; add: title, start, end and more","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"start":{"type":"string","maxLength":40},"end":{"type":"string","maxLength":40},"allDay":{"description":"start and end are dates; end is exclusive","type":"boolean"},"category":{"type":"string","minLength":1,"maxLength":40},"notes":{"type":"string","maxLength":500}},"additionalProperties":false},"reason":{"type":"string","minLength":1,"maxLength":300}},"required":["id","action","itemId","reason"],"additionalProperties":false}},"replaceProposals":{"description":"Replace all pending proposals.","type":"boolean"},"accept":{"description":"Ids to accept (apply).","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9_.:-]+$"}},"reject":{"description":"Ids to reject (discard).","minItems":1,"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9_.:-]+$"}},"all":{"description":"Decide every remaining one.","type":"string","enum":["accept","reject"]}},"required":["operation"],"oneOf":[{"properties":{"operation":{"const":"read"},"sessionId":{},"displayId":{},"includeIcs":{}},"required":["operation","sessionId","displayId"],"additionalProperties":false},{"properties":{"operation":{"const":"edit"},"sessionId":{},"displayId":{},"expectedRevision":{},"requestId":{},"upsertItems":{},"removeItemIds":{},"plannerView":{},"anchorDate":{},"categories":{},"discardProposals":{}},"required":["operation","sessionId","displayId","expectedRevision","requestId"],"additionalProperties":false,"description":"Change plan items directly (plannerView includes three-day): add, replace or remove them, or change the view."},{"properties":{"operation":{"const":"propose"},"sessionId":{},"displayId":{},"expectedRevision":{},"requestId":{},"proposals":{},"replaceProposals":{}},"required":["operation","sessionId","displayId","expectedRevision","requestId","proposals"],"additionalProperties":false,"description":"Propose moving, adding or removing plan items, each with a reason."},{"properties":{"operation":{"const":"review"},"sessionId":{},"displayId":{},"expectedRevision":{},"requestId":{},"accept":{},"reject":{},"all":{}},"required":["operation","sessionId","displayId","expectedRevision","requestId"],"additionalProperties":false,"description":"Accept (apply) or reject plan proposals by id, or all remaining ones."},{"properties":{"operation":{"const":"finalize"},"sessionId":{},"displayId":{},"expectedRevision":{},"requestId":{}},"required":["operation","sessionId","displayId","expectedRevision","requestId"],"additionalProperties":false,"description":"Commit the plan once no proposals are pending."}],"examples":[{"operation":"read","sessionId":"s","displayId":"d"},{"operation":"edit","sessionId":"s","displayId":"d","expectedRevision":3,"requestId":"r1","upsertItems":[{"id":"tennis","title":"Tennis","start":"2026-11-08T15:00:00+01:00","end":"2026-11-08T16:00:00+01:00"}]},{"operation":"propose","sessionId":"s","displayId":"d","expectedRevision":3,"requestId":"r2","proposals":[{"id":"move-boat","action":"move","itemId":"boat","item":{"start":"2026-11-06T13:00:00+01:00","end":"2026-11-06T17:00:00+01:00"},"reason":"Friday afternoon is open."}]},{"operation":"review","sessionId":"s","displayId":"d","expectedRevision":3,"requestId":"r3","accept":["move-boat"]},{"operation":"finalize","sessionId":"s","displayId":"d","expectedRevision":3,"requestId":"r4"}]},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":false,"openWorldHint":true}}