excalidraw-mcp-server
Provides a comprehensive set of drawing tools to create, update, and manage diagrams in the Excalidraw format, including support for exporting scenes to excalidraw.com.
Enables the conversion of Mermaid diagram definitions into editable Excalidraw canvas elements.
excalidraw-mcp-server
The only Excalidraw MCP server with security hardening, inline diagram rendering, and real-time canvas sync.
What it does
Ask your AI to draw a diagram, and it appears right inside the chat. The MCP server gives Claude Desktop, ChatGPT, VS Code, and Cursor a full set of drawing tools backed by the Excalidraw format -- with API authentication, rate limiting, and input validation on every operation.
v2.0 adds MCP Apps support: diagrams stream inline as interactive SVG widgets with draw-on animations, and you can export any diagram to excalidraw.com with one click.
Related MCP server: excalidraw-mcp-collab
Two modes, zero config
Standalone mode (default) -- just install and go. The server runs with an in-process element store. No canvas server, no API keys, no setup. Your MCP client calls the tools, and diagrams render inline.
Connected mode -- start the optional canvas server for real-time browser sync. Multiple clients can collaborate on the same canvas through authenticated WebSocket connections. File persistence keeps state across restarts.
The server auto-detects which mode to use: if a canvas server is reachable, it connects to it. Otherwise it falls back to standalone.
Architecture
Diagram created with excalidraw-mcp-server -- edit in Excalidraw
Features
MCP Apps (v2.0)
Inline diagram rendering in Claude Desktop, ChatGPT, and VS Code
Streaming SVG with draw-on animations as elements arrive
Export to excalidraw.com with one click
Element reference cheatsheet via
read_metool
16 MCP tools
Create, update, delete, and query elements (rectangle, ellipse, diamond, arrow, text, line, freedraw)
Batch create up to 100 elements at once
Group, ungroup, align, distribute, lock, unlock
Mermaid diagram conversion
SVG and PNG export
Security
API key authentication with constant-time comparison
Origin-restricted CORS (no wildcards)
WebSocket auth with token and origin validation
Standard and strict rate limiting tiers
Bounded Zod schemas with
.strict()on every endpointHelmet.js security headers with CSP
Infrastructure
Real-time WebSocket sync across browser clients
Optional atomic-write file persistence
Structured pino audit logging
Install
npm install -g excalidraw-mcp-serverOr run directly:
npx excalidraw-mcp-serverQuick start
Standalone (recommended for most users)
Just point your MCP client at the server. No canvas server needed.
{
"mcpServers": {
"excalidraw": {
"command": "npx",
"args": ["excalidraw-mcp-server"]
}
}
}Then ask your AI: "Draw an architecture diagram showing a load balancer, three app servers, and a database"
Connected mode (real-time browser sync)
# Generate an API key
node scripts/generate-api-key.cjs
# Start the canvas server
EXCALIDRAW_API_KEY=<your-key> npm run canvas
# Open http://localhost:3000 to see the live canvasPoint your MCP client at the server with the same API key:
{
"mcpServers": {
"excalidraw": {
"command": "npx",
"args": ["excalidraw-mcp-server"],
"env": {
"EXCALIDRAW_API_KEY": "<your-key>",
"CANVAS_SERVER_URL": "http://127.0.0.1:3000"
}
}
}
}MCP tools
Tool | Description |
| Render elements as an inline SVG widget with streaming animations (MCP Apps) |
| Get the element reference cheatsheet (types, colors, sizing tips) |
| Create a single element (rectangle, ellipse, diamond, arrow, text, line, freedraw) |
| Update an existing element by ID |
| Delete an element by ID |
| Search elements by type, locked status, or group ID |
| Get scene state, all elements, theme, or library |
| Create up to 100 elements in one call |
| Group multiple elements together |
| Remove elements from a group |
| Align elements (left, center, right, top, middle, bottom) |
| Distribute elements evenly (horizontal or vertical) |
| Lock elements to prevent modification |
| Unlock elements |
| Convert a Mermaid diagram to Excalidraw elements |
| Export the canvas as SVG or PNG |
Security comparison
Feature | Typical MCP servers | excalidraw-mcp-server |
Authentication | None | API key (constant-time compare) |
CORS |
| Origin allowlist |
WebSocket auth | None | Token + origin validation |
Rate limiting | None | Standard + strict tiers |
Input validation | Minimal | Bounded Zod with |
Security headers | None | Helmet.js + CSP |
Request size limit | None | 512KB body, 1MB WebSocket |
Audit logging | None | Structured pino logs |
Configuration
All settings via environment variables. Copy .env.example to .env and adjust as needed.
Variable | Default | Description |
|
| Use in-process store (no canvas server needed) |
|
| Canvas server bind address |
|
| Canvas server port |
| Auto-generated | API key for auth (min 32 chars) |
|
| Comma-separated origin allowlist |
|
| Rate limit window in milliseconds |
|
| Max requests per window (standard tier) |
|
| Enable file-based persistence |
|
| Directory for persistent storage |
|
| URL the MCP server uses to reach the canvas |
|
| Log level: debug, info, warn, error |
|
| Enable audit logging |
|
| Maximum elements on canvas |
|
| Maximum elements per batch create |
MCP client configuration
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"excalidraw": {
"command": "npx",
"args": ["excalidraw-mcp-server"]
}
}
}Cursor
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"excalidraw": {
"command": "npx",
"args": ["excalidraw-mcp-server"]
}
}
}VS Code
Add to your MCP settings:
{
"mcpServers": {
"excalidraw": {
"command": "npx",
"args": ["excalidraw-mcp-server"]
}
}
}For connected mode, add "env": { "EXCALIDRAW_API_KEY": "<key>", "CANVAS_SERVER_URL": "http://127.0.0.1:3000" } to the config above. Replace <key> with the key from node scripts/generate-api-key.cjs.
Development
# Install dependencies
npm ci
# Run in development mode (watch + Vite dev server)
npm run dev
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Lint
npm run lint
# Type check
npm run type-check
# Build (server + widget + frontend)
npm run buildProject structure
src/
mcp/ MCP server (stdio transport)
tools/ 16 tool implementations
apps/ MCP Apps wiring, standalone store, cheatsheet
schemas/ Zod schemas and input limits
canvas-client.ts HTTP client for canvas server
index.ts MCP server entry point
canvas/ Canvas server (Express + WebSocket)
middleware/ Auth, CORS, rate limiting, audit, security headers
routes/ REST API routes + SVG export
ws/ WebSocket handler and protocol
store/ Element storage (memory + file)
index.ts Canvas server entry point
shared/ Shared config, types, logging
widget/ MCP Apps inline widget (Vite + singlefile build)
frontend/ Excalidraw React frontend (browser)
test/ Unit and integration tests (290 tests)Migrating from v1.x
Zero-config upgrade. All 14 original tools work identically -- create_view and read_me are additive. The canvas server is now optional (standalone mode activates automatically).
npm install -g excalidraw-mcp-server@2Existing MCP client configs (stdio transport, tool names) continue to work without changes.
License
Available Tools
16 toolsalign_elementsC
Align elements (left, center, right, top, middle, bottom)
| Name | Required | Description | Default |
|---|---|---|---|
| elementIds | Yes | ||
| alignment | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the action without behavioral details. It doesn't disclose if this is a mutation (likely yes), what permissions are needed, whether it's reversible, or any side effects (e.g., changes element positions). The description adds minimal context beyond the basic function.
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 and front-loaded: a single phrase that directly states the tool's function and key parameter options. Every word earns its place with no redundancy or fluff.
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 mutation tool with no annotations and no output schema, the description is incomplete. It lacks details on what 'elements' are, the effect of alignment (e.g., relative to what), error conditions, or return values. Given the context of sibling tools like 'lock_elements', more guidance on interactions would be helpful.
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 0%, but the description compensates by explaining the 'alignment' parameter with its enum values (left, center, right, top, middle, bottom). It doesn't explain 'elementIds' (e.g., what they are, format), but with only 2 parameters and one well-documented, it adds significant value over the bare 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 states the action ('align') and the resource ('elements'), but it's vague about what elements are (likely UI/diagram elements) and doesn't distinguish from siblings like 'distribute_elements' or 'group_elements'. It specifies alignment options but lacks context about the domain.
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 'distribute_elements' or 'group_elements'. It implies usage for aligning multiple elements but doesn't mention prerequisites (e.g., elements must exist) or exclusions (e.g., cannot align locked elements).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_create_elementsB
Create multiple elements at once (max 100)
| Name | Required | Description | Default |
|---|---|---|---|
| elements | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only mentions the batch size limit (max 100), but fails to describe critical aspects: whether this is a write operation (implied by 'Create'), what happens on partial failures, authentication requirements, rate limits, or what the return value contains. For a batch creation tool with zero annotation coverage, this is inadequate.
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 (7 words) and front-loaded with the core purpose. Every word earns its place: 'Create' (action), 'multiple elements' (resource/scope), 'at once' (batch nature), '(max 100)' (key constraint). No wasted words or redundancy.
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 (batch creation with a nested object array parameter), absence of annotations, and no output schema, the description is insufficient. It doesn't cover behavioral traits, error handling, return values, or detailed parameter semantics. For a tool that creates multiple graphical elements with many configurable properties, this leaves too much unexplained.
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 'elements' and the batch size constraint ('max 100'), which aligns with the 'elements' array parameter in the schema. However, with 0% schema description coverage and 1 parameter (a complex array of objects), the description doesn't explain what an 'element' consists of, the required properties, or the meaning of nested fields like 'type', 'x', 'y', etc. The schema does heavy lifting, but the description adds minimal value beyond the obvious.
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 multiple elements at once') and resource ('elements'), which is specific and distinguishes it from single-element creation tools like 'create_element'. However, it doesn't explicitly differentiate from other element-creation tools like 'create_from_mermaid' or 'create_view', which slightly limits sibling 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 implies usage context through 'at once (max 100)', suggesting this tool is for batch operations rather than single creations. However, it doesn't provide explicit guidance on when to use this versus 'create_element' or other element-creation siblings, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_elementC
Create a single Excalidraw element on the canvas
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| x | Yes | ||
| y | Yes | ||
| width | No | ||
| height | No | ||
| points | No | ||
| backgroundColor | No | ||
| strokeColor | No | ||
| strokeWidth | No | ||
| roughness | No | ||
| opacity | No | ||
| text | No | ||
| fontSize | No | ||
| fontFamily | No | ||
| groupIds | No | ||
| locked | No | ||
| angle | No |
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. 'Create' implies a write/mutation operation, but the description doesn't disclose any behavioral traits: no information about permissions needed, whether creation is reversible (can elements be deleted?), what happens on failure, or any side effects. For a mutation tool with 17 parameters and no annotation coverage, this is a significant gap.
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 7 words, with zero wasted language. It's front-loaded with the core action ('Create') and resource ('Excalidraw element'), making it immediately understandable. Every word earns its place in this minimal description.
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 complex creation tool with 17 parameters, no annotations, no output schema, and 0% schema description coverage, the description is completely inadequate. It doesn't explain what gets created, how parameters interact, what the tool returns, or any behavioral characteristics. The agent would struggle to use this tool correctly without significant trial and error.
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?
With 0% schema description coverage for 17 parameters, the description provides no parameter information whatsoever. It doesn't explain what 'type', 'x', 'y', or any other parameters mean, nor does it clarify which parameters are required vs. optional. The description doesn't compensate for the complete lack of schema documentation, leaving the agent with no semantic understanding of the parameters.
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 'a single Excalidraw element on the canvas', which is specific and unambiguous. It distinguishes this from batch operations (vs. batch_create_elements) and from other creation methods (vs. create_from_mermaid). However, it doesn't explicitly differentiate from update_element or create_view, which would be needed for 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. It doesn't mention when to choose create_element over batch_create_elements for multiple elements, or when to use update_element instead for modifications. There's no context about prerequisites, dependencies, or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_from_mermaidC
Convert a Mermaid diagram to Excalidraw elements
| Name | Required | Description | Default |
|---|---|---|---|
| mermaidDiagram | Yes | ||
| config | No |
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 conversion action but doesn't describe what happens during conversion (e.g., error handling for invalid diagrams, performance characteristics, or output format). For a transformation tool with zero annotation coverage, this is a significant gap in transparency.
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 purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to understand at a glance. Every part of the sentence earns its place by conveying 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 (2 parameters with nested objects, no annotations, no output schema), the description is incomplete. It doesn't address behavioral aspects like error handling or output format, and with 0% schema coverage, parameter details are missing. For a conversion tool with configurable options, more context is needed to use it effectively.
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 0%, meaning parameters are undocumented in the schema. The description adds no information about parameters beyond what the schema provides (e.g., it doesn't explain what 'mermaidDiagram' should contain or how 'config' affects conversion). With 2 parameters (one required, one optional with nested objects) and low coverage, the description fails to compensate for the schema's lack of documentation.
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's purpose: converting Mermaid diagrams to Excalidraw elements. It uses specific verbs ('convert') and identifies the resource ('Mermaid diagram') and target ('Excalidraw elements'). However, it doesn't explicitly differentiate from sibling tools like 'create_element' or 'batch_create_elements', which might also create elements but from different sources.
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., needing a valid Mermaid diagram), exclusions (e.g., what types of diagrams are supported), or comparisons to siblings like 'create_element' (which might create elements manually). Usage is implied from the purpose but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_viewCreate Excalidraw ViewA
Render Excalidraw elements as an interactive inline diagram. Pass an array of elements with type, x, y coordinates and optional styling. The diagram streams in progressively as elements are generated. Use read_me first to see available element types and color palettes.
| Name | Required | Description | Default |
|---|---|---|---|
| elements | Yes | ||
| title | No | ||
| background | No |
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 reveals important behavioral traits: the diagram 'streams in progressively as elements are generated' and the tool creates an 'interactive inline diagram.' However, it doesn't address whether this is a read-only or write operation, what permissions might be needed, or any rate limits or error conditions.
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 perfectly concise with three sentences that each serve distinct purposes: stating the core function, describing parameter usage, and providing prerequisite guidance. There's no wasted language, and the information is front-loaded with the most important details first.
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 tool with 3 parameters, no annotations, no output schema, and 0% schema description coverage, the description provides adequate but incomplete context. It explains the main purpose and gives some parameter guidance but doesn't fully compensate for the missing structured information about behavior, output format, or all parameters.
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 the 'elements' parameter ('Pass an array of elements with type, x, y coordinates and optional styling') which adds some context beyond the schema's 0% description coverage. However, with 3 total parameters and only 1 mentioned in the description, it doesn't fully compensate for the schema's lack of parameter descriptions. The baseline is appropriate given the partial coverage.
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's purpose with specific verbs ('Render Excalidraw elements as an interactive inline diagram') and distinguishes it from siblings by specifying it creates a view rather than individual elements or other operations. It identifies the resource (Excalidraw elements) and output format (interactive inline diagram).
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 clear context for when to use this tool ('Render Excalidraw elements as an interactive inline diagram') and includes a helpful prerequisite ('Use read_me first to see available element types and color palettes'). However, it doesn't explicitly state when NOT to use it or name specific alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_elementC
Delete an Excalidraw element by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
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 deletes an element, implying a destructive mutation, but doesn't clarify if deletion is permanent, requires specific permissions, affects related data, or has side effects (e.g., on grouped elements). This leaves significant gaps 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, direct sentence with no wasted words, front-loading the key action and resource. It efficiently communicates the core purpose without unnecessary elaboration, making it easy for an agent to parse 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 tool's destructive nature, no annotations, no output schema, and low schema coverage, the description is insufficiently complete. It doesn't address critical aspects like error handling, confirmation requirements, or what happens post-deletion (e.g., if the element is grouped or locked), leaving the agent with incomplete operational 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 description adds minimal semantic context beyond the input schema, which has 0% description coverage. It specifies that the 'id' parameter refers to an 'Excalidraw element', but doesn't explain format, sourcing (e.g., from 'query_elements'), or constraints. With one parameter and low schema coverage, this provides baseline clarification but lacks depth.
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 ('Delete') and the resource ('an Excalidraw element by ID'), making the purpose immediately understandable. It distinguishes from siblings like 'update_element' or 'create_element' by specifying deletion, though it doesn't explicitly contrast with alternatives like 'batch_create_elements' or 'query_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?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an existing element ID), exclusions (e.g., not for batch operations), or direct comparisons to siblings like 'update_element' or 'batch_create_elements', leaving the agent to infer usage from context alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
distribute_elementsC
Distribute elements evenly (horizontal or vertical)
| Name | Required | Description | Default |
|---|---|---|---|
| elementIds | Yes | ||
| direction | Yes |
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 ('distribute evenly') but doesn't clarify side effects (e.g., whether it modifies element positions permanently, requires specific permissions, or has rate limits). For a mutation tool with zero annotation coverage, this is a significant gap in transparency.
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 ('distribute elements evenly') and adds essential detail ('horizontal or vertical'). There is no wasted text, and it's appropriately sized for a tool with 2 parameters and no complex output schema.
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 2 parameters with 0% schema coverage, no annotations, and no output schema, the description is incomplete. It covers the basic purpose but lacks details on behavioral traits, parameter nuances (e.g., what 'elementIds' represent), and expected outcomes. For a mutation tool in a context with many siblings, this leaves significant gaps for an agent to infer correct usage.
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 0%, so the description must compensate. It adds meaning by explaining that 'direction' controls horizontal or vertical distribution, which aligns with the enum in the schema. However, it doesn't clarify 'elementIds' beyond implying multiple elements, and with 2 parameters total, the description provides partial but incomplete semantic context beyond the bare 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 ('distribute') and target ('elements'), specifying the distribution method ('evenly') and orientation options ('horizontal or vertical'). It distinguishes from siblings like 'align_elements' or 'group_elements' by focusing on spacing rather than alignment or grouping. However, it doesn't explicitly mention the resource context (e.g., UI elements, graphical objects), leaving some ambiguity.
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 is provided on when to use this tool versus alternatives like 'align_elements' or 'group_elements'. The description implies usage for spacing elements but doesn't specify prerequisites, such as needing multiple selected elements, or exclusions, such as not working on locked elements. This lack of context makes it harder for an agent to choose appropriately among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_sceneC
Export the canvas as PNG or SVG
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | ||
| elementIds | No | ||
| background | No | ||
| padding | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the export function but doesn't disclose critical traits: whether this is a read-only operation, if it requires specific permissions, potential rate limits, file size constraints, or what happens if elementIds are invalid. For a tool with 4 parameters and no annotation coverage, this is a significant gap.
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 with a single, front-loaded sentence: 'Export the canvas as PNG or SVG'. Every word earns its place, clearly stating the core function without redundancy. It's appropriately sized for a straightforward export tool.
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 (4 parameters, no annotations, no output schema), the description is incomplete. It lacks details on behavioral aspects (e.g., side effects, error handling), parameter meanings, and usage context. Without annotations or output schema, the description should provide more comprehensive guidance but falls short, leaving gaps 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?
Schema description coverage is 0%, so the description must compensate but adds no parameter details. It mentions 'PNG or SVG' which aligns with the 'format' enum, but doesn't explain 'elementIds', 'background', or 'padding' parameters. For a tool with 4 parameters (1 required, 3 optional) and low schema coverage, the description provides insufficient semantic context beyond the basic format hint.
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 ('Export') and resource ('the canvas'), specifying output formats (PNG or SVG). It distinguishes from siblings like 'create_element' or 'update_element' by focusing on export rather than creation or modification. However, it doesn't explicitly differentiate from potential similar tools like 'export_document' if they existed.
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 is provided. The description doesn't mention prerequisites (e.g., needing an existing canvas), exclusions (e.g., not for real-time previews), or comparisons with siblings like 'get_resource' which might retrieve resources differently. Usage is implied by the action but not explicitly contextualized.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resourceC
Get scene state, elements, theme, or library
| Name | Required | Description | Default |
|---|---|---|---|
| resource | Yes |
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 implies a read-only operation ('Get'), but doesn't specify whether this requires authentication, has rate limits, returns paginated results, or what the output format looks like. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
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—a single phrase that front-loads the key information without any wasted words. Every part of the sentence directly contributes to understanding the tool's purpose and parameters, making it efficient and well-structured.
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 retrieving multiple resource types, lack of annotations, no output schema, and low schema description coverage, the description is insufficient. It doesn't explain the differences between resource types, potential side effects, or return values, leaving the agent with incomplete information for proper 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 lists the possible values for the 'resource' parameter (scene, elements, theme, library), which adds meaning beyond the schema's enum. However, with 0% schema description coverage, it doesn't fully compensate by explaining what each resource type entails or how the parameter affects the retrieval. The baseline is adjusted due to the low coverage, but the description provides some useful context.
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 'Get' and specifies the resources that can be retrieved (scene state, elements, theme, or library), making the purpose evident. However, it doesn't differentiate this read operation from other sibling tools like 'query_elements' or 'export_scene', which might have overlapping functionality, so it doesn't reach the highest 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 like 'query_elements' or 'export_scene', nor does it mention any prerequisites or exclusions. It simply lists what can be retrieved without context, leaving the agent to infer usage from the tool name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
group_elementsC
Group multiple elements together
| Name | Required | Description | Default |
|---|---|---|---|
| elementIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but offers minimal behavioral insight. It states the action but doesn't disclose critical traits like whether grouping is reversible, requires permissions, affects element properties, or has side effects. The description doesn't contradict annotations (none exist), but it fails to compensate for their absence.
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 with a single, front-loaded sentence that directly states the tool's purpose. There is zero wasted verbiage, and it efficiently communicates the core action without unnecessary details.
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 with no annotations or output schema), the description is incomplete. It lacks information about what grouping means in this context, the result of the operation, error conditions, or how it interacts with sibling tools. The description alone is insufficient for an agent to use the tool effectively without additional 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 description adds no parameter semantics beyond what the input schema provides. Schema description coverage is 0%, but the single parameter 'elementIds' is self-explanatory from its name and schema constraints (array of strings, min 2, max 500). Since there's only one parameter, the baseline is 4, but the description doesn't enhance understanding (e.g., explain what element IDs are or how to obtain them), so it scores slightly lower.
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 'Group multiple elements together' clearly states the action (group) and target (elements), but it's somewhat vague about what grouping entails and doesn't differentiate from sibling tools like 'align_elements' or 'distribute_elements' which also manipulate multiple elements. It avoids tautology by not just restating the name.
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., elements must exist), exclusions (e.g., cannot group locked elements), or compare to related tools like 'ungroup_elements' or 'batch_create_elements'. Usage is implied only by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lock_elementsC
Lock elements to prevent modification
| Name | Required | Description | Default |
|---|---|---|---|
| elementIds | Yes |
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. While 'prevent modification' implies a write/mutation operation with side effects, it doesn't specify what 'lock' entails (e.g., whether it's reversible only via 'unlock_elements', permission requirements, or if it affects other operations). This leaves significant gaps for a tool that modifies state.
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 5 words, front-loading the core purpose with zero wasted words. Every part of the sentence directly contributes to understanding the tool's function.
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 mutation tool with no annotations, no output schema, and 0% schema description coverage, the description is inadequate. It doesn't cover behavioral aspects like reversibility, error conditions, or what happens when elements are already locked, leaving the agent with insufficient context to use it safely.
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 schema has 0% description coverage, so the description must compensate. It mentions 'elements' which relates to the 'elementIds' parameter, but doesn't explain what element IDs are, their format, or the implications of locking multiple elements. This provides minimal semantic value beyond the schema's structural constraints.
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 ('Lock elements') and the purpose ('to prevent modification'), which is a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from its sibling 'unlock_elements' beyond the obvious opposite action, missing an opportunity for clearer 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. It doesn't mention prerequisites (e.g., needing element IDs), when not to use it, or how it relates to sibling tools like 'update_element' or 'unlock_elements'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_elementsC
Search for elements by type, locked status, or group ID
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| locked | No | ||
| groupId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool searches but doesn't describe what 'search' entails—e.g., whether it returns all matches, supports pagination, requires permissions, or has side effects. This is a significant gap for a tool with zero annotation coverage.
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 front-loads the core purpose ('Search for elements') and immediately specifies the criteria, 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?
Given 3 parameters with 0% schema coverage, no annotations, and no output schema, the description is incomplete. It doesn't explain return values, error conditions, or behavioral details like search scope. For a query tool with moderate complexity, this leaves the agent under-informed.
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 0%, so the description must compensate. It lists the three parameters (type, locked, groupId) and gives basic meaning (search by type, locked status, or group ID), adding value beyond the bare schema. However, it doesn't explain parameter interactions (e.g., if multiple params are used) or provide examples, leaving gaps.
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's purpose with the verb 'Search' and resource 'elements', specifying search criteria (type, locked status, group ID). It distinguishes from siblings like 'create_element' or 'delete_element' by focusing on retrieval rather than modification. However, it doesn't explicitly differentiate from potential similar search tools (none listed in siblings).
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, context for searching elements, or compare with other query/read operations (though no obvious query siblings exist). The agent must infer usage from the purpose alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_meA
Get the Excalidraw element reference: types, colors, sizing, and tips. Call this before creating diagrams.
| 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. It states this is a 'Get' operation which implies read-only behavior, but doesn't disclose other behavioral traits like rate limits, authentication requirements, or what format the reference information is returned in. The description adds some context about timing but lacks comprehensive behavioral disclosure.
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 perfectly concise with just two sentences that each earn their place. The first sentence states what the tool does, and the second provides crucial usage guidance. No wasted words or redundant 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?
For a zero-parameter tool with no output schema, the description provides adequate purpose and usage guidance. However, without annotations or output schema, it doesn't fully describe what the reference information looks like or how it's structured. It's complete enough for basic understanding but lacks detail about the return format.
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 the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and instead focuses on the tool's purpose and usage context.
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's purpose with specific verbs ('Get') and resources ('Excalidraw element reference'), listing the exact information it provides (types, colors, sizing, and tips). It distinguishes itself from siblings like create_element or update_element by focusing on reference information rather than diagram manipulation.
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 explicit guidance on when to use this tool: 'Call this before creating diagrams.' This clearly positions it as a prerequisite or preparatory step for diagram creation tools, offering clear alternatives (use this first, then use creation tools).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ungroup_elementsC
Remove elements from a group by group ID
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | Yes |
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. 'Remove elements from a group' implies a mutation operation, but it doesn't specify whether this is destructive (e.g., deletes elements or just ungroups them), what permissions are required, or what happens to the ungrouped elements. This leaves significant gaps for a tool that likely modifies data.
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 with zero waste. It's front-loaded with the core action and resource, making it highly efficient and easy to parse.
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 (a mutation tool with no annotations and no output schema), the description is incomplete. It lacks details on behavioral traits (e.g., whether removal is reversible), parameter context, and expected outcomes, making it inadequate for safe and effective use by an agent.
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 0%, so the description must compensate. It mentions 'by group ID', which aligns with the single parameter 'groupId', adding meaning beyond the schema's type constraints. However, it doesn't explain what a group ID is, its format, or where to find it, leaving some ambiguity.
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 ('Remove elements from a group') and the resource ('by group ID'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'delete_element' or 'ungroup_elements' (if that were a sibling), though the context suggests it's distinct from deletion operations.
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., needing a group to exist), exclusions, or compare to siblings like 'delete_element' or 'group_elements', leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unlock_elementsC
Unlock elements to allow modification
| Name | Required | Description | Default |
|---|---|---|---|
| elementIds | Yes |
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. It mentions 'allow modification', which hints at a state change, but doesn't disclose behavioral traits such as permissions required, whether unlocking is reversible, side effects, or error conditions. This is inadequate for a mutation tool with zero annotation coverage.
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 appropriately sized and front-loaded, clearly stating the core action without 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?
Given the complexity of a mutation tool with no annotations, 0% schema coverage, and no output schema, the description is incomplete. It lacks details on behavior, parameters, and expected outcomes, making it insufficient for an agent to use the tool effectively without additional 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?
Schema description coverage is 0%, and the description adds no information about the 'elementIds' parameter beyond what the schema provides (an array of strings). It doesn't explain what element IDs are, their format, or how to obtain them, failing to compensate for the coverage gap.
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 'Unlock elements to allow modification' states the verb ('unlock') and resource ('elements'), but it's vague about what 'elements' are and doesn't distinguish from sibling tools like 'lock_elements' or 'update_element'. It provides a basic purpose but lacks specificity about the domain or system context.
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 is provided on when to use this tool versus alternatives like 'lock_elements' or 'update_element'. The description implies usage for enabling modifications but doesn't specify prerequisites, conditions, or exclusions, leaving the agent to infer context from sibling tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_elementC
Update an existing Excalidraw element by ID
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| type | No | ||
| x | No | ||
| y | No | ||
| width | No | ||
| height | No | ||
| points | No | ||
| backgroundColor | No | ||
| strokeColor | No | ||
| strokeWidth | No | ||
| roughness | No | ||
| opacity | No | ||
| text | No | ||
| fontSize | No | ||
| fontFamily | No | ||
| groupIds | No | ||
| locked | No | ||
| angle | No |
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 'Update' implies a mutation, but doesn't describe what happens if the ID doesn't exist, whether changes are reversible, permission requirements, or response format. For a mutation tool with 18 parameters and no annotation coverage, this is a significant gap in transparency.
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 directly states the tool's core function without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse 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 (18 parameters, mutation operation, no annotations, no output schema), the description is incomplete. It doesn't explain what fields can be updated, how partial updates work, error conditions, or return values, making it inadequate for safe and effective use by an AI agent.
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 schema description coverage is 0%, meaning none of the 18 parameters are documented in the schema. The description adds no information about parameters beyond implying an 'id' is required, failing to compensate for the coverage gap. This leaves most parameters (e.g., 'type', 'x', 'backgroundColor') semantically unexplained.
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 ('an existing Excalidraw element by ID'), making the purpose specific and understandable. However, it doesn't explicitly differentiate from siblings like 'create_element' or 'batch_create_elements', which would require mentioning that this modifies existing elements rather than creating new ones.
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., needing an existing element ID), exclusions, or comparisons to siblings like 'create_element' for new elements or 'delete_element' 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
16 tool updates
v2.0.0- First observed
align_elements - First observed
batch_create_elements - First observed
create_element - First observed
create_from_mermaid - First observed
create_view - First observed
delete_element - First observed
distribute_elements - First observed
export_scene - First observed
get_resource - First observed
group_elements - First observed
lock_elements - First observed
query_elements - First observed
read_me - First observed
ungroup_elements - First observed
unlock_elements - First observed
update_element
TDQS
Most tools have distinct purposes, such as create_element vs. update_element vs. delete_element for element lifecycle, and align_elements vs. distribute_elements for layout. However, some overlap exists between lock_elements/unlock_elements and group_elements/ungroup_elements, which could cause minor confusion as they both manage element states, but descriptions clarify their specific actions.
Tool names follow a consistent verb_noun pattern throughout, such as create_element, delete_element, align_elements, and export_scene. All tools use snake_case, and verbs are clear and predictable, making the set easy to navigate and understand.
With 16 tools, the count is slightly high but reasonable for a diagramming server covering creation, manipulation, querying, and export. It includes core operations without being overly bloated, though it could be streamlined by merging some related tools like lock/unlock or group/ungroup.
The tool set provides comprehensive coverage for Excalidraw diagramming: full CRUD for elements (create, read via query_elements/get_resource, update, delete), layout tools (align, distribute), grouping and locking, import from Mermaid, export to PNG/SVG, and a reference guide. No obvious gaps exist for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Collaborative whiteboard MCP server — create objects, connectors, C4 diagrams, and manage boards
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
Cloud-hosted MCP server for durable AI memory
MCP server for InsForge BaaS — database, storage, edge functions, and deployments
Related MCP Servers
- AlicenseBqualityAmaintenanceAn MCP server that generates beautiful Excalidraw architecture diagrams with perfect auto-layout, stateful editing, and architecture-aware component styling.26148MIT
- FlicenseNot gradedqualityBmaintenanceStandalone backend for a self-hosted Excalidraw fork with per-board access control, providing an MCP remote endpoint that lets AI agents draw on real collaboration boards as specific users.-
- AlicenseAqualityBmaintenanceAn MCP server for Excalidraw diagram creation and headless rendering, enabling interactive canvas editing and automated SVG/PNG export via Playwright.41MIT
- AlicenseAqualityDmaintenanceMCP server that converts Mermaid diagrams to styled Excalidraw files, saving them directly to disk without token overhead.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/debu-sinha/excalidraw-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server