mcpField
S
SolidWorks

SolidWorks

ローカル
github.com/hjbaardメディア・デザイン19今日更新

SolidWorks について

SolidWorks MCP は、Windows で実行中の SolidWorks 内で AI エージェントがパラメトリック部品やアセンブリを作成・検査できるようにします。型付きツールが形状の実測値を返すため、見た目に頼らず各工程を検証できます。

主な機能

  1. 01パラメトリック部品とアセンブリの作成
  2. 02形状と質量特性の実測値
  3. 03スケッチ寸法と合致の検証
  4. 04STEP、STL、3MF へのエクスポート
  5. 05任意コード実行のない型付きツール

活用シーン

  1. 01寸法仕様から部品を作成
  2. 02モデル体積と計算値の照合
  3. 03既存部品やスケッチの編集
  4. 043D プリント用モデルのエクスポート

MCP 対応

このサーバーは stdio 経由で MCP クライアントに SolidWorks のモデリング・検査ツールを公開します。Windows 上で起動済みの SolidWorks インスタンスに接続します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"hjbaard-solidworks": {
"command": "uvx",
"args": [
"solidworks-mcp"
]
}
}
}
起動コマンドuvx solidworks-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypisolidworks-mcp0.17.0

ツール

86

掲載時のツール一覧 · 今日に更新

このツールにパラメーターはありません。

詳細

SolidWorks MCP

PyPI License: MIT

AI エージェント(Claude、またはその他の MCP クライアント)が、お使いの SolidWorks で実際のパラメトリック部品やアセンブリをモデリングし、自分の作業を検証できます。モデリングの呼び出しごとに測定した体積、質量、バウンディングボックスが返されるため、エージェントは結果を仕様と比較して修正でき、「だいたい合っていそう」と推測する必要はありません。

ザグリ穴、ボルト円、ケーブル用スロットを備えた3Dプリント用取付ブラケット 実際にプリントできるISOメートルねじを備えたM10ボルト 回転成形してシェル化した花瓶

丸みのある曲げを備えたスイープパイプ ロフト成形してシェル化したホーン

ツール自体で作成:取付ブラケット(各手順を手計算と照合)、実際のねじを備えたM10ボルト、回転成形してシェル化した花瓶、スイープパイプ、ロフト成形してシェル化したホーン。

このサーバーの特長

  • 生成するだけでなく、検証します。 フィーチャーは測定した形状を報告します。 再構築後に寸法と合致条件を測定し直します。
  • 完全定義されたスケッチ。 すべてのスケッチは、設計者が行うように拘束されます。 寸法は原点を基準とし、幾何形状が厳密に水平、垂直、または原点上にある場合にのみ関係を設定します。ツールは役割ごとに寸法を返すため(width@Sketch1)、部品は SolidWorks 内でもエージェント経由でも編集可能な状態を保ちます。
  • プリミティブだけではない、本物の CAD。 押し出し、回転、スイープ、ロフト、スプライン; 任意の面への穴、ザグリ、スロット、ポケット;丸みを付けた多角形の角;Hole Wizard による ISO 穴;実際の ISO メートルねじ; フィレット、面取り、シェル、パターン、ミラー、リブ、方程式、材料。合致条件と干渉チェックを備えたアセンブリ。STEP/STL/3MF エクスポートとスクリーンショット。 刻印と浮き出し文字。既存部品の操作:フィーチャーの一覧表示、削除、抑制、順序変更;ユーザーのスケッチの読み取り、押し出し、カット;STEP のインポート。部品またはコンポーネントごとの色。範囲全体でチェックされる、同心円および角度の合致条件を備えたジョイント。プリント適性チェックと寸法入り図面。任意のオフセットまたは角度での平面。部品ごとの複数ボディ、それらの結合と分割。可変フィレットとフルラウンド。接線円弧とスプラインを備えた自由スケッチ。合計86個のツール。
  • 失敗を明確に伝えます。 要求された処理を実行できない呼び出しは、原因とともに {ok: false, error} を返し、誤った形状を黙って返すことはありません。
  • 固定された型付きツールインターフェース。 「任意のコードを実行する」ツールはありません。エージェントが実行できるのは、ツールで許可された操作だけです。
  • 実際の SolidWorks でテスト済み。 697件のテストがあり、各フィーチャーの統合テストでは結果を手計算と比較します。
  • ローカルで動作します。 実行中の SolidWorks と COM 経由で通信します。サーバー自体がネットワーク通信を行うことはありません。

クイックスタート

  1. uvをインストールします。

  2. SolidWorksを起動し、開いたままにします(サーバーは実行中のインスタンスに接続します。起動はしません)。

  3. MCP クライアントにサーバーを登録します。

    Claude Code:

    claude mcp add solidworks -- uvx solidworks-mcp
    

    Claude Desktop(claude_desktop_config.json)またはその他のクライアント:

    {
      "mcpServers": {
        "solidworks": {
          "command": "uvx",
          "args": ["solidworks-mcp"]
        }
      }
    }
    

    公式のMCP Registryにも、io.github.hjbaard/solidworks-mcpとして掲載されています。

  4. 次のように、パーツの作成を依頼します。

    中央にØ16 mmの穴があり、四隅から12 mmの位置にM5の座ぐり穴が4つあり、角がR5の、100 × 80 × 8 mmの取り付けプレートを設計してください。体積を独自の計算結果と照合してから、高精細なSTLを書き出してください。

エージェント向けガイドライン

サーバーは接続時に、すべてのMCPクライアントに簡潔なモデリングガイドライン(規則、各ステップの検証、既知の問題)を提供します。ガイドの全文はsolidworks://guideリソースにあります。穴、リブ、ねじ、アセンブリの作成手順、3Dプリントのアドバイス、メッシュ(STL/3MF)からパーツをリバースエンジニアリングする方法を説明しています。同じ内容はsrc/solidworks_mcp/guide.mdにもあります。

要件と互換性

  • SolidWorksがインストールされ、ライセンス認証済みで、実行中のWindows。

  • Python 3.11以降(必要に応じてuvがインストールします)。

  • SolidWorksの標準であるY-upパーツテンプレート。SOLIDWORKS 2025以降ではZ-upのパーツも作成できますが、ツールはY-up座標系で構築するため、Z-upのパーツはその旨を示すメッセージとともに拒否されます。

  • SOLIDWORKS 2026(3DEXPERIENCE R2026x)でテスト済み。使用するAPI呼び出しはSOLIDWORKS 2020 SP2以降に存在するため、2020~2025でも動作するはずですが、未テストです。インストール環境を確認するには、SolidWorksを起動した状態で次を実行してください。

    uvx solidworks-mcp --selftest
    

    小さなパーツをいくつか作成し、それぞれを手計算と照合してから、保存せずに閉じます。動作の成否にかかわらず、出力を互換性レポートに貼り付けてください。

ステータス:初期段階(0.x)です。 エンドツーエンドで動作しますが、ツール名や規則は今後変更される可能性があります。CHANGELOG.mdをご覧ください。

トラブルシューティング

  • まずセルフテストを実行します:uvx solidworks-mcp --selftestを実行すると、SolidWorksのリリース、言語、テンプレート、および動作するツール領域が表示されます。その出力をバグレポートに追加してください。
  • 「実行中のSolidWorksが見つかりません」/接続に失敗する — サーバーの起動やスクリプトの実行前に、SolidWorksが実行中である必要があります。サーバーはGetActiveObjectを介してアクティブなインスタンスに接続し、起動はしません。
  • 初回の呼び出しが遅い、またはEnsureModuleエラーが発生する — 最初のCOM呼び出しでは、tempのgen_pyフォルダーにmakepy typelibラッパーが生成されます。完了するまで待ってください。問題が発生した場合は、gen_pyキャッシュを削除して再試行してください。このビルドでは早期バインディングが必須です(アーキテクチャを参照)。
  • フィーチャーが{ok: false, error: ...}を返す — これは仕様です。各ツールは、誤ったジオメトリを黙って生成するのではなく、内容がわかるメッセージとともに明示的に失敗します。メッセージに原因として考えられる内容が記載されています。
  • SOLIDWORKS 2026(3DEXPERIENCE R2026x)でのみテスト済みです。 それ以外のビルドでは、検証済みの列挙値やメソッドシグネチャが異なる場合があります。scripts/introspect_api.pyを再実行して、インストールされているtypelibを調べてください。

開発

リポジトリをクローンし、venvに編集可能モードでインストールします。

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .[dev]

uvxではなく、このチェックアウトからMCPサーバーを実行するには、クライアントからvenvのPythonを指定します。

{
  "mcpServers": {
    "solidworks": {
      "command": "C:\\path\\to\\SolidWorks-MCP\\.venv\\Scripts\\python.exe",
      "args": ["-m", "solidworks_mcp.server"]
    }
  }
}
検証スクリプトの実行

SolidWorksを起動した状態で実行します。

.\.venv\Scripts\python.exe scripts\probe_connection.py     # M0
.\.venv\Scripts\python.exe scripts\m1_block.py             # M1
.\.venv\Scripts\python.exe scripts\m2_parametric.py        # M2
.\.venv\Scripts\python.exe scripts\test_mcp_server.py      # M3 (full MCP loop over stdio)
.\.venv\Scripts\python.exe scripts\m5_demo_bracket.py      # M5 (3D-print bracket, every step verified)

scripts/introspect_api.pyはインストール済みのtypelibを再生成/検査し、検証済みの列挙値を出力します。SolidWorksをアップグレードしてシグネチャが変わった場合に実行してください。

テスト
.\.venv\Scripts\python.exe -m pytest                 # all tests
.\.venv\Scripts\python.exe -m pytest -m "not solidworks"   # fast unit layer, no SolidWorks

2 つの層があります。どこでも実行できる純粋なユニットテスト(単位、セレクター/方向の解析、ポリゴンのクリーニング、コンポーネント配置の計算、および各 MCP ツールが引数を正しいセッションメソッドに渡すこと)と、起動中の SolidWorks を操作し、各フィーチャーの体積、または各コンポーネントの配置を手計算の結果と照合する統合テスト(solidworks マーカー)です。SolidWorks に接続できない場合は自動的にスキップされます。

ツール

サーバーは stdio 経由で MCP を使用します。

