Public log

mcp-excalidraw-server

Excalidraw toolkit for AI coding agents — agent skill, CLI, and MCP server with a live canvas

npm · fingerprint 6de5299d819a4af9b4240af8 · repository · RSS

26tools
2recorded versions
45dtracked
unchanged 12d

What changed

Changed between 4 September 2026 and 5 October 2026 (first seen 2026-10-05 14:19 UTC)

2 descriptions rewritten, 4 schema or annotation changes with the description left byte-identical.

--- pinned/batch_create_elements
+++ observed/batch_create_elements
  {
    "description": "Create 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.",
    "inputSchema": {
-                 "image"
+                 "image",
+                 "frame"
                ],
                "type": "string"
              },
--- pinned/create_element
+++ observed/create_element
  {
    "description": "Create a new Excalidraw element. For arrows, use startElementId/endElementId to bind to shapes (auto-routes to edges).",
    "inputSchema": {
-           "image"
+           "image",
+           "frame"
          ],
          "type": "string"
        },
--- pinned/export_to_image
+++ observed/export_to_image
  {
-   "description": "Export the current canvas to PNG or SVG image. Requires the canvas frontend to be open in a browser.",
+   "description": "Export the current canvas to a PNG or SVG image. Renders headless in the canvas server (no browser tab needed); SVGs embed the fonts they use.",
    "inputSchema": {
      "properties": {
        "background": {
-         "description": "Include background in export (default: true)",
+         "description": "Include the background (default: true)",
          "type": "boolean"
        },
+       "dark": {
+         "description": "Render in dark mode (default: false)",
+         "type": "boolean"
+       },
+       "elementIds": {
+         "description": "Render only these elements (their bound labels are included)",
+         "items": {
+           "type": "string"
+         },
+         "type": "array"
+       },
        "filePath": {
          "description": "Optional file path to save the image",
          "type": "string"
+       },
+       "frameId": {
+         "description": "Render a single frame, clipped to its bounds",
+         "type": "string"
+       },
+       "padding": {
+         "description": "Padding around the drawing in px (default: 10)",
+         "type": "number"
+       },
+       "renderer": {
+         "description": "\"auto\" (default) renders headless in the canvas server, no browser needed. \"browser\" asks an open canvas tab to render with Excalidraw itself (reference rendering, slower).",
+         "enum": [
+           "auto",
+           "node",
+           "browser"
+         ],
+         "type": "string"
+       },
+       "scale": {
+         "description": "PNG pixel scale from 1 to 4 (default: 1)",
+         "type": "number"
        }
      },
      "required": [
--- pinned/get_canvas_screenshot
+++ observed/get_canvas_screenshot
  {
-   "description": "Take 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.",
+   "description": "Render the current canvas to a PNG and return it as an image. Renders headless in the canvas server (no browser tab needed). Use this to visually verify what the diagram looks like.",
    "inputSchema": {
      "properties": {
        "background": {
-         "description": "Include background in screenshot (default: true)",
+         "description": "Include the background (default: true)",
          "type": "boolean"
+       },
+       "dark": {
+         "description": "Render in dark mode (default: false)",
+         "type": "boolean"
+       },
+       "elementIds": {
+         "description": "Render only these elements (their bound labels are included)",
+         "items": {
+           "type": "string"
+         },
+         "type": "array"
+       },
+       "frameId": {
+         "description": "Render a single frame, clipped to its bounds",
+         "type": "string"
+       },
+       "padding": {
+         "description": "Padding around the drawing in px (default: 10)",
+         "type": "number"
+       },
+       "renderer": {
+         "description": "\"auto\" (default) renders headless in the canvas server, no browser needed. \"browser\" asks an open canvas tab to render with Excalidraw itself (reference rendering, slower).",
+         "enum": [
+           "auto",
+           "node",
+           "browser"
+         ],
+         "type": "string"
+       },
+       "scale": {
+         "description": "PNG pixel scale from 1 to 4 (default: 1)",
+         "type": "number"
        }
      },
      "type": "object"
--- pinned/query_elements
+++ observed/query_elements
  {
    "description": "Query Excalidraw elements with optional filters",
    "inputSchema": {
-           "image"
+           "image",
+           "frame"
          ],
          "type": "string"
        }
--- pinned/update_element
+++ observed/update_element
  {
    "description": "Update an existing Excalidraw element",
    "inputSchema": {
-           "image"
+           "image",
+           "frame"
          ],
          "type": "string"
        },

Current tools

Show all 26 tool fingerprints
align_elements
409cca27b242f723
batch_create_elements
8e2dcd76c474d053
clear_canvas
b45c10a6681ca073
create_element
721e7bf3a401b779
create_from_mermaid
4dac3af44b1b5510
delete_element
03612ff6808da96e
describe_scene
377b1b803cfcb864
distribute_elements
d9ab9b999fe60523
duplicate_elements
849512d9d393337d
export_scene
ca21dafcff80b98f
export_to_excalidraw_url
926517df34e4c6ef
export_to_image
d62bc78022c38962
get_canvas_screenshot
50ce5c840a34ce44
get_element
5523d69b27502df0
get_resource
179e2cb9c504b4fc
group_elements
1e483e105fcb8444
import_scene
08f4efde74bdfa56
lock_elements
9fde15e5bf4a8888
query_elements
b4d64fb989864613
read_diagram_guide
08d3d2f480cbed7e
restore_snapshot
7258f0a829723169
set_viewport
11cf204c63e63a97
snapshot_scene
33ac02f751ef912d
ungroup_elements
4a3a5d3504498440
unlock_elements
1855c23fbdcb7438
update_element
1eee1853baa4f19e

Watch this server yourself

If you run this server, put the proxy in front of it. It pins these exact fingerprints on first connect and stops the session if they move.

npx -y mcp-pin@0.2.3 -- <your mcp-excalidraw-server command>

Or subscribe to this page's RSS feed to be told when it changes.

Badge

mcp-pin status badge for mcp-excalidraw-server

The badge states one fact about time and nothing else. It never claims a server is safe.

[![mcp-pin](https://mcp-pin.gautamkhosla.com/badge/b03e25ef3c137277.svg)](https://mcp-pin.gautamkhosla.com/servers/b03e25ef3c137277.html)