autocad-drafting について
autocad-draftingは、autocad-mcpを使ったCAD製図を案内するエージェントスキルです。段階的な作業手順やツール選択に加え、IPC呼び出しとAutoLISPバッチの安全策を示します。
主な機能
- 01段階的な製図ワークフロー
- 02作業に応じたツール選択
- 03execute_lispによる一括処理
- 04entmakeで文字と矢印を作成
- 05スクリーンショットで図面を確認
- 06IPC競合とタイムアウトの回避
活用シーン
- 01機器配置図や敷地境界の作成
- 02ラベル、寸法、タイトルブロックの追加
- 03配管の流れを示す矢印の作成
- 04図面の確認と反復修正
MCP 対応
このスキルは、system、entity、annotation、view、drawingなどのツールを含むautocad-mcp MCPサーバーの利用方法を案内します。ツール呼び出しの逐次実行と、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 を優先してください。 (command ...) を 5~7 回呼び出す単一の execute_lisp 呼び出しは、個別に 5~7 回ツールを呼び出すより高速で信頼性も高くなります(個別の呼び出しではそれぞれ約 1~2 秒の IPC 往復オーバーヘッドが発生します)。
execute_lisp のバッチは約 500 行/7 コマンド未満にしてください。 IPC タイムアウト(デフォルトは 10 秒、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"
)
テキスト注釈 — (command "_TEXT" ...) ではなく、entmake を使用します:
(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"
)
フロー矢印 — (command "_SOLID" ...) ではなく、entmake の LWPOLYLINE を使用します:
_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_*") | 1 回ずつの呼び出しで問題ありません |
| スクリーンショット | view(operation="get_screenshot") | PNG 画像を返します |
| 操作を取り消す | drawing(operation="undo") | 1 回分の操作を取り消します |
| 保存 | 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 を参照してください。