パーツツール
ツール目的
get_statusSolidWorks に接続できますか?リビジョン、サーバーのバージョン、アクティブ/現在のパーツ
new_part新しい空のパーツを作成します(現在のパーツになります)
add_box(width_mm, height_mm, depth_mm, name)長方形をスケッチして押し出します。質量特性を返します
add_cylinder(diameter_mm, height_mm, name)プロファイルを軸(Y 軸)の周りに 360° 回転させて円柱を作成します
add_disc(diameter_mm, thickness_mm, name, x_mm, y_mm)円盤/パック/フランジ:円を +Z 方向に押し出し、(x, y) を中心に配置します(穴やパターンを組み合わせられます)
add_cone(bottom_diameter_mm, top_diameter_mm, height_mm, name)回転で円錐/円錐台を作成します(上部の直径が 0 の場合は完全な円錐です)
add_revolved_profile(profile_mm, angle_deg, name, corner_radii_mm, axis_mm)閉じた (radius, height) プロファイルを Y 軸の周りに回転させます(シャフト、花瓶、リング)。または Front 平面上の任意の線 axis_mm の周りに [x, y] 点を回転させます。corner_radii_mm でエッジを丸めます
add_swept_pipe(path_mm, diameter_mm, bend_radius_mm, name, smooth)丸いプロファイルを丸みのある曲がりを持つ 2D パスに沿ってスイープします(パイプ、チューブ、ロッド)。または、smooth=True で点を通るスプラインに沿ってスイープします
add_swept_profile(profile_mm, path_mm, bend_radius_mm, name, corner_radii_mm)任意の閉じた断面を 2D パスに沿ってスイープします(レール、ガスケット、トリム、チャンネル)。corner_radii_mm で断面を丸めます
add_lofted_solid(profiles_mm, heights_mm, name)積み重ねた平行平面上の 2 つ以上の多角形または円形プロファイルをロフト/ブレンドします(形状の変換部、アダプター、膝部分が厚い脚)
add_rib(start_mm, end_mm, toward_mm, thickness_mm, z_mm, name)z_mm にある Front に平行な平面上に直線リブ/ガセットを作成し、パーツに接するまで toward_mm の方向に伸ばします(L 字ブラケットのガセット)
add_extruded_profile(points_mm, depth_mm, name, corner_radii_mm, rotate_deg, about_mm, draft_deg, merge)任意の閉じたポリゴン [[x,y],…] を押し出します(ブラケット、断面)。corner_radii_mm で実際のスケッチフィレットを使って角を丸めます。各半径は寸法です。rotate_deg でピボットの周りに回転させ、draft_deg で側壁にテーパーを付けます。merge=False の場合は別のボディとして保持します
add_plane(base, offset_mm, angle_deg, about, name)平面からオフセットした、またはモデル軸の周りに回転させた参照平面を作成します。オフセットまたは角度は寸法です。原点と軸を返します
add_extruded_profile_on_plane(points_mm, plane, depth_mm, reverse, name, corner_radii_mm, draft_deg, merge)任意の平面上に描いたポリゴン(その平面上の 3D 点)を押し出し、パーツと結合します
list_bodies()パーツのソリッドボディ:名前、体積、境界ボックス
combine_bodies(operation, main, tools, name)パーツのボディを加算、減算、または交差させます(add/subtract/common)
split_body(plane, name)平面に沿ってパーツを 2 つのボディに分割します
add_extruded_spline(points_mm, depth_mm, name)点を通る滑らかな閉じたスプラインを押し出します(自由形状/有機的な輪郭)
add_hole(diameter_mm, x_mm, y_mm, name)(x, y) の位置に深さ軸を貫通する円形の貫通穴を切ります
add_counterbore_hole(clearance_diameter_mm, cbore_diameter_mm, cbore_depth_mm, x_mm, y_mm, name)+Z 面に座ぐり穴を作成します(面一のキャップスクリュー/熱圧入インサート)
add_thread(size, x_mm, y_mm, z_mm, length_mm, internal, name)SolidWorks の Thread フィーチャーを使って、ロッド端のエッジまたは穴の口に、印刷可能な実ねじの ISO メートルねじ(例:M10x1.5)を作成します。サイズはねじプロファイルと照合されます。内ねじの場合は、先に基本小径で穴を開けます(M10x1.5 → Ø8.376)
add_hole_on_face(diameter_mm, face, x_mm, y_mm, z_mm, depth_mm, name)任意の平面の 3D 点に、貫通または止まりの丸穴を開けます(側面穴、熱圧入インサート用の穴)。点を通る面が使用されます
add_hole_wizard(kind, size, face, x_mm, y_mm, z_mm, depth_mm, fit, thread, name)SolidWorks の Hole Wizard テーブルから ISO 穴を作成します:クリアランス(ISO 273 のはめあい)、座ぐり、皿穴、またはタップ穴。thread="modeled" で印刷可能な実ねじを切ります
add_boss_on_face(diameter_mm, face, x_mm, y_mm, z_mm, height_mm, name)任意の平面から伸びる丸いボス(スペーサー、ペグ)を作成します
add_extruded_profile_on_face(points_mm, face, depth_mm, name, corner_radii_mm)任意の平面から伸びるポリゴン状のパッド/段差を作成します(平面上の 3D 点)
add_text_on_face(text, face, x_mm, y_mm, z_mm, height_mm, depth_mm, emboss, font, name)任意の平面に文字を彫刻、またはエンボス加工します:ラベル、バージョン番号。位置は 2 つの寸法で指定します
cut_profile(points_mm, depth_mm, name, corner_radii_mm, rotate_deg, about_mm)+Z 面からポリゴン状のポケット/スロットを切ります(止まりまたは貫通)。必要に応じてピボットの周りに回転できます
cut_profile_on_face(points_mm, face, depth_mm, name, corner_radii_mm)任意の面にポリゴン状のポケットを切ります(面上の 3D 点)
cut_profile_through_plane(points_mm, plane, depth_mm, name, corner_radii_mm)Front/Top/Right 平面、または名前で指定した平面に描いたポリゴンを、両方向に貫通させるか、平面を中心に depth_mm の深さで切ります(くさび形、側面窓、対称な凹部)。keep_inside を使うと代わりにプロファイルを保持し、2 つのビューから 3D 形状を作成できます
cut_offset_pocket(face, x_mm, y_mm, z_mm, rim_mm, depth_mm, name)面の輪郭に沿って縁を残しながらポケットを切ります(I ビームのウェブ、トレイ、フレーム)。縁と深さは寸法です
cut_slot(length_mm, width_mm, x_mm, y_mm, angle_deg, depth_mm, name)+Z 面の任意の角度に直線状の長穴(長円穴)を切ります
add_extruded_slot(start_mm, end_mm, width_mm, depth_mm, name)2 点の間に長円形状(丸いタブ、ラグ、リンク)を押し出します。丸い端部は各点を中心とします
add_fillet(radius_mm, edges, name, radii_at_mm, skip_shorter_mm)エッジを丸めます(edges:all、軸 x/y/z、面の輪郭 "+z:outline"、1 つのフィーチャーのエッジ "feature:Boss"、またはインデックス "2,5")。radii_at_mm で端から端まで半径を変化させます。適用できないエッジがある場合は、そのエッジ名を示して処理を拒否します
add_full_round(face, x_mm, y_mm, z_mm, name)リブの上部を、最も近い向かい合う 2 つの側面の間で完全に丸めます
add_chamfer(distance_mm, edges, name)エッジに 45° の面取りを施します(edges:all、軸、面の輪郭、フィーチャーのエッジ、またはインデックス)
add_shell(thickness_mm, open_face)壁厚を指定して中空にします。面(+z/…)を開くか、none を指定します
add_linear_pattern(count, spacing_mm, direction, feature_name)フィーチャーを +x/-x/… の方向に N 回複製します
add_circular_pattern(count, center_x_mm, center_y_mm, feature_name)軸の周り(ボルト円)にフィーチャーを N 回複製します
add_mirror(plane, offset_mm, features, name)Front/Top/Right 平面、または名前で指定した平面を基準に、フィーチャー(コピーは元のフィーチャーに追従)またはボディ全体をミラーします。offset_mm だけ移動します。コピーがパーツの外に配置される場合は失敗します
set_dimension(dimension_name, value_mm)名前付きの駆動寸法(例:D1@BlockExtrude、またはツールが dimensions で返した任意の名前)を変更し、再構築して再計測します。角度は度単位です
set_equation(equation)グローバル方程式または寸法を関連付ける変数を追加します(例:"W" = 40 の後に "width@Sketch1" = "W")。または、同じ名前を設定する既存の式を置き換えます。再構築に失敗するフィーチャー名を示します
set_equations(equations)方程式のリストを追加または置き換え、一度の再構築で適用します
list_equations / delete_equation(equation)方程式を一覧表示します(値、グローバル、破損)/名前またはインデックスで 1 つ削除します
slice_mesh(path, axis, heights_mm, frame)STL/3MF メッシュの断面をポリゴンループとして取得します。プロファイルとしてすぐに使用できます
compare_with_mesh(path, axis, heights_mm, frame, offset_mm)パーツの断面を参照メッシュと比較します(面積と範囲の差)
read_sketch(name)モデル座標でスケッチを読み取ります:線、円弧、円、スプライン、寸法、完全定義かどうか
add_sketch(plane, start_mm, segments, name)任意の平面上に線、円弧、スプラインの輪郭をスケッチします。完全定義され、曲線がつながる箇所は接線拘束され、原点から寸法が設定されます
extrude_sketch(sketch, depth_mm, reverse, name, up_to) / cut_sketch(sketch, depth_mm, reverse, name)名前で指定した既存のスケッチ(人が描いたもの)を使って形状を作成します。次の面までの押し出し、または止まり/全貫通のカットが可能です
list_dimensions()パーツ内のすべての寸法:名前(set_dimension 用)、フィーチャー、値、単位
list_features()パーツの履歴をツリー順に表示します(名前、種類、抑制状態)。再構築に失敗するフィーチャーと、完全定義されていないスケッチを示します
delete_feature(name, with_children, with_equations)手順を取り消します:フィーチャーとそのスケッチを削除します。他のフィーチャーが依存している場合は、それらの名前を示して処理を拒否しますが、with_children を指定すると削除します。破損する方程式名を示し、with_equations を指定するとそれらも削除します
suppress_feature(name, suppress)フィーチャーとその寸法を保持したまま一時的に除外します(バリエーションの検討に便利です)。suppress=False で従属フィーチャーとともに復元します
set_material(name, database, density_kg_m3)材料を割り当てて(例:6061 Alloy)、質量と密度を実値にします。SolidWorks にない材料(例:TPU)は密度とともに追加されます
rebuild(top_only)強制的に再構築し、エラーを報告します
get_mass_properties体積、質量、密度、表面積、重心、境界ボックス
get_bounding_boxパーツをぴったり囲む境界ボックス(最小値/最大値/サイズ、mm)
list_faces(component) / list_edges(face, feature, within_mm, min_length_mm)面(法線/面積/中心。円柱の場合は軸、半径、中心。アセンブリ内のコンポーネントも対象)とエッジ(種類/長さ/端点/軸)をインデックスで調べます。面、フィーチャー、ボックス、または長さで絞り込めます
check_printability(up, overhang_deg, min_wall_mm)印刷方向について、オーバーハング面(面積、最大傾斜、中心)、ベッドとの接触、高さを調べます。min_wall_mm を指定すると、それより薄い壁も調べます
export(path, file_format, quality, deviation_mm, angle_deg, per_component)STEP/STL/IGES/Parasolid/3MF にエクスポートします(サイレント実行、ファイルを検証)。STL/3MF のテセレーションでは、quality に coarse/fine を指定するか、deviation_mm と angle_deg を明示します。アセンブリの STL は 1 ファイル、またはコンポーネントごとに 1 ファイルで出力できます
screenshot(path, view, zoom_mm, show_planes, from_dir)標準ビュー(iso、front、top、…)または任意の方向から PNG/JPG/TIF を出力します。全体に合わせてズームするか、領域にズームできます。指定しない限り平面と軸は表示されません
make_drawing(path)A4 用紙に 2D 図面を PDF または編集可能な .slddrw として作成します。Front、Top、Right(第一角法)、等角投影図を配置し、モデル本来の寸法を各 1 回表示します
save_part(path) / open_part(path)ネイティブ形式の .sldprt を保存/開きます。open_part は STEP、IGES、Parasolid ファイルもパーツとしてインポートし、その上に形状を作成できます
close_part(save)現在のパーツまたはアセンブリを閉じます。パーツもアセンブリも指定されていない場合は、保存済みであれば SolidWorks のアクティブなドキュメントを閉じます
list_documents / activate_document(title)開いているドキュメント(パス、種類、未保存の変更)を一覧表示します/未保存のドキュメントも含め、再び現在のドキュメントにします
アセンブリツール
ツール目的
new_assembly空のアセンブリを新規作成します(現在のドキュメントになります)
open_assembly(path) / save_assembly(path)ネイティブの .sldasm を開く/保存します。open_assembly では STEP、IGES、Parasolid のアセンブリもインポートでき、パーツはその場でコンポーネントとしてインポートされます
insert_component(path, x_mm, y_mm, z_mm, fixed)パーツ、またはサブアセンブリとしての .sldasm を挿入し、その原点を (x, y, z) に配置します。最初のコンポーネントはデフォルトで固定されます
list_components各コンポーネントの名前、パス、固定状態、位置、回転、境界ボックス(向きを変えた場合も含むコンポーネント自体の範囲)、および寸法とエラーを含む合致を一覧表示します
delete_component(component)コンポーネントと、その合致をアセンブリから削除します
set_component_transform(name, x_mm, y_mm, z_mm, rx_deg, ry_deg, rz_deg)コンポーネントを移動/回転します。変換結果は読み戻して検証されます
add_mate(comp_a, face_a, comp_b, face_b, mate_type, distance_mm, angle_deg, flip)方向、または list_faces の #index で指定した2つの面を合致させます。指定できる種類は coincident、distance、parallel、perpendicular、angle、または円筒面間の concentric です。合致後に結果を読み戻します。拒否された合致は削除されます。距離または角度の合致は寸法を返します。ジョイント角度の場合は数値が1つ返されます
check_motion(dimension_name, values, distances)ジョイントを可動範囲内で段階的に動かします。各ステップで、重なり合うペアと指定した距離、最小距離とその発生位置、移動したコンポーネントを確認します
swept_region(component, dimension, values, heights_mm, axis, margin_mm, tolerance_mm, frame)ジョイントの可動範囲にわたってコンポーネントが平面上で占める領域を確認します。切削対象のパーツの座標系で、マージンを含む輪郭を返します
delete_mate(name) / suppress_mate(name, suppress)合致を削除するか、抑制します(抑制の解除も可能です)
check_interferenceソリッドが重なり合うコンポーネントのペアと、その体積を mm³ で表示します(面同士の接触は含みません)
measure_distance(component_a, component_b, point_mm, axis_mm)2つのコンポーネント間の最短距離を測定します。点までの距離(最近点と、点が材料内にあるかどうかを含む)、または軸までの距離を求めます
get_assembly_bounding_boxアセンブリ全体のタイトな境界ボックス(最小値/最大値/サイズ、mm)を取得します

