{"ok":true,"site":{"host":"commandcanvas.vercel.app","url":"https://commandcanvas.vercel.app/local","type":"live","desc":"Try a sketch and its linked diagram, create and arrange objects, and inspect your changes. No account or API key required.","tools":[{"name":"get_canvas_state","kind":"answer","impl":"imperative","description":"Read a compact semantic projection of the live canvas, current selection, and recent activity receipts without changing the room. Call this with scope selected before acting when the user says this, that, or the selected object; use the returned stable object ID in the next tool call.","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"scope":{"type":"string","enum":["all","selected"]},"includeReceipts":{"type":"boolean"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"create_object","kind":"act","impl":"imperative","description":"Create one note, task board, schedule, diagram, chart, data table, reference card, decision, action item, summary, risk, or open-question card from compact semantic content. CommandCanvas assigns safe IDs, geometry, z-order, and nested IDs, so use this directly for ordinary creation requests without reading the canvas first. To create a visual from the user's spoken explanation of a selected sketch without image inference, first read the selected state, pass its ID as sourceSketchId, and CommandCanvas will preserve the sketch and place the linked visual beside it.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"note"},"title":{"type":"string","minLength":1,"maxLength":120},"text":{"type":"string","maxLength":4000},"tone":{"type":"string","enum":["coral","sky","sand","violet"]},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"task_board"},"title":{"type":"string","minLength":1,"maxLength":120},"columns":{"minItems":1,"maxItems":5,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":60},"tasks":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":180},"owner":{"type":"string","minLength":1,"maxLength":80},"dueDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"priority":{"type":"string","enum":["low","medium","high"]}},"required":["title"],"additionalProperties":false}}},"required":["title","tasks"],"additionalProperties":false}},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type","title","columns"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"schedule"},"title":{"type":"string","minLength":1,"maxLength":120},"timezone":{"type":"string","minLength":1,"maxLength":80},"days":{"minItems":1,"maxItems":14,"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"label":{"type":"string","minLength":1,"maxLength":30},"entries":{"maxItems":16,"type":"array","items":{"type":"object","properties":{"time":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"title":{"type":"string","minLength":1,"maxLength":180},"owner":{"type":"string","minLength":1,"maxLength":80}},"required":["time","title"],"additionalProperties":false}}},"required":["date","label","entries"],"additionalProperties":false}},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type","title","timezone","days"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"diagram"},"title":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["architecture","flowchart","diagram"]},"sourceSketchId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"summary":{"type":"string","minLength":1,"maxLength":600},"nodes":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"label":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["client","service","database","queue","external","concept","process","decision"]}},"required":["key","label","kind"],"additionalProperties":false}},"edges":{"default":[],"maxItems":60,"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"to":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"label":{"type":"string","minLength":1,"maxLength":100}},"required":["from","to"],"additionalProperties":false}},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type","title","kind","nodes","edges"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"chart"},"title":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["pie_chart","bar_chart","line_chart"]},"sourceSketchId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"summary":{"type":"string","minLength":1,"maxLength":600},"xAxisLabel":{"anyOf":[{"type":"string","minLength":1,"maxLength":80},{"type":"null"}]},"yAxisLabel":{"anyOf":[{"type":"string","minLength":1,"maxLength":80},{"type":"null"}]},"series":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":80},"points":{"minItems":1,"maxItems":24,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":80},"value":{"type":"number","minimum":-1000000000000,"maximum":1000000000000}},"required":["label","value"],"additionalProperties":false}}},"required":["label","points"],"additionalProperties":false}},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type","title","kind","series"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"data_table"},"title":{"type":"string","minLength":1,"maxLength":120},"columns":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":80},"kind":{"type":"string","enum":["text","number","currency","percentage","date"]}},"required":["label","kind"],"additionalProperties":false}},"rows":{"maxItems":50,"type":"array","items":{"maxItems":12,"type":"array","items":{"anyOf":[{"type":"string","maxLength":500},{"type":"number","minimum":-1000000000000,"maximum":1000000000000},{"type":"boolean"},{"type":"null"}]}}},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type","title","columns","rows"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"reference_card"},"title":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["article","document","image","link"]},"sourceUrl":{"anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"summary":{"type":"string","minLength":1,"maxLength":1200},"excerpt":{"anyOf":[{"type":"string","minLength":1,"maxLength":1200},{"type":"null"}]},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type","title","kind","summary"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"meeting_card"},"title":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["decision","action_item","summary","risk","open_question"]},"body":{"type":"string","minLength":1,"maxLength":4000},"bullets":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":300}},"owner":{"anyOf":[{"type":"string","minLength":1,"maxLength":80},{"type":"null"}]},"dueDate":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}]},"status":{"type":"string","enum":["proposed","confirmed","open","in_progress","done","blocked"]},"placement":{"type":"string","enum":["current_viewport","right_of_selection"]}},"required":["type","title","kind","body","bullets"],"additionalProperties":false}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"update_object_content","kind":"act","impl":"imperative","description":"Append bounded text to one active note or thought through the versioned mutation pipeline. Provide a stable objectId, or omit it only after get_canvas_state with scope selected confirms the intended note; this cannot replace content or apply arbitrary JSON patches.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"objectId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"text":{"type":"string","minLength":1,"maxLength":1000}},"required":["text"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"transform_object","kind":"act","impl":"imperative","description":"Move, resize, or rotate one existing, unpinned canvas object through the canonical mutation pipeline. When the user says this or that, first read the selected canvas state and then use that stable object ID.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"objectId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"expectedVersion":{"type":"integer","minimum":1,"maximum":1000000000},"transform":{"type":"object","properties":{"x":{"type":"number","minimum":-1000000,"maximum":1000000},"y":{"type":"number","minimum":-1000000,"maximum":1000000},"width":{"type":"number","minimum":160,"maximum":2000},"height":{"type":"number","minimum":80,"maximum":1400},"rotation":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false}},"required":["objectId","expectedVersion","transform"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"set_object_state","kind":"act","impl":"imperative","description":"Pin, unpin, minimize, or restore one existing canvas object and record the resulting receipt. Resolve this, that, or selected through get_canvas_state before using its stable object ID.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"objectId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"expectedVersion":{"type":"integer","minimum":1,"maximum":1000000000},"state":{"type":"object","properties":{"minimized":{"type":"boolean"},"pinned":{"type":"boolean"}},"additionalProperties":false}},"required":["objectId","expectedVersion","state"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"discard_object","kind":"act","impl":"imperative","description":"Move one explicit canvas object to recoverable trash; this never performs permanent deletion. Resolve this, that, or selected through get_canvas_state before using its stable object ID.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"objectId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"expectedVersion":{"type":"integer","minimum":1,"maximum":1000000000}},"required":["objectId","expectedVersion"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"organize_objects","kind":"act","impl":"imperative","description":"Group explicit canvas objects inside a semantic frame, or ungroup an existing frame, through one reversible mutation.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"action":{"type":"string","const":"group"},"objectIds":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"}},"expectedVersions":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"objectId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"expectedVersion":{"type":"integer","minimum":1,"maximum":1000000000}},"required":["objectId","expectedVersion"],"additionalProperties":false}},"frame":{"type":"object","properties":{"id":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"title":{"type":"string","minLength":1,"maxLength":120},"x":{"type":"number","minimum":-1000000,"maximum":1000000},"y":{"type":"number","minimum":-1000000,"maximum":1000000},"width":{"type":"number","minimum":160,"maximum":2000},"height":{"type":"number","minimum":80,"maximum":1400},"zIndex":{"type":"integer","minimum":0,"maximum":100000},"tone":{"type":"string","enum":["coral","sky","sand","violet"]}},"required":["id","title","x","y","width","height","zIndex","tone"],"additionalProperties":false}},"required":["action","objectIds","expectedVersions","frame"],"additionalProperties":false},{"type":"object","properties":{"action":{"type":"string","const":"ungroup"},"frameId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"expectedVersion":{"type":"integer","minimum":1,"maximum":1000000000}},"required":["action","frameId","expectedVersion"],"additionalProperties":false}]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"history_action","kind":"act","impl":"imperative","description":"Undo or redo the latest reversible shared canvas mutation and record an attributable history receipt.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["undo","redo"]}},"required":["action"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"transform_sketch","kind":"act","impl":"imperative","description":"Interpret a selected sketch into a new structured diagram or chart beside it while preserving the source sketch. Omit outputKind or use auto when the image, narration, and instruction should determine the concrete visual family.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"sketchId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"},"instruction":{"type":"string","minLength":1,"maxLength":500},"narration":{"type":"string","minLength":1,"maxLength":4000},"outputKind":{"anyOf":[{"type":"string","const":"auto"},{"type":"string","enum":["architecture","flowchart","diagram","pie_chart","bar_chart","line_chart"]}]}},"required":["sketchId","instruction"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"prepare_meeting_packet","kind":"act","impl":"imperative","description":"Create or refresh a reviewable meeting-packet draft from current semantic canvas objects; this does not approve or send it.","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"objectIds":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"}}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"request_packet_send","kind":"transact","impl":"imperative","description":"Stage an approved meeting packet for explicit host confirmation. This tool never sends email by itself and cannot override the approved recipient snapshot.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"packetId":{"type":"string","minLength":2,"maxLength":96,"pattern":"^[a-z][a-z0-9-]*$"}},"required":["packetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"},{"name":"control_workspace","kind":"act","impl":"imperative","description":"Control the current participant's local canvas view or drawing session. Start, finish, or cancel drawing; zoom, fit, focus, or restore the viewport. These local controls never discard objects, approve packets, send email, or fabricate a shared mutation receipt.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["start_drawing","finish_drawing","cancel_drawing","zoom_in","zoom_out","set_zoom","fit_all","fit_selected","focus_selected","restore_view"]},"scale":{"type":"number","minimum":0.15,"maximum":4}},"required":["action"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/local"}],"category":"Productivity & Business","favicon":"/favicons/commandcanvas.vercel.app.ico","apiSurface":"spec","toolCount":12}}