Claude Code Tools

@drawio/mcp

official

Official draw.io MCP server for LLMs - Open diagrams in draw.io editor

Version
1.3.2
Last Updated
2026-06-18
Source
official

Draw.io MCP Server

The official draw.io MCP (Model Context Protocol) server that enables LLMs to create and open diagrams in the draw.io editor.

Four Ways to Create Diagrams

This repository offers four approaches for integrating draw.io with AI assistants. Pick the one that fits your setup:

MCP App ServerMCP Tool ServerSkill + CLIProject Instructions
How it worksRenders diagrams inline in chatOpens diagrams in your browserGenerates .drawio files, optional PNG/SVG/PDF export or browser URLClaude generates draw.io URLs via Python
Diagram outputInteractive viewer embedded in conversationdraw.io editor in a new tab.drawio, .drawio.png / .svg / .pdf, or browser URLClickable link to draw.io
Requires installationNo (hosted at mcp.draw.io)Yes (npm package)Copy skill file (draw.io Desktop only for PNG/SVG/PDF export)No — just paste instructions
Supports XML, CSV, MermaidXML only✅ All threeXML only (native format)✅ All three
Editable in draw.ioVia “Open in draw.io” button✅ Directly✅ DirectlyVia link
Works withClaude.ai, VS Code, any MCP Apps hostClaude Desktop, any MCP clientClaude CodeClaude.ai (with Projects)
Best forInline previews in chatLocal desktop workflowsLocal development workflowsQuick setup, no install needed

MCP App Server

The MCP App server renders draw.io diagrams inline in AI chat interfaces using the MCP Apps protocol. Instead of opening a browser tab, diagrams appear directly in the conversation as interactive iframes.

The official hosted endpoint is available at:

https://mcp.draw.io/mcp

Add this URL as a remote MCP server in Claude.ai or any MCP Apps-compatible host — no installation required.

You can also run the server locally via Node.js or deploy your own instance to Cloudflare Workers.

Tools:

  • create_diagram — Renders draw.io XML as an interactive diagram inline in chat
  • search_shapes — Searches 10,000+ shapes across all draw.io libraries (AWS, Azure, GCP, P&ID, electrical, Cisco, Kubernetes, UML, BPMN, etc.) by keyword. Returns exact style strings that can be used directly in XML. Use this to find the correct shape before calling create_diagram.

Full documentation →

Note: Inline diagram rendering requires an MCP host that supports the MCP Apps extension. In hosts without MCP Apps support, the tool still works but returns the XML as text.


MCP Tool Server

The original MCP server that opens diagrams directly in the draw.io editor. Supports XML, CSV, and Mermaid.js formats with lightbox and dark mode options. Published as @drawio/mcp on npm.

Quick start: npx @drawio/mcp

Full documentation →


Skill + CLI

A Claude Code skill that generates native .drawio files, with optional export to PNG, SVG, or PDF (with embedded XML so the exported file remains editable in draw.io) — or a browser URL that opens the diagram directly in app.diagrams.net. No MCP setup required — just copy a skill file.

By default, the skill writes a .drawio file and opens it in draw.io. Mention a format in your request to change the output:

  • /drawio png ... / svg / pdf — exports using the draw.io desktop CLI with --embed-diagram
  • /drawio url ... — compresses the XML with Node.js’s built-in zlib and opens the result at app.diagrams.net. No draw.io Desktop needed; the .drawio file is kept locally as a persistent copy.

Full documentation →


Alternative: Project Instructions (No MCP Required)

An alternative approach that works without installing anything. Add instructions to a Claude Project that teach Claude to generate draw.io URLs using Python code execution. No MCP server, no desktop app — just paste and go.

Full documentation →


Diagram layouts

Two optional, independent layout passes can run after the AI generates a diagram — one re-arranges the nodes, the other only reroutes the edges. Which are available depends on the approach:

Layout passWhat it doesApp Server (create_diagram)Tool Server (open_drawio_xml)Skill + CLIProject Instructions
ELK auto-layout (postLayout: "elk")Re-arranges nodes into a clean layered layout; routes the edges as part of itplanned (via draw.io Desktop ELK)
libavoid routing (routing: "libavoid")Keeps node positions; reroutes connectors orthogonally around the shapes✅ from v1.3.0
  • These apply to draw.io XML diagrams. Mermaid diagrams are auto-laid-out already, so neither pass is needed.
  • The App Server applies these in the inline viewer after the diagram renders; the Tool Server applies libavoid server-side before opening the draw.io editor.
  • Pick one, not both: ELK already routes its own edges, so adding libavoid on top is redundant. Use postLayout to re-arrange a layout, or routing to tidy the connectors on a layout you placed deliberately.

