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 |
自由形式のテキストを上記のツール呼び出しに変換するシンプルなパーサー(後方互換性のため保持)。 |
内部の動作仕組み
- MCPサーバー –
src/server.pyはFastMCPサーバーを実行し、以下の2つのトランスポートをサポートします:stdio– ローカル、単一クライアントモード(デフォルト)。streamable‑http– HTTPエンドポイント(/mcp)で、複数のリモートクライアントが1つのCADインスタンスを共有可能。
- COMブリッジ –
cad_controller.pyはWindowsのpywin32COMインターフェースを使用して、インストール済みのCADプログラムと通信し、コマンドを発行し、エンティティデータを読み取ります。 - 構造化出力 – 各ツールは
models.pyに定義されたoutputSchemaに準拠したJSONオブジェクトを返します。スキーマにはstructuredContent、readOnlyHint、destructiveHintなどのフィールドが含まれており、クライアントは自動的にユーザー確認を求めるかどうかを判断できます。 - 進捗通知 – 長時間実行の操作(例:CAD起動、ファイル保存)は段階的なメッセージを発信し、MCPクライアントはプログレスバーとして表示できます。
- レガシー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 – 商用ワークフローに自由に使用・変更・埋め込み可能。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト