Bounds: Canvas is 3000×2500. Center is (1500, 1250). Visible bounds: X [450, 2550], Y [375, 2125]. Maintain ≥150px gaps between objects.
Layers: Read actions span ALL layers. Write actions target the ACTIVE layer unless layerId (layer name or ID; prefer names) is specified. Move objects via moveObjectsToLayer, do not update properties to move them.
System Objects:MEMORY and RULES are system objects. Do not delete, rename, or overwrite them. You may append content or update them when explicitly asked, but never remove them or change their original purpose.
Documents & Names: An object's name subtitle is hidden if its document is empty. Include content at creation when the object's displayed name/subtitle adds value — e.g., unique objects, flow-chart nodes, document-heavy items. Skip it for generic repetitive objects (e.g., dozens of "tree" tiles on a game map) where labels would clutter.
Text Format: Document content requires plain multiline text with REAL line breaks. Do NOT use \n escape sequences.
Workflow: Always searchDocuments or listObjects before creating. Use real IDs from queries. Maximize efficiency by using createMultipleObjects and batch updateObjects.
2. Object Types & Connections
Object → Document: Every object (emoji, textLabel, rectangle) carries a document. A document is a text body attached to the object — this is where notes, descriptions, and detailed info live. Set it via content at creation or updateDocument later. Separate from this, updateCanvasDocument writes project-level notes (not tied to any object).
Object metadata: Separate from the document. Every object can have metadata fields: tags, keywords, description, role, category.
Emoji (Default): Visual object with a document.
Text Label (type: "textLabel"): Uses name for display text. Must set emoji="🔤". Adjust width to fit. Use for short visual labels/titles, not as the primary container for notes/documents.
Rectangle (type: "rectangle"): Used for structural dividers, not regions.
Connections: Link objects visually. Optional description (max 500 chars). In batch creation, from/to accepts number (index in batch) or string (existing ID).
3. MCP Tools — Limits & Non-obvious Details
listObjects: limit 1–500 (default 200). layerId accepts layer name or ID; prefer names (e.g., "Layer 1").
searchDocuments: limit 1–100 (default 20). Full-text substring search (not semantic/fuzzy) across object names, document content, tags, keywords, role, category, and description metadata. Use exact keywords.
readDocument: Returns full object info + document content for one object. Always call before editing a document.
readDocuments: Batch read, max 20 objectIds at once. Prefer over repeated readDocument calls.
updateDocument: Replace document content for one object. Always readDocument first to avoid overwriting.
createProject: projectName 1–160 chars.
createLayer: name 1–160 chars. Sets new layer as active.
switchProject & createProjectSwitchLink: Link variant avoids MCP reconnection.
createObject: emoji 1–16 chars. Pass content here to save an updateDocument call. metadata fields: tags, keywords, description, role, category. For type: "rectangle", width and height are required (20–4000 each).
createMultipleObjects: Max 100 objects. connections.from/to accepts number (batch index) or string (existing ID).
updateObjects: Single object — use root objectId etc. Batch (max 200) — pass array in updates. Modifiable: x, y, emoji, name, type, w/h, rotation, scale. Cannot update layerId here — use moveObjectsToLayer.
updateCanvasDocument: Max 150,000 chars.
moveObjectsToLayer: Max 500 objects. Layer by name or ID; prefer names.
createConnection: description max 500 chars. Connection is directed (arrow from source to target).
deleteConnection: Delete by connectionId.
deleteObject: Also removes all linked connections.