Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- **Tools the U-joint needed** (#209), each checked on SolidWorks 2026:
- `add_mate` takes a face as a point on it (`face_a`, `face_b`) in that
part's own coordinates, so a pin mates concentric in its hole;
- `set_component_state` (new) fixes or floats a component and makes a
sub-assembly rigid or flexible, keeping its other settings;
- `create_reference_plane` makes planes at an angle about an `axis`, and
from a face (`face_point`), sloped or not; `create_axis` now names the
axis it made;
- `add_chamfer` takes an `angle` and `flip`;
- `create_extrusion` takes `thin_side` for thin walls, and an open
outline makes a bent plate.
- **Every tool accepts a plain dict** (#209). A script calling a tool
function with a dict gets the same validation as an MCP client; the
export file tools no longer need `format_type`.

- **Support levels for every tool** (#79). Each tool is `stable` (checked
live, no known fault), `beta` (a known fault or partial COM coverage),
`experimental` (not yet checked live) or `planned` (not implemented),
Expand Down Expand Up @@ -79,6 +94,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Fixed

- **`create_extrusion`'s reply says what was built** (#209): the end
condition SolidWorks used (`MidPlane` for `both_directions`), and the
thin wall. It used to echo `direction: blind`, so an agent concluded
`both_directions` was ignored.

- **One failed call could pause a tool for good** (#208). The server's router
fell back to the VBA adapter, which called back into the router, so one
failed `create_extrusion` counted as many failures and opened the circuit
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
[![SolidWorks](https://img.shields.io/badge/tested%20on-SolidWorks%202026-red)](https://www.solidworks.com/)
[![Coverage](https://codecov.io/gh/andrewbartels1/SolidworksMCP-python/branch/main/graph/badge.svg)](https://codecov.io/gh/andrewbartels1/SolidworksMCP-python)

Python MCP server for SolidWorks automation with 155 tools, plus an optional agent/prompt-testing layer for AI-assisted workflows.
Python MCP server for SolidWorks automation with 156 tools, plus an optional agent/prompt-testing layer for AI-assisted workflows.

[![155 MCP tools by support level, and how much of the core SolidWorks COM API they reach](docs/assets/progress/progress.svg)](https://andrewbartels1.github.io/SolidworksMCP-python/progress/)

Expand All @@ -33,7 +33,7 @@ Python MCP server for SolidWorks automation with 155 tools, plus an optional age
await adapter.create_extrusion(ExtrusionParameters(depth=10))
```

- **An MCP tool server on top of it.** The same calls, exposed as 155 MCP tools, so an agent such as Claude Code can build parts, assemblies and drawings from a description. Each tool carries a support level (stable, beta, experimental or planned), so the agent knows how far to trust it.
- **An MCP tool server on top of it.** The same calls, exposed as 156 MCP tools, so an agent such as Claude Code can build parts, assemblies and drawings from a description. Each tool carries a support level (stable, beta, experimental or planned), so the agent knows how far to trust it.

## See it work

Expand Down Expand Up @@ -186,6 +186,8 @@ Each GIF is a live test driving SolidWorks 2026 through the MCP tools, with the
</tr>
<tr>
<td width="33%" valign="top"><a href="https://andrewbartels1.github.io/SolidworksMCP-python/demos/#custom-property"><img src="docs/assets/demos/engineering-data/test_custom_property_round_trip.gif" alt="Custom properties" width="100%"></a><br><sub>Custom properties</sub></td>
<td width="33%" valign="top"><a href="https://andrewbartels1.github.io/SolidworksMCP-python/demos/#face-mate"><img src="docs/assets/demos/tool-gaps/test_a_pin_mates_concentric_in_its_hole_by_two_faces-motion.gif" alt="A pin seated in its hole by two face mates" width="100%"></a><br><sub>A pin seated in its hole by two face mates</sub></td>
<td width="33%" valign="top"><a href="https://andrewbartels1.github.io/SolidworksMCP-python/demos/#thin-plate"><img src="docs/assets/demos/tool-gaps/test_a_thin_wall_from_an_open_sketch_makes_a_bent_plate-motion.gif" alt="A bent plate from an open outline" width="100%"></a><br><sub>A bent plate from an open outline</sub></td>
</tr>
</table>

Expand Down Expand Up @@ -300,7 +302,7 @@ Add this to `%APPDATA%\Code\User\mcp.json`:
}
```

Run **MCP: List Servers** from the Command Palette and start `solidworks`. Its output should end with `Discovered 155 tools` (the count grows as tools are added).
Run **MCP: List Servers** from the Command Palette and start `solidworks`. Its output should end with `Discovered 156 tools` (the count grows as tools are added).

</details>

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
43 changes: 28 additions & 15 deletions docs/assets/progress/progress.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"tools": {
"total": 155,
"total": 156,
"by_level": {
"stable": 81,
"beta": 24,
"stable": 83,
"beta": 23,
"experimental": 10,
"planned": 40
},
Expand Down Expand Up @@ -41,7 +41,7 @@
"family": "modeling",
"level": "stable",
"reason": "",
"summary": "Bevel edges of the active part with an equal-distance chamfer at 45 degrees."
"summary": "Bevel edges of the active part with a chamfer: `distance` along one face at `angle` (45 by default)."
},
{
"name": "add_circle",
Expand Down Expand Up @@ -102,8 +102,8 @@
{
"name": "add_mate",
"family": "modeling",
"level": "beta",
"reason": "mates only reference planes and axes, by name, not faces.",
"level": "stable",
"reason": "",
"summary": "Mate two components of the active assembly: coincident, concentric, parallel, perpendicular, tangent, distance or angle."
},
{
Expand Down Expand Up @@ -412,7 +412,7 @@
"family": "modeling",
"level": "stable",
"reason": "",
"summary": "Add a reference plane parallel to a plane or flat face, offset by a distance in mm."
"summary": "Add a reference plane offset from, at an angle to, or on a plane or flat face."
},
{
"name": "create_reference_point",
Expand Down Expand Up @@ -502,7 +502,7 @@
"name": "export_dwg",
"family": "export",
"level": "beta",
"reason": "the file extension sets the format; `format_type` and `options` are ignored.",
"reason": "`options` is ignored; the file extension sets the format.",
"summary": "Export the active document to DWG, like File > Save As with the DWG type."
},
{
Expand All @@ -516,7 +516,7 @@
"name": "export_iges",
"family": "export",
"level": "beta",
"reason": "the file extension sets the format; `format_type` and `options` are ignored.",
"reason": "`options` is ignored; the file extension sets the format.",
"summary": "Export the active document to IGES, like File > Save As with the IGES type."
},
{
Expand All @@ -530,21 +530,21 @@
"name": "export_pdf",
"family": "export",
"level": "beta",
"reason": "the file extension sets the format; `format_type` and `options` are ignored.",
"reason": "`options` is ignored; the file extension sets the format.",
"summary": "Export the active document to PDF, like File > Save As with the PDF type."
},
{
"name": "export_step",
"family": "export",
"level": "beta",
"reason": "the file extension sets the format; `format_type` and `options` are ignored.",
"reason": "`options` is ignored; the file extension sets the format.",
"summary": "Export the active document to STEP, like File > Save As with the STEP type."
},
{
"name": "export_stl",
"family": "export",
"level": "beta",
"reason": "the file extension sets the format; `format_type` and `options` are ignored.",
"reason": "`options` is ignored; the file extension sets the format.",
"summary": "Export the active document to STL, like File > Save As with the STL type."
},
{
Expand Down Expand Up @@ -960,6 +960,13 @@
"reason": "",
"summary": "Select a feature, sketch, plane or component by name in the active document."
},
{
"name": "set_component_state",
"family": "modeling",
"level": "stable",
"reason": "",
"summary": "Fix or float a component of the active assembly, or make a sub-assembly rigid or flexible."
},
{
"name": "set_custom_property",
"family": "engineering_data",
Expand Down Expand Up @@ -1098,11 +1105,11 @@
"com": {
"type_library": "83A33D31-27C5-11CE-BFD4-00400513BB57x0x34x0",
"core": {
"covered": 208,
"covered": 214,
"total": 2838
},
"api": {
"covered": 232,
"covered": 238,
"total": 5985
},
"interfaces": [
Expand Down Expand Up @@ -1256,11 +1263,14 @@
"AddComponent4",
"AddComponent5",
"AddMate5",
"CompConfigProperties5",
"FeatureByName",
"FixComponent",
"GetBox",
"GetComponentByName",
"GetComponentCount",
"GetComponents"
"GetComponents",
"UnfixComponent"
],
"total": 198
},
Expand Down Expand Up @@ -1345,7 +1355,10 @@
"GetID",
"GetModelDoc2",
"GetPathName",
"GetSuppression2",
"GetType",
"IsEnvelope",
"IsFixed",
"IsSuppressed",
"Select",
"Select2",
Expand Down
26 changes: 13 additions & 13 deletions docs/assets/progress/progress.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading