Excalidraw MCP

Draws hand-drawn Excalidraw diagrams inline in the chat, with editing and export to excalidraw.com

Official · Excalidraw TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Design

53 popularity score ★ 5.6k

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude (desktop and web)Settings → Connectors → Add custom connector
https://mcp.excalidraw.com/mcp
ChatGPTSettings → Apps → Advanced → Developer mode, then Create app
https://mcp.excalidraw.com/mcp
VS Code.vscode/mcp.json
{
  "servers": {
    "excalidraw": {
      "type": "http",
      "url": "https://mcp.excalidraw.com/mcp"
    }
  }
}
Local (from source)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

FirstTerminal
git clone https://github.com/excalidraw/excalidraw-mcp.git
cd excalidraw-mcp
pnpm install && pnpm run build
Claude CodeTerminal
claude mcp add excalidraw -- node '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js' --stdio
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "excalidraw": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/index.js",
        "--stdio"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "excalidraw": {
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/index.js",
        "--stdio"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "excalidraw": {
      "type": "stdio",
      "command": "node",
      "args": [
        "<ABSOLUTE_PATH_TO_CLONE>/dist/index.js",
        "--stdio"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.excalidraw]
command = "node"
args = ["<ABSOLUTE_PATH_TO_CLONE>/dist/index.js", "--stdio"]
Gemini CLITerminal
gemini mcp add --scope user excalidraw node -- '<ABSOLUTE_PATH_TO_CLONE>/dist/index.js' --stdio

Settings 1

PORT Optional: Port for the HTTP mode used when started without --stdio; 3001 by default. Not used over stdio.

What it does

Excalidraw MCP is an MCP Apps server kept in the Excalidraw organisation on GitHub. Instead of replying with text, the assistant sends a list of Excalidraw elements and the client renders them as an interactive widget in the conversation: shapes appear one at a time with a pen-stroke animation, the view can pan between parts of the drawing, and the user can open it fullscreen and edit it by hand.

The model sees two tools. read_me returns a reference of the element format, colours and examples, and create_view takes a JSON array of elements and draws it. Each drawing is stored as a checkpoint with a short id; a later create_view call can start from that checkpoint, add elements and delete others by id, so a diagram is refined step by step, including any edits the user made by hand. The release source (v0.3.2, src/server.ts) registers three more tools that only the widget can call: export_to_excalidraw, save_checkpoint and read_checkpoint, so the real total is five, a count the README does not give.

It can be used without installing anything through the hosted endpoint at mcp.excalidraw.com, which answers without sign-in, or built from source and run over stdio on your own machine. The README also offers a Claude Desktop extension file on the releases page, and you can deploy your own copy to Vercel.

What it needs

To run it yourselfNode.js 18+

A client that supports the MCP Apps extension (its docs name Claude, ChatGPT, VS Code and Goose); in a client without it the diagram widget does not render. For the hosted endpoint, nothing else. To run from source: git, Node.js 18 or later (manifest.json), pnpm, and Bun, which the build script calls and the package's postinstall step tries to set up from its optional Bun packages.

Limits

There is no npm package: the manifest's comment names @mcp-demos/excalidraw-server, but it is not published, so running it locally means building from source or using the .mcpb extension from the releases page. The README's build steps say cd excalidraw-mcp-app after cloning, but the clone folder is excalidraw-mcp. Checkpoints made locally are kept as JSON files in the system temp folder; on a Vercel deployment they go to Upstash Redis for 30 days when that is set up, otherwise only to memory, and a checkpoint that has expired cannot be restored. Started without --stdio, it serves HTTP on port 3001 (set with PORT) on all interfaces, not stdio.

Who it suits

Suits someone who wants diagrams sketched during a conversation and then adjusted by hand, in a client that renders MCP Apps. The hosted endpoint is the easy route and needs no account; build it from source if you want the checkpoints kept on your own machine. It draws only what the model writes as elements: it does not open, list or save .excalidraw files on disk or on excalidraw.com. If you need an assistant to work with an Excalidraw canvas or files outside the chat, look at the other Excalidraw servers we list, such as mcp-excalidraw, and check what their own pages say.

Tools 5

read_me
Returns the element format reference, colour palettes and examples to read before drawing.
create_view
Draws a diagram from a JSON array of Excalidraw elements, optionally starting from a saved checkpoint, and returns a checkpoint id.
export_to_excalidraw
Widget only: encrypts the diagram, uploads it to excalidraw.com and returns a share link.
save_checkpoint
Widget only: stores the user's hand edits under a checkpoint id.
read_checkpoint
Widget only: loads a stored checkpoint so the widget can restore it.

Similar servers