Excalidraw MCP for Claude Code: Hand-Drawn Diagrams From a Prompt

Excalidraw MCP for Claude Code: Hand-Drawn Diagrams From a Prompt

Excalidraw is the whiteboard tool known for its sketchy, hand-drawn look, and it has an official MCP server that lets an AI assistant draw for you. In this Claude Code MCP Excalidraw test, we added the hosted server, gave it a short checkout flow written as plain notes, and asked for a diagram. This guide shows what came back in the terminal, what did not, and the simple route that gave us a drawing we could open.

This guide is part of our Claude Code tutorials. Find more add-ons in our Claude Code Skills Directory.

Tested with Claude Code v2.1.322 on November 13, 2026, on macOS, using the hosted Excalidraw MCP server at https://mcp.excalidraw.com. It is hosted, so there is no package to install or pin. It comes from github.com/excalidraw/excalidraw-mcp, which we read at commit 157aa23, where package.json lists version 0.3.2.

The server connected with no sign-in and accepted our drawing. In the terminal, Claude Code got back a checkpoint ID, not a picture and not a link.

Quick Summary: What We Tested

QuestionAnswer
What is it?The official hosted Excalidraw MCP server, built for chat apps that can show the drawing inline
Does it need an account?No. /mcp showed “connected” and “Auth: not signed in”
How many tools?/mcp listed 5. Claude could call 2 of them: read_me and create_view
What did the drawing tool return?Only a checkpoint ID. No image, no link
Did a real diagram exist?Yes. We pulled it from the server ourselves and it opened correctly in Excalidraw
What worked best in the terminal?Asking Claude to save a .excalidraw file, which needed no server at all
Our verdictGreat idea, wrong place. In a terminal, skip the server and ask for a file

One honest note. We ran each test once, so treat this as one demo and not a benchmark.

What the Excalidraw MCP Is and Why It Exists

MCP is the Model Context Protocol, a standard way to give Claude extra tools. If it is new to you, our MCP guide explains it.

The Excalidraw team publishes this server so an assistant can draw diagrams during a chat. The repository describes it as a server that streams hand-drawn diagrams with camera control and fullscreen editing.

The key detail is in the README. It says the server works with any client that supports MCP Apps, and it names Claude, ChatGPT, VS Code and Goose.

MCP Apps is an extension that lets a server send a small interactive screen into the chat. We built one ourselves in our MCP Apps walkthrough.

A terminal has nowhere to show that screen. So the real question for this guide is simple: what does Claude Code get when the drawing has no place to appear?

The repository was not archived when we checked. Its last push was on March 24, 2026, about eight months before our test, so do not expect fast changes.

How to Add the Excalidraw MCP to Claude Code

We worked in a throwaway demo folder and used local scope, so the server exists only in that folder. Your normal setup stays unchanged.

claude mcp add --scope local --transport http excalidraw https://mcp.excalidraw.com

Claude Code printed that it added an HTTP server named excalidraw to the local config for that folder. Then claude mcp list showed it as connected.

We started claude in the folder and ran /mcp to look closer.

Claude Code /mcp screen showing the Excalidraw MCP server connected with Auth not signed in and 5 tools
The server shows as connected and “not signed in”, so no account was needed

There was no sign-in prompt, no key and no install. Scopes and the claude mcp add command are covered in the official MCP docs.

Local scope stores the entry in ~/.claude.json under that one project. Our guide on MCP config files shows where each scope lives.

The Five Tools Claude Code Lists, and the Two It Can Use

The detail screen said “Tools: 5 tools”. Opening the list showed all five names.

Claude Code tools list for excalidraw showing read_me, create_view, export_to_excalidraw, save_checkpoint and read_checkpoint
Five tools are listed, but only the first two are marked read-only and offered to Claude
ToolWhat its description saysCould Claude call it?
read_meReturns the element format reference, with color palettes, examples and tipsYes
create_viewRenders a hand-drawn diagram from a JSON list of Excalidraw elementsYes
export_to_excalidrawUploads the diagram to excalidraw.com and returns a shareable URLNo
save_checkpointUpdates a checkpoint with user-edited stateNo
read_checkpointReads checkpoint state for restoreNo

Why the split? The server marks the last three tools as visible to the app only. They are meant for the drawing screen itself, such as its export button, and not for the model.

Claude Code followed that. The /mcp screen lists all five, but in our sessions Claude was offered only read_me and create_view.

Is the Excalidraw MCP Safe to Add?

Ask what a server can do and where your data goes. This one is hosted, so every shape and label Claude sends goes to the Excalidraw team’s server.

