Skip to main content
Glama

Excalidraw MCP Server

by yctimlin

MCP Excalidraw Server: Advanced Live Visual Diagramming with AI Integration

A comprehensive TypeScript-based system that combines Excalidraw's powerful drawing capabilities with Model Context Protocol (MCP) integration, enabling AI agents to create and manipulate diagrams in real-time on a live canvas.

🚦 Current Status & Version Information

📋 Choose Your Installation Method

VersionStatusRecommended For
Local DevelopmentFULLY TESTED🎯 RECOMMENDED
NPM Published🔧 DEBUGGING IN PROGRESSDevelopment testing
Docker Version🔧 UNDER DEVELOPMENTFuture deployment

Current Recommendation: Local Development

For the most stable experience, we recommend using the local development setup. We're actively working on improving the NPM package and Docker deployment options.

Development Notes

  • NPM Package: Currently debugging MCP tool registration issues
  • Docker Version: Improving canvas synchronization reliability
  • Local Version: ✅ All features fully functional

🚀 What This System Does

  • 🎨 Live Canvas: Real-time Excalidraw canvas accessible via web browser
  • 🤖 AI Integration: MCP server allows AI agents (like Claude) to create visual diagrams
  • ⚡ Real-time Sync: Elements created via MCP API appear instantly on the canvas
  • 🔄 WebSocket Updates: Live synchronization across multiple connected clients
  • 🏗️ Production Ready: Clean, minimal UI suitable for end users

🎥 Demo Video

See MCP Excalidraw in Action!

Watch how AI agents create and manipulate diagrams in real-time on the live canvas

🏛️ Architecture Overview

┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ AI Agent │───▶│ MCP Server │───▶│ Canvas Server │ │ (Claude) │ │ (src/index.js) │ │ (src/server.js) │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ │ Frontend │ │ (React + WS) │ └─────────────────┘

🌟 Key Features

Modern TypeScript Architecture

  • Full TypeScript Migration: Complete type safety for backend and frontend
  • Comprehensive Type Definitions: Excalidraw elements, API responses, WebSocket messages
  • Strict Type Checking: Enhanced development experience and compile-time error detection
  • Type-Safe React Components: TSX components with proper props typing

Real-time Canvas Integration

  • Elements created via MCP appear instantly on the live canvas
  • WebSocket-based real-time synchronization
  • Multi-client support with live updates

Production-Ready Interface

  • Clean, minimal UI with connection status
  • Simple "Clear Canvas" functionality
  • No development clutter or debug information

Comprehensive MCP API

  • Element Creation: rectangles, ellipses, diamonds, arrows, text, lines
  • Element Management: update, delete, query with filters
  • Batch Operations: create multiple elements in one call
  • Advanced Features: grouping, alignment, distribution, locking

Robust Architecture

  • TypeScript-based Express.js backend with REST API + WebSocket
  • React frontend with official Excalidraw package and TypeScript
  • Dual-path element loading for reliability
  • Auto-reconnection and error handling

📦 Installation & Setup

Most stable and feature-complete option

1. Clone the Repository
git clone https://github.com/yctimlin/mcp_excalidraw.git cd mcp_excalidraw npm install
2. Build the Frontend
npm run build
3. Start the System
# Start canvas server (serves frontend + API) npm run canvas
Option B: Development Mode
# Start both canvas server and Vite dev server npm run dev
4. Access the Canvas

Open your browser and navigate to:

http://localhost:3000

🔧 Alternative Installation Methods (In Development)

NPM Package (Beta)
# Currently debugging tool registration - feedback welcome! npm install -g mcp-excalidraw-server npx mcp-excalidraw-server
Docker Version (Coming Soon)
# Canvas sync improvements in progress docker run -p 3000:3000 mcp-excalidraw-server

🔧 Available Scripts

ScriptDescription
npm startBuild and start MCP server (dist/index.js)
npm run canvasBuild and start canvas server (dist/server.js)
npm run buildBuild both frontend and TypeScript backend
npm run build:frontendBuild React frontend only
npm run build:serverCompile TypeScript backend to JavaScript
npm run devStart TypeScript watch mode + Vite dev server
npm run type-checkRun TypeScript type checking without compilation
npm run productionBuild + start in production mode

🎯 Usage Guide

For End Users

  1. Open the canvas at http://localhost:3000
  2. Check connection status (should show "Connected")
  3. AI agents can now create diagrams that appear in real-time
  4. Use "Clear Canvas" to remove all elements

