excalidraw-webmcp-three.vercel.app
A live Excalidraw workspace designed for people and agents to think and draw together.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 2 · Act 2 · Transact 0 · Score: Not yet scored
Tool inspector
apply_canvas_changes
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.
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
layout |
object | no | Optional semantic layout preference; the application computes the actual positions. |
expectedRevision |
integer | no | Canvas revision returned by inspection; omit when creating on an empty canvas. |
addNodes |
array | no | Shape-backed nodes to create; every ref must be unique across this changeset. |
addText |
array | no | Standalone notes, headings, or annotations; every ref must be unique across this changeset. |
updates |
array | no | Existing semantic objects to update. |
moves |
array | no | Existing semantic objects to move. |
connections |
array | no | Directed connections to create after objects are added. |
groups |
array | no | Groups to create after objects are added. |
deletions |
array | no | Existing semantic objects to delete. |
Raw JSON schema
{
"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
}
Similar websites
morphus.myles4miles.chatgpt.site
Morphus is an AI-native workspace for designing worlds and generating playable game experiences.
damnpdfs.com
Install the DamnPDFs Codex plugin, pair a browser workspace and use PDF, image and file tools from your coding agent. Includes setup and privacy limits.
insignifi4nt.github.io
broCAD/M: local-first CAD and CAM for parametric design, wire EDM planning, simulation and controller export.
cabinet.varera.studio
The Cartographer's Cabinet