GitHub 趋势 · 第 71 期
一个 CAD 软件里最大的源文件,是它的 MCP 接口
#开源CAD#Rust#MCP
一个 2026 年 3 月才建仓的开源 CAD 程序,仓库里最大的单个源文件既不是几何内核,也不是界面,而是它的 MCP 适配器 —— 66,406 字节。它把「给 AI 用」和「给人用」放在同一个位置:桌面端可以直接 --mcp,网页端打开浏览器就能读 DWG。
想把 AI agent 接进桌面设计软件,常见做法是外挂一层脚本或插件,软件本体对 AI 一无所知。结果是 AI 只能操作你「导出来的东西」——导出的 DXF、截下来的图——拿不到当前打开的那张图的活状态,也改不动光标底下那条线。
它是什么
Open CAD Studio 是一个用 Rust 写的跨平台 2D 制图 / 3D 建模程序,同一份源码既编译成桌面应用,也编译成浏览器里跑的 WebAssembly 版本。它原生读写 DWG 与 DXF,不需要架一个转换服务。
仓库由个人开发者 HakanSeven12 维护(GitHub API 的 owner.type 字段是 User),2026 年 3 月 22 日建仓,到 9 月 12 日仍在推代码,star 数 1,692。仓库的 20 个 topic 全部是 DWG / DXF 关键词的变体,从 dwg-parser 到 dxf-writer —— 定位写得很直白。
不过有件事要先说清。README 的 Overview 一节自己写着 The project is under active development. Keep backups of important production drawings —— 项目在活跃开发中,重要生产图纸请自留备份。这不是别人给的评价,是作者写在首屏的话。
核心能力
| 能力 | 说明 |
|---|---|
| 2D 制图 | 直线、多段线、曲线、样条、填充、对象捕捉、追踪、图层、块、外部参照 |
| 3D 建模 | 实体基本体、拉伸、旋转、扫掠、放样、布尔运算、ACIS 实体细分 |
| 渲染 | wgpu 加速的 2D / 3D 视口,正交与透视相机 |
| DWG / DXF | 读写皆原生,保存目标版本从 R14 到 2018 |
| 旧文件 | 可直接打开 BAK 备份与 SV$ 自动保存文件 |
| 交换格式 | 导入 OBJ 网格、LandXML 的 CgPoint 测量点;导出 STL、STEP AP203 |
| 出图 | 桌面端可出 PDF 图纸,可导出 CSV 实体属性 |
| 打印样式 | 加载与编辑 CTB / STB 打印样式表 |
| 自动化 | 一次性转换、常驻无头服务、MCP 端点 |
| 插件 | 原生插件跑在独立进程里,走版本化的插件 API;网页端不加载原生插件 |
| 界面语言 | 21 种,含简体中文与繁体中文 |
上手
桌面包只从 GitHub Release 下载,官方没有给 winget / apt / snap store 的安装命令。releases/latest 返回的 v2026.36(2026 年 9 月 6 日发布)一共 5 个附件:Linux 的 AppImage 与 snap、macOS 的 arm64 dmg、Windows 的安装版 msi 与免安装版 exe。
chmod +x OpenCADStudio-*-linux-x86_64.AppImage ./OpenCADStudio-*-linux-x86_64.AppImage
从源码构建的依赖与命令,以下取自 README 原文:
sudo apt update sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxi-dev \ libxrandr-dev libxkbcommon-dev libwayland-dev libfontconfig1-dev \ libfreetype6-dev git clone https://github.com/HakanSeven12/OpenCADStudio.git cd OpenCADStudio cargo build --release --bin OpenCADStudio
网页版不用装任何东西,README 给的入口是 https://www.opencadstudio.com (Launch the web app)。
自动化能力全部在命令行上,以下四条也是 README 原文:
OpenCADStudio --export input.dwg output.dxf OpenCADStudio --serve OpenCADStudio --serve --port 4242 OpenCADStudio --mcp
最大的那个源文件,是 MCP 接口
我把 src/ 目录逐个量了一遍字节数:mcp.rs 66,406 字节,是整个目录里最大的单个源文件。排在它后面的 i18n.rs 是 21,298 字节,只到它的三分之一;再往后是 sys.rs 的 18,361、patreon.rs 的 11,006、main.rs 的 7,205。
一个 CAD 程序的 MCP 层,比它的本地化层大三倍,比它的捐款模块大六倍。这句话本身就是判断:作者把让 AI agent 直接操作这张图当成产品的主线能力,而不是发布之后再加的外挂。
文件顶部的注释把定位写得很清楚:Client-neutral MCP adapter for the live desktop editor. —— 面向实时桌面编辑器、客户端中立的 MCP 适配器;又补了一句 this module contains no geometry. —— 这个模块自己不含任何几何逻辑,所有绘图动作都转发给已鉴权的 GUI 控制桥。
它只暴露四个工具:
| 工具 | 作用 |
|---|---|
| ocs_sessions | 列出真实的编辑器会话与文档;没有在跑的编辑器就把它启动起来 |
| ocs_read | 从活动会话读取状态、记录、命令清单、实体、属性、内核测量、空间关系、历史、事件(只读) |
| ocs_execute | 执行会改图的语义化操作,要求带一个唯一的 request_id |
| ocs_capture | 把当前绘图视口或窗口截成受限尺寸的 PNG,用于可视化验证 |
最后一个值得单说:它让 agent 能「看一眼自己刚画出来的东西」,而不是只相信命令返回的那句成功。代码里另有两个协议版本常量,PROTOCOL_VERSION 是 2025-11-25,MODERN_PROTOCOL_VERSION 是 2026-07-28。
为了能跑在浏览器里,它换掉了几何内核
网页版不是把桌面版打个包。项目自己维护了一份差异清单(docs/native-vs-web.md,5,755 字节),逐项写明两端有什么不一样。
其中最硬的一条在 3D 实体建模。文档里记着原来的做法:
旧内核是 truck,它的 mesh 与 boolean 两个 crate 会一路走到 vtkio → xz2 → lzma-sys —— 一个 C 库,没法交叉编译到 wasm32。所以网页版当时砍掉了 solid3d 特性,Model 标签页、实体细分、ACIS 导入在浏览器里全是死的。
换成 cadkernel 之后:The kernel is now cadkernel, which is pure Rust and has no C dependency at all, so none of that applies and the feature is gone. —— 内核是纯 Rust 写的、完全没有 C 依赖,前面那些限制不再成立,那个特性也被删掉了。
「能不能跑在浏览器里」这件事,很多时候不是界面决定的,是依赖树里某一个 C 库决定的。这条结论不只对 CAD 成立。
网页端另外四处缺口,官方也逐条列了:
- ▪填充不渲染 —— 批处理的填充管线要在顶点阶段绑一个只读存储缓冲,而 WebGL2 没有 VERTEX_STORAGE,所以整条管线在 wasm 上被跳过
- ▪字体只剩内置的笔画字体 —— 浏览器里没有系统字体,字形塑形与字体回退都被关掉(空字体集上会直接 panic),缺字形就跳过
- ▪不加载原生插件 —— 插件的 .dll / .so / .dylib 浏览器加载不了,也起不了插件子进程
- ▪单线程 —— wasm32 没有 SharedArrayBuffer 就没有线程,而它需要 COOP / COEP 响应头,GitHub Pages 设不了;Large drawings are slower on the web.
顺带一个反方向的改动:桌面端原本每个管理器、每个样式对话框都开一个独立系统窗口,现在改成都渲染成画布内的模态层,等于桌面端也变成了单窗口。为了少维护一套界面,它把桌面端的一处老体验让了出去。
一次发布,四个版本号
仓库的 docs/releases.md(1,898 字节)把发版流程写得很细,几处细节值得单独看。
版本号的构成是 UTC 的 ISO 周年 + 周。发版工作流每周日 12:00 UTC 跑一次,没有新提交的那一周直接跳过。它自己改 Cargo.toml 与 Cargo.lock、提交一个 Release v2026.35、然后把 commit 和 tag 原子推上去 —— 发布机器人替人改版本文件。
于是同一份产物在不同通道里有四个版本字符串:
The app shows 2026.35, Cargo and macOS use 2026.35.0, and MSI uses 26.35.0. —— 应用里显示 2026.35,Cargo 与 macOS 用 2026.35.0,MSI 用 26.35.0。窗口标题写的又是 Open CAD Studio 2026.35 - Drawing.dwg。
不是从干净 tag 构建出来的版本会带上元数据:2026.35+194.gef189d77 表示距离 v2026.35 有 194 个第一父提交,commit 是 ef189d77;工作区有未提交改动就再追加 .dirty。浅克隆或从源码 tarball 构建时没有 tag 可数,就只剩一个 hash。
这套机制的实际后果:你在窗口标题里看到的 2026.35 只代表「第 36 个 ISO 周发出来的」,不代表第 36 次修补。相对地,安装包里的 2026.35.0 与 26.35.0 是给机器读的,跟人读的那个不是同一个字符串。
另有一条量化反差:这一版 5 个附件合起来约 189 MB,而仓库本体按 API 的 size 字段只有 55,295 KB(约 54 MB)。一次发布的可下载产物,比放它的仓库大 3.5 倍。
适合谁、不适合谁、坑在哪
适合谁
要在本地打开、改、保存 DWG 或 DXF,又不想为一件事装一整套商业 CAD 的人。想让 AI agent 直接操作一张已经打开的图纸的人 —— 四个工具,其中 ocs_capture 能让 agent 看见自己的结果。还有做 Rust / wgpu 桌面应用的人:它为了一个目标平台换掉内核,是一条能直接复用的工程结论。
不适合谁
Intel Mac 用户 —— 发布包里只有 macos-arm64 一个 macOS 资产,没有 Intel 版。需要闭源集成或商用再分发的团队 —— 许可是 GPL-3.0。主要靠插件工作的用户想用网页版 —— 网页端不加载原生插件。要把生产图纸的关键流程压上去的人 —— README 自己说在活跃开发中,请先备份。
- ▪网页端四处功能缺口(上面列过),最容易被忽略的是填充不渲染 —— 同一张图在浏览器里可能少一层
- ▪macOS 包是 ad-hoc 签名、未公证:The application is ad-hoc signed but is not currently notarized by Apple. —— 首次启动会被 Gatekeeper 拦下,需要去「系统设置 → 隐私与安全性」手动放行
- ▪仓库里其实躺着一份 Homebrew cask(packaging/homebrew/open-cad-studio.rb,1,164 字节),但 README 的安装段一个字都没提它;而且 cask 的说明文档写明要加 --no-quarantine,理由是 notarisation needs a paid Apple Developer ID(公证需要付费的苹果开发者账号),不加就还是会被拦
- ▪那条 cask 目前也没有发布成 tap:文档里的写法是先 brew install --cask 一个 raw 文件地址,文档里讲怎么发布成正经 tap 的那一段,是写给未来的操作指引,不是现成的命令
- ▪插件市场官方自己声明不审查:Listing is curation, not endorsement or a security review. Installing a plugin runs its native code; users install at their own risk. —— 上架只是收录,不是背书,也不是安全审查;装插件就是运行原生代码,风险自负。而插件清单 registry.json 是运行时从 main 分支抓的,加一条就等于对所有用户立刻可见,不需要发版
- ▪安全文档把「打开一个别人给的文件」当主要威胁面:in-scope 的第一条就是 Arbitrary code execution caused by opening a crafted file,还有 Infinite loops triggered by small malicious files。顺带一个比例:SECURITY.md 有 10,220 字节,README 是 10,321 字节 —— 安全政策写到了和功能说明同样的体量
一条但书
上面那条 cask 的结论,我只核实到它的说明文档(packaging/homebrew/README.md)。cask 正文本轮抓取返回 503,未纳入核实范围,所以关于它里面的版本号与下载地址,本文一个字都没有写。
数据来源:GitHub Trending 官方页面 + GitHub REST API + 仓库内文档原文,抓取时间 2026-09-13。
地址:https://github.com/HakanSeven12/OpenCADStudio
Star:1,692(GitHub REST API 实测)/1,687(Trending 日榜同期快照,今日 +105)。两个口径会不一致,这里都写出来。
Fork 164 · 未关 issue 148 · watcher 23 · 仓库体积 55,295 KB · 默认分支 main · 未归档。
许可:GPL-3.0(仓库根 LICENSE 为 35,149 字节标准全文,API 的 license 字段一致,无附加条款)。
语言 Rust · 创建于 2026-03-22 · 最后推送 2026-09-12。
最新发布 v2026.36(发布于 2026-09-06),5 个附件合计约 189 MB;tag 列表首页 30 条,最新一条的 commit sha 为 ddbbdd27ba51b79a93e9087c68d7387cd826432b。
文中 src/ 下各文件字节数、mcp.rs 的工具清单与顶部注释,均取自 raw 源码原文。
如果你手上正好有一批 DWG 想批量转成 DXF 或 CSV,它的 --export 与 --serve 是不用开界面的;如果你试过 --mcp,评论区说说 agent 拿到视口截图之后,到底能不能自己发现自己画歪了。
下期预告:分语言日榜上如果出现动量更高的干净新面孔,继续做单项目精读;如果继续零新面孔,就兑现欠了几期的「把模型塞进小设备与边缘」主题族横向合集 —— 这一族今天榜上能凑出的未写成员只有三个(jundot/omlx、youssofal/MTPLX、NVlabs/cuda-oxide),撑不起一篇合集,所以本期先写了榜首那个干净候选。
#开源CAD#Rust#MCP