For AI Agents (via MCP)

The MCP server provides these tools for creating visual diagrams:

Basic Element Creation
// Create a rectangle { "type": "rectangle", "x": 100, "y": 100, "width": 200, "height": 100, "backgroundColor": "#e3f2fd", "strokeColor": "#1976d2", "strokeWidth": 2 }
Create Text Elements
{ "type": "text", "x": 150, "y": 125, "text": "Process Step", "fontSize": 16, "strokeColor": "#333333" }
Create Arrows & Lines
{ "type": "arrow", "x": 300, "y": 130, "width": 100, "height": 0, "strokeColor": "#666666", "strokeWidth": 2 }
Batch Creation for Complex Diagrams
{ "elements": [ { "type": "rectangle", "x": 100, "y": 100, "width": 120, "height": 60, "backgroundColor": "#fff3e0", "strokeColor": "#ff9800" }, { "type": "text", "x": 130, "y": 125, "text": "Start", "fontSize": 16 } ] }

🔌 Integration with Claude Desktop

For the local development version (most stable), add this configuration to your claude_desktop_config.json:

{ "mcpServers": { "excalidraw": { "command": "node", "args": ["/absolute/path/to/mcp_excalidraw/dist/index.js"] } } }

Important: Replace /absolute/path/to/mcp_excalidraw with the actual absolute path to your cloned repository. Note that the path now points to dist/index.js (the compiled TypeScript output).

🔧 Alternative Configurations (Beta)

NPM Package (Beta Testing)
{ "mcpServers": { "excalidraw": { "command": "npx", "args": ["-y", "mcp-excalidraw-server"] } } }

Currently debugging tool registration - let us know if you encounter issues!

Docker Version (Coming Soon)
{ "mcpServers": { "excalidraw": { "command": "docker", "args": ["run", "-i", "--rm", "mcp-excalidraw-server"] } } }

Canvas sync improvements in progress.

🔧 Integration with Other Tools

Cursor IDE

Add to your .cursor/mcp.json:

{ "mcpServers": { "excalidraw": { "command": "node", "args": ["/absolute/path/to/mcp_excalidraw/dist/index.js"] } } }

VS Code MCP Extension

For VS Code MCP extension, add to your settings:

{ "mcp": { "servers": { "excalidraw": { "command": "node", "args": ["/absolute/path/to/mcp_excalidraw/dist/index.js"] } } } }

🛠️ Environment Variables

VariableDefaultDescription
EXPRESS_SERVER_URLhttp://localhost:3000Canvas server URL for MCP sync
ENABLE_CANVAS_SYNCtrueEnable/disable canvas synchronization
DEBUGfalseEnable debug logging
PORT3000Canvas server port
HOSTlocalhostCanvas server host

📊 API Endpoints

The canvas server provides these REST endpoints:

MethodEndpointDescription
GET/api/elementsGet all elements
POST/api/elementsCreate new element
PUT/api/elements/:idUpdate element
DELETE/api/elements/:idDelete element
POST/api/elements/batchCreate multiple elements
GET/healthServer health check

🎨 MCP Tools Available

Element Management

  • create_element - Create any type of Excalidraw element
  • update_element - Modify existing elements
  • delete_element - Remove elements
  • query_elements - Search elements with filters

Batch Operations

  • batch_create_elements - Create complex diagrams in one call

Element Organization

  • group_elements - Group multiple elements
  • ungroup_elements - Ungroup element groups
  • align_elements - Align elements (left, center, right, top, middle, bottom)
  • distribute_elements - Distribute elements evenly
  • lock_elements / unlock_elements - Lock/unlock elements

Resource Access

  • get_resource - Access scene, library, theme, or elements data

🏗️ Development Architecture

Frontend (frontend/src/)

  • React + TypeScript: Modern TSX components with full type safety
  • Vite Build System: Fast development and optimized production builds
  • Official Excalidraw: @excalidraw/excalidraw package with TypeScript types
  • WebSocket Client: Type-safe real-time element synchronization
  • Clean UI: Production-ready interface with proper TypeScript typing

Canvas Server (src/server.tsdist/server.js)

  • TypeScript + Express.js: Fully typed REST API + static file serving
  • WebSocket: Type-safe real-time client communication
  • Element Storage: In-memory with comprehensive type definitions
  • CORS: Cross-origin support with proper typing

