agentdraw.app
Excalidraw with WebMCP: a local-first whiteboard that an AI agent in ChatGPT or Codex can read and draw on. No install, no server.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 2 · Act 6 · Transact 0 · Score: Not yet scored
Tool inspector
apply_patch
Atomically create, update, delete, move, duplicate, or restyle up to 50 elements per call: rectangles, ellipses, diamonds, text, arrows and lines, frames, embeddable web pages, and images from a base64 dataUrl. An embeddable takes either link (a web page) or html (your own page, rendered live in a sandboxed frame; update it with html again). Place a new element without coordinates with at: { relativeTo, side, gap?, align? } and it lands beside that element, joining its frame. move shifts ids by dx/dy with their labels and frame children; duplicate copies ids (labels, children, and the arrows between them included) offset by dx/dy and reports each copy with its sourceId; style restyles ids in one go. Labels are measured automatically; update a shape or arrow with label: { text } to rename it (label: null removes it), and resizing re-centres the label. Text and labels take fontSize, fontFamily (hand, normal, code, display), textAlign, and verticalAlign, on create and on update. Arrows with start/end { id } are anchored to those shapes’ edges and re-routed, labels included, when you move or resize the shapes. Moving a frame moves its children and labels. Operations may reference elements created anywhere in the same patch (an arrow before its shapes, a child before its frame); they are applied in dependency order. Requires the epoch and revision from your latest inspect_canvas or apply_patch; a stale revision is rejected whole with revision_conflict, and every invalid operation is listed in error.details.errors. Returns a patchId for revert_patch, created ids with bounds and boundTextId, the ids you updated, the ids touched as side effects, and the ids removed.
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
epoch |
string | yes | — |
baseRevision |
integer | yes | — |
operations |
array | yes | — |
Raw JSON schema
{
"type": "object",
"properties": {
"epoch": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"baseRevision": {
"type": "integer",
"minimum": 0
},
"operations": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"op": {
"const": "create"
},
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
},
"type": {
"enum": [
"rectangle",
"ellipse",
"diamond",
"text",
"arrow",
"line",
"frame",
"embeddable",
"image"
]
},
"x": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"y": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"width": {
"type": "number",
"minimum": 1,
"maximum": 20000
},
"height": {
"type": "number",
"minimum": 1,
"maximum": 20000
},
"angle": {
"type": "number"
},
"frameId": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
},
"locked": {
"type": "boolean"
},
"link": {
"type": "string",
"maxLength": 2048
},
"customData": {
"type": "object"
},
"strokeColor": {
"type": "string",
"pattern": "^(transparent|#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8}))$"
},
"backgroundColor": {
"type": "string",
"pattern": "^(transparent|#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8}))$"
},
"fillStyle": {
"enum": [
"hachure",
"cross-hatch",
"solid",
"zigzag"
]
},
"strokeWidth": {
"type": "number",
"minimum": 0.5,
"maximum": 8
},
"strokeStyle": {
"enum": [
"solid",
"dashed",
"dotted"
]
},
"roughness": {
"type": "number",
"minimum": 0,
"maximum": 2
},
"opacity": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"roundness": {
"enum": [
"round",
"sharp"
]
},
"text": {
"type": "string",
"maxLength": 4000
},
"fontSize": {
"type": "number",
"minimum": 8,
"maximum": 200
},
"fontFamily": {
"enum": [
"hand",
"normal",
"code",
"display"
]
},
"textAlign": {
"enum": [
"left",
"center",
"right"
]
},
"verticalAlign": {
"enum": [
"top",
"middle",
"bottom"
]
},
"label": {
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 4000
},
"fontSize": {
"type": "number",
"minimum": 8,
"maximum": 200
},
"fontFamily": {
"enum": [
"hand",
"normal",
"code",
"display"
]
},
"textAlign": {
"enum": [
"left",
"center",
"right"
]
},
"verticalAlign": {
"enum": [
"top",
"middle",
"bottom"
]
}
},
"required": [
"text"
],
"additionalProperties": false
},
"name": {
"type": "string",
"maxLength": 200
},
"points": {
"type": "array",
"minItems": 2,
"maxItems": 500,
"items": {
"type": "array",
"items": {
"type": "number"
},
"minItems": 2,
"maxItems": 2
}
},
"start": {
"oneOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"y": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
}
]
},
"end": {
"oneOf": [
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
}
},
"required": [
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"y": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
}
]
},
"startArrowhead": {
"enum": [
"arrow",
"bar",
"dot",
"triangle",
"none"
]
},
"endArrowhead": {
"enum": [
"arrow",
"bar",
"dot",
"triangle",
"none"
]
},
"at": {
"type": "object",
"properties": {
"relativeTo": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
},
"side": {
"enum": [
"right",
"left",
"below",
"above"
]
},
"gap": {
"type": "number",
"minimum": 0,
"maximum": 5000
},
"align": {
"enum": [
"start",
"center",
"end"
]
}
},
"required": [
"relativeTo",
"side"
],
"additionalProperties": false
},
"dataUrl": {
"type": "string",
"maxLength": 1500000
},
"html": {
"type": "string",
"maxLength": 200000
}
},
"required": [
"op",
"type"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"const": "update"
},
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
},
"x": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"y": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"width": {
"type": "number",
"minimum": 1,
"maximum": 20000
},
"height": {
"type": "number",
"minimum": 1,
"maximum": 20000
},
"angle": {
"type": "number"
},
"frameId": {
"anyOf": [
{
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
},
{
"type": "null"
}
]
},
"label": {
"anyOf": [
{
"type": "object",
"properties": {
"text": {
"type": "string",
"maxLength": 4000
},
"fontSize": {
"type": "number",
"minimum": 8,
"maximum": 200
},
"fontFamily": {
"enum": [
"hand",
"normal",
"code",
"display"
]
},
"textAlign": {
"enum": [
"left",
"center",
"right"
]
},
"verticalAlign": {
"enum": [
"top",
"middle",
"bottom"
]
}
},
"required": [
"text"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"locked": {
"type": "boolean"
},
"link": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
]
},
"customData": {
"anyOf": [
{
"type": "object"
},
{
"type": "null"
}
]
},
"strokeColor": {
"type": "string",
"pattern": "^(transparent|#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8}))$"
},
"backgroundColor": {
"type": "string",
"pattern": "^(transparent|#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8}))$"
},
"fillStyle": {
"enum": [
"hachure",
"cross-hatch",
"solid",
"zigzag"
]
},
"strokeWidth": {
"type": "number",
"minimum": 0.5,
"maximum": 8
},
"strokeStyle": {
"enum": [
"solid",
"dashed",
"dotted"
]
},
"roughness": {
"type": "number",
"minimum": 0,
"maximum": 2
},
"opacity": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"roundness": {
"enum": [
"round",
"sharp"
]
},
"text": {
"type": "string",
"maxLength": 4000
},
"fontSize": {
"type": "number",
"minimum": 8,
"maximum": 200
},
"fontFamily": {
"enum": [
"hand",
"normal",
"code",
"display"
]
},
"textAlign": {
"enum": [
"left",
"center",
"right"
]
},
"verticalAlign": {
"enum": [
"top",
"middle",
"bottom"
]
},
"name": {
"type": "string",
"maxLength": 200
},
"html": {
"type": "string",
"maxLength": 200000
}
},
"required": [
"op",
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"const": "delete"
},
"id": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
}
},
"required": [
"op",
"id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"const": "move"
},
"ids": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
}
},
"dx": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"dy": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
}
},
"required": [
"op",
"ids"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"const": "duplicate"
},
"ids": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
}
},
"dx": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
},
"dy": {
"type": "number",
"minimum": -1000000,
"maximum": 1000000
}
},
"required": [
"op",
"ids"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"op": {
"const": "style"
},
"ids": {
"type": "array",
"minItems": 1,
"maxItems": 50,
"uniqueItems": true,
"items": {
"type": "string",
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,119}$"
}
},
"strokeColor": {
"type": "string",
"pattern": "^(transparent|#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8}))$"
},
"backgroundColor": {
"type": "string",
"pattern": "^(transparent|#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8}))$"
},
"fillStyle": {
"enum": [
"hachure",
"cross-hatch",
"solid",
"zigzag"
]
},
"strokeWidth": {
"type": "number",
"minimum": 0.5,
"maximum": 8
},
"strokeStyle": {
"enum": [
"solid",
"dashed",
"dotted"
]
},
"roughness": {
"type": "number",
"minimum": 0,
"maximum": 2
},
"opacity": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"roundness": {
"enum": [
"round",
"sharp"
]
}
},
"required": [
"op",
"ids"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"epoch",
"baseRevision",
"operations"
],
"additionalProperties": false
}
Similar websites
econsor.de
German digital agency building portals, e-commerce sites and online marketing, combining strategy, design and AI to grow clients' visibility and customer base.
inkframe-eta.vercel.app
Browser-native Elah video editor for 9:16 and 16:9 exports
agentdesk-demo.vercel.app
Meridian Ops
eworker.ca
E-Worker is business infrastructure powered by AI, with focused apps and connected business work.