Files
excalidraw-mcp-sentinel/docker-compose.yml
T
7143b5e41e feat: add SQLite persistence, multi-tenancy, auto-sync, and CI/Docker improvements (#1)
Replace in-memory storage with SQLite (WAL mode), add workspace-based
multi-tenancy with auto-detection via server.listRoots(), and embed the
canvas server into the MCP process for single-process operation.

🔧 Core enhancements:
- SQLite persistence with versioning, element history, and search
- Multi-tenancy: isolated canvases per workspace (SHA-256 tenant IDs)
- Embedded canvas lifecycle (single node process starts MCP + canvas)
- Auto-sync with 3s debounce and manual override toggle
- Configurable canvas port via CANVAS_PORT env var
- 6 new MCP tools (search, history, tenants, projects)
- Workspace switcher UI with dropdown search
- Sync normalization to prevent bound-text breakage on reload

🐳 Docker & CI improvements:
- BuildKit cache mounts for faster npm installs across builds
- Skip native compilation in frontend-builder stage (--ignore-scripts)
- Build only linux/amd64 on PRs, multi-arch on push to main
- Docker Hub registry with proper build tools for better-sqlite3
- CI and Docker status check gates (github/ci-status-check, github/docker-build-check)

📦 Package & publishing:
- Renamed to @sanjibdevnath/mcp-excalidraw-local (v3.0.0)
- Updated npm-publish workflow for scoped package
- Updated bin entry, keywords, and files list

📝 Documentation:
- README with UI screenshots, architecture diagram, and full feature docs
- Updated agent skill with 32-tool cheatsheet and workflow playbooks
- Fork attribution and upstream comparison table

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-19 10:17:29 +05:30

63 lines
1.6 KiB
YAML

version: '3.8'
# Docker Compose for MCP Excalidraw
#
# Usage scenarios:
# 1. Canvas only: docker-compose up canvas
# 2. MCP only: docker-compose up mcp (requires canvas running elsewhere)
# 3. Both: docker-compose --profile full up
#
# Most common: Run canvas locally, MCP via Claude Desktop config
services:
# Canvas server (optional) - Visual UI and REST API
canvas:
build:
context: .
dockerfile: Dockerfile.canvas
image: sanjibdevnath/mcp-excalidraw-local-canvas:latest
container_name: mcp-excalidraw-canvas
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- PORT=3000
- HOST=0.0.0.0
- DEBUG=false
restart: unless-stopped
healthcheck:
test: ["CMD", "node", "-e", "require('http').get('http://localhost:3000/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- mcp-network
# MCP server - Core product (typically run via Claude Desktop, not docker-compose)
# This is here for testing or special deployment scenarios
mcp:
build:
context: .
dockerfile: Dockerfile
image: sanjibdevnath/mcp-excalidraw-local:latest
container_name: mcp-excalidraw-mcp
stdin_open: true
tty: true
environment:
- NODE_ENV=production
- EXPRESS_SERVER_URL=http://canvas:3000
- ENABLE_CANVAS_SYNC=true
- DEBUG=false
depends_on:
canvas:
condition: service_healthy
networks:
- mcp-network
profiles:
- full
networks:
mcp-network:
driver: bridge