tldraw
by tldraw
Draw diagrams, flowcharts and wireframes on a live tldraw canvas rendered inside the chat, and edit them by hand while the agent watches. 6 tools, no sign-in, MCP Apps widget.
Verified connector
Listed by Anthropic as a partner connector in its Connectors Directory.
Connection checked by Agentman on .
Anthropic states this reflects the level of review a connector received, not a security audit.
Connect tldraw via MCP
https://tldraw-mcp-app.tldraw.workers.dev/mcpWorks in any MCP-compatible client. In Agentman Studio it is one click — no config file to edit.
tldraw Tools & Capabilities (6)
Search the tldraw Editor API spec by writing JavaScript that receives a `spec` object and returns a result. The spec contains: spec.members (all Editor methods/properties with name, kind, signature, description, category), spec.categories (category names), spec.types.shapes (focused shape type definitions with props), spec.types.shapeTypes (list of all shape type strings), spec.helpers (exec helper functions with descriptions, params, examples). Examples: - Find shape methods: return spec.members.filter(m => m.category === "shapes").map(m => ({ name: m.name, signature: m.signature })) - Get arrow shape props: return spec.types.shapes.find(s => s.shapeType === "arrow") - List all categories: return spec.categories - Find a helper: return spec.helpers.find(h => h.name === "createArrowBetweenShapes")
Execute JavaScript code on a tldraw canvas. The code runs in the widget with access to the live `editor` instance, helper functions, and normal js. Use the `search` tool first to discover available Editor methods and shape types. Each canvas has a unique `canvasId`. Omit `canvasId` to create a new blank canvas. To edit an existing canvas, pass the `canvasId` that was returned by a previous exec call. Shapes and text grow depending on the amount of text they have. Use clever scripting to ensure there are no unintended overlaps. Examples: - Create a rectangle: editor.createShape({ _type: 'rectangle', shapeId: 'box1', x: 200, y: 120, w: 320, h: 180, text: 'Hello' }) - Connect shapes with an arrow: editor.createShape({ _type: 'arrow', shapeId: 'a1', fromId: 'box1', toId: 'box2', x1: 0, y1: 0, x2: 100, y2: 0 }) - Select and zoom: editor.select('box1'); editor.zoomToSelection() - Read shapes: return editor.getCurrentPageShapes() - Distribute evenly: editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal') - Box around shapes: boxShapes(['box1', 'box2'], { text: 'Group label', color: 'blue' }) - Stack shapes dynamically: editor.createShape({ _type: 'rectangle', shapeId: 'a', x: 0, y: 0, w: 300, h: 200, text: 'First box\nwith wrapping text' }); const bounds = editor.getShapePageBounds('a'); editor.createShape({ _type: 'rectangle', shapeId: 'b', x: 0, y: bounds.maxY + 20, w: 300, h: 200, text: 'Below first' })
App-only: widget calls this to resolve a pending exec request.
App-only: get the latest checkpoint for a canvas by its canvasId.
App-only: read shapes from a checkpoint by ID.
App-only: save shapes to a checkpoint (from user edits). shapesJson and assetsJson must be JSON array strings.
Read from the server on 2026-08-18, including each tool's own safety annotations.
Limits
- No delete tool, and no undo through the connector. Nothing on the server removes a canvas or clears one. Everything is additive through
exec, so a cluttered canvas is cleaned up by asking the agent to move or rewrite shapes, not by deleting the drawing. - The three write tools are not idempotent. A retried
execruns the code again, so a timed-out-but-succeeded call can leave duplicate shapes.execwaits only a few seconds before returning a "still executing" result, which makes this more likely than the annotation alone suggests. - No canvas is reachable outside the connector. Stated as a limit as well as a reassurance: you cannot share a drawing by link, embed it, or hand a colleague an identifier. Export is whatever your client offers around the widget.
- Checkpoint history is capped at 200 and evicted oldest-first. A very long session loses its earliest states.
- The server rate-limits requests. Its worker applies a limiter keyed on the MCP session, or on the client IP address before a session exists, and returns HTTP 429 when the limit trips. tldraw publishes no figure for the threshold.
- No prompts. The server does not implement
prompts/listat all — the method returns "Method not found" rather than an empty list, andinitializenever advertises the capability. Anthropic's directory agrees, listing no prompt names. - Text-only fallback. Outside a client implementing MCP Apps there is no canvas, and the connector's whole point is the canvas.
- The vendor's documentation URL does not render. The Notion page Anthropic's directory links returns a JavaScript shell to every fetch we tried and reports
publicAccessRole: nonefrom Notion's own public-page endpoint. This page is built from the live handshake and tldraw's public repository instead. - Two licences, and only one is permissive. The MCP app is MIT. The tldraw SDK underneath it is not — see below.
Frequently asked questions
Does the tldraw MCP server need an account or sign-in?
No. We opened an anonymous handshake against the endpoint on 2026-08-18 and the server returned all six tool definitions with no credential. We then called a read-only tool with empty arguments and got a schema validation error rather than an authentication challenge, which means the request cleared any gate and the tool never ran. The server publishes no OAuth descriptor at any of the three RFC 9728 paths.
Does the tldraw connector draw a real canvas or just return text?
A real one, in clients that implement the MCP Apps extension. The server declares a resources capability and serves one resource, an HTML widget at the URI ui://show-canvas/mcp-app.html with MIME type text/html;profile=mcp-app. The exec tool points at that same resource, so a supporting client renders an interactive tldraw canvas in the conversation. Elsewhere the connector degrades to text.
Can you edit the drawing yourself while the agent works?
Yes, and that is the design. tldraw's repository states the widget renders a full tldraw canvas inside the host's iframe, and canvas state is checkpointed back to the server. The save_checkpoint tool exists specifically to persist your own edits, and the handshake instructions say the current canvas state is kept in model context, so the agent sees what you changed.
Do canvases the agent creates get a public URL?
No. There is no share link and no public page. We probed the server on 2026-08-18 and it answers only four paths, of which none serves a canvas by identifier. Drawings live in the server's per-connection storage and in your browser, reachable only through the connector. Canvas identifiers are eight random characters from a 36-character alphabet, but nothing accepts one over HTTP anyway.
Why does the directory list tools the server does not have?
The listing is stale. Anthropic's directory names six tools and the live server returns six, so the counts agree exactly, but only two names are the same. The four listed names describe a shape-level design the server has since replaced with a single JavaScript exec tool. Copy names from the live handshake, not from the listing or from tldraw's launch post.
What does the exec tool actually run, and where?
JavaScript, inside the canvas widget in your own client. The tool description says the code runs in the widget with access to the live editor instance and helper functions. It is not a server-side sandbox and it is not your machine. The companion search tool queries tldraw's Editor API specification so the agent can look up a method before calling it.
Is the tldraw MCP app open source, and under which licence?
Yes, and under two different licences. The MCP app itself ships in the tldraw monorepo under an MIT licence file. The tldraw SDK it renders is under tldraw's own licence, which forbids use in a Production Environment without a licence key and enforces that programmatically. Using the hosted connector is unaffected; building on the SDK is not.
Sources
- Live
initialize,tools/list,prompts/list,resources/list,resources/templates/listandresources/readhandshake againsthttps://tldraw-mcp-app.tldraw.workers.dev/mcp— 2026-08-18. One unauthenticatedtools/callwas made to the read-only_get_canvas_statetool with empty arguments, purely to observe the auth gate; it returned a schema validation error, so the tool did not execute. No drawing was created and no write tool was called. · retrieved 2026-08-18 - tldraw — tldraw MCP App: Letting your agents draw — https://tldraw.dev/blog/tldraw-mcp-app (fetched 2026-08-18) · retrieved 2026-08-18
- tldraw —
apps/mcp-appREADME — https://raw.githubusercontent.com/tldraw/tldraw/main/apps/mcp-app/README.md (fetched 2026-08-18) · retrieved 2026-08-18 - tldraw — MCP app worker, tool registration, canvas store and shared utilities, under
apps/mcp-app/src/in https://github.com/tldraw/tldraw (fetched 2026-08-18) · retrieved 2026-08-18 - tldraw — MCP app licence (MIT) — https://raw.githubusercontent.com/tldraw/tldraw/main/apps/mcp-app/LICENSE.md (fetched 2026-08-18) · retrieved 2026-08-18
- tldraw — SDK licence — https://raw.githubusercontent.com/tldraw/tldraw/main/LICENSE.md (fetched 2026-08-18) · retrieved 2026-08-18
- tldraw — Privacy Policy — https://www.tldraw.com/privacy.html (fetched 2026-08-18) · retrieved 2026-08-18
- Anthropic connector directory — https://claude.ai/directory/02795770-2c02-42fe-888f-26769ca324a0 (snapshot 2026-08-16) · retrieved 2026-08-16
Use in Agentman
Connect once and your agents call these tools on their own — on a schedule, in a workflow, with nobody at the keyboard.
Open in Agentman StudioServer Info
- Category
- Productivity
- Developer
- tldraw
- Tools
- 6
- Domain
- tldraw-mcp-app.tldraw.workers.dev
Using Claude Desktop or another MCP client? Setup docs — the connection URL above works anywhere.