Features
- Act on the selection:
get_selection(MCP) andselection(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 orrenderit later. One.excalidraw.pngfile is both the README preview and the editable source. (#132, thanks @FortniteGamer747) - Durable canvas (opt-in): set
EXCALIDRAW_DATA_DIRto 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_urlcan upload to your own Excalidraw instance viaEXCALIDRAW_SHARE_UPLOAD_URLandEXCALIDRAW_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.pngfor import,.png/.svgfor 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_elementsfilters 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,iframeormagicframeelements 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