{"ok":true,"site":{"host":"excalidraw-webmcp-three.vercel.app","url":"https://excalidraw-webmcp-three.vercel.app/","type":"live","desc":"A live Excalidraw workspace designed for people and agents to think and draw together.","tools":[{"name":"inspect_canvas","kind":"answer","impl":"imperative","description":"Return a bounded semantic description of the live canvas, including revision, viewport, selection, labels, bounds, groups, and connections.","title":"Inspect canvas","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"maxElements":{"type":"integer","minimum":1,"maximum":100},"includeDeleted":{"type":"boolean"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"inspect_selection","kind":"answer","impl":"imperative","description":"Return detailed semantic information for the selected canvas elements, or for supplied stable element IDs.","title":"Inspect selection","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"ids":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":120}}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_canvas_changes","kind":"act","impl":"imperative","description":"Apply one complete atomic semantic changeset to the live canvas. Put creations in addNodes or addText, edits in updates, repositioning in moves, links in connections, grouping in groups, and removals in deletions. Describe structure and visual intent with direction, spacing, optional logical rank/lane, node roles, relationship kinds, concise labels, and anchored notes; the application computes sizes, alignment, positions, native bindings, and routes. Give every new object a different temporary ref across both addNodes and addText; reuse refs only in relativeTo, from, to, and members. Use stable IDs returned by inspection for existing objects. Do not send coordinates, raw Excalidraw elements, JavaScript, generated IDs, colors, or style objects.","title":"Apply canvas changes","annotations":{"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"layout":{"description":"Optional semantic layout preference; the application computes the actual positions.","type":"object","properties":{"direction":{"description":"Primary flow direction for a newly generated connected diagram.","type":"string","enum":["top-to-bottom","left-to-right"]},"spacing":{"description":"Visual spacing preference for generated nodes and connectors.","type":"string","enum":["compact","comfortable","wide"]}},"additionalProperties":false},"expectedRevision":{"description":"Canvas revision returned by inspection; omit when creating on an empty canvas.","type":"integer","minimum":1,"maximum":9007199254740991},"addNodes":{"description":"Shape-backed nodes to create; every ref must be unique across this changeset.","maxItems":32,"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","minLength":1,"maxLength":120,"description":"Unique temporary name for this new node across all addNodes and addText entries; never reuse it for another addition."},"label":{"type":"string","minLength":1,"maxLength":500,"description":"Visible node label. The application wraps and sizes it."},"shape":{"description":"Optional node shape.","type":"string","enum":["rectangle","ellipse","diamond"]},"role":{"description":"Optional semantic role used to choose a clear visual hierarchy.","type":"string","enum":["process","data","external","decision"]},"rank":{"description":"Optional logical flow rank; lower ranks are placed earlier in the flow.","type":"integer","minimum":0,"maximum":100},"lane":{"description":"Optional logical lane order within the same flow rank.","type":"integer","minimum":0,"maximum":100},"intent":{"description":"Optional semantic purpose of the node.","type":"string","minLength":1,"maxLength":1000},"relativeTo":{"description":"Existing element ID or temporary ref used as a placement anchor.","type":"string","minLength":1,"maxLength":120},"placement":{"description":"Placement relative to relativeTo; auto is used when omitted.","type":"string","enum":["auto","right","left","above","below"]}},"required":["ref","label"],"additionalProperties":false}},"addText":{"description":"Standalone notes, headings, or annotations; every ref must be unique across this changeset.","maxItems":32,"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","minLength":1,"maxLength":120,"description":"Unique temporary name for this new text object across all addNodes and addText entries; never reuse it for another addition."},"text":{"type":"string","minLength":1,"maxLength":4000,"description":"Visible standalone note, heading, or annotation text."},"role":{"description":"Whether this text is the diagram title or a supporting note.","type":"string","enum":["title","note"]},"relativeTo":{"description":"Existing element ID or temporary ref used as a placement anchor.","type":"string","minLength":1,"maxLength":120},"placement":{"description":"Placement relative to relativeTo; auto is used when omitted.","type":"string","enum":["auto","right","left","above","below"]}},"required":["ref","text"],"additionalProperties":false}},"updates":{"description":"Existing semantic objects to update.","maxItems":32,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120,"description":"Stable semantic element ID returned by canvas inspection."},"label":{"description":"Replacement label for a node, shape, or connection.","type":"string","minLength":1,"maxLength":500},"text":{"description":"Replacement content for standalone text.","type":"string","minLength":1,"maxLength":4000},"shape":{"description":"Replacement shape for a node or shape.","type":"string","enum":["rectangle","ellipse","diamond"]},"intent":{"description":"Replacement semantic purpose.","type":"string","minLength":1,"maxLength":1000}},"required":["id"],"additionalProperties":false}},"moves":{"description":"Existing semantic objects to move.","maxItems":32,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120,"description":"Stable semantic element ID returned by canvas inspection."},"direction":{"type":"string","enum":["up","down","left","right"],"description":"Direction in which to move the object."},"distance":{"description":"Optional movement distance in canvas units.","type":"number","minimum":1,"maximum":480}},"required":["id","direction"],"additionalProperties":false}},"connections":{"description":"Directed connections to create after objects are added.","maxItems":32,"type":"array","items":{"type":"object","properties":{"from":{"type":"string","minLength":1,"maxLength":120,"description":"Source node/text ID or temporary ref."},"to":{"type":"string","minLength":1,"maxLength":120,"description":"Target node/text ID or temporary ref."},"label":{"description":"Optional visible connection label.","type":"string","minLength":1,"maxLength":500},"relationship":{"description":"Optional relationship kind used for a consistent connector style.","type":"string","enum":["flow","data","event","dependency"]}},"required":["from","to"],"additionalProperties":false}},"groups":{"description":"Groups to create after objects are added.","maxItems":32,"type":"array","items":{"type":"object","properties":{"members":{"minItems":2,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":120},"description":"Stable semantic IDs or temporary refs to group together."}},"required":["members"],"additionalProperties":false}},"deletions":{"description":"Existing semantic objects to delete.","maxItems":32,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":120,"description":"Stable semantic element ID returned by canvas inspection."}},"required":["id"],"additionalProperties":false}}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_canvas","kind":"act","impl":"imperative","description":"Export the current live canvas as Excalidraw JSON, SVG, PNG, or bounded semantic JSON and start a browser download.","title":"Export canvas","inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["excalidraw","svg","png","semantic-json"]},"fileName":{"type":"string","maxLength":80,"pattern":"^[a-zA-Z0-9._-]+$"}},"required":["format"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Developer Tools","apiSurface":"spec","toolCount":4}}