← WebMCP Directory

excalidraw-webmcp-three.vercel.app

excalidraw-webmcp-three.vercel.app

live Unverified (seed import) Developer Tools 4 tools imperative implementation

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

act imperative

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

PropertyTypeRequiredDescription
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.myles4miles.chatgpt.site

Morphus is an AI-native workspace for designing worlds and generating playable game experiences.

live Unverified Developer Tools Transact tools
154 tools A23 / Act124 / T7 Not yet scored Seen 2026-11-05
list_nodes get_scene_settings get_node_details get_terrain_state get_forest_state
Inspect tools
damnpdfs.com

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.

live Unverified Developer Tools Transact tools
81 tools A3 / Act77 / T1 Not yet scored Seen 2026-11-05
scan_to_pdf workflow merge_pdf alternate_mix_pdf compress_pdf
Inspect tools
insignifi4nt.github.io

insignifi4nt.github.io

broCAD/M: local-first CAD and CAM for parametric design, wire EDM planning, simulation and controller export.

live Unverified Developer Tools Transact tools
80 tools A29 / Act49 / T2 Not yet scored Seen 2026-11-05
edm_inspect_approach edm_describe_edits edm_get_context edm_list_projects edm_get_project
Inspect tools
cabinet.varera.studio

cabinet.varera.studio

The Cartographer's Cabinet

live Unverified Developer Tools Transact tools
64 tools A10 / Act50 / T4 Not yet scored Seen 2026-11-05
inspect_daylight inspect_cartographers_project list_project_hierarchy inspect_open_map search_project_objects
Inspect tools

Related on Influzer