mcpField
A
autocad-drafting

autocad-drafting

github.com/puran-water设计与 UI155 次安装33 周前更新
代码仓库

关于 autocad-drafting

autocad-drafting 是指导通过 autocad-mcp 执行 CAD 制图任务的 Agent 技能,提供分阶段流程、工具选择建议,以及 IPC 调用和 AutoLISP 批处理的安全规范。

主要功能

  1. 01按阶段执行制图流程
  2. 02根据制图任务选择工具
  3. 03用 execute_lisp 批量处理
  4. 04用 entmake 创建文字和箭头
  5. 05通过截图检查图纸
  6. 06避免 IPC 竞争和超时

适用场景

  1. 01绘制设备布局和场地边界
  2. 02添加标签、尺寸和标题栏
  3. 03创建管道流向箭头
  4. 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 卡在待处理命令状态。较小的批次更安全。

制图工作流

任何制图任务都遵循以下顺序:

  1. 验证连接 - 使用 system(operation="status") 确认后端状态
  2. 设置图层 - 在创建任何几何图形前创建所有图层
  3. 创建几何图形 - 设备轮廓、场地边界、管道
  4. 添加注释 - 设备标记、文本标签、备注
  5. 添加尺寸 - 线性、对齐、角度尺寸
  6. 标题栏 - 边框、标题文本、项目信息
  7. 截图检查 - 使用 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 PrintWindowmatplotlib 渲染
平台仅限 Windows任意(Linux/Mac/WSL)

参考

有关工具操作的详细信息,请参阅 tool-reference.md。

评论

支持 Markdown