关于 lambdacad-mcp
lambdacad-mcp 是面向支持 AutoLISP 的 CAD 的 MCP 服务,可用于 AI 辅助制图、建模和设计审查。其基于文件的 AutoLISP 桥接支持 Linux 上的 BricsCAD,并提供 2D 绘图、3D 实体、验证和图纸记忆工具。
主要功能
- 012D 制图与标注
- 023D 实体建模及布尔运算
- 03批量绘图并合并为单次撤销
- 04几何验证与工程报告
- 05图纸日志和实体语义标签
- 06导出 DWG、DXF、PDF 和 STL
适用场景
- 01在 BricsCAD 中创建带尺寸的 2D 图纸
- 02建模 3D 零件并生成 2D 视图
- 03检查几何、孔洞和装配接触情况
- 04借助图纸历史和实体标签继续工作
MCP 相关
它将 CAD 操作作为 MCP 工具提供,并附带 traps 资源和协议说明。MCP 客户端连接该服务,服务通过文件桥接与 BricsCAD 交换 AutoLISP 表达式。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
λ lambdacad-mcp
让 AI 在你的 CAD 中绘图。 适用于任何支持 AutoLISP 的 CAD 的 MCP 服务——无需 COM、SDK 或插件。纯 AutoLISP。 参考适配器驱动 Linux 上的 BricsCAD:首个面向 Linux 专业 DWG CAD 的 MCP 服务。
“绘制一个 DN80 法兰:正视图、剖面线填充的剖面、标注尺寸——然后将其建模为 3D。”

