Files
excalidraw-mcp-sentinel/package.json
T
63209f9d5a feat: add test suite, CI/CD pipeline, setup wizard, and upstream feature ports (#6)
Establish comprehensive quality infrastructure for a project that previously
had zero tests, enabling confident refactoring and community contributions
with automated guardrails. Port upstream enhancements for font normalization,
image element support, and arrow binding preservation.

🏗️ Testing infrastructure:
- Unit tests for SQLite persistence layer and element validation helpers
- Integration tests for REST API, WebSocket broadcast, and arrow binding
- E2E tests with Playwright for canvas rendering and real-time sync
- Vitest + Playwright configuration with proper isolation

👷 CI/CD pipeline:
- Auto-versioning from conventional commits on push to main
- Auto-publish to NPM and Docker Hub on GitHub release
- Matrix testing across Node 18/20/22 with pinned dependencies
- Docker health check with diagnostic logging on failure
- Preserve rollup status checks for branch protection gates

📦 Developer experience:
- Interactive setup wizard for first-time configuration
- Canvas clear confirmation and scene description tools
- Frontend helpers extracted for testability

🔧 Upstream feature ports:
- Font family normalization (string names to numeric IDs)
- Image element support with file management API
- Arrow binding preservation through server round-trips
- Vite config fix for font subsetting worker chunk names
- Idempotent database initialization for standalone Docker mode

🐛 Docker fixes:
- Set EXCALIDRAW_DB_PATH in both Dockerfiles to writable /app/data/
- Make initDb() idempotent and closeDb() reset-safe for test isolation

🎯 Provides the safety net needed for rapid iteration — every PR is
validated across 120 test cases before merge, and releases are fully
automated from commit to published package.

Co-authored-by: sanjibdevnathlabs <devnath.sanjib@gmail.com>
2026-03-13 12:08:07 +05:30

123 lines
3.4 KiB
JSON

{
"name": "@sanjibdevnath/mcp-excalidraw-local",
"version": "1.0.0",
"description": "Fully local MCP server for Excalidraw with SQLite persistence, multi-tenancy, auto-sync, real-time canvas, and 32 tools",
"main": "dist/index.js",
"type": "module",
"bin": {
"mcp-excalidraw-local": "dist/index.js"
},
"scripts": {
"start": "npm run build:server && node dist/index.js",
"canvas": "npm run build:server && node dist/server.js",
"build": "npm run build:frontend && npm run build:server",
"build:frontend": "vite build",
"build:server": "npx tsc",
"build:types": "npx tsc --emitDeclarationOnly",
"dev": "concurrently \"npm run dev:server\" \"vite\"",
"dev:server": "npx tsc --watch",
"production": "npm run build && npm run canvas",
"prepublishOnly": "npm run build",
"postinstall": "prebuild-install --runtime napi || node-gyp rebuild --directory node_modules/better-sqlite3 2>/dev/null || true",
"setup": "node dist/index.js setup",
"type-check": "npx tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest",
"test:unit": "vitest run tests/backend/db.test.ts tests/frontend/helpers.test.ts",
"test:api": "vitest run tests/backend/api.test.ts",
"test:ws": "vitest run tests/backend/ws.test.ts",
"test:e2e": "npx playwright test",
"test:coverage": "vitest run --coverage"
},
"dependencies": {
"@excalidraw/excalidraw": "^0.18.0",
"@excalidraw/mermaid-to-excalidraw": "^1.1.3",
"@modelcontextprotocol/sdk": "^1.26.0",
"better-sqlite3": "^12.6.2",
"cors": "^2.8.5",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"mermaid": "^11.12.1",
"node-fetch": "^3.3.2",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"winston": "^3.11.0",
"ws": "^8.14.2",
"zod": "^3.22.4",
"zod-to-json-schema": "^3.22.3"
},
"devDependencies": {
"@playwright/test": "^1.58.2",
"@types/better-sqlite3": "^7.6.13",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/node": "^20.19.7",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@types/supertest": "^7.2.0",
"@types/ws": "^8.5.10",
"@vitejs/plugin-react": "^4.6.0",
"@vitest/coverage-v8": "^4.1.0",
"concurrently": "^9.2.0",
"supertest": "^7.2.2",
"typescript": "^5.8.3",
"vite": "^6.3.5",
"vitest": "^4.1.0"
},
"keywords": [
"mcp",
"mcp-server",
"excalidraw",
"model-context-protocol",
"ai",
"drawing",
"diagrams",
"canvas",
"real-time",
"websocket",
"visualization",
"sqlite",
"multi-tenancy",
"self-hosted",
"local"
],
"author": {
"name": "sanjibdevnathlabs"
},
"contributors": [
{
"name": "yctimlin",
"email": "c22647809@gmail.com",
"url": "https://github.com/yctimlin"
}
],
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/sanjibdevnathlabs/mcp-excalidraw-local.git"
},
"homepage": "https://github.com/sanjibdevnathlabs/mcp-excalidraw-local#readme",
"bugs": {
"url": "https://github.com/sanjibdevnathlabs/mcp-excalidraw-local/issues"
},
"pnpm": {
"onlyBuiltDependencies": [
"better-sqlite3",
"esbuild"
]
},
"engines": {
"node": ">=18.0.0"
},
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"files": [
"dist/**/*",
"skills/**/*",
"README.md",
"LICENSE"
]
}