DWG MCP Server について
DWG MCP Serverは、DWGおよびDXF図面を構造化して扱うためのMCPサーバーです。インデックス検索と図面のレンダリングに対応し、元ファイルは読み取り専用で、プロパティの変更はメモリ内に限られます。
主な機能
- 01許可されたフォルダーからDWGとDXFを開く
- 02図面オブジェクトの検索と取得
- 03型とエンティティプロパティの確認
- 04ビューをPNGまたはSVGでレンダリング
- 05メモリ内での一時的なプロパティ変更
活用シーン
- 01型、プロパティ、ブロック、レイアウトで検索
- 02ハンドルを指定してエンティティを確認
- 03モデル空間またはペーパー空間を描画
- 04元ファイルを変更せずに図面を確認
MCP 対応
アクセス可能なルートの一覧、図面のオープンと検索、プロパティ確認、ビュー描画のツールをクライアントに公開します。対応クライアントからルートを受け取り、非対応の場合は許可ルートを設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @dmytro-prototypes/dwg-mcp-serverDWG_MCP_ALLOWED_ROOTSSemicolon-separated absolute directories allowed for DWG access when the MCP client, AI agent, or test harness does not provide MCP roots. Optional when MCP roots are supported.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
DWG MCP サーバー
MCP を介して AI が DWG および DXF ファイル形式にアクセスできます。
DWG および DXF ファイルを Claude、ChatGPT、Codex、Cursor などの MCP クライアントに接続します。 DWG MCP サーバーは、AI が図面を理解し、推論できるように、DWG データへの構造化されたアクセスを提供します。ソースファイルは読み取り専用のままです。サポートされているエンティティのプロパティは、検査やレンダリングのためにメモリ上で変更できます。
クイックスタート
お好みの MCP クライアントから DWG MCP サーバーを使用できます。 npm パッケージは、初回使用時に GitHub Releases から対応するネイティブビルドをダウンロードし、SHA-256 チェックサムを検証してキャッシュし、直接実行します。 Docker や別途 Python をインストールする必要はありません。
ネイティブインストーラー
macOS Apple Silicon:
curl -fsSL https://raw.githubusercontent.com/dimitrovakulenko/dwg-mcp-server/main/scripts/install.sh | sh
Windows x64(PowerShell):
irm https://raw.githubusercontent.com/dimitrovakulenko/dwg-mcp-server/main/scripts/install.ps1 | iex
どちらのインストーラーも、最新のネイティブリリースをダウンロードし、インストール前に SHA-256 チェックサムを検証します。
インストール後、MCP クライアントからインストール済みの実行ファイルを指定します。macOS では、まず ~/.local/bin を PATH に追加するか、インストーラーが報告した絶対パスを使用してください。
claude mcp add --scope user --transport stdio dwg-mcp -- dwg-mcp-server
MCP クライアント、AI エージェント、またはテストハーネスが MCP roots に対応していない場合は、アクセスを許可するフォルダーを DWG_MCP_ALLOWED_ROOTS に設定してください。
Codex
codex mcp add dwg-mcp \
--env DWG_MCP_ALLOWED_ROOTS="$HOME" \
-- npx -y @dmytro-prototypes/dwg-mcp-server
Codex は現在、stdio MCP サーバーに MCP クライアント roots を提供していません。図面を含むフォルダーに対して、許可するルートを明示的に設定してください。
Claude
claude mcp add --scope user --transport stdio dwg-mcp -- npx -y @dmytro-prototypes/dwg-mcp-server
Claude Code は MCP roots を提供するため、通常は追加のパス変数は不要です。
Cursor
{
"mcpServers": {
"dwg-mcp": {
"command": "npx",
"args": ["-y", "@dmytro-prototypes/dwg-mcp-server"]
}
}
}
公開されるツール
| ツール | 目的 |
|---|---|
dwg.list_roots | DWG にアクセスできるフォルダーを一覧表示します。 |
dwg.open_file | アクセス可能なフォルダーから DWG または DXF を開き、documentId を返します。 |
dwg.close_file | 開いているドキュメントを閉じ、ワーカープロセスを解放します。 |
dwg.list_types | バックエンドが認識している、グローバルにサポートされた DWG タイプを一覧表示します。 |
dwg.list_file_types | 特定の開いている DWG に含まれるタイプのみを一覧表示します。 |
dwg.describe_type | サポートされているタイプについて、読み取り可能および書き込み可能なプロパティとデフォルトの投影を含めて説明します。 |
dwg.get_objects | ハンドルを指定してオブジェクトを取得します。指定された順序を維持し、見つからないハンドルを報告します。 |
dwg.query_objects | フィルター、スコープ、リレーションのたどり方、並べ替え、投影、ページネーションを指定してオブジェクトを検索します。 |
dwg.set_entity_properties | 1 つのエンティティの書き込み可能とマークされたプロパティをメモリ上で変更します。ドキュメントを閉じると変更は破棄されます。 |
dwg.list_render_views | レンダリング可能なモデル空間、ペーパー空間のレイアウト、レイアウトのビューポートを一覧表示します。 |
dwg.render_view | ビュー全体、または選択した図面領域を PNG または SVG としてレンダリングします。 |
一般的な流れは次のとおりです。
dwg.list_rootsで利用可能なフォルダーを確認します。dwg.open_fileでそれらのフォルダーからファイルを開きます。dwg.list_types、dwg.list_file_types、またはdwg.describe_typeで、サポートされているタイプまたはファイル固有のタイプを調べます。dwg.get_objectsで既知のハンドルを取得するか、dwg.query_objectsで図面を検索します。- 必要に応じて、
dwg.set_entity_propertiesで書き込み可能と報告されたプロパティを変更します。 dwg.list_render_viewsとdwg.render_viewで図面ビューを確認し、レンダリングします。dwg.close_fileでセッションを閉じ、メモリ上の変更を破棄します。
アーキテクチャ
ランタイムモデル
パッケージ化されたデプロイでは、DWG MCP サーバーはホスト OS 向けにビルドされたスタンドアロンのネイティブアプリケーションです。 Python ホストは MCP ツールを公開し、ファイルアクセスを検証し、ドキュメントセッションを管理します。
各 dwg.open_file 呼び出しは、その DWG 専用の Rust dwg-worker プロセスを起動し、ホスト側の documentId を返します。
以降のファイルスコープの呼び出しでは、そのドキュメント ID を使用します。
dwg.close_file は、そのセッションのワーカーを終了します。
ワーカーとクエリモデル
Rust ワーカーは、標準入力と標準出力を介して改行区切りの JSON をやり取りします。 LibreDWG で DWG を開くと、まずインメモリのインデックス付きドキュメントを構築します。 この事前インデックス作成は設計の中核です。サーバーはファイルを開くときに一度だけコストを負担し、その後のリクエストには毎回 DWG を再スキャンするのではなく、インデックスを使って応答します。
インデックス付きモデルには、オブジェクトハンドル、種類、型名、汎用型、概要および全プロパティ、派生したブロック、レイアウト、スペースの所属情報が格納されます。 また、エイリアス、デフォルトのプロジェクション、プロパティ定義など、サポートされる型のメタデータも格納されます。
全オブジェクトレコードをリクエストすると、既知の場合はコンテナーブロック、レイアウト、モデルスペースまたはペーパースペースを含む派生した所属情報も extendedData に含まれます。
dwg.get_objects はハンドルによる直接検索です。
dwg.query_objects は、ハンドル、型、汎用型、種類、プロパティの完全一致値、ブロック、レイアウト、スペースの各インデックスを検索した後、フィルター、スコープ、リレーションのたどり、並べ替え、プロジェクション、ページネーションを適用します。
これにより、開いた図面上のブロック、画層、レイアウト、参照、関連オブジェクトを実用的にクエリできます。
dwg.set_entity_properties は型カタログに照らして書き込みを検証し、ネイティブの LibreDWG ドキュメントを更新してインデックスを再構築し、キャッシュされたレンダリングシーンを無効化します。ブロック参照の挿入点には OCS 座標が使用され、ブロックのスケーリング規則が適用されます。また、所有する属性を安全に変換できるようになるまで、属性付きブロック参照は拒否されます。このツールはソースファイルを保存または上書きしません。
ワーカーは、最初のレンダリング呼び出し時に、独立したレンダリングシーンを遅延コンパイルします。
ブロック参照と生成された寸法ブロックを展開し、一般的な 2D ジオメトリ、テキスト、MTEXT、ハッチングの輪郭、および近似した点リストエンティティを描画し、ビューポートを通じてペーパースペースのレイアウトを合成します。SVG が標準のレンダリング出力であり、PNG は同じ SVG からメモリ内でラスタライズされます。レンダリング応答には、生成ブロックのフォールバックおよびサポート対象外のエンティティ型に関する対応状況の診断が含まれます。自動フィットでは極端に疎な範囲を拒否し、WIPEOUT 境界はそれ以前のジオメトリをマスクします。また、明示的な領域を指定すると、密集したビューのレンダリング範囲を制限できます。プロトコルとレンダリングモデルについては、docs/rendering.md を参照してください。
アクセスとパッケージ
DWG ファイルと DXF ファイルは、dwg.list_roots に一覧表示されたルートから開く必要があります。サーバーはまず MCP クライアントにルートを問い合わせます。クライアント、AI エージェント、またはテストハーネスが MCP ルートをサポートしていない場合は、明示的に許可するルートを設定してください。
python3 -m dwg_mcp_server --allowed-root "$HOME/Downloads"
または:
DWG_MCP_ALLOWED_ROOTS="$HOME/Downloads;$HOME/Documents/dwg" \
python3 -m dwg_mcp_server
DWG_MCP_ALLOWED_ROOTS は、ルートをサポートしないクライアント向けの認可フォールバックです。
絶対パスで指定したディレクトリをセミコロン区切りで列挙してください。
公式リリースには、スタンドアロンの MCP ホスト、静的リンクされた Rust ワーカー、実行時に必要な LibreDWG スキーマファイルが含まれます。
ネイティブプラットフォーム
GitHub Actions は、ネイティブランナー上で以下のリリース成果物をビルドおよびテストします。
| システム | CPU | Rust ターゲット |
|---|---|---|
| macOS | Apple Silicon | aarch64-apple-darwin |
| Windows | Intel または AMD 64 ビット | x86_64-pc-windows-gnu |
| Linux | Intel または AMD 64 ビット | x86_64-unknown-linux-gnu |
| Linux | ARM 64 ビット | aarch64-unknown-linux-gnu |
x64、x86_64、AMD64 は同じ CPU アーキテクチャを指します。Windows と Linux の成果物は、Intel と AMD の両方のプロセッサで動作します。
ソースからのビルドとテスト
ローカルでソースからビルドする場合、デフォルトでベンダー提供の third_party/libredwg サブモジュールを使用します。
前提条件
- Rust ツールチェーン
- Python 3.11 以降
- macOS または Linux で LibreDWG をローカルビルドするための autotools(
autoreconf、aclocal、automake、autoconf、make)
ブートストラップ
git submodule update --init --recursive
bash scripts/build-libredwg.sh
ビルドとテスト
cargo test --workspace
bash scripts/run-e2e-tests.sh
MCP ホストをローカルで実行する
Python ホストは、target/release または target/debug の下にある dwg-worker を探します。
明示的にリリースビルドを行う場合:
cargo build -p dwg-worker --release
次に、MCP ホストを実行します:
PYTHONPATH=server/src python3 -m dwg_mcp_server
ワーカーバイナリが別の場所にある場合は、DWG_WORKER_BIN にその実行ファイルを設定してください。
ネイティブリリースを公開する
npm/package.json、server.json、および該当する場合は Claude 拡張機能のマニフェストで同じバージョンを設定します。.github/workflows/native-release.ymlの npm トラステッドパブリッシングを設定します。- 対応する
v<version>タグをプッシュします。
Native Release ワークフローは、4 つのプラットフォームすべてをビルドしてテストし、チェックサムファイルを含む GitHub Release を作成した後、npm ランチャーを公開します。手動でワークフローを実行すると、選択した 1 つのプラットフォーム、または 4 つすべてをダウンロード可能な Actions アーティファクトとしてビルドできますが、公開は行われません。
クリーンビルド
ローカルの Rust および Python のビルドアーティファクトを削除します:
bash scripts/clean-build-artifacts.sh
ホストの LibreDWG ビルドも third_party/libredwg の下から削除する場合:
bash scripts/clean-build-artifacts.sh --with-libredwg
公式 MCP レジストリ
レジストリのメタデータは、GitHub 認証済みの名前 io.github.dimitrovakulenko/dwg-mcp-server で server.json に記載されています。
レジストリの新しいバージョンを公開する前に:
npm/から対応するバージョンの npm パッケージを公開します。npm/package.jsonにserver.jsonと同じmcpNameが含まれていることを確認します。- 手動の
Publish MCP RegistryGitHub Actions ワークフローを実行するか、次を実行します:
mcp-publisher login github
mcp-publisher publish
レジストリは公開済みの npm パッケージを検証するため、server.json は公開 npm レジストリにすでに存在する npm バージョンを参照している必要があります。
ライセンス
このプロジェクトは GNU General Public License v3.0 の下でライセンスされています。
ライセンスの全文については LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。