mcpField
L
lambdacad-mcp

lambdacad-mcp

本地服务
github.com媒体与设计311 周前更新

关于 lambdacad-mcp

lambdacad-mcp 是面向支持 AutoLISP 的 CAD 的 MCP 服务,可用于 AI 辅助制图、建模和设计审查。其基于文件的 AutoLISP 桥接支持 Linux 上的 BricsCAD,并提供 2D 绘图、3D 实体、验证和图纸记忆工具。

主要功能

  1. 012D 制图与标注
  2. 023D 实体建模及布尔运算
  3. 03批量绘图并合并为单次撤销
  4. 04几何验证与工程报告
  5. 05图纸日志和实体语义标签
  6. 06导出 DWG、DXF、PDF 和 STL

适用场景

  1. 01在 BricsCAD 中创建带尺寸的 2D 图纸
  2. 02建模 3D 零件并生成 2D 视图
  3. 03检查几何、孔洞和装配接触情况
  4. 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 服务。

许可证:Apache 2.0 平台:Linux Python 3.10+ 工具:128 MCP 注册表 Glama 评分 lambdacad-mcp MCP 服务

“绘制一个 DN80 法兰:正视图、剖面线填充的剖面、标注尺寸——然后将其建模为 3D。”

lambdacad-mcp 演示:AI 在 BricsCAD 中绘制完整法兰,包含 2D + 3D

实时录制,未经剪辑:带螺栓圆的正视图、剖面线填充的剖面、径向/直径尺寸、引线、标题栏——然后用 AI 编写的参数化 AutoLISP 循环和一次布尔减法,将同一法兰建模为 3D 实体。约 20 秒,12 次工具调用。

Claude 绘制的完整 2D 图纸布尔运算生成的 3D 实体适用于 AI 视觉识别的清晰渲染图
2D 法兰3D 实体支架渲染图

为什么要做这个项目

其他面向专业 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 的配置。

然后:

  1. 启动 BricsCAD 并打开一张图形(文档打开时会加载桥接程序)。
  2. 启动新的 AI 会话——bricscad 工具就会出现。
  3. 提示:“绘制一个带门和尺寸标注的 4×3 m 房间平面图。”
配置(环境变量)
变量默认值用途
BRICS_DISPLAY会话 $DISPLAYBricsCAD 运行所在的 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 foundBricsCAD 是否正在 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/ZWCADWindows否
puran-water/autocad-mcpAutoCAD LT(LISP 桥接)Windows否
hvkshetry/autocad-mcpAutoCAD LTWindows否
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 供应商无关联,也未获其认可或赞助。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。