export と screenshot はアセンブリでも使用できます。

面はコンポーネントの独自の座標系で方向を指定して選択します(+x、-z など)。 そのため、コンポーネントの向きを変えても、セレクターは同じ面を指します。中空パーツの空洞側を指定するには :inner を追加します(例:+y:inner)。外壁ではなく部屋の壁の内側を指定できます。

すべての長さ寸法の単位はミリメートルです。サーバーは境界で SolidWorks 内部のメートル/ラジアン単位との変換を行います。

アーキテクチャ

src/solidworks_mcp/
  binding.py     early-binding plumbing (wrap raw dispatches in generated classes)
  com_worker.py  one dedicated STA thread; all COM calls serialised through it
  session.py     SolidWorks operations (must run on the COM thread)
  server.py      FastMCP tools that delegate to session via the worker
  constants.py   enum values read from the installed typelib (verified)
  units.py       mm<->m, deg<->rad
  errors.py      SolidWorksError -> agent-facing {ok:false,error}

一見わかりにくいものの、どちらも基盤となる設計上の判断が2つあります。

  1. 早期バインディングが必須です。 このビルドでは GetActiveObject が GetTypeInfo() に失敗するディスパッチを返すため、EnsureDispatch/CastTo では型を推論できず、純粋な遅延バインディングでは動作しません(IModelDoc2.FirstFeature → DISP_E_MEMBERNOTFOUND)。インストール済みのタイプライブラリから makepy ラッパーを生成し、各生ディスパッチを適切なインターフェイスクラスでラップします。これにより、呼び出しは名前解決を回避して dispid 経由で InvokeTypes によって実行されます。binding.py を参照してください。

  2. 専用の COM スレッドを使用します。 COM は STA であり、スレッドに固定されます。MCP サーバーは asyncio 上で動作するため、すべての COM 処理を1つのワーカースレッド(com_worker.py)に固定し、ハンドラーはそこに処理を送信して完了を待ちます。これにより、非同期サーバーでは自動的には保証されない「1つの COM セッションを単一スレッドで扱う」というルールを積極的に適用します。

