Skip to main content
Glama

excalidraw-mcp-server

The only Excalidraw MCP server with security hardening, inline diagram rendering, and real-time canvas sync.

CI npm npm downloads License: MIT Node

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_me tool

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 endpoint

  • Helmet.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-server

Or run directly:

npx excalidraw-mcp-server

Quick start

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 canvas

Point 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

create_view

Render elements as an inline SVG widget with streaming animations (MCP Apps)

read_me

Get the element reference cheatsheet (types, colors, sizing tips)

create_element

Create a single element (rectangle, ellipse, diamond, arrow, text, line, freedraw)

update_element

Update an existing element by ID

delete_element

Delete an element by ID

query_elements

Search elements by type, locked status, or group ID

get_resource

Get scene state, all elements, theme, or library

batch_create_elements

Create up to 100 elements in one call

group_elements

Group multiple elements together

ungroup_elements

Remove elements from a group

align_elements

Align elements (left, center, right, top, middle, bottom)

distribute_elements

Distribute elements evenly (horizontal or vertical)

lock_elements

Lock elements to prevent modification

unlock_elements

Unlock elements

create_from_mermaid

Convert a Mermaid diagram to Excalidraw elements

export_scene

Export the canvas as SVG or PNG

Security comparison

Feature

Typical MCP servers

excalidraw-mcp-server

Authentication

None

API key (constant-time compare)

CORS

* wildcard

Origin allowlist

WebSocket auth

None

Token + origin validation

Rate limiting

None

Standard + strict tiers

Input validation

Minimal

Bounded Zod with .strict()

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

STANDALONE_MODE

true

Use in-process store (no canvas server needed)

CANVAS_HOST

127.0.0.1

Canvas server bind address

CANVAS_PORT

3000

Canvas server port

EXCALIDRAW_API_KEY

Auto-generated

API key for auth (min 32 chars)

CORS_ALLOWED_ORIGINS

http://localhost:3000,http://127.0.0.1:3000

Comma-separated origin allowlist

RATE_LIMIT_WINDOW_MS

60000

Rate limit window in milliseconds

RATE_LIMIT_MAX_REQUESTS

100

Max requests per window (standard tier)

PERSISTENCE_ENABLED

false

Enable file-based persistence

PERSISTENCE_DIR

./data

Directory for persistent storage

CANVAS_SERVER_URL

http://127.0.0.1:3000

URL the MCP server uses to reach the canvas

LOG_LEVEL

info

Log level: debug, info, warn, error

AUDIT_LOG_ENABLED

true

Enable audit logging

MAX_ELEMENTS

10000

Maximum elements on canvas

MAX_BATCH_SIZE

100

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 build

Project 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@2

Existing MCP client configs (stdio transport, tool names) continue to work without changes.

License

MIT

Available Tools

16 tools
align_elementsC

Align elements (left, center, right, top, middle, bottom)

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes
alignmentYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters4/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
elementsYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes
xYes
yYes
widthNo
heightNo
pointsNo
backgroundColorNo
strokeColorNo
strokeWidthNo
roughnessNo
opacityNo
textNo
fontSizeNo
fontFamilyNo
groupIdsNo
lockedNo
angleNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
mermaidDiagramYes
configNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementsYes
titleNo
backgroundNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes
directionYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYes
elementIdsNo
backgroundNo
paddingNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
lockedNo
groupIdNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
groupIdYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes

TDQS

C2.6/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
typeNo
xNo
yNo
widthNo
heightNo
pointsNo
backgroundColorNo
strokeColorNo
strokeWidthNo
roughnessNo
opacityNo
textNo
fontSizeNo
fontFamilyNo
groupIdsNo
lockedNo
angleNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 16 tool updatesv2.0.0
    • First observedalign_elements
    • First observedbatch_create_elements
    • First observedcreate_element
    • First observedcreate_from_mermaid
    • First observedcreate_view
    • First observeddelete_element
    • First observeddistribute_elements
    • First observedexport_scene
    • First observedget_resource
    • First observedgroup_elements
    • First observedlock_elements
    • First observedquery_elements
    • First observedread_me
    • First observedungroup_elements
    • First observedunlock_elements
    • First observedupdate_element

TDQS

B3.3/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessUnresponsive

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Standalone 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.
    -
  • A
    license
    A
    quality
    D
    maintenance
    MCP server that converts Mermaid diagrams to styled Excalidraw files, saving them directly to disk without token overhead.
    2
    MIT

Latest Blog Posts

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