# local_excalidraw **Repository Path**: imysl0/local_excalidraw ## Basic Information - **Project Name**: local_excalidraw - **Description**: 一个完全离线的 Excalidraw 绘图应用,支持 MCP (Model Context Protocol) 接口,可供 AI 工具调用。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-22 - **Last Updated**: 2026-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: excalidraw ## README # Excalidraw 本地版 完全离线的 Excalidraw 绘图应用,支持桌面版和 Web 版,内置 MCP 接口供 AI 工具调用。 ## 特性 - 🎨 **完全离线** - 无需联网,适合内网部署 - 🖥️ **桌面版** - Tauri 2.x 单文件可执行,支持 Windows/Linux - 🌐 **Web 版** - 单 HTML 文件,浏览器直接打开,零部署 - 📁 **文件操作** - 打开/保存 `.excalidraw` 绘图文件(Excalidraw 原生菜单) - 📸 **导出功能** - 导出 PNG、SVG、剪贴板(Excalidraw 原生菜单) - 🇨🇳 **中文界面** - 默认中文语言 - 🤖 **MCP 接口** - AI 工具通过 MCP 协议控制画布(仅桌面版) ## 快速开始 ### Web 版(最简单) ```bash # 构建 npm run build:web # 产物:dist-web/excalidraw.html(约 8MB) # 直接双击用浏览器打开即可 ``` ### 桌面版 ```bash # 开发模式 npm run tauri dev # 构建发布版 npx tauri build ``` ### 从 Releases 下载 从 [Releases](https://gitee.com/imysl0/local_excalidraw/releases) 页面下载: - **Linux**: `local-excalidraw-linux-x86_64` 或 `.AppImage` - **Windows**: `Excalidraw 本地版_x.x.x_x64-setup.exe` - **Web**: `excalidraw.html`(浏览器直接打开) ## 构建 ### 前置条件 - Node.js 18+ - npm 桌面版额外需要: - Rust 1.70+ - Linux: `libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libdbus-1-dev` ### 构建命令 ```bash # 安装依赖 npm ci # Web 版(只需 Node.js) npm run build:web # 产物: dist-web/excalidraw.html # 桌面版 Linux npx tauri build # 产物: src-tauri/target/release/bundle/ # 桌面版 Windows(需在 Windows 上运行) npx tauri build # Docker 构建(无需安装系统依赖) ./docker-build.sh ``` ## MCP 接口(仅桌面版) 桌面版启动后在 `http://127.0.0.1:18080` 启动 MCP 服务器。 ### 配置端口 ```bash MCP_PORT=8080 ./local-excalidraw ``` ### 工具列表 | 工具名 | 描述 | |--------|------| | `get_elements` | 获取画布上的所有绘图元素 | | `add_element` | 添加元素(矩形、椭圆、箭头、线条、文字等) | | `update_element` | 更新指定元素的属性 | | `delete_element` | 删除指定元素 | | `get_scene` | 获取完整画布场景 | | `update_scene` | 更新整个场景 | | `export_image` | 导出为 PNG 或 SVG | | `clear_scene` | 清空画布 | | `get_app_state` | 获取应用状态 | ### 调用示例 ```bash # 获取所有元素 curl -X POST http://127.0.0.1:18080/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"toolName":"get_elements","arguments":{}}}' # 添加矩形 curl -X POST http://127.0.0.1:18080/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"toolName":"add_element","arguments":{"type":"rectangle","x":100,"y":100,"width":200,"height":150}}}' ``` ### AI 客户端配置 ```json { "mcpServers": { "excalidraw": { "url": "http://127.0.0.1:18080/mcp" } } } ``` ## 技术架构 - **绘图引擎**: Excalidraw 0.18.1 - **前端**: React 18 + Vite 6 + TypeScript - **桌面后端**: Tauri 2.x (Rust) - **MCP 服务器**: 内置 HTTP JSON-RPC 2.0(Rust hyper) ## 项目结构 ``` local_excalidraw/ ├── src/ │ ├── main.tsx # 桌面版入口 │ ├── App.tsx # 桌面版组件 │ ├── WebApp.tsx # Web 版组件 │ ├── web-main.tsx # Web 版入口 │ ├── mcp-bridge.ts # MCP 桥接模块 │ └── App.css ├── src-tauri/ │ ├── src/ │ │ ├── main.rs # Rust 入口 │ │ ├── lib.rs # Tauri 命令 │ │ └── mcp.rs # MCP HTTP 服务器 │ ├── Cargo.toml │ └── tauri.conf.json ├── scripts/ │ └── inline-html.mjs # Web 版内联打包脚本 ├── web.html # Web 版 HTML 模板 ├── vite.web.config.ts # Web 版 Vite 配置 ├── build.sh # 构建脚本 ├── docker-build.sh # Docker 构建 ├── Dockerfile.linux ├── Makefile └── .github/workflows/ # CI/CD ``` ## 许可证 MIT License ## 致谢 - [Excalidraw](https://excalidraw.com/) - 绘图引擎 - [Tauri](https://tauri.app/) - 桌面应用框架