实时录制,未经剪辑:带螺栓圆的正视图、剖面线填充的剖面、径向/直径尺寸、引线、标题栏——然后用 AI 编写的参数化 AutoLISP 循环和一次布尔减法,将同一法兰建模为 3D 实体。约 20 秒,12 次工具调用。
| Claude 绘制的完整 2D 图纸 | 布尔运算生成的 3D 实体 | 适用于 AI 视觉识别的清晰渲染图 |
|---|---|---|
![]() | ![]() | ![]() |
为什么要做这个项目
其他面向专业 DWG CAD 的 MCP 服务(multiCAD-mcp、autocad-mcp、CAD-MCP 等)都通过 Windows COM 与 CAD 通信——它们都无法在 Linux 上运行,也都无法进行真正的 3D 建模。
BricsCAD 是一款可在 Linux 上原生运行的专业 DWG CAD。本服务通过一种完全无需 API 的机制驱动它:AutoLISP 文件桥接。MCP 服务将 LISP 表达式写入文件,在 CAD 内触发一个简易的 MCP 命令,然后读取结果。这就是全部诀窍——它解锁了 CAD 的所有功能,包括 3D 实体建模。
由于桥接完全基于 AutoLISP、标准 DXF entmake 和兼容 AutoCAD 的命令,因此它天生具备可移植性:AutoCAD、ARES Commander(同样原生支持 Linux!)、ZWCAD、GstarCAD 和 IntelliCAD 系列都使用相同的语言。移植时只需替换自动加载文件名和按键触发方式——欢迎开发适配器。
MCP client (Claude, Cursor, ...) BricsCAD (Linux)
│ │
▼ ▼
server.py (FastMCP, 128 tools) c:MCP AutoLISP command
│ writes LISP ──► /tmp/mcp_bricscad.in
│ triggers via xdotool ──► reads, evals line by line
│ reads result ◄── /tmp/mcp_bricscad.out
功能
- 完整的 2D 制图 — 直线/圆弧/多段线/样条曲线、按图层设置线宽(墙体 0.50/边线 0.35/尺寸线 0.18——以打印页面上的实际效果为准,而不只是设置数值)、真正的填充图案 HATCH(含岛屿)、尺寸标注(包括半径/直径/角度)、引线、线型(点划线/隐藏线)、文字样式、修剪/延伸/圆角/倒角/偏移/镜像/阵列、块
- 语义图形 —
slot、bolt_circle、rounded_rect、polygon、center_mark:一次调用,服务端负责计算 - 3D 实体建模 — 长方体/圆柱体/球体/圆锥体/楔体/圆环、拉伸/旋转/扫掠、并集/差集/交集、切片、对实体边进行圆角/倒角、绕任意轴进行 3D 移动/旋转——以及
flatshot_view:从 3D 模型自动生成正确的 2D 工程图视图 - 批量且原子化 —
draw_batch在一次往返中执行 N 个操作,并将其封装在一个撤销组中(一次批处理 = 一次 Ctrl+Z) - 了解用户选中的内容 —
get_selection读取 GUI 的预选集;select_by/select_window会在执行操作前高亮 AI 找到的内容;修改工具接受"selection" - 无需截图即可验证 — 边界框、关键点、精确长度/面积、相交检查(碰撞检测)、实体体积/质心
- 设计审查——回答工程问题的工具,而不只是执行命令(1.2 新增)—
boolean_verified执行切割,并测量结果是否符合预期体积(切割不足会显示 SHORT,而非成功);overhang_report读取 STL 网格,判断零件是否无需支撑即可打印,并对全部六种朝向进行评分;contact_report针对装配体(assembly_place/assembly_list/assembly_clear)报告零件之间的接触和干涉情况,以及哪些零件是孤件——即不与任何零件接触的零件,因为它的作用已被取代,却没人发现;hole_report对每个孔进行实际探测,并报告哪些孔确实贯通(图纸不会如实反映孔的情况,除非有人进行检查);graph_build/graph_trace将 2D 几何读取为连通图——识别独立网络、精确路径长度,以及哪些开放端是真正的断点、哪些是 T 形交点;连接容差从图纸本身推导得出,而非硬编码 - 图纸会记住内容(1.3 新增,测试版)—
memory_enable会在 .dwg 文件旁创建日志,由 CAD 自行写入,捕获工具未运行时用户在 GUI 中所做的编辑;tag_entity为实体添加语义角色(如“muro-nord”“asta-principale”),并以句柄为键,保存并重新打开文件后仍然有效;world_report回答这里有什么、我给它起了什么名字、自上次查看后发生了什么变化*——而且会在回答前根据实时图纸重新验证每项信息(如果某个实体在 AI 不知情的情况下被删除,就会显示DEAD (erased since tagging),并报告出来,绝不隐瞒)。下一条提示词——或下一次会话——将直接了解图纸内容,无需重新勘查 - 协议中的说明(1.2 新增)— 服务会提供那些无法通过尝试学会的规则(OK 不等于证据;信任之前先校准;布尔运算会保留第一个句柄;一条直线是一条完整表达式;先查看图纸的记忆),以及一个读取前不产生任何开销的
lambdacad://traps资源 - 需要时查看图像 —
render_view:BricsCAD 的内部 PNG 渲染(画面干净、无 UI、约 30 KB),适用于视觉模型 - 按实际比例绘制图纸 —
create_sheet(A4…A0,将边距设为零,使纸张毫米数 = 图纸毫米数)、add_viewport(指定 1:50,结果就是 1:50——通过实体反向测量验证,并放置在非打印图层上)、fit_viewport(测量绘制内容,并选取能容纳它的最大标准比例——1:37 不是标准比例)、title_block(边框 + ISO 7200 标题栏,根据图纸尺寸调整)、export_sheet_pdf,会通过测量刚生成的 PDF 页面来检查自身结果 - 交付成果 — 保存 DWG、导出 DXF、PDF 和 STL(
export_stl:直接将 3D 实体导出到切片软件,并放置在原点) - 同时打开多张图纸 —
list_documents显示工具当前指向的图纸(以及未保存的更改和只读状态),use_document可切换到另一张图纸;每条回复都会注明是哪张图纸提供了结果,并在图纸悄然变化时发出警告 - 备用方案 —
run_lisp可执行任意 AutoLISP(多行、多表达式):能力强的模型可以编写参数化代码,而且会很喜欢这样做 完整参考:docs/TOOLS.md · 工作原理:docs/ARCHITECTURE.md
实测数据,而非承诺
| 指标 | 结果 |
|---|---|
| 完成一个带尺寸标注的法兰所需的工具调用次数 | 200 → 22(相比每次调用一个基本操作,往返次数减少 9 倍) |
| 触发延迟 | 每次调用 0.25 s |
| 错误报告 | 逐行 LISP 错误(msg=L2: ...)→ 模型可自行纠正,无需截图 |
| 精确性 | 半径为 20 的圆上的 entity_length:125.664 / 1256.637(2πr、πr²,精确值) |
详细信息和模型行为说明(Sonnet 编写参数化 LISP,Haiku 使用类型化工具):docs/BENCHMARKS.md
测试
BRICS_DISPLAY=:0 python tests/test_tools.py # ~135 checks incl. review + memory groups, ~2-4 min
python tests/test_tools.py 3d edges export # or just some groups
python tests/test_tools.py --list
这是一个集成测试套件:它会驱动当前已运行的 CAD,然后测量生成的结果——闭式体积、边界框、尺寸标注中存储的值,以及从 STL 中读取的三角形数量。绝不会只说“没有错误”。
这一区别正是重点所在。桥接程序会在 CAD 接受命令时返回 OK,但这并不代表 CAD 已按要求完成操作。迄今发现的每个 bug 都属于这种情况:经典的 CHAMFER 静默切换为所有边;布局旋转 90° 后输出,导致 A3 横向图纸变成纵向,图形超出纸张,而导出结果则是一张完全空白但格式完全有效的页面;还有一个已进入正式版本的问题——运行对象捕捉会把程序坐标拖到附近几何图形上,导致一排放置的五个块都落在前一个块上。体积、边界框、实测尺寸以及 PDF 页面都是精确的指标:这些问题都表现为计算结果不符。
测试套件会在临时区域(x ≥ 50000)中绘图,之后擦除内容;如果实体数量没有恢复到初始值,就会判定失败。测试仍会在当前图形中运行,因此请使用临时图形。
使用遥测(仅限本地)
提供 128 个工具时,值得关注的问题是哪些工具有用,哪些工具的失败频率足以说明文档字符串或设计存在问题。服务会将每次调用记录为一行 JSON,追加到 ~/.lambdacad/usage.jsonl:
{"t": 1786526823.4, "tool": "draw_batch", "ms": 198, "err": 0}
工具名称、耗时、错误标记。绝不记录参数——不记录坐标、路径或图形数据——任何信息都不会离开你的计算机。使用 LAMBDACAD_TELEMETRY=0 可禁用遥测。
python scripts/usage_report.py # per-tool calls, error rate, p50
python scripts/usage_report.py --core 95 # smallest set covering 95% of calls
python scripts/usage_report.py --reset # archive the current log
--core 输出是一个由数据驱动的候选列表,可用于设置 CORE_TOOLS(紧凑模式):经过几周的实际使用后,对于哪些工具值得加入 schema 受限客户端的选择便不再是猜测。集成测试套件本身已显示出早期趋势:run_lisp 单独就占了约一半的调用次数——对于按需加载 schema 的客户端(如 Claude Code 的工具搜索),类型化工具中的长尾工具在使用前不会产生任何开销,因此可以保留丰富的文档字符串。
快速开始
**要求:**Linux、BricsCAD(任何较新的版本——已在 V26 上测试)、Python 3.10+、xdotool。
git clone https://github.com/Psalmustrack/lambdacad-mcp
cd lambdacad-mcp
./install.sh
安装程序会创建虚拟环境,将 AutoLISP 桥接程序安装到 BricsCAD 的 Support/on_doc_load.lsp 中(幂等,标记分隔),并打印可直接粘贴到 Claude Code / Claude Desktop 的配置。
然后:
- 启动 BricsCAD 并打开一张图形(文档打开时会加载桥接程序)。
- 启动新的 AI 会话——
bricscad工具就会出现。 - 提示:“绘制一个带门和尺寸标注的 4×3 m 房间平面图。”
配置(环境变量)
| 变量 | 默认值 | 用途 |
|---|---|---|
BRICS_DISPLAY | 会话 $DISPLAY | BricsCAD 运行所在的 X 显示器(例如嵌套 Xephyr 使用的 :77) |
BRICS_COMPACT | 关闭 | 1 = 仅公开 14 个核心工具(约 1k 个 schema 词元,而非约 7k 个),适用于会注入所有 schema 的客户端 |
BRICS_MCP_IN / BRICS_MCP_OUT | /tmp/mcp_bricscad.{in,out} | 桥接文件路径 |
安全说明
run_lisp 和 run_command 会在 BricsCAD 中执行任意代码,这是有意为之——正因如此,该服务才具有完全通用性。只连接你信任的 MCP 客户端,并将桥接文件视为可信输入。桥接本身不会 load 外部文件(只读入并求值),并遵守 BricsCAD 的 SECURELOAD。
故障排除
| 现象 | 解决方法 |
|---|---|
ERR: BricsCAD window not found | BricsCAD 是否正在 BRICS_DISPLAY 上运行? |
ERR: no response from BricsCAD | 是否打开了图形文件(而不是“开始”页面)?桥接会在打开文档时加载。 |
| 命令被作为文本输入到图形中 | 在图形区域内单击一次,让命令行获得焦点,然后重试。 |
| 更新了桥接,但没有变化 | on_doc_load.lsp 会针对每个文档运行,每个已打开的图形文件都会保留各自的定义副本。已打开的图形文件仍使用旧版桥接:关闭并重新打开它们,或在每个文件中执行 (load "…/Support/on_doc_load.lsp")。 |
| 工具在错误的文件中绘图 | list_documents 会显示它们指向的图形文件;use_document 可以切换目标。回复中会带有 dwg=<name>,并在目标自行改变时发出警告。 |
| Wayland | 可通过 XWayland 运行;如果合成器难以处理繁重的 CAD 重绘,请在嵌套 X 服务器(Xephyr)下运行 BricsCAD,并设置 BRICS_DISPLAY。 |
相关项目
| 项目 | CAD | 平台 | 3D |
|---|---|---|---|
| λ lambdacad-mcp(本项目) | 任意 AutoLISP CAD — BricsCAD 参考实现 | Linux | 是 |
| multiCAD-mcp | 通过 COM 支持 AutoCAD/BricsCAD/ZWCAD | Windows | 否 |
| puran-water/autocad-mcp | AutoCAD LT(LISP 桥接) | Windows | 否 |
| hvkshetry/autocad-mcp | AutoCAD LT | Windows | 否 |
| freecad-mcp(多个项目) | FreeCAD | 跨平台 | 是(FreeCAD) |
致谢:multiCAD-mcp 为本项目提供了灵感;puran-water/autocad-mcp 在 Windows 上独立验证了 LISP 桥接方案。
路线图
- 无需焦点的调度(定向 X 合成事件——无需激活窗口)
- 进程内套接字桥接(无需按键触发,延迟约为 0)
- VIEWBASE 图纸空间视图;钣金(
SMUNFOLD)和 BIM 命令 - 精简模式行为基准测试
许可证
Apache 2.0 — 明确授予专利许可,并保护 lambdacad-mcp 名称的商标权。
商标
AutoCAD® 和 AutoLISP® 是 Autodesk, Inc. 的注册商标。BricsCAD® 是 Bricsys NV(Hexagon)的注册商标。ARES Commander®、ZWCAD® 以及本文提及的所有其他 CAD 产品名称均为各自所有者的商标,在此仅用于标识兼容性。本项目是独立的开源软件:与 Autodesk、Bricsys 或任何 CAD 供应商无关联,也未获其认可或赞助。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。


