mcpField
A
autocad-drafting

autocad-drafting

github.com/puran-waterデザイン・UI155 回インストール33 週間前に更新
リポジトリ

autocad-drafting について

autocad-draftingは、autocad-mcpを使ったCAD製図を案内するエージェントスキルです。段階的な作業手順やツール選択に加え、IPC呼び出しとAutoLISPバッチの安全策を示します。

主な機能

  1. 01段階的な製図ワークフロー
  2. 02作業に応じたツール選択
  3. 03execute_lispによる一括処理
  4. 04entmakeで文字と矢印を作成
  5. 05スクリーンショットで図面を確認
  6. 06IPC競合とタイムアウトの回避

活用シーン

  1. 01機器配置図や敷地境界の作成
  2. 02ラベル、寸法、タイトルブロックの追加
  3. 03配管の流れを示す矢印の作成
  4. 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 がコマンド待機状態のままになります。バッチは小さくするほうが安全です。

作図ワークフロー

作図タスクでは、次の手順に従ってください。

  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"
)

テキスト注釈 — (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 PrintWindowmatplotlib によるレンダリング
プラットフォームWindows のみ制限なし(Linux/Mac/WSL)

リファレンス

ツール操作の詳細については、tool-reference.md を参照してください。

コメント