---
name: excalidraw-mcp
description: Create, edit, and export live Excalidraw diagrams using mcp-excalidraw-server (MCP tools + canvas REST API). Use when an agent needs to draw/lay out diagrams, convert Mermaid to Excalidraw, query/update/delete elements, or export/import elements from a running canvas server (EXPRESS_SERVER_URL, default http://localhost:3000).
---
# Excalidraw MCP
## Overview
Create and refine diagrams on a live Excalidraw canvas via MCP tools, with helper scripts for export/import workflows.
## Quick Start
- Ensure the canvas server is reachable at `EXPRESS_SERVER_URL` (default `http://localhost:3000`).
- Use MCP tools for interactive diagram edits; use `scripts/*.cjs` for file-ish workflows (export/import/clear/health).
- For detailed endpoint/tool reference, read `references/cheatsheet.md`.
## Workflow: Draw A Diagram (From Empty Canvas)
1. Confirm canvas is up:
- Run `node scripts/healthcheck.cjs` (or GET `/health`).
2. Optional: clear the canvas:
- Run `node scripts/clear-canvas.cjs`.
3. Create shapes first (rectangles/diamonds/ellipses), using `create_element`.
4. Put text on shapes by setting the shape’s `text` field (do not create a separate text element unless you need standalone text).
5. Create arrows/lines after both endpoints exist.
6. Use `align_elements` / `distribute_elements` after rough placement; group only after layout stabilizes.
## Workflow: Refine An Existing Diagram
1. Discover what’s already there:
- Prefer `get_resource` with `resource: "elements"` or `query_elements`.
2. Identify targets by stable signals (id, type, label text), not by exact x/y.
3. Update with `update_element` (move/resize/colors/text) or delete with `delete_element`.
4. If deletes/updates “don’t work”, check:
- You’re pointing to the right `EXPRESS_SERVER_URL`.
- The element id exists on the canvas (use `get_resource` / `GET /api/elements/:id`).
- The element isn’t locked (use `unlock_elements` first).
## Workflow: Export / Import (Repository-Friendly)
- Export current elements to a JSON file:
- `node scripts/export-elements.cjs --out diagram.elements.json`
- Import elements (append) using batch create:
- `node scripts/import-elements.cjs --in diagram.elements.json --mode batch`
- Import elements (overwrite canvas) using sync:
- `node scripts/import-elements.cjs --in diagram.elements.json --mode sync`
Notes:
- `--mode sync` clears the canvas and then writes the provided elements (good for “make canvas match this file”).
- If you want stable ids across updates, keep ids in the exported JSON; if you want fresh ids, regenerate before importing.
## Workflow: CRUD Smoke Test (Create → Update → Delete)
1. Clear:
- `node scripts/clear-canvas.cjs`
2. Create a large visible rectangle + label:
- Use `node scripts/create-element.cjs` twice (rectangle + text).
3. Update:
- Move the rectangle with `node scripts/update-element.cjs`.
4. Delete:
- Remove both with `node scripts/delete-element.cjs`.
## References
- `references/cheatsheet.md`: MCP tool list + REST API endpoints + payload shapes