MCP Server (src/index.tsdist/index.js)

  • TypeScript MCP Protocol: Type-safe Model Context Protocol implementation
  • Canvas Sync: Strongly typed HTTP requests to canvas server
  • Element Management: Full CRUD operations with comprehensive type checking
  • Batch Support: Type-safe complex diagram creation

Type System (src/types.ts)

  • Excalidraw Element Types: Complete type definitions for all element types
  • API Response Types: Strongly typed REST API interfaces
  • WebSocket Message Types: Type-safe real-time communication
  • Server Element Types: Enhanced element types with metadata

🐛 Troubleshooting

NPM Package Issues

  • Symptoms: MCP tools not registering properly
  • Temporary Solution: Use local development setup
  • Status: Actively debugging - updates coming soon

Docker Version Notes

  • Symptoms: Elements may not sync to canvas immediately
  • Temporary Solution: Use local development setup
  • Status: Improving synchronization reliability

Canvas Not Loading

  • Ensure npm run build completed successfully
  • Check that dist/index.html exists
  • Verify canvas server is running on port 3000

Elements Not Syncing

  • Confirm MCP server is running (npm start)
  • Check ENABLE_CANVAS_SYNC=true in environment
  • Verify canvas server is accessible at EXPRESS_SERVER_URL

WebSocket Connection Issues

  • Check browser console for WebSocket errors
  • Ensure no firewall blocking WebSocket connections
  • Try refreshing the browser page

Build Errors

  • Delete node_modules and run npm install
  • Check Node.js version (requires 16+)
  • Ensure all dependencies are installed
  • Run npm run type-check to identify TypeScript issues
  • Verify dist/ directory is created after npm run build:server

📋 Project Structure

mcp_excalidraw/ ├── frontend/ │ ├── src/ │ │ ├── App.tsx # Main React component (TypeScript) │ │ └── main.tsx # React entry point (TypeScript) │ └── index.html # HTML template ├── src/ (TypeScript Source) │ ├── index.ts # MCP server (TypeScript) │ ├── server.ts # Canvas server (Express + WebSocket, TypeScript) │ ├── types.ts # Comprehensive type definitions │ └── utils/ │ └── logger.ts # Logging utility (TypeScript) ├── dist/ (Compiled Output) │ ├── index.js # Compiled MCP server │ ├── server.js # Compiled Canvas server │ ├── types.js # Compiled type definitions │ ├── utils/ │ │ └── logger.js # Compiled logging utility │ └── frontend/ # Built React frontend ├── tsconfig.json # TypeScript configuration ├── vite.config.js # Vite build configuration ├── package.json # Dependencies and scripts └── README.md # This file

🔮 Development Roadmap

  • TypeScript Migration: Complete type safety for enhanced development experience
  • NPM Package: Resolving MCP tool registration issues
  • Docker Deployment: Improving canvas synchronization
  • Enhanced Features: Additional MCP tools and capabilities
  • Performance Optimization: Real-time sync improvements
  • Advanced TypeScript Features: Stricter type checking and advanced type utilities

🤝 Contributing

We welcome contributions! If you're experiencing issues with the NPM package or Docker version, please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Excalidraw Team - For the amazing drawing library
  • MCP Community - For the Model Context Protocol specification

Related MCP Servers

  • -
    security
    A
    license
    -
    quality
    A Model Context Protocol server implementation that enables LLMs to interact with NebulaGraph database for graph exploration, supporting schema understanding, queries, and graph algorithms.
    Last updated -
    18
    Apache 2.0
  • A
    security
    F
    license
    A
    quality
    A Model Context Protocol server that provides API functionality for creating, managing, and exporting Excalidraw drawings in various formats like SVG, PNG, and JSON.
    Last updated -
    8
    58
    28
  • -
    security
    A
    license
    -
    quality
    A Model Context Protocol server that enables LLMs to interact with GraphQL APIs by providing schema introspection and query execution capabilities.
    Last updated -
    390
    1
    MIT License
    • Apple
  • -
    security
    F
    license
    -
    quality
    A Model Context Protocol server that enables LLMs to interact with GraphQL APIs by providing schema introspection and query execution capabilities.
    Last updated -
    4
    • Apple
    • Linux

View all related MCP servers

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/yctimlin/mcp_excalidraw'

If you have feedback or need assistance with the MCP directory API, please join our Discord server