daobataotie/CAD-MCP

CAD MCP Server

CAD‑MCP サーバー – 自然言語でCADを制御

何であるか – 一般的なWindows CADソフト(AutoCAD、GstarCAD、ZWCAD)を、プレーンテキストの指示から生成されたJSONエンコードコマンドを送信することで操作できるPythonベースのサーバーです。Model‑Context‑Protocol(MCP)を実装しており、LLMを搭載したクライアント(Claude、Cursorなど)が35の明確に定義されたツールを呼び出して、図面の作成、照会、編集、CADファイルの管理が可能になります。

なぜ重要か – CAD操作を構造化され、自己記述可能なAPIとして公開することで、自然言語処理と従来のCAD自動化の橋渡しを実現します。LLMはサーバーに「レイヤー‘Walls’に半径5mの円を描画し、すべてのエンティティをリストアップしてスクリーンショットを表示」と依頼でき、サーバーはその指示をCADアプリケーションへのCOM呼び出しに変換し、構造化された結果を返却し、進捗通知もストリーミングで提供します。


コア機能(READMEに記載)

カテゴリ ツール(例) 実行可能な操作
基本的な描画 draw_line, draw_circle, draw_arc, draw_ellipse, draw_rectangle, draw_polyline, draw_text, draw_hatch, add_dimension テキストコマンドから幾何学的プリミティブを作成し、注釈を加えます。
照会 list_layers, list_entities, get_entity_properties, screenshot 現在のモデル状態を取得し、個々のエンティティハンドルを確認し、CADウィンドウのPNGプレビューを取得できます。
編集 erase_entity, move_entity, rotate_entity, scale_entity, copy_entity, mirror_entity, offset_entity, array_linear_entity, array_polar_entity, undo, redo 既存のオブジェクトをプログラム的に編集でき、一般的なCAD編集ワークフローをサポートします。
レイヤーおよび図面管理 create_layer, set_current_layer, new_drawing, open_drawing, close_drawing, save_drawing 別々のレイヤーで作業を整理し、CAD UIを開かずにDWG/DXFファイルを扱えます。
ブロック操作 create_block, insert_block, list_blocks 組み合わせられた幾何学をCADブロックとして再利用できます。
コマンドパススルー send_command 定義済みツールではカバーされていないケースに、任意のCADコマンド文字列を送信できます。
レガシーNLPインターフェース process_command 自由形式のテキストを上記のツール呼び出しに変換するシンプルなパーサー(後方互換性のため保持)。

内部の動作仕組み

  1. MCPサーバーsrc/server.py はFastMCPサーバーを実行し、以下の2つのトランスポートをサポートします:
    • stdio – ローカル、単一クライアントモード(デフォルト)。
    • streamable‑http – HTTPエンドポイント(/mcp)で、複数のリモートクライアントが1つのCADインスタンスを共有可能。
  2. COMブリッジcad_controller.py はWindowsの pywin32 COMインターフェースを使用して、インストール済みのCADプログラムと通信し、コマンドを発行し、エンティティデータを読み取ります。
  3. 構造化出力 – 各ツールは models.py に定義された outputSchema に準拠したJSONオブジェクトを返します。スキーマには structuredContentreadOnlyHintdestructiveHint などのフィールドが含まれており、クライアントは自動的にユーザー確認を求めるかどうかを判断できます。
  4. 進捗通知 – 長時間実行の操作(例:CAD起動、ファイル保存)は段階的なメッセージを発信し、MCPクライアントはプログレスバーとして表示できます。
  5. レガシーNLPプロセッサnlp_processor.py は自然言語文字列から色、形状キーワード、動作動詞を抽出し、古い process_command ツールを使用する際にツールパラメータを埋めます。

使い始め(READMEから)

# リポジトリをクローンし、編集可能にインストール
pip install -e .
# サーバーを実行(デフォルトのstdioモード)
python src/server.py
# またはリモートクライアント用にHTTPトランスポートで実行
python src/server.py --transport streamable-http --port 8000

サーバーコマンドを任意のMCP互換クライアント(Claude Desktop、Cursorなど)の設定に追加し、コマンドを発行し始めます。


一般的な利用例

  • 迅速なプロトタイピング – 英語で部屋を説明することでフロアプランをスケッチ;LLMが draw_* および create_layer 呼び出しのシーケンスを生成。
  • 自動検査 – LLMがモデルを照会(list_entities, get_entity_properties)し、設計ルールを検証し、修正編集の承認をユーザーに依頼。
  • バッチ描画 – 自然言語仕様のリストをループして、多くの類似図面(例:部品レイアウト)を生成。
  • 教育/デモ – 新規ユーザーにUIツールを手動でクリックせずに、CADコマンドと視覚的結果の対応を示す。

制限事項と要件

  • Windows専用 – COMインターフェース(pywin32)に依存しており、Windows上で対応するCAD製品がインストールされている必要があります。
  • CADソフトウェアのインストール必須 – AutoCAD、GstarCAD、またはZWCADがインストールされ、ライセンス認証済みである必要があります。
  • Python 3.10+ – 現代的な型定義(pydantic>=2)を使用しています。
  • 組み込みAIモデルなし – サーバーにはLLMが含まれていません。外部のMCPクライアント(Claude、Cursorなど)がツール呼び出しを生成する必要があります。
  • レガシーNLPは単純なキーワードマッチ – 複雑な言語理解が必要な場合は、process_command ではなく、完全なMCPツールセットに依存すべきです。

ライセンス

MIT – 商用ワークフローに自由に使用・変更・埋め込み可能。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト