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-parserdxf-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_VERSION2025-11-25MODERN_PROTOCOL_VERSION2026-07-28

为了能跑在浏览器里,它换掉了几何内核

网页版不是把桌面版打个包。项目自己维护了一份差异清单(docs/native-vs-web.md,5,755 字节),逐项写明两端有什么不一样。

其中最硬的一条在 3D 实体建模。文档里记着原来的做法:

旧内核是 truck,它的 mesh 与 boolean 两个 crate 会一路走到 vtkioxz2lzma-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 成立。

网页端另外四处缺口,官方也逐条列了:

顺带一个反方向的改动:桌面端原本每个管理器、每个样式对话框都开一个独立系统窗口,现在改成都渲染成画布内的模态层,等于桌面端也变成了单窗口。为了少维护一套界面,它把桌面端的一处老体验让了出去。

一次发布,四个版本号

仓库的 docs/releases.md(1,898 字节)把发版流程写得很细,几处细节值得单独看。

版本号的构成是 UTC 的 ISO 周年 + 周。发版工作流每周日 12:00 UTC 跑一次,没有新提交的那一周直接跳过。它自己改 Cargo.tomlCargo.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.026.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 自己说在活跃开发中,请先备份。

一条但书

上面那条 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/omlxyoussofal/MTPLXNVlabs/cuda-oxide),撑不起一篇合集,所以本期先写了榜首那个干净候选。

#开源CAD#Rust#MCP