excalidraw-mcp
Excalidraw via MCP
Saying "use Excalidraw MCP" should be enough to get a complicated diagram, drawn live and saved where it belongs. This skill is what makes that true.
The one thing that breaks everything
create_view's element format is a skeleton, not the on-disk schema. A shape's
label is skeleton-only sugar. Excalidraw's canvas renderer has no text branch for
rectangle / ellipse / diamond — container text is drawn only via
boundElements → containerId. So pasting create_view JSON into a .excalidraw file
produces empty boxes, silently. That single fact is why scripts/excalidraw_build.py
exists: author once in the skeleton, get both the live render and a correct file.
Second fact: hand-authored diagrams do not degrade gradually with size — they fail on irregularity. Measured on a real generated scene, elements produced by a repeating layout formula had a 0.00 defect rate; bespoke one-off elements had 0.71. So compute positions with a formula, and let the linter check the result.