ステータスとロードマップ

**SOLIDWORKS 2026(3DEXPERIENCE R2026x)**で、エンドツーエンドの動作を実証済みです。

マイルストーン実証内容状態
M0起動中のSolidWorksへのCOM接続✅
M1新しい部品 → スケッチで長方形を作成 → 押し出し → 質量特性(体積が手計算と一致)✅
M2名前付き寸法を変更 → 再構築 → 体積が予測どおりに変化✅
M3MCP サーバーを介したエージェントの完全なループ:作成 → 測定 → 修正 → STEP/STLとスクリーンショットをエクスポート✅
M4回転、スイープ、ロフト、プロファイル、穴/ポケット/座ぐり、スロット、フィレット/面取り、シェル、パターン、数式、材料、保存/オープン🚧 進行中
M53Dプリント部品をエンドツーエンドで作成:完全なループを通して機能的な取り付けブラケットを作成 → すべての寸法を検証 → 高精細STLをエクスポート(scripts/m5_demo_bracket.py)✅
M6アセンブリ:コンポーネントを挿入して配置し、合致させ、干渉を確認 — すべての配置と合致を測定して確認(tests/test_assembly.py)✅

詳細な記録とロードマップについては、Docs/PROGRESS.mdをご覧ください。 フィードバックや貢献を歓迎します。

