tldraw-mcp
Enables AI-driven manipulation of a tldraw canvas, including tools for creating, updating, and deleting shapes, managing frames, and generating auto-layout flowcharts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tldraw-mcpDraw a flowchart showing the user authentication process"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tldraw-mcp
Minimal MCP server for AI-driven canvas manipulation with tldraw.
Architecture
┌─────────────┐ stdio ┌─────────────┐ WebSocket ┌─────────────┐
│ AI Client │◄──────────────►│ tldraw-mcp │◄───────────────►│ Widget │
│ (Claude,etc)│ │ (server) │ :4000 │ (tldraw) │
└─────────────┘ └─────────────┘ └─────────────┘
:3000Related MCP server: tldraw MCP Server
Tools
Tool | Description |
| Create shapes (rectangle, ellipse, star, cloud, diamond, etc.) |
| Update shape properties (position, size, color, fill) |
| Delete shapes by ID |
| Connect two shapes with an arrow |
| Create a frame to group shapes together |
| Create a flowchart with nodes and edges (auto-layout) |
| Get current canvas state |
| Zoom canvas to fit all shapes |
| Clear all shapes |
Quick Start
# 1. Clone and install
git clone https://github.com/dpunj/tldraw-mcp
cd tldraw-mcp
bun install
# 2. Start the widget (tldraw canvas + WebSocket server)
cd widget
bun install
bun run dev
# Opens http://localhost:3000 (canvas) + ws://localhost:4000 (relay)
# 3. In another terminal, test the MCP server
cd ..
bun run devClaude Desktop Config
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"tldraw": {
"command": "bun",
"args": ["run", "/path/to/tldraw-mcp/src/index.ts"]
}
}
}Environment Variables
Variable | Default | Description |
|
| Widget WebSocket URL |
|
| Widget WS server port |
Development
# MCP server
bun run dev # Run server
bun run build # Build for distribution
bun run check # TypeScript check
# Widget
cd widget
bun run dev # Start vite + WS serverLicense
MIT
Available Tools
9 toolsclear_canvasA
Remove all shapes from the canvas
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Remove all shapes' indicates a destructive mutation, but it does not disclose behavioral traits such as whether this action is reversible, requires specific permissions, or has side effects on other canvas elements. The description is minimal and lacks crucial context for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's action without any wasted words. It is front-loaded and appropriately sized for a simple tool, earning full marks for conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's destructive nature (implied by 'Remove'), no annotations, and no output schema, the description is incomplete. It does not explain what happens after clearing (e.g., confirmation, error handling, or return values), which is critical for understanding the tool's behavior in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description does not add parameter semantics beyond the schema, but this is appropriate given the lack of parameters. A baseline of 4 is applied as it adequately handles the parameter-less case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Remove all shapes from the canvas' clearly states the tool's purpose with a specific verb ('Remove') and resource ('all shapes from the canvas'). It distinguishes from siblings like 'delete_shapes' (which likely deletes specific shapes) by emphasizing the comprehensive 'all shapes' scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when clearing the entire canvas, but does not explicitly state when to use this tool versus alternatives like 'delete_shapes' or 'create_frame'. It provides some context through the action described, but lacks explicit guidance on exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_shapesC
Connect two shapes with an arrow
| Name | Required | Description | Default |
|---|---|---|---|
| from | Yes | Source shape ID | |
| to | Yes | Target shape ID | |
| label | No | Arrow label |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Connect') but doesn't explain what happens—e.g., whether this creates a permanent link, requires existing shapes, affects other elements, or has side effects like visual updates. For a mutation tool with zero annotation coverage, this leaves critical behavioral traits unspecified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core action, making it easy to parse quickly, and every part of the sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation connecting shapes), lack of annotations, and no output schema, the description is incomplete. It doesn't cover behavioral aspects like effects on the canvas, error conditions, or what the connection entails (e.g., directional arrow, persistence). For a tool with 3 parameters and no structured safety hints, more context is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear parameter descriptions in the schema (e.g., 'Source shape ID' for 'from'). The description adds no additional meaning beyond what the schema provides, such as explaining how shapes are identified or what a 'label' represents contextually. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Connect') and resources ('two shapes with an arrow'), making the purpose immediately understandable. However, it doesn't distinguish this tool from potential siblings like 'create_flowchart' or 'update_shape' that might also involve shape relationships, missing explicit differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With siblings like 'create_flowchart' (which might create connections as part of a larger structure) or 'update_shape' (which could modify connections), there's no indication of context, prerequisites, or exclusions for this specific connection operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_flowchartC
Create a flowchart diagram with nodes and connections. Nodes are auto-arranged.
| Name | Required | Description | Default |
|---|---|---|---|
| nodes | Yes | List of nodes | |
| edges | No | List of connections between nodes | |
| direction | No | Layout direction | vertical |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. While 'create' implies a write operation, the description doesn't disclose important behavioral traits: whether this creates a new canvas or adds to existing content, what permissions are needed, whether the result is editable, what happens if node IDs conflict, or what the output looks like. The auto-arrangement hint is useful but insufficient for a creation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just two sentences, front-loading the core purpose. Every word earns its place with no redundancy or unnecessary elaboration. The structure moves from general creation to specific behavioral detail (auto-arrangement).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 3 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., a diagram ID, image data, or success status), doesn't mention error conditions or constraints, and provides minimal behavioral context despite the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description mentions 'nodes and connections' which aligns with the schema's nodes and edges parameters, and 'auto-arranged' hints at the direction parameter's purpose. However, it doesn't add significant meaning beyond what the comprehensive schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a flowchart diagram with nodes and connections, specifying that nodes are auto-arranged. It uses specific verbs ('create') and resources ('flowchart diagram'), but doesn't explicitly differentiate from sibling tools like create_shape or create_frame, which appear to be related drawing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. With multiple sibling tools for creating and manipulating shapes (create_shape, create_frame, connect_shapes, etc.), there's no indication of when this flowchart-specific tool is appropriate versus more general shape tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_frameC
Create a frame to group shapes together
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate | |
| y | Yes | Y coordinate | |
| width | No | Width | |
| height | No | Height | |
| name | No | Frame label |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'create' (implying a write operation) but doesn't cover permissions, whether frames are permanent or editable, what happens to existing shapes, or error conditions. For a creation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action ('create a frame') and purpose ('to group shapes together'), making it easy to parse. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 5 parameters, no annotations, and no output schema, the description is incomplete. It doesn't explain what a frame is in this context, how grouping works, what the output looks like, or error handling. The agent lacks sufficient context to use this tool effectively beyond basic parameter passing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all 5 parameters (x, y, width, height, name) with descriptions and defaults. The description adds no parameter-specific information beyond implying frames group shapes, which doesn't clarify parameter usage. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'create' and the resource 'frame', specifying its purpose to 'group shapes together'. It distinguishes from siblings like 'create_shape' or 'create_flowchart' by focusing on frames rather than individual shapes or flowcharts. However, it doesn't explicitly differentiate from all siblings (e.g., 'connect_shapes' also groups shapes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'create_shape' or 'connect_shapes'. It doesn't mention prerequisites (e.g., needing shapes to group) or exclusions (e.g., not for grouping text). Without usage context, the agent must infer from the name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_shapeC
Create a shape on the canvas (rectangle, ellipse, text, note, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Shape type | |
| x | Yes | X coordinate | |
| y | Yes | Y coordinate | |
| width | No | Width | |
| height | No | Height | |
| text | No | Text content | |
| geo | No | Geo shape type | rectangle |
| color | No | Color | black |
| fill | No | Fill style | none |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states the basic action. It doesn't disclose whether this requires specific permissions, whether shapes persist, if there are rate limits, what happens on failure, or what the return value might be. For a creation tool with zero annotation coverage, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise single sentence with zero waste. Front-loaded with the core action and resource, followed by helpful examples. Every word earns its place without redundancy or unnecessary elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 9 parameters, no annotations, and no output schema, the description is inadequate. It doesn't explain what happens after creation, how shapes relate to other tools, error conditions, or system constraints. The agent would need to guess about behavioral aspects despite the comprehensive parameter schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 9 parameters thoroughly with descriptions, enums, defaults, and required fields. The description adds minimal value by listing examples ('rectangle, ellipse, text, note, etc.') that partially overlap with the 'type' and 'geo' parameter enums, but doesn't provide additional context beyond what's in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create') and resource ('a shape on the canvas') with examples of shape types. It distinguishes from siblings like 'delete_shapes' or 'update_shape' by specifying creation, but doesn't explicitly differentiate from 'create_flowchart' or 'create_frame' which might create different canvas elements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like 'create_flowchart' or 'create_frame'. The description implies it's for creating basic shapes, but doesn't specify boundaries or prerequisites. No explicit 'when-not' or alternative tool recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_shapesC
Delete one or more shapes from the canvas
| Name | Required | Description | Default |
|---|---|---|---|
| ids | Yes | Shape IDs to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. While 'Delete' implies a destructive mutation, the description doesn't specify if deletion is permanent, reversible, requires specific permissions, or has side effects (e.g., affecting connected shapes). It also omits details on response format or error handling, leaving significant gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that directly states the tool's action without unnecessary words. It's front-loaded with the core purpose, making it easy to parse quickly, and every part of the sentence contributes essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of a destructive operation with no annotations and no output schema, the description is incomplete. It fails to address critical aspects like permanence of deletion, error scenarios (e.g., invalid IDs), or impact on related elements (e.g., connections in sibling tools). For a mutation tool, this leaves too many unknowns for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter 'ids' clearly documented as 'Shape IDs to delete'. The description adds no additional meaning beyond this, such as ID format, constraints, or examples. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, but there's no extra value from the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Delete') and resource ('shapes from the canvas'), making the purpose unambiguous. However, it doesn't differentiate from sibling tools like 'clear_canvas' (which might delete all shapes) or 'update_shape' (which modifies rather than deletes), leaving room for improvement in distinguishing from alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'clear_canvas' (for bulk deletion) or 'update_shape' (for modifications). It lacks explicit when/when-not instructions or prerequisites, such as whether shapes must exist or be selected first, making usage context unclear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_snapshotB
Get current state of all shapes on the canvas
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only operation ('Get') but doesn't specify if this is a real-time snapshot, cached data, or has any side effects like logging. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence that front-loads the core functionality without any fluff. It uses minimal words to convey the essential action and target, making it highly efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is adequate but minimal. It covers the basic purpose but lacks details on output format, error conditions, or performance characteristics. For a read operation in a canvas context, more context on what 'state' includes (e.g., positions, properties) would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, which is efficient. It earns a 4 because it avoids redundancy while clearly stating the tool's scope ('all shapes on the canvas'), which implicitly defines the output semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('current state of all shapes on the canvas'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from siblings like 'zoom_to_fit' (which might also provide canvas state information) or 'create_shape' (which modifies rather than reads), so it falls short of a perfect score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. For example, it doesn't clarify if this is for retrieving a full snapshot versus incremental updates, or when to prefer this over other read-like operations that might exist. Without such context, the agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_shapeC
Update properties of an existing shape
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Shape ID | |
| x | No | New X coordinate | |
| y | No | New Y coordinate | |
| width | No | New width | |
| height | No | New height | |
| text | No | New text content | |
| color | No | New color | |
| fill | No | New fill style |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool updates properties, implying mutation, but lacks details on permissions, side effects (e.g., if updates affect other shapes), error handling, or response format. This is inadequate for a mutation tool with zero annotation coverage, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('update properties') without unnecessary words. It earns its place by succinctly conveying the tool's purpose, making it easy to parse and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of an 8-parameter mutation tool with no annotations and no output schema, the description is incomplete. It fails to address behavioral aspects like safety, permissions, or return values, and doesn't leverage sibling context to clarify usage, leaving the agent under-informed for effective tool invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions 'properties' but doesn't specify which ones, while the input schema has 100% description coverage, detailing all 8 parameters (e.g., 'id', 'x', 'color'). Since the schema does the heavy lifting, the description adds minimal value beyond implying updatable properties, meeting the baseline for high schema coverage without compensating further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('update') and resource ('properties of an existing shape'), making the purpose immediately understandable. However, it doesn't differentiate this tool from potential siblings like 'create_shape' or 'delete_shapes' beyond the basic action, missing specific distinctions about what properties can be updated versus created.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., shape must exist), exclusions (e.g., cannot update non-existent shapes), or comparisons to siblings like 'create_shape' for new shapes or 'delete_shapes' for removal, leaving the agent without contextual usage cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zoom_to_fitA
Zoom the canvas to fit all shapes in view
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the action ('zoom') but does not specify whether this is a read-only operation, if it affects the canvas permanently, what happens if no shapes exist, or if there are any rate limits. This leaves significant gaps in understanding the tool's behavior beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that directly states the tool's purpose without any redundant or unnecessary words. It is front-loaded and efficiently communicates the core functionality, making it easy to understand at a glance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is adequate for basic understanding but lacks depth. It does not explain what 'zoom' entails (e.g., view adjustment vs. permanent change) or the return value, which could be important for an agent to use it correctly in a workflow with siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately adds no parameter information, as there are none to describe, which aligns with the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('zoom the canvas') and the goal ('to fit all shapes in view'), using a precise verb+resource combination. It distinguishes this tool from siblings like 'clear_canvas' or 'get_snapshot' by focusing on view adjustment rather than content modification or retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when shapes are not fully visible or need to be centered, but it does not explicitly state when to use this tool versus alternatives like 'get_snapshot' for viewing or manual zoom adjustments. No exclusions or prerequisites are mentioned, leaving usage context somewhat inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
9 tool updates
v0.1.0- First observed
clear_canvas - First observed
connect_shapes - First observed
create_flowchart - First observed
create_frame - First observed
create_shape - First observed
delete_shapes - First observed
get_snapshot - First observed
update_shape - First observed
zoom_to_fit
TDQS
Scored across 9 tools
Every tool has a clearly distinct purpose with no ambiguity. For example, create_shape makes individual shapes, create_frame groups them, create_flowchart auto-arranges nodes, and connect_shapes specifically adds arrows between shapes. The actions (clear, create, delete, get, update, zoom) are well-separated by target objects.
All tools follow a consistent verb_noun pattern using snake_case throughout. Verbs like create, delete, update, get, clear, connect, and zoom are applied predictably to nouns like canvas, shapes, flowchart, frame, snapshot, ensuring readability and predictability across the set.
With 9 tools, this is well-scoped for a diagramming/canvas server. Each tool earns its place by covering distinct operations like creation, modification, deletion, viewing, and canvas management, without being overly sparse or bloated for the domain.
The tool surface provides complete CRUD/lifecycle coverage for canvas shapes and diagrams. It includes creation (create_shape, create_frame, create_flowchart), reading (get_snapshot), updating (update_shape, connect_shapes), deletion (delete_shapes, clear_canvas), and utility (zoom_to_fit), with no obvious gaps for the stated purpose.
Maintenance
Related MCP Connectors
Connect AI agents to Flato's editable canvas runtime through a hosted MCP server.
Collaborative whiteboard MCP server — create objects, connectors, C4 diagrams, and manage boards
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Cloud-hosted MCP server for durable AI memory
Related MCP Servers
- FlicenseAqualityDmaintenanceMinimal MCP server for editing tldraw .tldr files via JSON manipulation. Headless, no browser needed.181-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents programmatic control over a live tldraw canvas, enabling diagram creation through natural language.1MIT
- AlicenseNot gradedqualityBmaintenanceA MCP server that bridges web canvas with local Codex/Claude, exposing 23 tools for reading, creating, modifying, connecting, and generating canvas content via local HTTP bridge and stdio MCP.AGPL 3.0
- AlicenseAqualityDmaintenanceA full-featured MCP server that lets AI assistants create and edit tldraw diagrams programmatically with 30 tools across all 14 shape types.432MIT