# haunchen/solidworks-mcp architecture

> Architecture diagram of the GitHub repository haunchen/solidworks-mcp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/haunchen/solidworks-mcp
- Repository: https://github.com/haunchen/solidworks-mcp

## Overview

solidworks-mcp is a Streamable HTTP MCP server that exposes SolidWorks 2021 automation over pywin32 COM. A client requests document operations or drawing work; async tool handlers dispatch COM callables through a dedicated STA worker thread, and results return through MCP. The product covers document management, drawing creation and views, annotation and assembly analysis, plus image/PDF export. README documents the end-to-end drawing workflow and capabilities not visible in sampled excerpts; those links are cited to the README. Unsampled implementation details are represented only at their documented subsystem level.

Main entry points: [`src/server.py`](https://github.com/haunchen/solidworks-mcp/blob/main/src/server.py) (MCP Server), [`src/sw_connection.py`](https://github.com/haunchen/solidworks-mcp/blob/main/src/sw_connection.py) (COM Worker), [`src/tools/export.py`](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/export.py) (Image Capture), [`src/tools/file_ops.py`](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/file_ops.py) (File Operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["MCP Runtime"]
  node_server["MCP Server<br/>[server.py]"]
  node_config["Server Config<br/>[config.py]"]
  node_worker["COM Worker<br/>[sw_connection.py]"]
end

subgraph group_documents["Document Control"]
  node_fileops["File Operations<br/>[file_ops.py]"]
end

subgraph group_drawings["Drawing Work"]
  node_drawing_setup["Drawing and Views<br/>[drawing.py]"]
  node_dimensions["Dimensions<br/>[annotation.py]"]
  node_balloons["Balloons and BOM<br/>[annotation.py]"]
end

subgraph group_analysis["Analysis and Output"]
  node_assembly["Assembly Analysis<br/>[assembly.py]"]
  node_capture["Image Capture<br/>[export.py]"]
  node_drawing_save["Drawing Export<br/>[export.py]"]
end

node_client(("MCP Client"))
node_solidworks["SolidWorks COM"]
node_shared_folder[("Shared Folder")]

node_client -->|"sends MCP requests"| node_server
node_server -->|"reads settings"| node_config
node_server -->|"registers tools"| node_fileops
node_server -->|"registers tools"| node_drawing_setup
node_server -->|"registers tools"| node_dimensions
node_server -->|"registers tools"| node_balloons
node_server -->|"registers tools"| node_assembly
node_server -->|"registers tools"| node_capture
node_server -->|"registers tools"| node_drawing_save
node_fileops -->|"dispatches COM work"| node_worker
node_drawing_setup -->|"dispatches COM work"| node_worker
node_dimensions -->|"dispatches COM work"| node_worker
node_balloons -.->|"dispatches COM work"| node_worker
node_assembly -->|"dispatches COM work"| node_worker
node_capture -->|"dispatches COM work"| node_worker
node_drawing_save -->|"dispatches COM work"| node_worker
node_worker -->|"drives via COM"| node_solidworks
node_capture -->|"writes captures"| node_shared_folder
node_drawing_save -->|"writes PDF output"| node_shared_folder

click node_server "https://github.com/haunchen/solidworks-mcp/blob/main/src/server.py"
click node_config "https://github.com/haunchen/solidworks-mcp/blob/main/src/config.py"
click node_worker "https://github.com/haunchen/solidworks-mcp/blob/main/src/sw_connection.py"
click node_fileops "https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/file_ops.py"
click node_drawing_setup "https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/drawing.py"
click node_dimensions "https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/annotation.py"
click node_balloons "https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/annotation.py"
click node_assembly "https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/assembly.py"
click node_capture "https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/export.py"
click node_drawing_save "https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/export.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_server,node_config,node_worker,node_client toneBlue
class node_fileops,node_shared_folder toneAmber
class node_drawing_setup,node_dimensions,node_balloons toneMint
class node_assembly,node_capture,node_drawing_save toneRose
class node_solidworks toneIndigo
```

## Components

### MCP Runtime

- [MCP Server](https://github.com/haunchen/solidworks-mcp/blob/main/src/server.py): `src/server.py`
- [Server Config](https://github.com/haunchen/solidworks-mcp/blob/main/src/config.py): `src/config.py`
- [COM Worker](https://github.com/haunchen/solidworks-mcp/blob/main/src/sw_connection.py): `src/sw_connection.py`

### Document Control

- [File Operations](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/file_ops.py): `src/tools/file_ops.py`

### Drawing Work

- [Drawing and Views](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/drawing.py): `src/tools/drawing.py`
- [Dimensions](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/annotation.py): `src/tools/annotation.py`
- [Balloons and BOM](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/annotation.py): `src/tools/annotation.py`

### Analysis and Output

- [Assembly Analysis](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/assembly.py): `src/tools/assembly.py`
- [Image Capture](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/export.py): `src/tools/export.py`
- [Drawing Export](https://github.com/haunchen/solidworks-mcp/blob/main/src/tools/export.py): `src/tools/export.py`

### Other components

- **MCP Client**
- **SolidWorks COM**
- **Shared Folder**

## Connections

- MCP Client → MCP Server: sends MCP requests (evidence: `README.md`)
- MCP Server → Server Config: reads settings (evidence: `src/server.py`)
- MCP Server → File Operations: registers tools (evidence: `src/server.py`)
- MCP Server → Drawing and Views: registers tools (evidence: `src/server.py`)
- MCP Server → Dimensions: registers tools (evidence: `src/server.py`)
- MCP Server → Balloons and BOM: registers tools (evidence: `src/server.py`)
- MCP Server → Assembly Analysis: registers tools (evidence: `src/server.py`)
- MCP Server → Image Capture: registers tools (evidence: `src/server.py`)
- MCP Server → Drawing Export: registers tools (evidence: `src/server.py`)
- File Operations → COM Worker: dispatches COM work (evidence: `src/tools/file_ops.py`)
- Drawing and Views → COM Worker: dispatches COM work (evidence: `src/tools/drawing.py`)
- Dimensions → COM Worker: dispatches COM work (evidence: `src/tools/annotation.py`)
- Balloons and BOM → COM Worker: dispatches COM work (evidence: `src/tools/annotation.py`)
- Assembly Analysis → COM Worker: dispatches COM work (evidence: `src/tools/assembly.py`)
- Image Capture → COM Worker: dispatches COM work (evidence: `src/tools/export.py`)
- Drawing Export → COM Worker: dispatches COM work (evidence: `src/tools/export.py`)
- COM Worker → SolidWorks COM: drives via COM (evidence: `README.md`)
- Image Capture → Shared Folder: writes captures (evidence: `src/tools/export.py`)
- Drawing Export → Shared Folder: writes PDF output (evidence: `src/tools/export.py`)