Data Residency & Offline Use

If you’re deploying in an environment with strict data restrictions, here is exactly where diagram data goes for each approach.

No component sends your diagram to a cloud rasterizer. convert.diagrams.net (or any cloud export endpoint) is not called anywhere in this repository, and there is no “local dependency missing → fall back to cloud” path. PNG/SVG/PDF export happens only in the Skill + CLI, which shells out to your locally installed draw.io Desktop CLI (located via which drawio); if it isn’t installed, the .drawio file is kept and nothing is sent.

Does your diagram leave the machine?

ApproachDiagram leaves the machine?
MCP App Server — hosted (mcp.draw.io)Yes — it is sent to the draw.io server as the MCP request. Self-host instead (below) to keep it local.
MCP App Server — self-hosted (local Node or your own Cloudflare)No — processed by your server and embedded in HTML that renders client-side.
MCP Tool Server (@drawio/mcp)No — carried in the URL #fragment, which browsers do not transmit to the server.
Skill + CLINo — written locally and exported by your local draw.io Desktop CLI.

By default the servers do not write diagram content to their logs — only request metadata (method, session, status, timing). The Cloudflare-hosted App Server logs response bodies only when run with DEBUG=true.

Reducing external requests

Even when the diagram itself stays local, the rendering loads draw.io’s web-app / viewer code from app.diagrams.net and viewer.diagrams.net by default. These fetch application code and assets — not your diagram — but they are still outbound requests. To reduce or remove them:

  • App Server: build with the VIEWER_PATH environment variable to inline the viewer instead of loading it from viewer.diagrams.net.
  • Tool Server: set the DRAWIO_BASE_URL environment variable to a self-hosted draw.io instance.
  • Skill + CLI: the opt-in /drawio url mode opens the diagram at app.diagrams.net (hardcoded — no DRAWIO_BASE_URL equivalent). Use the default .drawio output or local Desktop export instead if you need to avoid that request.

Your LLM is a separate consideration

The diagram is generated by the LLM. If you use a hosted model, the diagram content is produced in that provider’s cloud regardless of where this MCP server runs. End-to-end isolation requires a locally hosted model as well.

Verifying

The only reliable way to confirm a deployment makes no outbound calls is to run it with network egress blocked (or watch the browser’s Network tab) and verify it still renders. We recommend this for any strict-isolation deployment.


XML Reference (Single Source of Truth)

The draw.io XML generation reference — covering edge routing, containers, layers, tags, metadata, dark mode, style properties, and XML well-formedness — lives in a single canonical file:

shared/xml-reference.md

All four approaches above use this file as their single source of truth for LLM prompts:

ApproachHow it accesses the reference
MCP App ServerReads the file at startup / build time and includes it in the tool description
MCP Tool ServerReads the file at startup (from repo or bundled copy via prepack)
Skill + CLIReferences the GitHub raw URL
Project InstructionsUsers copy its contents into their Claude Project

When updating XML generation guidance, edit only shared/xml-reference.md — changes propagate to all consumers automatically.


Shape Search Index

The search_shapes tool is powered by a pre-built index of all draw.io shapes. The index is generated from the live draw.io client (https://app.diagrams.net/js/app.min.js) by running all sidebar palette initializations in Node.js via jsdom and capturing the shape data.

shape-search/search-index.json is committed to the repository and is automatically refreshed on every draw.io release via the Update Shape Search Index GitHub Action — no manual step is required to stay in sync with the latest shapes.

To regenerate the index manually (e.g. when iterating on the generator itself):

cd shape-search
npm install
npm run generate

# Rebuild the MCP App Server worker to embed the updated index
cd ../mcp-app-server
npm run build:worker

The generator fetches app.min.js directly from the public draw.io web app, so no local checkout of the draw.io source is needed.


Development

# MCP App Server
cd mcp-app-server
npm install
npm start

# MCP Tool Server
cd mcp-tool-server
npm install
npm start