We also noticed something worth knowing. Each drawing is saved on the server as a checkpoint, and we could read our own checkpoint back with a plain request and no sign-in, using only its ID.

The IDs are long random strings, so nobody will guess yours by chance. Still, treat a checkpoint ID like a private link, and do not put confidential details in a diagram.

The server code sets a 30-day expiry for checkpoints in its hosted storage option. We read that in the source and did not verify how the live server is set up.

The tool list showed nothing that edits your files. Claude Code asks before using a tool unless you allow it, and we allowed only this server for our tests with --allowedTools mcp__excalidraw.

Test 1: Draw a Checkout Flow From Notes

We made a small notes.md file with six steps. A shopper adds items, the web app sends the order to an API server, the order is saved to a database, a payment service charges the card, and the shopper gets a receipt email or a retry page.

Read notes.md, then use the excalidraw MCP to draw that checkout flow as a hand-drawn diagram. Keep your answer short and tell me exactly what the tool returned.

Claude read the notes and called the server three times. The run took 1 minute 6 seconds.

Claude Code answer showing create_view returned only a checkpointId, and that read_me failed twice with ECONNRESET
The drawing tool returned a checkpoint ID and nothing else, and read_me failed twice in this run

Two things stand out. First, create_view returned only a checkpoint ID, and Claude said plainly that it could not see the result.

Second, read_me failed twice with a connection reset error, so Claude built the shapes without the format guide. In our next run a few minutes later, the same tool worked on the first try, so it looked like a passing network hiccup.

Flow diagram: your prompt leads to read_me, then create_view sends the shapes, the reply is a checkpoint ID, and to see the drawing you save a file instead
How a drawing request travels when the client is a terminal

Test 2: Ask Claude Code for a Shareable Link

The tool list has an export tool, so we asked for a link in a fresh session.

Use the excalidraw MCP: call read_me once, draw the checkout flow from notes.md with create_view, then call export_to_excalidraw and give me the link. No files, no shell commands. Keep it short and say what each tool returned.

This run took 44 seconds. Claude called read_me, which worked this time, and then create_view, which again returned a checkpoint ID.

Claude Code answer saying the session has no export_to_excalidraw tool, only read_me and create_view
Claude reported that the export tool was not available to it, so no link came back

Then it stopped. Claude said its session had no export_to_excalidraw tool, only the other two, so it could not give us a link.

That is the honest result for terminal users. The server drew something, but Claude Code gave us no way to look at it.

What the Hand-Drawn Diagram Looked Like

We wanted to know if the drawing was any good, so we went around Claude Code. This part takes a few manual requests, and most readers will not want to repeat it.

  1. We read the checkpoint from Test 2 back from the server with a direct request.
  2. We converted its shapes with Excalidraw’s own library, version 0.18.0, in a headless Chrome browser. The app does the same step before it exports.
  3. We called the server’s export_to_excalidraw tool directly. It returned an excalidraw.com link.
  4. We opened that link in headless Chrome.
Excalidraw editor showing the hand-drawn Checkout flow with Shopper, Web app, API server, Orders database, Payment service, a Payment OK decision, Receipt email and Retry page
The shapes Claude sent to create_view, opened in the Excalidraw editor

The diagram was right. All six steps from the notes are there, in order, with numbered labels on the arrows.

Claude also added a “Payment OK?” decision diamond that splits into a green receipt path and a red retry path. Colors follow the palette from read_me, with blue for inputs, teal for storage and red for the failure path.

So the server and the model did good work together. The missing piece is only the screen to show it on.

Test 3: Save a .excalidraw File and Skip the Server

For a terminal, a file is the natural output. So we asked for one.

Read notes.md and save the checkout flow as checkout.excalidraw, a standard Excalidraw file I can open at excalidraw.com. Use only the Write tool, no shell commands. Keep your answer short.

Claude wrote a 50-line file with 26 elements in 1 minute 22 seconds. It did not call the Excalidraw server at all, even though the server was connected and allowed.

Claude Code answer saying it saved checkout.excalidraw and that the layout is unchecked because it has not opened the file
Claude saved the file and said clearly that it had not checked the layout

Claude was upfront that it had not opened the file. So we checked it by loading the file’s elements into excalidraw.com in headless Chrome and zooming to fit.

Excalidraw editor showing the saved file: Shopper, Web app, API server, Payment service, Orders database, Receipt email and Retry page with labeled arrows
The saved file’s shapes in Excalidraw, with all six steps and both outcomes

