# SolidWorks (pypi · solidworks-mcp)

Model, measure and verify parametric parts and assemblies in a running SolidWorks (Windows).

- Trust score: 82/100 (high trust)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-01

## Components

- pypi · `solidworks-mcp`: 82/100 (this document), [markdown](https://verifymcp.io/servers/hjbaard-solidworks-mcp/solidworks-mcp.md), [page](https://verifymcp.io/servers/hjbaard-solidworks-mcp/solidworks-mcp)

## Channel facts

- Registry: `pypi`
- Package: `solidworks-mcp`
- Version: `0.5.0`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-01.

- **Supply Chain Security**: 100/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it.
  - 0 of 28 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 97/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to hjbaard/SolidWorks-MCP).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 3 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 5724 tokens (~104/item across 55 items; 54 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 20/100
  - Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 67/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 54 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 56 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the SolidWorks MCP server?

SolidWorks runs locally as a PyPI package, launched with uvx solidworks-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add hjbaard-solidworks-mcp -- uvx solidworks-mcp
```

### Cursor

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

### VS Code

```json
{
  "servers": {
    "hjbaard-solidworks-mcp": {
      "command": "uvx",
      "args": [
        "solidworks-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add hjbaard-solidworks-mcp -- uvx solidworks-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "hjbaard-solidworks-mcp": {
      "type": "local",
      "command": [
        "uvx",
        "solidworks-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add hjbaard-solidworks-mcp --command uvx --arg solidworks-mcp
```

### Hermes

```yaml
mcp_servers:
  hjbaard-solidworks-mcp:
    command: "uvx"
    args: ["solidworks-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "hjbaard-solidworks-mcp": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "solidworks-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add hjbaard-solidworks-mcp -t stdio -c uvx -a solidworks-mcp
```

### Other

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

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-01 (score 82, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-29 (score 81, +1)

No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-28 (score 80, +10)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-27 (score 70, +16)

- [security regression] Stability: 0.03 → unverified
- [security regression] Tool safety: pass → unverified
- [security improvement] Malware scan: unverified → pass
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Schema quality: pass → fail
- [functional] Package version: 0.4.0 → 0.5.0

### 2026-09-26 (score 54, +2)

- [functional regression] Schema quality: 4309 → 4934
- [functional improvement] Stability: unverified → 0.03
- [functional] First check of Schema quality: 100
- [functional] Package version: 0.3.0 → 0.4.0

### 2026-09-25 (score 52)

First indexed and scored.

## MCP tools (54)

### `get_status` (~24 tokens)

Report whether SolidWorks is reachable, its revision, and the active/current part.

### `new_part` (~21 tokens)

Create a new empty part document; it becomes the current part.

### `add_box` (~105 tokens)

Add a rectangular block: sketch width x height on the first plane, extrude by depth.

Dimensions are in millimetres. Returns the created feature name, the
addressable depth dimension ('D1@<name>'), `dimensions` (width, height,
depth; for set_dimension) and the resulting mass properties.

Input parameters:

- `depth_mm` (number, required)
- `height_mm` (number, required)
- `name` (string)
- `width_mm` (number, required)

### `add_extruded_profile` (~105 tokens)

Extrude a closed polygon into a solid: points_mm = [[x,y], ...] in mm.

The polygon (first-plane coordinates, same as add_box) is auto-closed and
extruded by depth_mm. Unlocks arbitrary prismatic shapes (brackets, profiles,
polygons). Returns mass properties (volume = polygon area * depth).

Input parameters:

- `depth_mm` (number, required)
- `name` (string)
- `points_mm` (array, required)

### `add_extruded_spline` (~126 tokens)

Extrude a smooth CLOSED spline through points: points_mm = [[x,y], ...] in mm.

Like add_extruded_profile but the outline is a smooth curve through the points
(free-form/organic shapes: cams, rounded outlines, aesthetic bosses), auto-closed
and extruded by depth_mm. A spline's area is not analytic, so the returned volume
is the measured value. Returns mass properties. Use new_part first.

Input parameters:

- `depth_mm` (number, required)
- `name` (string)
- `points_mm` (array, required)

### `add_disc` (~88 tokens)

Create a disc/puck/flange: a circle extruded along +Z, centred at the origin.

Flat faces are +Z/-Z, so add_hole and add_circular_pattern compose with it
(round-flange bolt circles). Returns mass properties. Use new_part first.

Input parameters:

- `diameter_mm` (number, required)
- `name` (string)
- `thickness_mm` (number, required)

### `add_cylinder` (~72 tokens)

Create a cylinder by revolving a profile 360° about an axis.

The first revolve-based primitive. Returns the resulting mass properties
(volume = π · r² · h). Use new_part first.

Input parameters:

- `diameter_mm` (number, required)
- `height_mm` (number, required)
- `name` (string)

### `add_cone` (~100 tokens)

Create a cone/frustum by revolving a trapezoidal profile 360°.

top_diameter_mm = 0 gives a full cone. Returns mass properties
(volume = π·h/3 · (rb² + rb·rt + rt²)). Use new_part first.

Input parameters:

- `bottom_diameter_mm` (number, required)
- `height_mm` (number, required)
- `name` (string)
- `top_diameter_mm` (number, required)

### `add_revolved_profile` (~138 tokens)

Revolve a closed (radius, height) profile about the axis at radius 0.

profile_mm = [[r, z], …] in mm: r = distance from the axis, z = position along
it. Auto-closed and spun angle_deg (default 360°). Points at r=0 give a solid
(turned shafts, vases); a profile offset from the axis gives a ring/torus. The
profile may not cross the axis. Returns mass properties. Use new_part first.

Input parameters:

- `angle_deg` (number)
- `name` (string)
- `profile_mm` (array, required)

### `add_swept_pipe` (~136 tokens)

Sweep a circular profile (pipe/tube/rod) along a 2D path on the Front plane.

path_mm = [[x, y], …] in mm is the centreline. Interior corners are rounded
with bend_radius_mm (required when the path turns; a 2-point straight path
needs none). diameter_mm = outer Ø; the round profile is auto-generated
perpendicular to the path. Returns mass properties. Use new_part first.

Input parameters:

- `bend_radius_mm` (number)
- `diameter_mm` (number, required)
- `name` (string)
- `path_mm` (array, required)

### `add_swept_profile` (~179 tokens)

Sweep an arbitrary closed PROFILE (cross-section) along a 2D PATH.

profile_mm = [[u,v],…] in mm: the closed cross-section on the Right plane (u →
world +Y, v → world +Z), centred near the origin. path_mm = [[x,y],…] in mm on
the Front plane — MUST start at the origin heading +X (the profile is
perpendicular to the path there). Path corners are rounded with bend_radius_mm.
Volume = profile_area · path_length. For non-round extrusions along a path
(rails, gaskets, trim, channels). Returns mass properties. Use new_part first.

Input parameters:

- `bend_radius_mm` (number)
- `name` (string)
- `path_mm` (array, required)
- `profile_mm` (array, required)

### `add_lofted_solid` (~162 tokens)

Loft (blend) 2+ closed polygon profiles on parallel planes stacked along +Z.

profiles_mm = [[[x,y],…], …] (mm), one polygon per profile in Front-plane
coords. heights_mm = the +Z offset (mm) of each profile, same length, strictly
increasing, starting at 0. A 2-profile loft is a ruled transition; 3+ blend
smoothly. Give profiles in a consistent vertex order to avoid twist. For
non-rotational transitions (round shapes: use add_revolved_profile/add_cone).
Returns mass properties. Use new_part first.

Input parameters:

- `heights_mm` (array, required)
- `name` (string)
- `profiles_mm` (array, required)

### `cut_profile_through_plane` (~156 tokens)

Cut a polygon sketched on a reference plane, symmetric about that plane.

plane: 'front' (z = 0), 'top' (y = 0) or 'right' (x = 0); points_mm = 3D
[x, y, z] points ON that plane (e.g. x = 0 for 'right'). Cuts through all in
both directions (depth_mm omitted) or depth_mm in total, centred on the
plane. For shapes seen from the side: wedges, windows, symmetric recesses.
Returns mass properties.

Input parameters:

- `depth_mm`
- `name` (string)
- `plane` (string, required)
- `points_mm` (array, required)

### `add_thread` (~231 tokens)

Cut a real, printable ISO metric thread (SolidWorks' own Thread feature).

size: e.g. 'M10x1.5', 'M3x0.5', 'M10x1.0' -- checked against SolidWorks'
thread profiles. (x_mm, y_mm, z_mm) = centre of the circular edge where the
thread starts: the end face of a rod, or the mouth of a hole (internal=True).
It runs length_mm into the material, right-handed. External: the rod must
have the nominal diameter (M10 -> Ø10). Internal: drill the ISO basic minor
diameter first, D - 1.0825*P (M10x1.5 -> Ø8.376). Returns mass properties
and the thread's size, pitch and diameters.

Input parameters:

- `internal` (boolean)
- `length_mm` (number, required)
- `name` (string)
- `size` (string, required)
- `x_mm` (number, required)
- `y_mm` (number, required)
- `z_mm` (number, required)

### `add_rib` (~177 tokens)

Add a straight stiffening rib / gusset in a plane parallel to the Front plane.

start_mm/end_mm = [x, y] ends of the rib's free edge (add_extruded_profile
coordinates); the plane sits at height z_mm. The rib grows toward toward_mm
(any [x, y] point on the side to fill, e.g. the inner corner of an L-bracket)
until it meets the part, thickness_mm thick, centred on the plane. Returns mass
properties: a triangular gusset with legs a and b adds a*b/2 * thickness.

Input parameters:

- `end_mm` (array, required)
- `name` (string)
- `start_mm` (array, required)
- `thickness_mm` (number, required)
- `toward_mm` (array, required)
- `z_mm` (number, required)

### `add_hole` (~115 tokens)

Cut a circular through-hole at (x_mm, y_mm), through the part's depth axis.

The hole runs straight through the thickness (the add_box extrude direction),
perpendicular to the width x height profile face. Coordinates share add_box's
system (the centre of a 40x20 profile is x=20, y=10). Returns mass properties.

Input parameters:

- `diameter_mm` (number, required)
- `name` (string)
- `x_mm` (number, required)
- `y_mm` (number, required)

### `add_counterbore_hole` (~161 tokens)

Cut a counterbored screw hole on the +Z face at (x_mm, y_mm).

A clearance shank through the thickness plus a larger coaxial flat-bottom
pocket of cbore_depth_mm from the top — so a cap-head screw or heat-set insert
sits flush/recessed (common for 3D-printed parts). cbore_diameter must exceed
clearance_diameter. Coordinates share add_box's system. Returns mass properties.

Input parameters:

- `cbore_depth_mm` (number, required)
- `cbore_diameter_mm` (number, required)
- `clearance_diameter_mm` (number, required)
- `name` (string)
- `x_mm` (number, required)
- `y_mm` (number, required)

### `add_hole_on_face` (~165 tokens)

Drill a round hole on ANY planar face, centred at 3D point (x, y, z) mm.

face is "+x"/"-x"/"+y"/"-y"/"+z"/"-z": the face facing that way through the
point is drilled, so a pocket floor or a step works too. Through all, or
depth_mm deep (blind: heat-set inserts, screw pilots). Returns mass
properties and `dimensions` (diameter, x, y, depth).

Input parameters:

- `depth_mm`
- `diameter_mm` (number, required)
- `face` (string, required)
- `name` (string)
- `x_mm` (number, required)
- `y_mm` (number, required)
- `z_mm` (number, required)

### `add_hole_wizard` (~222 tokens)

An ISO hole from SolidWorks' Hole Wizard, sized by its standard tables.

kind: 'clearance' (ISO 273), 'counterbore' (socket head cap screw),
'countersink' (socket countersunk screw) or 'tapped'; size e.g. 'M3'.
Centred at (x, y, z) mm on the face through that point; through all, or
depth_mm deep. fit: 'close' / 'normal' / 'loose'. For tapped holes
thread='modeled' cuts a real, printable ISO thread instead of SolidWorks'
cosmetic one. Returns the standard's sizes in `hole` and mass properties.

Input parameters:

- `depth_mm`
- `face` (string, required)
- `fit` (string)
- `kind` (string, required)
- `name`
- `size` (string, required)
- `thread` (string)
- `x_mm` (number, required)
- `y_mm` (number, required)
- `z_mm` (number, required)

### `add_boss_on_face` (~128 tokens)

Grow a round boss (standoff, peg) height_mm out of ANY planar face, centred at (x, y, z) mm.

The face is found as for add_hole_on_face. For a PCB standoff, add a blind
hole in its top. Returns mass properties and `dimensions`.

Input parameters:

- `diameter_mm` (number, required)
- `face` (string, required)
- `height_mm` (number, required)
- `name` (string)
- `x_mm` (number, required)
- `y_mm` (number, required)
- `z_mm` (number, required)

### `add_extruded_profile_on_face` (~104 tokens)

Grow a polygon boss depth_mm out of ANY planar face: points_mm = [[x,y,z], ...] in mm.

The 3D points lie on the face (found as for add_hole_on_face). For pads,
ledges and mounting blocks on an existing part. Returns mass properties.

Input parameters:

- `depth_mm` (number, required)
- `face` (string, required)
- `name` (string)
- `points_mm` (array, required)

### `cut_profile` (~88 tokens)

Cut a polygonal pocket/slot from the +Z face: points_mm = [[x,y], ...] in mm.

Auto-closed polygon, cut blind by depth_mm or all the way through when depth_mm
is omitted. For pockets, slots, cutouts. Returns mass properties.

Input parameters:

- `depth_mm`
- `name` (string)
- `points_mm` (array, required)

### `cut_profile_on_face` (~114 tokens)

Cut a polygon pocket/slot on ANY planar face: points_mm = [[x,y,z], ...] in mm.

The 3D points must lie on one face facing `face` ("+x"/"-x"/...), which is
found through them; cut blind by depth_mm or through when omitted. For side
pockets/cutouts. Returns mass properties.

Input parameters:

- `depth_mm`
- `face` (string, required)
- `name` (string)
- `points_mm` (array, required)

### `cut_slot` (~134 tokens)

Cut a straight slotted hole (obround) on the +Z face.

Centred at (x_mm, y_mm); length_mm is centre-to-centre of the rounded ends,
width_mm the slot width, angle_deg its orientation in the +Z plane (0 = +X).
Cut blind by depth_mm or through when omitted. Returns mass properties.

Input parameters:

- `angle_deg` (number)
- `depth_mm`
- `length_mm` (number, required)
- `name` (string)
- `width_mm` (number, required)
- `x_mm` (number, required)
- `y_mm` (number, required)

### `add_fillet` (~97 tokens)

Round edges of the current part with one constant radius (mm).

edges: "all" (default), "x"/"y"/"z" for edges parallel to that world axis, or
explicit indices like "2,5" from list_edges. Returns the number of edges
filleted and the resulting mass properties.

Input parameters:

- `edges` (string)
- `name` (string)
- `radius_mm` (number, required)

### `add_chamfer` (~96 tokens)

Chamfer edges of the current part at 45° with the given distance (mm).

edges: "all" (default), "x"/"y"/"z", or explicit indices like "2,5" from
list_edges. Returns the number of edges chamfered and the resulting mass
properties.

Input parameters:

- `distance_mm` (number, required)
- `edges` (string)
- `name` (string)

### `add_linear_pattern` (~93 tokens)

Repeat a feature `count` times, `spacing_mm` apart, along a direction.

direction: "+x"/"-x"/"+y"/... feature_name: the feature to repeat (e.g.
"Hole"); defaults to the most recently added feature. Returns mass properties.

Input parameters:

- `count` (integer, required)
- `direction` (string)
- `feature_name`
- `spacing_mm` (number, required)

### `add_circular_pattern` (~111 tokens)

Repeat a feature `count` times evenly around 360° about an axis.

The axis is the cylindrical face nearest (center_x_mm, center_y_mm) — e.g. a
centre hole drilled there. feature_name defaults to the last feature. Bolt
circle: drill a centre hole + one bolt hole, then pattern the bolt hole.

Input parameters:

- `center_x_mm` (number, required)
- `center_y_mm` (number, required)
- `count` (integer, required)
- `feature_name`

### `add_shell` (~77 tokens)

Hollow the current part to a wall of thickness_mm, opening one face.

open_face: a direction "+z"/"-z"/"+x"/... removes that planar face (open
shell); "none" makes a closed hollow. Returns the resulting mass properties.

Input parameters:

- `open_face` (string)
- `thickness_mm` (number, required)

### `set_dimension` (~78 tokens)

Set a named driving dimension (e.g. 'D1@BlockExtrude') in mm, rebuild, and remeasure.

This is the parametric edit at the heart of the correction loop. Every
modelling tool returns its dimensions by role in `dimensions`.

Input parameters:

- `dimension_name` (string, required)
- `value_mm` (number, required)

### `slice_mesh` (~128 tokens)

Cross-sections of an STL/3MF mesh at the given heights along axis 'x'/'y'/'z'.

For modelling a part that must fit something that only exists as a mesh.
Returns each section's closed loops, largest first, as polygon points (mm)
ready to use as profiles. frame (3MF): 'object' (the mesh's own frame) or
'build' (as placed on the slicer's plate).

Input parameters:

- `axis` (string, required)
- `frame` (string)
- `heights_mm` (array, required)
- `path` (string, required)

### `compare_with_mesh` (~111 tokens)

Compare the current part's cross-sections with a reference mesh's at the same heights.

offset_mm [dx, dy, dz] moves the mesh into the part's frame. A different
area means a misread feature; equal areas with different extents a
shifted frame. Returns per-section pairs and the worst differences.

Input parameters:

- `axis` (string, required)
- `frame` (string)
- `heights_mm` (array, required)
- `offset_mm`
- `path` (string, required)

### `list_dimensions` (~45 tokens)

List every dimension in the current part: name (for set_dimension), feature, value, unit.

For a part opened from disk, or when the names the tools returned are gone.

### `set_material` (~72 tokens)

Assign a material by name (e.g. "6061 Alloy", "AISI 1020", "ABS").

Makes mass and density reflect a real material instead of the 1000 kg/m³
default. Returns mass properties including density.

Input parameters:

- `database` (string)
- `name` (string, required)

### `set_equation` (~114 tokens)

Add a global equation linking dimensions, then rebuild and remeasure.

A SolidWorks equation string, e.g. '"D1@BlockExtrude" = 25' or
'"D1@BlockExtrude" = 2 * "D1@Sketch1"'. A global variable is '"W" = 40';
link a dimension to it with '"width@Sketch1" = "W"'. Persists a relation
(unlike set_dimension). Returns mass properties.

Input parameters:

- `equation` (string, required)

### `rebuild` (~30 tokens)

Force a rebuild of the current part and report whether it rebuilt without errors.

Input parameters:

- `top_only` (boolean)

### `get_mass_properties` (~35 tokens)

Get volume (mm^3), mass (kg), surface area (mm^2), centre of mass, and bounding box.

### `get_bounding_box` (~27 tokens)

Get the tight bounding box of the current part (min/max/size in mm).

### `list_faces` (~42 tokens)

List the part's faces (index, planar?, normal, area, centre) for inspection.

Indices are positional and shift as features are added; call again after edits.

### `list_edges` (~49 tokens)

List the part's edges (index, type; lines give axis/length/midpoint).

Use the index with add_fillet/add_chamfer edges="2,5" to target specific edges.

### `export` (~135 tokens)

Export the current part or assembly to STEP/STL/IGES/Parasolid/3MF (format from extension).

Silent (no prompts). Verifies the file appears on disk and reports its size.
For STL/3MF, tessellation resolution is set first: quality 'coarse'|'fine'
(default 'fine' for print quality), or pass deviation_mm (+ optional angle_deg)
for a reproducible custom resolution (overrides quality). Ignored for other formats.

Input parameters:

- `angle_deg`
- `deviation_mm`
- `file_format`
- `path` (string, required)
- `quality` (string)

### `screenshot` (~36 tokens)

Save an isometric, zoom-to-fit screenshot of the current part or assembly (PNG/BMP/JPG).

Input parameters:

- `path` (string, required)

### `close_part` (~30 tokens)

Close the current part or assembly without saving (export/save first if needed).

Input parameters:

- `save` (boolean)

### `save_part` (~36 tokens)

Save the current part to a native .sldprt file (so it can be reopened/edited).

Input parameters:

- `path` (string, required)

### `open_part` (~30 tokens)

Open an existing .sldprt file; it becomes the current part.

Input parameters:

- `path` (string, required)

### `new_assembly` (~50 tokens)

Create a new empty assembly document; it becomes the current document.

Assemblies compose saved parts: insert_component places each part, add_mate
constrains them, check_interference proves nothing overlaps.

### `open_assembly` (~31 tokens)

Open an existing .sldasm file; it becomes the current document.

Input parameters:

- `path` (string, required)

### `save_assembly` (~35 tokens)

Save the current assembly to a native .sldasm file (so it can be reopened).

Input parameters:

- `path` (string, required)

### `insert_component` (~132 tokens)

Insert a .sldprt into the current assembly with its ORIGIN at (x, y, z) mm.

The part's own origin lands exactly on that point, and the placement is read
back and verified. fixed=True pins the component; fixed=False leaves it free
for mates. The default fixes only the FIRST component, giving the assembly a
ground to build against. Returns the component's name, placement and box.

Input parameters:

- `fixed`
- `path` (string, required)
- `x_mm` (number)
- `y_mm` (number)
- `z_mm` (number)

### `list_components` (~53 tokens)

List the assembly's components: name, path, fixed, position, rotation, bounding box.

Positions are in mm and rotations in degrees, both in assembly coordinates;
the bounding box of each component is in assembly coordinates too.

### `set_component_transform` (~165 tokens)

Move/rotate a component: its origin to (x, y, z) mm, rotated rx/ry/rz degrees.

name is the component name ('Bed' or 'Bed-1'); rotations apply X, then Y,
then Z about the assembly axes, and work on a fixed component too. The
transform is read back and compared, so a move SolidWorks ignored (e.g. one
already pinned by mates) fails loudly instead of silently leaving the part
where it was.

Input parameters:

- `name` (string, required)
- `rx_deg` (number)
- `ry_deg` (number)
- `rz_deg` (number)
- `x_mm` (number, required)
- `y_mm` (number, required)
- `z_mm` (number, required)

### `add_mate` (~214 tokens)

Mate a planar face of one component to a planar face of another.

comp_a/comp_b are component names ('Bed' or 'Bed-1'). face_a/face_b select a
planar face by direction in that component's OWN frame: "+x"/"-x"/"+y"/...,
optionally "+y:inner" for the cavity side of a hollow part (the inside of a
room wall instead of its outer skin). mate_type: "coincident", "distance"
(uses distance_mm), "parallel" or "perpendicular". flip swaps the solution
if SolidWorks lands on the mirror side. The result is measured back from the
geometry after the rebuild and rejected if it is not what was asked.

Input parameters:

- `comp_a` (string, required)
- `comp_b` (string, required)
- `distance_mm` (number)
- `face_a` (string, required)
- `face_b` (string, required)
- `flip` (boolean)
- `mate_type` (string)

### `check_interference` (~59 tokens)

Report component pairs whose solids overlap, with the volume in mm^3.

Touching faces do not count (a bed standing on the floor is fine); only real
overlapping material does. count == 0 means the assembly is clash-free.

### `get_assembly_bounding_box` (~28 tokens)

Get the bounding box of the whole assembly (min/max/size in mm).

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/hjbaard-solidworks-mcp/solidworks-mcp#diagnostics

## Score history

- 2026-10-01: 82
- 2026-09-30: 81
- 2026-09-29: 81
- 2026-09-28: 80
- 2026-09-27: 70
- 2026-09-26: 54
- 2026-09-25: 52

## Common questions

### What is the SolidWorks MCP server?

SolidWorks is an MCP server listed in the public MCP registry as io.github.hjbaard/solidworks-mcp. Model, measure and verify parametric parts and assemblies in a running SolidWorks (Windows). This page covers its PyPI package (solidworks-mcp).

### Is the SolidWorks MCP server safe to use?

SolidWorks scores 82 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 1 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the SolidWorks MCP server expose?

SolidWorks exposes 54 tools: get_status, new_part, add_box, add_extruded_profile, add_extruded_spline, and 49 more. Their descriptions and schemas cost roughly 5,290 tokens of context every time the server is loaded.

### Is the SolidWorks MCP server still maintained?

SolidWorks is still listed as active in the MCP registry. We last reached this channel on 1 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the SolidWorks MCP server under?

SolidWorks declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/solidworks-mcp/
- Socket report: https://socket.dev/pypi/package/solidworks-mcp
- Repository: https://github.com/hjbaard/SolidWorks-MCP
- Changelog RSS feed: https://verifymcp.io/servers/hjbaard-solidworks-mcp/solidworks-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/hjbaard-solidworks-mcp/solidworks-mcp.json
- HTML version of this page: https://verifymcp.io/servers/hjbaard-solidworks-mcp/solidworks-mcp