既知の制限事項

  • これまでに対応している形状:ボックス、円柱/円錐(回転)、任意形状の押し出しプロファイル、穴、多角形ポケット/スロット(cut_profile)、フィレット、面取り、シェル、直線+円形パターン(ボルト穴円)。さらに、数式、材料、形状の検査、.sldprtの保存/オープン、任意の平面にある穴+ポケット(モデル→スケッチ変換)、丸形フランジ(円盤+穴+ボルト穴円)、長穴(cut_slot、任意の角度に配置する長円形 — 初の円弧ベースのスケッチ)、一般的な回転形状(add_revolved_profile:任意の(r,z)プロファイルからシャフト、花瓶、リングを作成)、スイープパイプ/チューブ(add_swept_pipe:丸形プロファイルを丸みのある2Dパスに沿って配置)、ロフト(add_lofted_solid:積層した多角形プロファイルをブレンドしてトランジション/アダプターを作成)、自由形状の押し出し(add_extruded_spline:滑らかな閉じたスプラインから有機的/意匠的な輪郭を作成)、非円形スイープ(add_swept_profile:任意の断面形状をパスに沿って配置してレール、ガスケット、トリムを作成)、およびミラー(add_mirror:部品を通る平面を基準に、フィーチャーまたはボディ全体をミラー)。
  • 選択:平面の走査、法線/方向による面の選択(_planar_face_by_normal、+z/…、中空部品の空洞側には:innerを指定)、および軸または明示的なインデックスによるエッジの選択(_select_edges)。list_faces/list_edgesを使うと、エージェントは選択前に形状を確認できます。
  • アセンブリ(M6):コンポーネント、変換、合致、干渉検出に対応。コンポーネントパターン、コンテキスト内フィーチャー、コンフィギュレーション、図面、Simulation(FEA)は対象外です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。