cee3b775bf9d0a87e87e791ce5486cd903056ebf
- Revise README.md to reflect the new project name and features, emphasizing real-time diagramming and AI integration. - Remove outdated public HTML files and CLI script as they are no longer needed. - Streamline installation and setup instructions for better clarity. - Enhance architecture overview and key features sections to provide a comprehensive understanding of the system.
Excalidraw MCP Canvas: Live Visual Diagramming with AI Integration
A comprehensive 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.
🚀 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
🏛️ Architecture Overview
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ AI Agent │───▶│ MCP Server │───▶│ Canvas Server │
│ (Claude) │ │ (src/index.js) │ │ (src/server.js) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ Frontend │
│ (React + WS) │
└─────────────────┘
🌟 Key Features
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
- Express.js backend with REST API + WebSocket
- React frontend with official Excalidraw package
- Dual-path element loading for reliability
- Auto-reconnection and error handling
📦 Installation & Setup
Prerequisites
- Node.js 16+
- npm or yarn
1. Clone and Install
git clone <repository-url>
cd mcp_excalidraw
npm install
2. Build the Frontend
npm run build
3. Start the System
Option A: Production Mode
# 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
🔧 Available Scripts
| Script | Description |
|---|---|
npm start |
Start MCP server (src/index.js) |
npm run canvas |
Start canvas server (src/server.js) |
npm run build |
Build frontend for production |
npm run dev |
Start canvas + Vite dev server |
npm run production |
Build + start in production mode |
🎯 Usage Guide
For End Users
- Open the canvas at
http://localhost:3000 - Check connection status (should show "Connected")
- AI agents can now create diagrams that appear in real-time
- 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
Add this configuration to your claude_desktop_config.json:
{
"mcpServers": {
"excalidraw_canvas": {
"command": "node",
"args": ["/path/to/mcp_excalidraw/src/index.js"],
}
}
}
Integration with Cursor
Add this configuration to your claude_desktop_config.json:
{
"mcpServers": {
"mcp_excalidraw": {
"command": "node",
"args": ["/path/to/mcp_excalidraw/src/index.js"]
}
}
}
Important: Replace /path/to/mcp_excalidraw with the actual absolute path to your installation.
🛠️ Environment Variables
| Variable | Default | Description |
|---|---|---|
EXPRESS_SERVER_URL |
http://localhost:3000 |
Canvas server URL for MCP sync |
ENABLE_CANVAS_SYNC |
true |
Enable/disable canvas synchronization |
DEBUG |
false |
Enable debug logging |
PORT |
3000 |
Canvas server port |
HOST |
localhost |
Canvas server host |
📊 API Endpoints
The canvas server provides these REST endpoints:
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/elements |
Get all elements |
POST |
/api/elements |
Create new element |
PUT |
/api/elements/:id |
Update element |
DELETE |
/api/elements/:id |
Delete element |
POST |
/api/elements/batch |
Create multiple elements |
GET |
/health |
Server health check |
🎨 MCP Tools Available
Element Management
create_element- Create any type of Excalidraw elementupdate_element- Modify existing elementsdelete_element- Remove elementsquery_elements- Search elements with filters
Batch Operations
batch_create_elements- Create complex diagrams in one call
Element Organization
group_elements- Group multiple elementsungroup_elements- Ungroup element groupsalign_elements- Align elements (left, center, right, top, middle, bottom)distribute_elements- Distribute elements evenlylock_elements/unlock_elements- Lock/unlock elements
Resource Access
get_resource- Access scene, library, theme, or elements data
🏗️ Development Architecture
Frontend (frontend/src/)
- React + Vite: Modern build system
- Official Excalidraw:
@excalidraw/excalidrawpackage - WebSocket Client: Real-time element sync
- Clean UI: Production-ready interface
Canvas Server (src/server.js)
- Express.js: REST API + static file serving
- WebSocket: Real-time client communication
- Element Storage: In-memory with persistence options
- CORS: Cross-origin support
MCP Server (src/index.js)
- MCP Protocol: Standard Model Context Protocol
- Canvas Sync: HTTP requests to canvas server
- Element Management: Full CRUD operations
- Batch Support: Complex diagram creation
🐛 Troubleshooting
Canvas Not Loading
- Ensure
npm run buildcompleted successfully - Check that
dist/index.htmlexists - Verify canvas server is running on port 3000
Elements Not Syncing
- Confirm MCP server is running (
npm start) - Check
ENABLE_CANVAS_SYNC=truein 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_modulesand runnpm install - Check Node.js version (requires 16+)
- Ensure all dependencies are installed
📋 Project Structure
mcp_excalidraw/
├── frontend/
│ ├── src/
│ │ ├── App.jsx # Main React component
│ │ └── main.jsx # React entry point
│ └── index.html # HTML template
├── src/
│ ├── index.js # MCP server
│ ├── server.js # Canvas server (Express + WebSocket)
│ ├── types.js # Shared types and utilities
│ └── utils/
│ └── logger.js # Logging utility
├── dist/ # Built frontend (generated)
├── vite.config.js # Vite build configuration
├── package.json # Dependencies and scripts
└── README.md # This file
🤝 Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - 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
Description
Excalidraw MCP server with multi-tenant workspace isolation, SQLite persistence, auto-save, 32 tools, element versioning, full-text search, project management, and embedded canvas lifecycle. Fork of yctimlin/mcp_excalidraw with production-grade enhancements for multi-workspace Cursor/Claude setups.
4.3 MiB
Languages
TypeScript
75%
JavaScript
22.1%
HTML
2.7%
Dockerfile
0.2%