关于 autocad-drafting
autocad-drafting 是指导通过 autocad-mcp 执行 CAD 制图任务的 Agent 技能,提供分阶段流程、工具选择建议,以及 IPC 调用和 AutoLISP 批处理的安全规范。
主要功能
- 01按阶段执行制图流程
- 02根据制图任务选择工具
- 03用 execute_lisp 批量处理
- 04用 entmake 创建文字和箭头
- 05通过截图检查图纸
- 06避免 IPC 竞争和超时
适用场景
- 01绘制设备布局和场地边界
- 02添加标签、尺寸和标题栏
- 03创建管道流向箭头
- 04检查并迭代图纸
MCP 相关
该技能指导使用 autocad-mcp MCP 服务,包括 system、entity、annotation、view、drawing 等工具。它要求工具调用顺序执行,并限制 execute_lisp 批次规模。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ puran-water/ autocad-drafting --skill autocad-drafting安装后在 Claude Code 中输入/autocad-drafting确认已加载。
附带文件NOTICE.mdreferences/tool-reference.md
详细介绍
使用 autocad-mcp 进行 AutoCAD 制图
关键规则
绝不要并行调用多个 autocad-mcp 工具。 File IPC 后端是单线程的。并发调用会在 IPC 层面产生竞争并破坏调度,触发 APPLOAD 对话框和超时。始终按顺序调用工具。
批量操作优先使用 execute_lisp。 单次 execute_lisp 调用包含 5-7 个
(command ...) 调用,比 5-7 次单独的工具调用更快、更可靠
(每次都会产生约 1-2s 的 IPC 往返开销)。
将 execute_lisp 批次控制在约 500 行 / 7 个命令以内。 超过 IPC 超时时间
(默认 10s,可通过 AUTOCAD_MCP_IPC_TIMEOUT 配置)会让 AutoCAD 卡在待处理命令状态。较小的批次更安全。
制图工作流
任何制图任务都遵循以下顺序:
- 验证连接 - 使用
system(operation="status")确认后端状态 - 设置图层 - 在创建任何几何图形前创建所有图层
- 创建几何图形 - 设备轮廓、场地边界、管道
- 添加注释 - 设备标记、文本标签、备注
- 添加尺寸 - 线性、对齐、角度尺寸
- 标题栏 - 边框、标题文本、项目信息
- 截图检查 - 使用
view(operation="get_screenshot")进行验证并迭代
execute_lisp 模式
批量操作使用 system(operation="execute_lisp", data={"code": "..."})。
图层设置批次:
(progn
(if (not (tblsearch "LAYER" "EQUIPMENT"))
(command "_.-LAYER" "_NEW" "EQUIPMENT" "_COLOR" "cyan" "EQUIPMENT" ""))
(if (not (tblsearch "LAYER" "PIPING"))
(command "_.-LAYER" "_NEW" "PIPING" "_COLOR" "blue" "PIPING" ""))
"layers created"
)
设备放置批次(最多 5-7 项):
(progn
(setvar "CLAYER" "EQUIPMENT")
(command "_RECTANG" (list 5 20 0) (list 15 30 0))
(command "_CIRCLE" (list 40 25 0) 8)
(command "_RECTANG" (list 55 18 0) (list 70 32 0))
"equipment placed"
)
文本注释 — 使用 entmake,而非 (command "_TEXT" ...):
(command "_TEXT" "J" "ML" ...) 的提示序列不可靠,会让 AutoCAD 停留在等待输入状态,阻塞后续调度。文本始终使用 entmake:
(progn
(setvar "CLAYER" "ANNOTATION")
;; Helper: tag + description at (x, y) with height ht
(defun make-tag (x y tag desc ht / )
(entmake (list '(0 . "TEXT") (cons 10 (list x y 0)) (cons 40 ht) (cons 1 tag)
(cons 72 1) (cons 11 (list x y 0)) '(8 . "ANNOTATION")))
(entmake (list '(0 . "TEXT") (cons 10 (list x (- y (* ht 1.3)) 0))
(cons 40 (* ht 0.7)) (cons 1 desc) (cons 72 1)
(cons 11 (list x (- y (* ht 1.3)) 0)) '(8 . "ANNOTATION")))
)
(make-tag 10 25 "P-101" "PUMP STATION" 1.5)
(make-tag 40 25 "CL-201" "CLARIFIER" 1.5)
"annotations placed"
)
流向箭头 — 使用 entmake 创建 LWPOLYLINE,而非 (command "_SOLID" ...):
_SOLID 与 _TEXT 存在相同的提示序列问题。请使用闭合的 LWPOLYLINE:
(progn
(setvar "CLAYER" "PIPING")
;; Helper: arrow at (x,y) pointing in direction "R"/"L"/"D"/"U"
(defun make-arrow (x y dir / p1 p2 p3)
(cond
((= dir "R") (setq p1 (list x (+ y 0.5)) p2 (list (+ x 2) y) p3 (list x (- y 0.5))))
((= dir "D") (setq p1 (list (- x 0.5) y) p2 (list x (- y 2)) p3 (list (+ x 0.5) y)))
((= dir "L") (setq p1 (list x (- y 0.5)) p2 (list (- x 2) y) p3 (list x (+ y 0.5))))
((= dir "U") (setq p1 (list (+ x 0.5) y) p2 (list x (+ y 2)) p3 (list (- x 0.5) y)))
)
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(8 . "PIPING")
'(100 . "AcDbPolyline") '(90 . 3) '(70 . 1)
(cons 10 p1) (cons 10 p2) (cons 10 p3)))
)
(make-arrow 16 25 "R")
"arrow placed"
)
工具选择指南
| 任务 | 工具 | 说明 |
|---|---|---|
| 单个实体 | entity(operation="create_*") | 用于一次性创建单个实体 |
| 批量实体(3 个以上) | system(operation="execute_lisp") | 在 (progn ...) 中批量执行 |
| 图层操作 | layer(operation="*") 或 execute_lisp | 两种方式均可;3 个以上时使用批处理 |
| 尺寸标注 | annotation(operation="create_dimension_*") | 逐个创建即可 |
| 截图 | view(operation="get_screenshot") | 返回 PNG 图像 |
| 撤销错误操作 | drawing(operation="undo") | 撤销一步 |
| 保存 | drawing(operation="save") | 另存为时添加 data: {path} |
| 打开文件 | drawing(operation="open", data={"path": "..."}) | 支持 DWG 或 DXF |
| P&ID 符号 | pid(operation="insert_*") | 需要 CTO 库 |
无需人工干预即可重新加载调度器
如果更新后需要重新加载 mcp_dispatch.lsp:
system(operation="execute_lisp", data={"code":
"(progn (setvar \"SECURELOAD\" 0) (load \"C:/Users/hvksh/mcp-servers/autocad-mcp/lisp-code/mcp_dispatch.lsp\") (setvar \"SECURELOAD\" 1) \"dispatch reloaded\")"
})
常见问题与解决方法
| 问题 | 原因 | 解决方法 |
|---|---|---|
| APPLOAD 对话框 | 并行工具调用交错发送 PostMessageW 按键 | 绝不并行调用工具 |
| IPC 超时 | 批次过大或命令正在等待输入 | 将批次控制在 7 个命令以内 |
| 命令卡住 | 上次超时后 AutoCAD 停留在命令提示符 | 服务会自动发送 ESC 前缀(v3.1+) |
| SECURELOAD 对话框 | 在不受信任的路径上执行 (load) | 服务会自动抑制此对话框(v3.1+) |
drawing.create 重置 | 清除全部内容并清理当前图形(不是 _.NEW) | LISP 命名空间会保留;不会新建标签页 |
| 非 ASCII 字符导致崩溃 | LISP 以 cp1252 写入,Python 以 UTF-8 读取 | 服务会回退到 cp1252(v3.1+) |
drawing.save 忽略路径 | 旧版 LISP 始终执行 QSAVE | 已在 v3.1 修复 — 提供路径时会使用 SAVEAS |
| TEXT/SOLID 超时 | (command "_TEXT" "J" "ML" ...) 和 _SOLID 的提示序列不可靠 | 改用 entmake — 无需与命令行交互 |
后端差异
| 特性 | 文件 IPC(实时 AutoCAD) | ezdxf(无头模式) |
|---|---|---|
execute_lisp | 支持 | 不支持 |
undo / redo | 支持 | 不支持 |
plot_pdf | 支持 | 不支持 |
offset / fillet / chamfer | 支持 | 不支持 |
| 截图 | Win32 PrintWindow | matplotlib 渲染 |
| 平台 | 仅限 Windows | 任意(Linux/Mac/WSL) |
参考
有关工具操作的详细信息,请参阅 tool-reference.md。