{"version":"0.20.0","name":"kanvas_feed","description":"Incremental feeds on an existing display: chat.append adds chat messages, progress.append adds a progress event, tool-log.append records agent tool calls, tool-log.read reads them back. Append only; use kanvas_publish for whole views. Required: operation. Required fields by operation: chat.append(sessionId,displayId,expectedRevision,requestId,messages); progress.append(sessionId,displayId,requestId,expectedRevision,event); tool-log.append(sessionId,requestId,events); tool-log.read(none).","inputSchema":{"type":"object","properties":{"operation":{"type":"string","enum":["chat.append","progress.append","tool-log.append","tool-log.read"],"description":"Required operation; supply only the fields in its matching branch."},"sessionId":{"type":"string"},"displayId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"expectedRevision":{"type":"integer","minimum":0,"maximum":9007199254740991},"requestId":{"type":"string"},"messages":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"sender":{"type":"string","minLength":1,"maxLength":300},"timestamp":{"type":"string","maxLength":100},"text":{"type":"string","minLength":1,"maxLength":20000}},"required":["id","sender","text"],"additionalProperties":false}},"event":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"},"title":{"type":"string","minLength":1,"maxLength":240},"description":{"type":"string","maxLength":4000},"status":{"default":"running","type":"string","enum":["running","completed","blocked","failed"]},"timestamp":{"type":"string","maxLength":60}},"required":["id","title"],"additionalProperties":false},"status":{"type":"string","enum":["running","completed","blocked","failed"]},"channel":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"},"events":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"},"integration":{"type":"string","minLength":1,"maxLength":200},"tool":{"type":"string","minLength":1,"maxLength":200},"operation":{"type":"string","minLength":1,"maxLength":200},"source":{"type":"string","enum":["automatic","agent"]},"sessionId":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"},"durationMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"status":{"default":"completed","type":"string","enum":["started","completed","failed"]},"summary":{"type":"string","maxLength":1000}},"required":["id","integration","tool","timestamp"],"additionalProperties":false}},"limit":{"type":"integer","minimum":1,"maximum":200},"before":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}},"required":["operation"],"oneOf":[{"properties":{"operation":{"const":"chat.append"},"sessionId":{"$ref":"#/$defs/c0"},"displayId":{},"expectedRevision":{},"requestId":{"$ref":"#/$defs/c0"},"messages":{}},"required":["operation","sessionId","displayId","expectedRevision","requestId","messages"],"additionalProperties":false,"description":"Append supplied chat messages on KANVAS, not an external conversation."},{"properties":{"operation":{"const":"progress.append"},"sessionId":{"$ref":"#/$defs/c0"},"displayId":{},"requestId":{"$ref":"#/$defs/c0"},"expectedRevision":{},"event":{},"status":{}},"required":["operation","sessionId","displayId","requestId","expectedRevision","event"],"additionalProperties":false,"description":"Append one real progress event server-side; never resend earlier events or invent work."},{"properties":{"operation":{"const":"tool-log.append"},"sessionId":{"$ref":"#/$defs/c1"},"channel":{"default":"main"},"requestId":{"$ref":"#/$defs/c1"},"events":{}},"required":["operation","sessionId","requestId","events"],"additionalProperties":false,"description":"Agent-reported tool calls; append exact events to persistent history."},{"properties":{"operation":{"const":"tool-log.read"},"sessionId":{"$ref":"#/$defs/c1"},"channel":{"default":"main"},"limit":{"default":100},"before":{}},"additionalProperties":false,"required":["operation"]}],"examples":[{"operation":"chat.append","sessionId":"s","displayId":"d","expectedRevision":3,"requestId":"r0","messages":[{"id":"m1","sender":"Alex","text":"Exact supplied message."}]},{"operation":"progress.append","sessionId":"s","displayId":"d","expectedRevision":3,"requestId":"r1","event":{"id":"checked","title":"Source checked","status":"completed"}},{"operation":"tool-log.append","sessionId":"s","requestId":"r2","channel":"main","events":[{"id":"call-1","integration":"Browser","tool":"search","timestamp":"2026-09-21T19:00:00Z","status":"completed"}]},{"operation":"tool-log.read","sessionId":"s","channel":"main","limit":100}],"$defs":{"c0":{"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_-]+$"},"c1":{"minLength":1,"maxLength":128,"pattern":"^[A-Za-z0-9_.:-]+$"}}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false,"openWorldHint":true}}