It worked on the first try. Every box and arrow was in place, with the same hand-drawn style.

There is one limit, and Claude named it. The arrow labels are free-standing text, so they will not follow an arrow if you drag it.

How the Three Routes Compare

RouteTime in our runWhat you get in the terminalCan you open the drawing?
create_view through the server44 seconds to 1 minute 6 secondsA checkpoint IDNot from Claude Code
Export link through the serverNot availableNothing. Claude has no export toolOnly with manual requests
A saved .excalidraw file1 minute 22 secondsA file in your folderYes, in Excalidraw

Other diagram servers handle terminals differently. The draw.io MCP returned an editor link we could open, and our tldraw MCP test hit limits much like this one.

Who Should Add the Excalidraw MCP to Claude Code?

Your situationOur advice
You use Claude Code in a terminal onlySkip it. Ask for a .excalidraw file
You use a chat app that supports MCP AppsThe README says it is built for that. We did not test it there
You want a link to shareNot from Claude Code. Open the saved file in Excalidraw and share from there
You work with private architectureThink twice. Drawings are stored on a hosted server

For more servers, our MCP servers directory lists options by task.

Common Mistakes

  • Expecting a picture in the terminal. create_view returns a checkpoint ID and nothing you can view.
  • Asking Claude to export a link. The export tool shows in /mcp, but Claude cannot call it.
  • Counting tools on the /mcp screen. Five are listed, and two reach the model.
  • Adding the server at user scope for a quick test. Use --scope local to keep it in one folder.
  • Forgetting to remove it afterward with claude mcp remove excalidraw -s local.

Pro Tips

  • Ask for a .excalidraw file by name. It opens in Excalidraw from the menu, or you can drag it onto the canvas.
  • Ask Claude to say exactly what each tool returned. That is how we caught the checkpoint-only reply and the failed read_me calls.
  • If a tool fails with a connection error, try again in a minute before you change anything.
  • Keep notes short and numbered. Our six plain steps became six labeled arrows.
  • Prefer Mermaid text in your docs? Our diagram skills comparison covers that route.

Try It Yourself

Run this in a throwaway folder. It adds the server, shows you the checkpoint-only reply, and then gets a file you can open.

claude mcp add --scope local --transport http excalidraw https://mcp.excalidraw.com
claude
# inside Claude Code:
Use the excalidraw MCP to draw how a customer places an order: cart, payment, confirmation. Tell me exactly what the tool returned.
Now save the same flow as order.excalidraw, a standard Excalidraw file. Use only the Write tool.
# when finished:
claude mcp remove excalidraw -s local

Open order.excalidraw at excalidraw.com to see your drawing.

Cheat Sheet

Cheat sheet card with the commands to add, check and remove the Excalidraw MCP and what Claude can call
The commands and tools from this guide on one card

Frequently Asked Questions

Does the Excalidraw MCP need an account or API key?

No. In our test, /mcp showed it connected with “Auth: not signed in”, and we entered no key.

Can Claude Code show the Excalidraw diagram in the terminal?

No. In our runs, create_view returned only a checkpoint ID, with no image and no link.

Why can’t Claude export a link to excalidraw.com?

The export tool is marked for the app’s own screen. Claude Code listed it in /mcp, but Claude was not offered it in our sessions.

Do I need the server to get an Excalidraw file?

Not in our test. Claude wrote a working .excalidraw file with the Write tool alone and did not call the server.

How do I remove it?

Run claude mcp remove excalidraw -s local from the same folder where you added it.

Conclusion

The Excalidraw MCP is easy to add, needs no account, and the diagram it produced from our notes was accurate and good looking. But it is built for chat apps that can show a drawing inline, and in Claude Code the drawing tool returned only a checkpoint ID while the export tool stayed out of Claude’s reach. The route that worked in a terminal was the plain one: ask Claude to save a .excalidraw file and open it in Excalidraw. If you live in the terminal, start there, and keep the server for an app that can display it.

Next, browse all our Claude Code guides, or read the Claude overview.

Newsletter

New AI tools in your inbox

The best new tools and the AI news that matters, in one short email. Unsubscribe any time.

Free · No spam · Unsubscribe any time

✓ Looks like you’re subscribed

Loading Google’s sign-up form…

Looks like you’re already subscribed

Thanks for reading! New AI tools and the AI news that matters will land in your inbox.

Not subscribed yet? Refresh the page to load the sign-up form.

The sign-up form couldn’t load. If you use an ad or content blocker, allow news.google.com and reload the page.

Free instant check before you pay. Takes a few seconds.

Scroll to Top