MCP server for drawing diagrams on a live tldraw canvas. Works with Claude Code, Codex and any MCP client.
Six tools with complete JSON Schema definitions and detailed descriptions (avg 180 chars). Naming follows verb_noun convention (create_*, update_*, delete_, get_). Schemas are well-structured with enums for constrained inputs (direction, role, shape types, colors). However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; no recovery guidance. Tool composition is sound (single responsibility, chainable IDs). Missing: per-parameter descriptions in some nested objects, output schema documentation, error classification.
Draw bound connectors between shapes that already exist, by id. Use this to add links to a diagram without redrawing it. Connectors anchor on shape edges and re-route when either end moves.
Render a node-and-edge diagram with automatic layout. Give it nodes (with labels and semantic roles) and edges; it sizes each node to its text, arranges them into layers in the requested direction, reduces edge crossings, and draws connectors bound to the nodes. Use this for any flowchart, architecture diagram, state machine, org chart, dependency graph or sequence — it is the direct replacement for writing mermaid. Never pre-compute coordinates for it.
Create shapes at explicit positions: geo (rectangle, ellipse, diamond, ...), text, arrow, line, draw (freehand), note (sticky) and frame (titled container). Use for free-form drawing, annotation and wireframes. To link two shapes, give the arrow `from` and `to` shape ids rather than coordinates — that binds it so it anchors on their edges and follows them. Prefer create_diagram when the content is really a graph.
Delete shapes by id, or pass `all: true` to clear the canvas. Arrows bound to a deleted shape are removed along with it.
List everything on the canvas with resolved geometry, labels, and — for arrows — the ids each end is bound to. Call before any edit that refers to existing content.
Output schemas not documented. LLMs cannot predict response structure for any tool. create_diagram, create_shape, connect_shapes, update_shape, delete_shape, get_canvas all lack documented return types.
Nested object parameters lack per-field descriptions. create_shape.shapes[].properties has 15+ fields (x, y, w, h, color, fill, dash, size, font, from, to, start, end, points, geo, kind, rotation, opacity) with no inline guidance on which are mutually exclusive or required together.
No error handling or recovery guidance. Tools do not document what happens on invalid input (e.g. invalid shape id in update_shape, non-existent node in create_diagram). No actionable error messages.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Change existing shapes by id — position, size, colour, text, or any other style. Call get_canvas first to learn the real ids.
update_shape.updates[].props is a free-form object with no schema. LLMs cannot know which fields are valid or what types they accept. Should enumerate allowed properties with types.
delete_shape supports destructive all:true flag with no confirmation step. Agents could accidentally clear the entire canvas. Should require explicit confirmation or offer a dry-run mode.