github yctimlin/mcp_excalidraw v2.2.0

one hour ago

Features

  • Act on the selection: get_selection (MCP) and selection (CLI) return the IDs selected in the most recently active canvas tab. (#149, thanks @Totopo27; requested in #147 by @fgeierst)
  • Editable PNGs: export a PNG with the scene embedded (--embed-scene / embedScene: true, PNG only, off by default) and import or render it later. One .excalidraw.png file is both the README preview and the editable source. (#132, thanks @FortniteGamer747)
  • Durable canvas (opt-in): set EXCALIDRAW_DATA_DIR to keep elements, image files and named snapshots across canvas restarts. Each change is saved to disk before it is acknowledged, and one process owns the directory at a time. Unset, nothing changes. (#130, thanks @IndelibleVivi; #133)
  • Self-hosted share links: share / export_to_excalidraw_url can upload to your own Excalidraw instance via EXCALIDRAW_SHARE_UPLOAD_URL and EXCALIDRAW_SHARE_BASE_URL. Defaults still go to excalidraw.com. (#138, thanks @j2ali)

Fixes

  • File tools stay inside EXCALIDRAW_EXPORT_DIR: symlinks are resolved before the containment check, broken symlinks are refused, and MCP file tools accept only their own file types (.excalidraw, .json, .md, plus .png for import, .png/.svg for image export). The CLI is unaffected. (#148, fixes #146 reported by @niananto)
  • A crashing PNG renderer no longer takes the canvas down: rasterization runs in a child process, so a native resvg crash returns an error instead of killing the server and wiping the scene. Large PNGs are delivered in full. (#127, #131, thanks @Red44)
  • query_elements filters keep their types: {"locked": true} and {"x": 100} match again. (#126, thanks @sanjayy0612)
  • No more idle sync loop: one click in a canvas tab no longer makes it re-upload the whole scene every ~1.2 s and overwrite concurrent agent writes. (#142, thanks @tomerSP)
  • ?element= links work: copied element links scroll to the element once the server scene has loaded. (#141, thanks @tomerSP)
  • Dark theme sticks: copy link, copy as SVG and wrap in frame no longer switch the canvas to light mode. (#143, thanks @tomerSP)
  • Durable mode accepts native element types: tab syncs with embeddable, iframe or magicframe elements no longer fail with 500. (#133)

Docker

  • MCP and canvas images are ~70–80% smaller (author's measurements: 1.13 GB → 273 MB and 1.16 GB → 210 MB). The canvas image now runs on Alpine with Node 24. (#112, thanks @hermes-carpet)

Also: docs on MCP transport and connecting to a remote canvas over an SSH tunnel (#144) and on snapshot persistence defaults (#140), thanks @IndelibleVivi. CI builds but no longer pushes Docker images for fork PRs (#129).

npx -y mcp-excalidraw-server@2.2.0

Don't miss a new mcp_excalidraw release

NewReleases is sending notifications on new releases.