Search / io.github.tldraw/tldraw
tldraw
R0· no sign-inDraw and visually collaborate with your agents on tldraw's canvas.
v0.1.0 · active · repository · descriptor JSON · versions
Search / io.github.tldraw/tldraw
R0· no sign-inDraw and visually collaborate with your agents on tldraw's canvas.
v0.1.0 · active · repository · descriptor JSON · versions
{
"mcpServers": {
"tldraw": {
"type": "http",
"url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
}
}
}claude mcp add --transport http tldraw https://tldraw-mcp-app.tldraw.workers.dev/mcp[mcp_servers.tldraw]
url = "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"tldraw": {
"type": "remote",
"url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"tldraw": {
"type": "http",
"url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=tldraw&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdGxkcmF3LW1jcC1hcHAudGxkcmF3LndvcmtlcnMuZGV2L21jcCJ9"
}{
"servers": {
"tldraw": {
"type": "http",
"url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
}
}
}{
"mcpServers": {
"tldraw": {
"httpUrl": "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
}
}
}extensions:
"tldraw":
enabled: true
name: "tldraw"
type: streamable_http
uri: "https://tldraw-mcp-app.tldraw.workers.dev/mcp"
timeout: 300
protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_length1 tools have descriptions over 1,024 characters, which crowds the contexttools.schemasevery tool has an object input schematools.annotations6 of 6 tools declare readOnlyHint or destructiveHinttools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHinttools.token_costabout 1,190 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changesno tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageNo tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +reachable +uptime-96% -stale-227d
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://tldraw-mcp-app.tldraw.workers.dev/mcp streamable-http | none | yes | 96% | 172 ms | 2025-11-25 | 2026-10-19 |
https://tldraw-mcp-app.tldraw.workers.dev/sse sse | none | yes | 92% | 179 ms | 2025-11-25 | 2026-10-19 |
exec | 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' }) |
_exec_callback | App-only: widget calls this to resolve a pending exec request. |
_get_canvas_stateread-only | App-only: get the latest checkpoint for a canvas by its canvasId. |
read_checkpointread-only | App-only: read shapes from a checkpoint by ID. |
save_checkpoint | App-only: save shapes to a checkpoint (from user edits). shapesJson and assetsJson must be JSON array strings. |
searchread-only | 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") |
Schemas: list_tools.
{
"name": "io.github.tldraw/tldraw",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://tldraw-mcp-app.tldraw.workers.dev/mcp",
"type": "streamable-http"
},
{
"url": "https://tldraw-mcp-app.tldraw.workers.dev/sse",
"type": "sse"
}
],
"version": "0.1.0",
"repository": {
"url": "https://github.com/tldraw/tldraw",
"source": "github",
"subfolder": "apps/mcp-app"
},
"description": "Draw and visually collaborate with your agents on tldraw's canvas."
}