Install mcp-excalidraw-server from npm
Install exact version 2.0.0. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact mcp-excalidraw-server@2.0.0A Model Context Protocol server that enables LLMs to create, modify, and manipulate Excalidraw diagrams through a structured API
Detailed security scan evidence is not public for this MCP yet. Public identity, registry metadata, and independently observed protocol inventory remain available.
Installation and connection instructions are shown only when supported by retained package, repository, or endpoint evidence.
Install exact version 2.0.0. No verified executable entrypoint is available, so use the package documentation to launch it.
npm install --save-exact mcp-excalidraw-server@2.0.0| Canonical slug | excalidraw-mcp-server-7b48ff1e | Deployment | Local Only |
|---|---|---|---|
| Canonical package | npm:mcp-excalidraw-server | Repository | yctimlin/mcp_excalidraw |
| First published | — | Latest release | — |
| Last security verification | — | Classification confidence | 90% |
| Publication | Draft | Official distribution | Not verified |
| Channel | Identifier | Current version | Versions | Source |
|---|---|---|---|---|
| npm | mcp-excalidraw-server | 2.0.0 | 10 | Repository |
| Package | Version | Published / observed | Inventory | Security scan |
|---|---|---|---|---|
| npmmcp-excalidraw-server | 2.0.0Current | Sep 5, 2026 | 26 toolsSucceeded · 0 resources · 0 prompts | Evidence restricted |
Independently scan the exact version your agents use, receive alerts when its risk changes, and investigate every finding with retained version evidence.
No public current-version evidence is available yet.
| Tool | Category | Annotations | Risk |
|---|---|---|---|
align_elementsAlign elements to a specific positionInput schema{
"type": "object",
"properties": {
"elementIds": {
"type": "array",
"items": {
"type": "string"
}
},
"alignment": {
"type": "string",
"enum": [
"left",
"center",
"right",
"top",
"middle",
"bottom"
]
}
},
"required": [
"elementIds",
"alignment"
]
} | — | — | |
batch_create_elementsCreate multiple Excalidraw elements at once. For arrows, use startElementId/endElementId to bind arrows to shapes — Excalidraw auto-routes to element edges. Assign custom id to shapes so arrows can reference them.Input schema{
"type": "object",
"properties": {
"elements": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Custom element ID. Arrows can reference this via startElementId/endElementId."
},
"type": {
"type": "string",
"enum": [
"rectangle",
"ellipse",
"diamond",
"arrow",
"text",
"freedraw",
"line",
"image"
]
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"backgroundColor": {
"type": "string"
},
"strokeColor": {
"type": "string"
},
"strokeWidth": {
"type": "number"
},
"strokeStyle": {
"type": "string",
"description": "Stroke style: solid, dashed, dotted"
},
"roughness": {
"type": "number"
},
"opacity": {
"type": "number"
},
"text": {
"type": "string"
},
"fontSize": {
"type": "number"
},
"fontFamily": {
"type": [
"string",
"number"
],
"description": "Font family: virgil/hand/handwritten (1), helvetica/sans/sans-serif (2), cascadia/mono/monospace (3), excalifont (5), nunito (6), lilita/lilita one (7), comic shanns/comic (8), or numeric ID"
},
"startElementId": {
"type": "string",
"description": "For arrows: ID of element to bind arrow start to"
},
"endElementId": {
"type": "string",
"description": "For arrows: ID of element to bind arrow end to"
},
"endArrowhead": {
"type": "string",
"description": "Arrowhead style at end: arrow, bar, dot, triangle, or null"
},
"startArrowhead": {
"type": "string",
"description": "Arrowhead style at start: arrow, bar, dot, triangle, or null"
}
},
"required": [
"type",
"x",
"y"
]
}
}
},
"required": [
"elements"
]
} | — | — | |
clear_canvasClear all elements from the canvasInput schema{
"type": "object",
"properties": {}
} | — | — | |
create_elementCreate a new Excalidraw element. For arrows, use startElementId/endElementId to bind to shapes (auto-routes to edges).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Custom element ID (optional, auto-generated if omitted). Use with startElementId/endElementId in batch_create_elements."
},
"type": {
"type": "string",
"enum": [
"rectangle",
"ellipse",
"diamond",
"arrow",
"text",
"freedraw",
"line",
"image"
]
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"backgroundColor": {
"type": "string"
},
"strokeColor": {
"type": "string"
},
"strokeWidth": {
"type": "number"
},
"strokeStyle": {
"type": "string",
"description": "Stroke style: solid, dashed, dotted"
},
"roughness": {
"type": "number"
},
"opacity": {
"type": "number"
},
"text": {
"type": "string"
},
"fontSize": {
"type": "number"
},
"fontFamily": {
"type": [
"string",
"number"
],
"description": "Font family: virgil/hand/handwritten (1), helvetica/sans/sans-serif (2), cascadia/mono/monospace (3), excalifont (5), nunito (6), lilita/lilita one (7), comic shanns/comic (8), or numeric ID"
},
"startElementId": {
"type": "string",
"description": "For arrows: ID of the element to bind the arrow start to. Arrow auto-routes to element edge."
},
"endElementId": {
"type": "string",
"description": "For arrows: ID of the element to bind the arrow end to. Arrow auto-routes to element edge."
},
"endArrowhead": {
"type": "string",
"description": "Arrowhead style at end: arrow, bar, dot, triangle, or null"
},
"startArrowhead": {
"type": "string",
"description": "Arrowhead style at start: arrow, bar, dot, triangle, or null"
}
},
"required": [
"type",
"x",
"y"
]
} | — | — | |
create_from_mermaidConvert a Mermaid diagram to Excalidraw elements and render them on the canvasInput schema{
"type": "object",
"properties": {
"mermaidDiagram": {
"type": "string",
"description": "The Mermaid diagram definition (e.g., \"graph TD; A-->B; B-->C;\")"
},
"config": {
"type": "object",
"description": "Optional Mermaid configuration",
"properties": {
"startOnLoad": {
"type": "boolean"
},
"flowchart": {
"type": "object",
"properties": {
"curve": {
"type": "string",
"enum": [
"linear",
"basis"
]
}
}
},
"themeVariables": {
"type": "object",
"properties": {
"fontSize": {
"type": "string"
}
}
},
"maxEdges": {
"type": "number"
},
"maxTextSize": {
"type": "number"
}
}
}
},
"required": [
"mermaidDiagram"
]
} | — | — | |
delete_elementDelete an Excalidraw elementInput schema{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
]
} | — | — | |
describe_sceneGet an AI-readable description of the current canvas: element types, positions, connections, labels, spatial layout, and bounding box. Use this to understand what is on the canvas before making changes.Input schema{
"type": "object",
"properties": {}
} | — | — | |
distribute_elementsDistribute elements evenlyInput schema{
"type": "object",
"properties": {
"elementIds": {
"type": "array",
"items": {
"type": "string"
}
},
"direction": {
"type": "string",
"enum": [
"horizontal",
"vertical"
]
}
},
"required": [
"elementIds",
"direction"
]
} | — | — | |
duplicate_elementsDuplicate elements with a configurable offsetInput schema{
"type": "object",
"properties": {
"elementIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "IDs of elements to duplicate"
},
"offsetX": {
"type": "number",
"description": "Horizontal offset (default: 20)"
},
"offsetY": {
"type": "number",
"description": "Vertical offset (default: 20)"
}
},
"required": [
"elementIds"
]
} | — | — | |
export_sceneExport the current canvas to .excalidraw JSON format. Optionally write to a file; a path ending in .md is written in the Obsidian Excalidraw plugin format (.excalidraw.md).Input schema{
"type": "object",
"properties": {
"filePath": {
"type": "string",
"description": "Optional file path to write the scene to (.excalidraw for raw JSON, .excalidraw.md for the Obsidian Excalidraw plugin format)"
}
}
} | — | — | |
export_to_excalidraw_urlExport the current canvas to a shareable excalidraw.com URL. The diagram is encrypted and uploaded; anyone with the URL can view it. Returns the shareable link.Input schema{
"type": "object",
"properties": {}
} | — | — | |
export_to_imageExport the current canvas to PNG or SVG image. Requires the canvas frontend to be open in a browser.Input schema{
"type": "object",
"properties": {
"format": {
"type": "string",
"enum": [
"png",
"svg"
],
"description": "Image format"
},
"filePath": {
"type": "string",
"description": "Optional file path to save the image"
},
"background": {
"type": "boolean",
"description": "Include background in export (default: true)"
}
},
"required": [
"format"
]
} | — | — | |
get_canvas_screenshotTake a screenshot of the current canvas and return it as an image. Requires the canvas frontend to be open in a browser. Use this to visually verify what the diagram looks like.Input schema{
"type": "object",
"properties": {
"background": {
"type": "boolean",
"description": "Include background in screenshot (default: true)"
}
}
} | — | — | |
get_elementGet a single Excalidraw element by IDInput schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The element ID"
}
},
"required": [
"id"
]
} | — | — | |
get_resourceGet an Excalidraw resourceInput schema{
"type": "object",
"properties": {
"resource": {
"type": "string",
"enum": [
"scene",
"library",
"theme",
"elements"
]
}
},
"required": [
"resource"
]
} | — | — | |
group_elementsGroup multiple elements togetherInput schema{
"type": "object",
"properties": {
"elementIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"elementIds"
]
} | — | — | |
import_sceneImport elements from a .excalidraw JSON file, an Obsidian .excalidraw.md file, or raw JSON dataInput schema{
"type": "object",
"properties": {
"filePath": {
"type": "string",
"description": "Path to a .excalidraw JSON or Obsidian .excalidraw.md file"
},
"data": {
"type": "string",
"description": "Raw .excalidraw JSON string (alternative to filePath)"
},
"mode": {
"type": "string",
"enum": [
"replace",
"merge"
],
"description": "\"replace\" clears canvas first, \"merge\" appends to existing elements"
}
},
"required": [
"mode"
]
} | — | — | |
lock_elementsLock elements to prevent modificationInput schema{
"type": "object",
"properties": {
"elementIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"elementIds"
]
} | — | — | |
query_elementsQuery Excalidraw elements with optional filtersInput schema{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"rectangle",
"ellipse",
"diamond",
"arrow",
"text",
"freedraw",
"line",
"image"
]
},
"filter": {
"type": "object",
"additionalProperties": true
},
"bbox": {
"type": "object",
"description": "Bounding box filter — only return elements whose origin (x, y) falls within the given coordinate range",
"properties": {
"x_min": {
"type": "number"
},
"x_max": {
"type": "number"
},
"y_min": {
"type": "number"
},
"y_max": {
"type": "number"
}
}
}
}
} | — | — | |
read_diagram_guideReturns a comprehensive design guide for creating beautiful Excalidraw diagrams: color palette, sizing rules, layout patterns, arrow binding best practices, diagram templates, and anti-patterns. Call this before creating diagrams to produce professional results.Input schema{
"type": "object",
"properties": {}
} | — | — | |
restore_snapshotRestore the canvas from a previously saved named snapshotInput schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the snapshot to restore"
}
},
"required": [
"name"
]
} | — | — | |
set_viewportControl the canvas viewport (camera). Auto-fit all elements, zoom-to-fit a subset of elements, center on a specific element, or set zoom/scroll directly. Requires the canvas frontend open in a browser.Input schema{
"type": "object",
"properties": {
"scrollToContent": {
"type": "boolean",
"description": "Auto-fit all elements in view (zoom-to-fit)"
},
"scrollToElementIds": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Zoom-to-fit the bounding box of one or more elements by ID; every ID must exist"
},
"viewportZoomFactor": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1,
"description": "Optional fit-to-viewport zoom factor in the range (0, 1] for scrollToContent or scrollToElementIds; lower values leave more padding"
},
"scrollToElementId": {
"type": "string",
"description": "Center the view on a specific element by ID"
},
"zoom": {
"type": "number",
"description": "Zoom level (0.1–10, where 1 = 100%)"
},
"offsetX": {
"type": "number",
"description": "Horizontal scroll offset"
},
"offsetY": {
"type": "number",
"description": "Vertical scroll offset"
}
}
} | — | — | |
snapshot_sceneSave a named snapshot of the current canvas state for later restorationInput schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name for this snapshot"
}
},
"required": [
"name"
]
} | — | — | |
ungroup_elementsUngroup a group of elementsInput schema{
"type": "object",
"properties": {
"groupId": {
"type": "string"
}
},
"required": [
"groupId"
]
} | — | — | |
unlock_elementsUnlock elements to allow modificationInput schema{
"type": "object",
"properties": {
"elementIds": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"elementIds"
]
} | — | — | |
update_elementUpdate an existing Excalidraw elementInput schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"rectangle",
"ellipse",
"diamond",
"arrow",
"text",
"freedraw",
"line",
"image"
]
},
"x": {
"type": "number"
},
"y": {
"type": "number"
},
"width": {
"type": "number"
},
"height": {
"type": "number"
},
"backgroundColor": {
"type": "string"
},
"strokeColor": {
"type": "string"
},
"strokeWidth": {
"type": "number"
},
"strokeStyle": {
"type": "string"
},
"roughness": {
"type": "number"
},
"opacity": {
"type": "number"
},
"text": {
"type": "string"
},
"fontSize": {
"type": "number"
},
"fontFamily": {
"type": [
"string",
"number"
],
"description": "Font family: virgil/hand/handwritten (1), helvetica/sans/sans-serif (2), cascadia/mono/monospace (3), excalifont (5), nunito (6), lilita/lilita one (7), comic shanns/comic (8), or numeric ID"
}
},
"required": [
"id"
]
} | — | — |
| Endpoint | Transport | Authentication | Health | Observed |
|---|---|---|---|---|
| No verified remote endpoint is linked. | ||||
Install the selected package version with: npm install --save-exact mcp-excalidraw-server@2.0.0
Excalidraw MCP Server exposed 26 tools during independent protocol observation, including align_elements, batch_create_elements, clear_canvas, create_element, create_from_mermaid, delete_element, describe_scene, distribute_elements, and others.
The selected current version does not yet have completed public verification. Unknown does not mean clean or vulnerable.
Curated product and capability guides containing this catalog record.