Skip to main content
Glama
Abdullah007bajwa

Excalidraw MCP Server

Excalidraw MCP 服务器:用于 LLM 集成的强大绘图 API

全面的模型上下文协议 (MCP) 服务器,可实现与 Excalidraw 图表和绘图的无缝交互。该服务器通过结构化、开发人员友好的 API,为 LLM(大型语言模型)提供创建、修改、查询和操作 Excalidraw 绘图的功能。

特征

  • 完整的 Excalidraw 元素控制
    创建、更新、删除和查询任何 Excalidraw 元素(矩形、椭圆、菱形、文本、箭头等),包括支持:

    • 位置( xy

    • 尺寸( widthheight

    • 样式( backgroundColorstrokeColorstrokeWidthroughnessopacity

    • 文本( textfontSizefontFamily

    • 线几何( points

    • 锁定( locked标志)

  • 高级元素操作
    对元素进行分组、取消分组、对齐、分布、锁定和解锁。

  • 场景和应用状态管理

    • 跟踪和修改场景级状态: themeviewBackgroundColorviewport (滚动和缩放)、 selectedElementsgroups

    • 检索所有元素或单个场景属性的库。

  • 保存场景
    将当前场景(元素 + appState)导出到磁盘上的.excalidraw文件。

  • 资源管理
    访问和修改场景信息、元素库、主题和原始元素数据。

  • 轻松集成
    与 Claude Desktop、Cursor 以及任何其他支持 MCP 的 LLM 平台兼容。

  • Docker 支持
    简单的容器化部署,实现零依赖安装。


Related MCP server: Excalidraw MCP Server

API 工具参考

元素创建和修改

create_element

创建一个新的 Excalidraw 元素。

  • 输入

    {
      "type": "<element type>",
      "x": <number>,
      "y": <number>,
      "width": <number, optional>,
      "height": <number, optional>,
      "points": [{"x":<number>,"y":<number>}…],
      "backgroundColor": "<hex>",
      "strokeColor": "<hex>",
      "strokeWidth": <number>,
      "roughness": <number>,
      "opacity": <0–1>,
      "text": "<string>",
      "fontSize": <number>,
      "fontFamily": "<string>",
      "locked": <boolean>
    }
  • 输出

    { "id": "<generated‑id>", "type": "<element type>", "created": true }

update_element

更新现有元素的属性。

  • 输入

    {
      "id": "<element id>",
    }
  • 输出

    { "id": "<element id>", "updated": true, "version": <new‑version‑number> }

delete_element

从场景中移除一个元素。

  • 输入

    { "id": "<element id>" }
  • 输出

    { "id": "<element id>", "deleted": true }

query_elements

列出与可选过滤器匹配的元素。

  • 输入

    {
      "type": "<element type>",        
      "filter": { "<prop>": <value> }  
    }
  • 输出

    [ { /* element objects */ } … ]

资源管理

get_resource

检索场景或库信息。

  • 输入

    { "resource": "scene"|"library"|"theme"|"elements" }
  • 输出

    • 场景{ theme, viewport: {x,y,zoom}, selectedElements: […] }

    • /元素{ elements: [ … ] }

    • 主题{ theme: "light"|"dark" }

元素组织

group_elements / ungroup_elements

对元素集合进行分组或取消分组。

  • 输入

    { "elementIds": ["id1","id2",…] }
    { "groupId": "<group id>" }
  • 输出

    { "groupId": "<new‑id>", "elementIds": […], "ungrouped": true? }

align_elements

将多个元素对齐到指定的边缘或中心。

  • 输入

    { "elementIds": […], "alignment": "left"|"center"|"right"|"top"|"middle"|"bottom" }
  • 输出
    { aligned: true, elementIds: […], alignment: "<alignment>" }

distribute_elements

水平或垂直均匀分布元素。

  • 输入

    { "elementIds": […], "direction": "horizontal"|"vertical" }
  • 输出
    { distributed: true, elementIds: […], direction: "<direction>" }

lock_elements / unlock_elements

防止或允许编辑元素。

  • 输入

    { "elementIds": [… ] }
  • 输出
    { locked: true|false, elementIds: […] }

场景管理

save_scene

将当前场景(元素 + appState)导出到.excalidraw文件。

  • 输入

    { "filename": "<optional, must end with .excalidraw>" }
  • 输出
    Scene saved successfully to <filename>或出现错误消息。


集成示例

克劳德桌面

"mcpServers": {
  "excalidraw": {
    "command": "node",
    "args": ["src/index.js"],
    "env": {
      "LOG_LEVEL": "info",
      "DEBUG": "false"
    }
  }
}

光标

创建.cursor/mcp.json

{
  "mcpServers": {
    "excalidraw": {
      "command": "node",
      "args": ["/absolute/path/to/mcp_excalidraw/src/index.js"],
      "env": { "LOG_LEVEL": "info", "DEBUG": "false" }
    }
  }
}

Docker

docker run -i --rm mcp/excalidraw

或者在 MCP 配置中:

"mcpServers": {
  "excalidraw": {
    "command": "docker",
    "args": ["run", "-i", "--rm", "mcp/excalidraw"],
    "env": { "LOG_LEVEL": "info", "DEBUG": "false" }
  }
}

安装指南

# Install dependencies
npm install

# Run development server
npm start

Docker

docker build -t mcp/excalidraw .
docker run -i --rm mcp/excalidraw

配置选项

通过.env或容器中的环境变量设置:

  • LOG_LEVEL — 日志级别(默认值: "info"

  • DEBUG — 调试模式( "true" / "false" ,默认值: "false"

  • DEFAULT_THEME — 默认 UI 主题 ( "light" / "dark" ,默认值: "light" )


使用示例

创建并锁定矩形

{"type":"rectangle","x":50,"y":50,"width":100,"height":80,"backgroundColor":"#f3f3f3","strokeColor":"#333","locked":true}

{ "id":"abc123","type":"rectangle","created":true }

{"elementIds":["abc123"]}

将场景保存到文件

{"filename":"my_drawing.excalidraw"}

"Scene saved successfully to my_drawing.excalidraw"

Available Tools

12 tools
align_elementsC

Align elements to a specific position

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes
alignmentYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description is the only source of behavioral transparency. It fails to disclose whether alignment is relative to other elements or an absolute canvas position, what values like 'center' vs 'middle' mean, or any side effects. This ambiguity leaves the agent guessing about the tool's actual behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no redundancy or fluff. It is front-loaded with the action and resource. However, it errs on the side of underspecification, which slightly detracts from its effectiveness, though it remains concise.

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 tool with no annotations, no output schema, and two parameters, the description is not complete enough. It lacks information on return values, alignment semantics, and how it interacts with the canvas or selection. The sibling tools like distribute_elements and group_elements suggest a broader context that this description fails to address.

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. It does not explain the meaning of the 'alignment' enum values (e.g., 'left', 'center', 'right', 'top', 'middle', 'bottom') or clarify what 'elementIds' refers to. The parameter names are self-evident but their precise semantics remain under-specified.

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 a specific action (Align) and target (elements) with an outcome ('to a specific position'). It distinguishes itself from generic tools but does not explicitly differentiate from closely related siblings like distribute_elements, so it misses the top 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?

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, scenarios, or exclusions. The description is purely a bare definition without contextual usage advice.

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 new Excalidraw element

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

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 for behavioral disclosure. 'Create' implies a write operation, but it doesn't specify permissions needed, whether the element is saved immediately, if there are rate limits, or what happens on failure. 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 that gets straight to the point without any wasted words. It's appropriately sized for the tool's basic purpose, though this conciseness comes at the cost of completeness.

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 creation tool with 13 parameters, 0% schema coverage, no annotations, and no output schema, the description is severely inadequate. It doesn't explain what an 'Excalidraw element' is, how parameters interact, what values are returned, or error conditions.

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 description provides no information about any of the 13 parameters, despite 0% schema description coverage. Parameters like 'type' with an enum or 'roughness' are completely unexplained, leaving the agent to guess their meaning and usage.

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 resource ('a new Excalidraw element'), making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'update_element' which might also create elements through updates, leaving room for 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?

The description provides no guidance on when to use this tool versus alternatives like 'update_element' or 'query_elements'. There's no mention of prerequisites, context, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_elementC

Delete an Excalidraw element

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 does not mention whether deletion is permanent, whether it cascades to dependent elements, any authorization requirements, or potential side effects. The terse statement leaves critical behavioral aspects undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one short sentence with no wasted words, making it highly concise and front-loaded. However, it is minimal to the point of missing valuable contextual information, so it earns a 4 rather than a 5.

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 lack of annotations and output schema, the description is the only source of completeness. It fails to explain return values, behavior on non-existent elements, or any other operational details. For a deletion tool, this is a significant gap in completeness.

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 does not explain the 'id' parameter's format, meaning, or how to obtain it. The description adds no value beyond the raw schema field definition, leaving the agent without context for correctly populating the required parameter.

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 'Delete an Excalidraw element' uses a specific verb (delete) and resource (Excalidraw element), clearly distinguishing it from sibling tools like create_element, update_element, and query_elements. It is unambiguous and action-oriented.

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, nor any exclusions or prerequisites. It simply states the action without contextual cues, leaving the agent to infer usage purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

distribute_elementsD

Distribute elements evenly

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes
directionYes

TDQS

D1.8/5.0
Behavior1/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 fails to state whether this tool modifies element positions, requires a selection, or affects layout. No side effects, limitations, or operational details are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely brief, but it is under-specified rather than impactful. It front-loads the core action, but fails to provide context that would be expected for a tool with two parameters and a direction enum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has two parameters and appears to be a layout operation, the description is severely incomplete. There is no output schema, no annotations, and the description does not clarify what 'evenly' means spatially or how direction affects the operation.

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?

Schema description coverage is 0%, and the description does not mention either parameter ('elementIds' or 'direction'). It adds no meaning beyond what the schema already shows, leaving the agent to infer the purpose of each parameter.

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 'Distribute elements evenly' names a specific verb ('distribute') and resource ('elements'), but it is vague about what 'evenly' means (e.g., spacing, position, alignment). It does not distinguish from siblings like align_elements or group_elements, which could also involve arranging 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?

There is no guidance on when to use this tool versus alternatives. No mention of prerequisites, selection requirements, or which distribution scenarios it handles. Sibling tools like align_elements suggest related functionality, but the description does not clarify boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_resourceD

Get an Excalidraw resource

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceYes

TDQS

D1.3/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden of disclosing behavior. It only says 'Get' with no mention of read-only semantics, side effects, return format, or other behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only a single sentence, but this brevity reflects under-specification rather than conciseness. It contains zero useful information beyond what the tool name already conveys.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description is critically incomplete. It omits resource types, return values, example usage, and any distinguishing context, leaving the agent to guess the tool's function.

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?

Schema description coverage is 0% and the description does not explain the 'resource' parameter. While the schema provides an enum, the description adds no meaning about what each resource type represents or how to use them.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Get an Excalidraw resource' essentially restates the tool name without adding specificity. It does not enumerate the supported resource types (scene, library, theme, elements) nor differentiate from similarly named siblings like get_element or get_selection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. Sibling tools like get_element, get_selection, and export_scene clearly overlap, yet the description offers no context or exclusions.

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.4/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, and the description only states the action without disclosing behavioral consequences such as whether a group object is created, whether elements are repositioned, or whether the operation is reversible. The description adds no behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise, front-loaded sentence with no extraneous words. It is efficient, though it sacrifices substance for brevity.

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?

With no annotations, no output schema, and a single undocumented parameter, the description is insufficiently complete. It does not explain the effect on the canvas, expected return value, or any constraints, which is particularly problematic for a mutation-like tool.

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?

Schema description coverage is 0%, and the description does not mention elementIds or explain what the array should contain, any constraints, or the relationship of these IDs. The description provides zero added meaning beyond the parameter name.

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 uses a specific verb ('Group') and resource ('elements'), clearly distinguishing it from siblings like ungroup_elements. It is minimal but not a bare tautology.

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 such as ungroup_elements, align_elements, or distribute_elements. There are no prerequisites or exclusions mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lock_elementsB

Lock elements to prevent modification

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It states the intended effect (prevent modification) but does not disclose side effects, reversibility, permissions, or persistence. This is significantly under-specified for a mutating 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 sentence, direct, and front-loaded. Every word earns its place with no waste 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?

For a tool that modifies state, the description lacks context on prerequisites, reversibility, and effects. Sibling tools like unlock_elements exist, but the description doesn't reference them, leaving the agent uncertain about the tool's broader usage 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?

The input schema has one parameter, elementIds, with 0% description coverage. The description says 'elements' but does not explain that the parameter is an array of element IDs or how to obtain them. The parameter name is self-explanatory, providing minimal additional value.

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 'Lock elements to prevent modification' with a specific verb (lock), resource (elements), and purpose (prevent modification). This distinguishes it from siblings like unlock_elements and other element operations.

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 when modification should be prevented, but provides no explicit when-to-use or alternatives (e.g., no mention of unlock_elements for reversal). It is clear enough for basic use but lacks decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_elementsC

Query Excalidraw elements with optional filters

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
filterNo

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 'optional filters' but doesn't disclose behavioral traits like whether this is a read-only operation, if it requires specific permissions, how results are returned (e.g., pagination), or any rate limits. This leaves significant gaps for a query tool.

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 tool's core function 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 no annotations, 0% schema coverage, no output schema, and 2 parameters (one with an enum but unexplained), the description is incomplete. It doesn't cover key aspects like return values, error handling, or how to interpret the 'filter' object, making it inadequate for effective use.

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. It hints at 'optional filters' but doesn't explain what 'filter' or 'type' parameters mean, their formats, or how they interact. With 2 parameters and no schema descriptions, this adds minimal value beyond 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 'Query Excalidraw elements with optional filters' states the verb (query) and resource (Excalidraw elements), which is clear. However, it doesn't distinguish this tool from siblings like 'get_resource' or 'update_element'—it's vague about what makes 'query' different from 'get' or how it relates to other element 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?

No guidance is provided on when to use this tool versus alternatives. With siblings like 'get_resource' (which might retrieve elements) and 'create_element'/'update_element' for modifications, the description offers no context for choosing 'query_elements' over them or any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_sceneB

Saves the current Excalidraw elements and scene state to a .excalidraw file.

ParametersJSON Schema
NameRequiredDescriptionDefault
filenameNoOptional filename ending with .excalidraw (default: mcp_scene.excalidraw)

TDQS

B3.3/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 saving to a file but doesn't disclose behavioral traits like whether it overwrites existing files, requires write permissions, handles errors, or what happens if no elements exist. 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 with zero waste. It front-loads the core action and resource, making it easy to parse. Every word earns its place by specifying the tool's purpose clearly without redundancy.

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?

Given the tool's moderate complexity (saving scene state) and lack of annotations or output schema, the description is minimally adequate. It covers the basic purpose but lacks details on behavior, error handling, or output format beyond the file extension. For a mutation tool, more context would be helpful, but it meets the minimum viable threshold.

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 100%, so the schema already documents the single parameter 'filename' with its type, optionality, and default value. The description adds no additional meaning beyond what the schema provides, such as filename constraints or usage examples. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Saves') and the resource ('current Excalidraw elements and scene state'), with the output format specified ('.excalidraw file'). It distinguishes from siblings like 'create_element' or 'update_element' by focusing on file export rather than element manipulation.

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. It doesn't mention prerequisites (e.g., needing existing elements to save), exclusions, or comparisons with other tools like 'get_resource' which might retrieve files. The description only states what it does, not when it's appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ungroup_elementsB

Ungroup a group of elements

ParametersJSON Schema
NameRequiredDescriptionDefault
groupIdYes

TDQS

B3.1/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 does not mention side effects, whether the operation is reversible, any permissions required, or what happens to the elements after ungrouping. It is a minimal statement of intent without behavioral depth.

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, short sentence that immediately communicates the core action. It is concise, fully front-loaded, and contains no unnecessary words or repetition.

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 too sparse. It does not explain the required parameter, potential errors, or behavioral outcomes, leaving the agent with only a high-level understanding. More context is needed for correct 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?

The schema has 0% coverage, and the description does not explain the 'groupId' parameter at all. While the parameter name is somewhat self-explanatory, the description adds no meaning beyond what the schema provides, failing to compensate for the lack of schema documentation.

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 action ('Ungroup') and the target ('a group of elements'), making it immediately distinguishable from sibling tools like group_elements. The verb+resource structure is specific and unambiguous.

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, prerequisites (e.g., elements must already be grouped), or context for typical use cases. The description simply states the operation without any additional context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unlock_elementsB

Unlock elements to allow modification

ParametersJSON Schema
NameRequiredDescriptionDefault
elementIdsYes

TDQS

B3.1/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 states the basic action and purpose, but does not mention side effects, whether the operation is reversible, idempotency, or any required permissions. This is a significant gap for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the action and purpose, with no wasted words. Every part contributes to meaning.

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?

The tool is simple (one parameter, no output schema), but given the absence of annotations, the description is too minimal. It does not clarify return behavior, effects on element state, or how it relates to lock_elements, leaving significant gaps for an 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?

Schema description coverage is 0%, and the description does not mention the elementIds parameter at all. It neither explains the format, accepts one or multiple IDs, nor the type of elements. The description fails to compensate for the lack of schema documentation.

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 action with a specific verb ('Unlock') and resource ('elements'), and the phrase 'to allow modification' clarifies the purpose. It distinguishes itself from the sibling tool lock_elements by describing the inverse operation.

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 phrase 'to allow modification' implies the tool is used before modifying elements, giving some context. However, it lacks explicit guidance on when to use it versus alternatives like lock_elements or update_element, and no exclusions are mentioned.

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

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

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 the tool updates elements but doesn't describe what happens during the update (e.g., partial vs. full updates, error handling, permissions required, or rate limits). For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence with no wasted words. It's front-loaded with the core purpose and efficiently conveys the essential action and target. Every word earns its place, making it highly concise 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 (14 parameters, mutation tool), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like error conditions, return values, or usage context. While concise, it fails to provide sufficient context for effective tool selection and invocation in this environment.

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 description provides no information about parameters beyond what's implied by the tool name. With 14 parameters, 0% schema description coverage, and no output schema, the description fails to add any semantic context (e.g., explaining 'id' is required, what 'type' enum values mean, or how 'opacity' scales). This is inadequate given the high parameter count and low schema coverage.

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 ('Update') and resource ('an existing Excalidraw element'), making the purpose immediately understandable. It distinguishes itself from siblings like 'create_element' and 'delete_element' by specifying it's for existing elements, though it doesn't explicitly contrast with similar tools like 'query_elements' or 'lock_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 element ID), exclusions (e.g., not for new elements), or comparisons to siblings like 'create_element' for new elements or 'query_elements' for retrieval. Usage is implied 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updates
    • First observedalign_elements
    • First observedcreate_element
    • First observeddelete_element
    • First observeddistribute_elements
    • First observedget_resource
    • First observedgroup_elements
    • First observedlock_elements
    • First observedquery_elements
    • First observedsave_scene
    • First observedungroup_elements
    • First observedunlock_elements
    • First observedupdate_element

TDQS

B3.1/5.0

Scored across 12 tools

Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific actions on Excalidraw elements or resources. There is no overlap between creation, deletion, updating, querying, grouping, locking, alignment, distribution, or file operations. The descriptions reinforce these distinct roles, making tool selection unambiguous.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case (e.g., create_element, delete_element, group_elements). The naming convention is uniform throughout the set, with verbs clearly indicating actions and nouns specifying targets, making the tools predictable and easy to understand.

Tool Count5/5

With 12 tools, the server is well-scoped for managing Excalidraw diagrams, covering essential operations like CRUD for elements, grouping, locking, alignment, distribution, querying, and file saving. Each tool serves a distinct and necessary function, with no redundancy or excessive complexity.

Completeness5/5

The tool set provides complete coverage for the Excalidraw domain, including full CRUD lifecycle for elements (create, query, update, delete), grouping/ungrouping, locking/unlocking, alignment/distribution, and scene saving. There are no obvious gaps; agents can perform all core diagram editing and management tasks without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers