solidworks-mcp 0.1.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -0
- package/bin/solidworks-mcp-server.js +2 -0
- package/dist/bootstrap/bridge-bootstrap.d.ts +25 -0
- package/dist/bootstrap/bridge-bootstrap.d.ts.map +1 -0
- package/dist/bootstrap/bridge-bootstrap.js +175 -0
- package/dist/bootstrap/bridge-bootstrap.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +277 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/assembly-tools.d.ts +73 -0
- package/dist/tools/assembly-tools.d.ts.map +1 -0
- package/dist/tools/assembly-tools.js +92 -0
- package/dist/tools/assembly-tools.js.map +1 -0
- package/dist/tools/document-tools.d.ts +59 -0
- package/dist/tools/document-tools.d.ts.map +1 -0
- package/dist/tools/document-tools.js +82 -0
- package/dist/tools/document-tools.js.map +1 -0
- package/dist/tools/feature-tools.d.ts +83 -0
- package/dist/tools/feature-tools.d.ts.map +1 -0
- package/dist/tools/feature-tools.js +106 -0
- package/dist/tools/feature-tools.js.map +1 -0
- package/dist/tools/selection-tools.d.ts +58 -0
- package/dist/tools/selection-tools.d.ts.map +1 -0
- package/dist/tools/selection-tools.js +69 -0
- package/dist/tools/selection-tools.js.map +1 -0
- package/dist/tools/sketch-tools.d.ts +156 -0
- package/dist/tools/sketch-tools.d.ts.map +1 -0
- package/dist/tools/sketch-tools.js +123 -0
- package/dist/tools/sketch-tools.js.map +1 -0
- package/dist/transport/named-pipe-client.d.ts +53 -0
- package/dist/transport/named-pipe-client.d.ts.map +1 -0
- package/dist/transport/named-pipe-client.js +189 -0
- package/dist/transport/named-pipe-client.js.map +1 -0
- package/dist/types/solidworks.d.ts +60 -0
- package/dist/types/solidworks.d.ts.map +1 -0
- package/dist/types/solidworks.js +79 -0
- package/dist/types/solidworks.js.map +1 -0
- package/package.json +56 -0
- package/vendor/bridge/SolidWorks.Interop.sldworks.dll +0 -0
- package/vendor/bridge/SolidWorks.Interop.swconst.dll +0 -0
- package/vendor/bridge/SolidWorksBridge.deps.json +63 -0
- package/vendor/bridge/SolidWorksBridge.dll +0 -0
- package/vendor/bridge/SolidWorksBridge.exe +0 -0
- package/vendor/bridge/SolidWorksBridge.pdb +0 -0
- package/vendor/bridge/SolidWorksBridge.runtimeconfig.json +13 -0
package/README.md
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# solidworks-mcp
|
|
2
|
+
|
|
3
|
+
Windows-only MCP server for driving SolidWorks through a C# COM bridge.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```powershell
|
|
8
|
+
npm install -g solidworks-mcp
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
|
|
13
|
+
- Windows
|
|
14
|
+
- SolidWorks installed locally
|
|
15
|
+
- Node.js 18+
|
|
16
|
+
- .NET 8 runtime if you rebuild the bridge from source
|
|
17
|
+
|
|
18
|
+
## Package contents
|
|
19
|
+
|
|
20
|
+
- `dist/`: compiled MCP server
|
|
21
|
+
- `vendor/bridge/`: published `SolidWorksBridge.exe` bundle
|
|
22
|
+
- `bin/solidworks-mcp-server.js`: CLI entrypoint
|
|
23
|
+
|
|
24
|
+
## Run
|
|
25
|
+
|
|
26
|
+
```powershell
|
|
27
|
+
solidworks-mcp-server
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The server uses stdio for MCP and starts the bundled bridge automatically. If you need to override the bridge location, set `SOLIDWORKS_MCP_BRIDGE_ROOT` to a folder containing `SolidWorksBridge.exe`.
|
|
31
|
+
|
|
32
|
+
## Development
|
|
33
|
+
|
|
34
|
+
Use the repository root documentation for local development, tests, VS Code integration, and release workflow.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const PIPE_NAME = "SolidWorksMcpBridge";
|
|
2
|
+
export interface PipeConnectable {
|
|
3
|
+
readonly connected: boolean;
|
|
4
|
+
connect(): Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export interface BridgeBootstrapOptions {
|
|
7
|
+
pipeName?: string;
|
|
8
|
+
probeTimeoutMs?: number;
|
|
9
|
+
startupTimeoutMs?: number;
|
|
10
|
+
retryDelayMs?: number;
|
|
11
|
+
probePipe?: () => Promise<boolean>;
|
|
12
|
+
startBridgeProcess?: () => Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
interface BridgeLaunchPlan {
|
|
15
|
+
command: string;
|
|
16
|
+
args: string[];
|
|
17
|
+
cwd: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function resolveBridgeLaunchPlan(): BridgeLaunchPlan;
|
|
20
|
+
export declare function probeNamedPipe(pipeName: string, timeoutMs?: number): Promise<boolean>;
|
|
21
|
+
export declare function startBridgeProcess(): Promise<void>;
|
|
22
|
+
export declare function ensureBridgeReady(options?: BridgeBootstrapOptions): Promise<void>;
|
|
23
|
+
export declare function ensurePipeClientReady(client: PipeConnectable, options?: BridgeBootstrapOptions): Promise<void>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=bridge-bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bridge-bootstrap.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAM/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAyGD,wBAAgB,uBAAuB,IAAI,gBAAgB,CAY1D;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,SAA2B,GACnC,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBxD;AAED,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CA0Bf"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as net from 'node:net';
|
|
4
|
+
import * as path from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
export const PIPE_NAME = 'SolidWorksMcpBridge';
|
|
7
|
+
const DEFAULT_PROBE_TIMEOUT_MS = 500;
|
|
8
|
+
const DEFAULT_STARTUP_TIMEOUT_MS = 15000;
|
|
9
|
+
const DEFAULT_RETRY_DELAY_MS = 500;
|
|
10
|
+
const BRIDGE_ENV_ROOT = 'SOLIDWORKS_MCP_BRIDGE_ROOT';
|
|
11
|
+
function sleep(ms) {
|
|
12
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
+
}
|
|
14
|
+
async function tryConnectClient(client) {
|
|
15
|
+
try {
|
|
16
|
+
await client.connect();
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function getMcpServerDir() {
|
|
24
|
+
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
25
|
+
return path.resolve(moduleDir, '..', '..');
|
|
26
|
+
}
|
|
27
|
+
function getConfiguredBridgeRoot() {
|
|
28
|
+
const configuredRoot = process.env[BRIDGE_ENV_ROOT]?.trim();
|
|
29
|
+
if (!configuredRoot) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return path.resolve(configuredRoot);
|
|
33
|
+
}
|
|
34
|
+
function getBundledBridgeDir() {
|
|
35
|
+
return path.resolve(getMcpServerDir(), 'vendor', 'bridge');
|
|
36
|
+
}
|
|
37
|
+
function getBridgeProjectDir() {
|
|
38
|
+
return path.resolve(getMcpServerDir(), '..', 'bridge', 'SolidWorksBridge');
|
|
39
|
+
}
|
|
40
|
+
function getBridgeSearchRoots() {
|
|
41
|
+
return Array.from(new Set([
|
|
42
|
+
getConfiguredBridgeRoot(),
|
|
43
|
+
getBundledBridgeDir(),
|
|
44
|
+
getBridgeProjectDir(),
|
|
45
|
+
].filter((root) => Boolean(root))));
|
|
46
|
+
}
|
|
47
|
+
function resolveBridgeLaunchPlanFromRoot(bridgeRoot) {
|
|
48
|
+
const packagedExe = path.join(bridgeRoot, 'SolidWorksBridge.exe');
|
|
49
|
+
if (fs.existsSync(packagedExe)) {
|
|
50
|
+
return {
|
|
51
|
+
command: packagedExe,
|
|
52
|
+
args: [],
|
|
53
|
+
cwd: path.dirname(packagedExe),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const releaseExe = path.join(bridgeRoot, 'bin', 'Release', 'net8.0-windows', 'win-x64', 'SolidWorksBridge.exe');
|
|
57
|
+
if (fs.existsSync(releaseExe)) {
|
|
58
|
+
return {
|
|
59
|
+
command: releaseExe,
|
|
60
|
+
args: [],
|
|
61
|
+
cwd: path.dirname(releaseExe),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const debugExe = path.join(bridgeRoot, 'bin', 'Debug', 'net8.0-windows', 'win-x64', 'SolidWorksBridge.exe');
|
|
65
|
+
if (fs.existsSync(debugExe)) {
|
|
66
|
+
return {
|
|
67
|
+
command: debugExe,
|
|
68
|
+
args: [],
|
|
69
|
+
cwd: path.dirname(debugExe),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
const projectFile = path.join(bridgeRoot, 'SolidWorksBridge.csproj');
|
|
73
|
+
if (fs.existsSync(projectFile)) {
|
|
74
|
+
return {
|
|
75
|
+
command: 'dotnet',
|
|
76
|
+
args: ['run', '--project', projectFile],
|
|
77
|
+
cwd: path.dirname(projectFile),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
export function resolveBridgeLaunchPlan() {
|
|
83
|
+
const searchRoots = getBridgeSearchRoots();
|
|
84
|
+
for (const bridgeRoot of searchRoots) {
|
|
85
|
+
const plan = resolveBridgeLaunchPlanFromRoot(bridgeRoot);
|
|
86
|
+
if (plan) {
|
|
87
|
+
return plan;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
throw new Error(`SolidWorks bridge launch target not found. Checked: ${searchRoots.join(', ')}. Set ${BRIDGE_ENV_ROOT}, run scripts\\deploy-local.bat, or bundle the bridge into vendor\\bridge.`);
|
|
91
|
+
}
|
|
92
|
+
export function probeNamedPipe(pipeName, timeoutMs = DEFAULT_PROBE_TIMEOUT_MS) {
|
|
93
|
+
const pipePath = `\\\\.\\pipe\\${pipeName}`;
|
|
94
|
+
return new Promise((resolve) => {
|
|
95
|
+
const socket = net.connect(pipePath);
|
|
96
|
+
let settled = false;
|
|
97
|
+
const finish = (connected) => {
|
|
98
|
+
if (settled) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
settled = true;
|
|
102
|
+
socket.removeAllListeners();
|
|
103
|
+
socket.destroy();
|
|
104
|
+
resolve(connected);
|
|
105
|
+
};
|
|
106
|
+
const timer = setTimeout(() => finish(false), timeoutMs);
|
|
107
|
+
socket.once('connect', () => {
|
|
108
|
+
clearTimeout(timer);
|
|
109
|
+
finish(true);
|
|
110
|
+
});
|
|
111
|
+
socket.once('error', () => {
|
|
112
|
+
clearTimeout(timer);
|
|
113
|
+
finish(false);
|
|
114
|
+
});
|
|
115
|
+
socket.once('close', () => {
|
|
116
|
+
clearTimeout(timer);
|
|
117
|
+
finish(false);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
export async function startBridgeProcess() {
|
|
122
|
+
const plan = resolveBridgeLaunchPlan();
|
|
123
|
+
await new Promise((resolve, reject) => {
|
|
124
|
+
const child = spawn(plan.command, plan.args, {
|
|
125
|
+
cwd: plan.cwd,
|
|
126
|
+
detached: true,
|
|
127
|
+
stdio: 'ignore',
|
|
128
|
+
windowsHide: true,
|
|
129
|
+
});
|
|
130
|
+
child.once('error', reject);
|
|
131
|
+
child.once('spawn', () => {
|
|
132
|
+
child.unref();
|
|
133
|
+
resolve();
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
export async function ensureBridgeReady(options = {}) {
|
|
138
|
+
const pipeName = options.pipeName ?? PIPE_NAME;
|
|
139
|
+
const probePipe = options.probePipe ?? (() => probeNamedPipe(pipeName, options.probeTimeoutMs));
|
|
140
|
+
const startBridge = options.startBridgeProcess ?? startBridgeProcess;
|
|
141
|
+
const startupTimeoutMs = options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
|
|
142
|
+
const retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
|
|
143
|
+
if (await probePipe()) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
await startBridge();
|
|
147
|
+
const deadline = Date.now() + startupTimeoutMs;
|
|
148
|
+
while (Date.now() < deadline) {
|
|
149
|
+
if (await probePipe()) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
await sleep(retryDelayMs);
|
|
153
|
+
}
|
|
154
|
+
throw new Error(`Timed out waiting for SolidWorks bridge pipe "${pipeName}" after ${startupTimeoutMs}ms.`);
|
|
155
|
+
}
|
|
156
|
+
export async function ensurePipeClientReady(client, options = {}) {
|
|
157
|
+
if (client.connected) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (await tryConnectClient(client)) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
await ensureBridgeReady(options);
|
|
164
|
+
const startupTimeoutMs = options.startupTimeoutMs ?? DEFAULT_STARTUP_TIMEOUT_MS;
|
|
165
|
+
const retryDelayMs = options.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
|
|
166
|
+
const deadline = Date.now() + startupTimeoutMs;
|
|
167
|
+
while (Date.now() < deadline) {
|
|
168
|
+
if (await tryConnectClient(client)) {
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
await sleep(retryDelayMs);
|
|
172
|
+
}
|
|
173
|
+
throw new Error(`Timed out connecting MCP client to bridge pipe "${options.pipeName ?? PIPE_NAME}" after ${startupTimeoutMs}ms.`);
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=bridge-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge-bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap/bridge-bootstrap.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmGA,eAAO,MAAM,WAAW,0BAA0B,CAAC;AACnD,eAAO,MAAM,cAAc,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { PIPE_NAME, ensurePipeClientReady } from './bootstrap/bridge-bootstrap.js';
|
|
6
|
+
import { NamedPipeClient } from './transport/named-pipe-client.js';
|
|
7
|
+
// ── Tool modules ──────────────────────────────────────────────
|
|
8
|
+
import { ConnectSchema, DisconnectSchema, NewDocumentSchema, OpenDocumentSchema, CloseDocumentSchema, SaveDocumentSchema, ListDocumentsSchema, GetActiveDocumentSchema, swConnect, swDisconnect, swNewDocument, swOpenDocument, swCloseDocument, swSaveDocument, swListDocuments, swGetActiveDocument, } from './tools/document-tools.js';
|
|
9
|
+
import { SelectByNameSchema, ListEntitiesSchema, SelectEntitySchema, ClearSelectionSchema, swSelectByName, swListEntities, swSelectEntity, swClearSelection, } from './tools/selection-tools.js';
|
|
10
|
+
import { InsertSketchSchema, FinishSketchSchema, AddPointSchema, AddEllipseSchema, AddPolygonSchema, AddTextSchema, AddLineSchema, AddCircleSchema, AddRectangleSchema, AddArcSchema, swInsertSketch, swFinishSketch, swAddPoint, swAddEllipse, swAddPolygon, swAddText, swAddLine, swAddCircle, swAddRectangle, swAddArc, } from './tools/sketch-tools.js';
|
|
11
|
+
import { ExtrudeSchema, ExtrudeCutSchema, RevolveSchema, FilletSchema, ChamferSchema, ShellSchema, SimpleHoleSchema, swExtrude, swExtrudeCut, swRevolve, swFillet, swChamfer, swShell, swSimpleHole, } from './tools/feature-tools.js';
|
|
12
|
+
import { InsertComponentSchema, AddMateCoincidentSchema, AddMateConcentricSchema, AddMateParallelSchema, AddMateDistanceSchema, AddMateAngleSchema, ListComponentsSchema, swInsertComponent, swAddMateCoincident, swAddMateConcentric, swAddMateParallel, swAddMateDistance, swAddMateAngle, swListComponents, } from './tools/assembly-tools.js';
|
|
13
|
+
// ── Server metadata ───────────────────────────────────────────
|
|
14
|
+
export const SERVER_NAME = 'solidworks-mcp-server';
|
|
15
|
+
export const SERVER_VERSION = '0.1.0';
|
|
16
|
+
// ── Tool definitions ──────────────────────────────────────────
|
|
17
|
+
const TOOLS = [
|
|
18
|
+
// Document
|
|
19
|
+
{ name: 'sw_connect', description: 'Connect to the running SolidWorks instance', inputSchema: ConnectSchema },
|
|
20
|
+
{ name: 'sw_disconnect', description: 'Disconnect from SolidWorks', inputSchema: DisconnectSchema },
|
|
21
|
+
{ name: 'sw_new_document', description: 'Create a new SolidWorks document (Part, Assembly, or Drawing)', inputSchema: NewDocumentSchema },
|
|
22
|
+
{ name: 'sw_open_document', description: 'Open an existing SolidWorks document from disk', inputSchema: OpenDocumentSchema },
|
|
23
|
+
{ name: 'sw_close_document', description: 'Close an open SolidWorks document', inputSchema: CloseDocumentSchema },
|
|
24
|
+
{ name: 'sw_save_document', description: 'Save an open SolidWorks document', inputSchema: SaveDocumentSchema },
|
|
25
|
+
{ name: 'sw_list_documents', description: 'List all currently open SolidWorks documents', inputSchema: ListDocumentsSchema },
|
|
26
|
+
{ name: 'sw_get_active_document', description: 'Get the currently active SolidWorks document', inputSchema: GetActiveDocumentSchema },
|
|
27
|
+
// Selection
|
|
28
|
+
{ name: 'sw_select_by_name', description: 'Select an entity in SolidWorks by name and type (e.g. plane, face, edge)', inputSchema: SelectByNameSchema },
|
|
29
|
+
{ name: 'sw_list_entities', description: 'List selectable topology entities on the active part or assembly so downstream tools can target exact faces, edges, or vertices', inputSchema: ListEntitiesSchema },
|
|
30
|
+
{ name: 'sw_select_entity', description: 'Select a topology entity by the index returned from sw_list_entities', inputSchema: SelectEntitySchema },
|
|
31
|
+
{ name: 'sw_clear_selection', description: 'Clear all current selections in SolidWorks', inputSchema: ClearSelectionSchema },
|
|
32
|
+
// Sketch
|
|
33
|
+
{ name: 'sw_insert_sketch', description: 'Open a new sketch on the currently selected plane or face', inputSchema: InsertSketchSchema },
|
|
34
|
+
{ name: 'sw_finish_sketch', description: 'Close (finish) the currently open sketch', inputSchema: FinishSketchSchema },
|
|
35
|
+
{ name: 'sw_add_point', description: 'Add a point to the open sketch', inputSchema: AddPointSchema },
|
|
36
|
+
{ name: 'sw_add_ellipse', description: 'Add an ellipse to the open sketch', inputSchema: AddEllipseSchema },
|
|
37
|
+
{ name: 'sw_add_polygon', description: 'Add a regular polygon to the open sketch', inputSchema: AddPolygonSchema },
|
|
38
|
+
{ name: 'sw_add_text', description: 'Add text to the open sketch', inputSchema: AddTextSchema },
|
|
39
|
+
{ name: 'sw_add_line', description: 'Add a line segment to the open sketch', inputSchema: AddLineSchema },
|
|
40
|
+
{ name: 'sw_add_circle', description: 'Add a circle to the open sketch', inputSchema: AddCircleSchema },
|
|
41
|
+
{ name: 'sw_add_rectangle', description: 'Add a rectangle to the open sketch', inputSchema: AddRectangleSchema },
|
|
42
|
+
{ name: 'sw_add_arc', description: 'Add an arc to the open sketch', inputSchema: AddArcSchema },
|
|
43
|
+
// Feature
|
|
44
|
+
{ name: 'sw_extrude', description: 'Extrude the current open sketch into a 3D boss feature. Call while sketch is in edit mode (do not finish sketch first).', inputSchema: ExtrudeSchema },
|
|
45
|
+
{ name: 'sw_extrude_cut', description: 'Extrude-cut the current open sketch to remove material. Call while sketch is in edit mode.', inputSchema: ExtrudeCutSchema },
|
|
46
|
+
{ name: 'sw_revolve', description: 'Revolve the current open sketch around the selected axis', inputSchema: RevolveSchema },
|
|
47
|
+
{ name: 'sw_fillet', description: 'Apply a fillet to the selected edges', inputSchema: FilletSchema },
|
|
48
|
+
{ name: 'sw_chamfer', description: 'Apply a chamfer to the selected edges', inputSchema: ChamferSchema },
|
|
49
|
+
{ name: 'sw_shell', description: 'Shell the 3D body, removing the selected open faces', inputSchema: ShellSchema },
|
|
50
|
+
{ name: 'sw_simple_hole', description: 'Create a simple hole at the selected point on a face', inputSchema: SimpleHoleSchema },
|
|
51
|
+
// Assembly
|
|
52
|
+
{ name: 'sw_insert_component', description: 'Insert a part or sub-assembly into the active assembly', inputSchema: InsertComponentSchema },
|
|
53
|
+
{ name: 'sw_add_mate_coincident', description: 'Add a Coincident mate between two selected entities in the assembly', inputSchema: AddMateCoincidentSchema },
|
|
54
|
+
{ name: 'sw_add_mate_concentric', description: 'Add a Concentric mate between two selected circular entities', inputSchema: AddMateConcentricSchema },
|
|
55
|
+
{ name: 'sw_add_mate_parallel', description: 'Add a Parallel mate between two selected planar entities', inputSchema: AddMateParallelSchema },
|
|
56
|
+
{ name: 'sw_add_mate_distance', description: 'Add a Distance mate between two selected entities', inputSchema: AddMateDistanceSchema },
|
|
57
|
+
{ name: 'sw_add_mate_angle', description: 'Add an Angle mate between two selected entities', inputSchema: AddMateAngleSchema },
|
|
58
|
+
{ name: 'sw_list_components', description: 'List all top-level components in the active assembly', inputSchema: ListComponentsSchema },
|
|
59
|
+
];
|
|
60
|
+
// ── Convert Zod schema to MCP JSON Schema ─────────────────────
|
|
61
|
+
function zodToJsonSchema(schema) {
|
|
62
|
+
// Light-weight converter for the subset of Zod used here
|
|
63
|
+
if (schema instanceof z.ZodObject) {
|
|
64
|
+
const shape = schema.shape;
|
|
65
|
+
const properties = {};
|
|
66
|
+
const required = [];
|
|
67
|
+
for (const [key, val] of Object.entries(shape)) {
|
|
68
|
+
properties[key] = zodToJsonSchema(val);
|
|
69
|
+
const isOptional = val instanceof z.ZodOptional ||
|
|
70
|
+
val instanceof z.ZodDefault;
|
|
71
|
+
if (!isOptional)
|
|
72
|
+
required.push(key);
|
|
73
|
+
}
|
|
74
|
+
const result = { type: 'object', properties };
|
|
75
|
+
if (required.length > 0)
|
|
76
|
+
result.required = required;
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
if (schema instanceof z.ZodString)
|
|
80
|
+
return { type: 'string', description: schema.description };
|
|
81
|
+
if (schema instanceof z.ZodNumber)
|
|
82
|
+
return { type: 'number', description: schema.description };
|
|
83
|
+
if (schema instanceof z.ZodBoolean)
|
|
84
|
+
return { type: 'boolean', description: schema.description };
|
|
85
|
+
if (schema instanceof z.ZodEnum)
|
|
86
|
+
return { type: 'string', enum: schema.options, description: schema.description };
|
|
87
|
+
if (schema instanceof z.ZodOptional)
|
|
88
|
+
return zodToJsonSchema(schema.unwrap());
|
|
89
|
+
if (schema instanceof z.ZodDefault)
|
|
90
|
+
return zodToJsonSchema(schema._def.innerType);
|
|
91
|
+
return {};
|
|
92
|
+
}
|
|
93
|
+
// ── Main ──────────────────────────────────────────────────────
|
|
94
|
+
async function main() {
|
|
95
|
+
const client = new NamedPipeClient({ pipeName: PIPE_NAME });
|
|
96
|
+
let ensureClientReadyPromise = null;
|
|
97
|
+
const ensureClientReady = async () => {
|
|
98
|
+
if (client.connected) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (!ensureClientReadyPromise) {
|
|
102
|
+
ensureClientReadyPromise = ensurePipeClientReady(client, { pipeName: PIPE_NAME }).finally(() => {
|
|
103
|
+
ensureClientReadyPromise = null;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
await ensureClientReadyPromise;
|
|
107
|
+
};
|
|
108
|
+
await ensureClientReady();
|
|
109
|
+
const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
|
|
110
|
+
// List tools
|
|
111
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
112
|
+
tools: TOOLS.map((t) => ({
|
|
113
|
+
name: t.name,
|
|
114
|
+
description: t.description,
|
|
115
|
+
inputSchema: zodToJsonSchema(t.inputSchema),
|
|
116
|
+
})),
|
|
117
|
+
}));
|
|
118
|
+
// Call tool
|
|
119
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
120
|
+
const { name, arguments: args } = request.params;
|
|
121
|
+
const params = (args ?? {});
|
|
122
|
+
try {
|
|
123
|
+
if (name !== 'sw_disconnect') {
|
|
124
|
+
await ensureClientReady();
|
|
125
|
+
}
|
|
126
|
+
let result;
|
|
127
|
+
switch (name) {
|
|
128
|
+
// Document
|
|
129
|
+
case 'sw_connect':
|
|
130
|
+
result = await swConnect(client);
|
|
131
|
+
break;
|
|
132
|
+
case 'sw_disconnect':
|
|
133
|
+
result = await swDisconnect(client);
|
|
134
|
+
break;
|
|
135
|
+
case 'sw_new_document':
|
|
136
|
+
result = await swNewDocument(client, NewDocumentSchema.parse(params));
|
|
137
|
+
break;
|
|
138
|
+
case 'sw_open_document':
|
|
139
|
+
result = await swOpenDocument(client, OpenDocumentSchema.parse(params));
|
|
140
|
+
break;
|
|
141
|
+
case 'sw_close_document':
|
|
142
|
+
result = await swCloseDocument(client, CloseDocumentSchema.parse(params));
|
|
143
|
+
break;
|
|
144
|
+
case 'sw_save_document':
|
|
145
|
+
result = await swSaveDocument(client, SaveDocumentSchema.parse(params));
|
|
146
|
+
break;
|
|
147
|
+
case 'sw_list_documents':
|
|
148
|
+
result = await swListDocuments(client);
|
|
149
|
+
break;
|
|
150
|
+
case 'sw_get_active_document':
|
|
151
|
+
result = await swGetActiveDocument(client);
|
|
152
|
+
break;
|
|
153
|
+
// Selection
|
|
154
|
+
case 'sw_select_by_name':
|
|
155
|
+
result = await swSelectByName(client, SelectByNameSchema.parse(params));
|
|
156
|
+
break;
|
|
157
|
+
case 'sw_list_entities':
|
|
158
|
+
result = await swListEntities(client, ListEntitiesSchema.parse(params));
|
|
159
|
+
break;
|
|
160
|
+
case 'sw_select_entity':
|
|
161
|
+
result = await swSelectEntity(client, SelectEntitySchema.parse(params));
|
|
162
|
+
break;
|
|
163
|
+
case 'sw_clear_selection':
|
|
164
|
+
await swClearSelection(client);
|
|
165
|
+
result = { cleared: true };
|
|
166
|
+
break;
|
|
167
|
+
// Sketch
|
|
168
|
+
case 'sw_insert_sketch':
|
|
169
|
+
await swInsertSketch(client);
|
|
170
|
+
result = { ok: true };
|
|
171
|
+
break;
|
|
172
|
+
case 'sw_finish_sketch':
|
|
173
|
+
await swFinishSketch(client);
|
|
174
|
+
result = { ok: true };
|
|
175
|
+
break;
|
|
176
|
+
case 'sw_add_point':
|
|
177
|
+
result = await swAddPoint(client, AddPointSchema.parse(params));
|
|
178
|
+
break;
|
|
179
|
+
case 'sw_add_ellipse':
|
|
180
|
+
result = await swAddEllipse(client, AddEllipseSchema.parse(params));
|
|
181
|
+
break;
|
|
182
|
+
case 'sw_add_polygon':
|
|
183
|
+
result = await swAddPolygon(client, AddPolygonSchema.parse(params));
|
|
184
|
+
break;
|
|
185
|
+
case 'sw_add_text':
|
|
186
|
+
result = await swAddText(client, AddTextSchema.parse(params));
|
|
187
|
+
break;
|
|
188
|
+
case 'sw_add_line':
|
|
189
|
+
result = await swAddLine(client, AddLineSchema.parse(params));
|
|
190
|
+
break;
|
|
191
|
+
case 'sw_add_circle':
|
|
192
|
+
result = await swAddCircle(client, AddCircleSchema.parse(params));
|
|
193
|
+
break;
|
|
194
|
+
case 'sw_add_rectangle':
|
|
195
|
+
result = await swAddRectangle(client, AddRectangleSchema.parse(params));
|
|
196
|
+
break;
|
|
197
|
+
case 'sw_add_arc':
|
|
198
|
+
result = await swAddArc(client, AddArcSchema.parse(params));
|
|
199
|
+
break;
|
|
200
|
+
// Feature
|
|
201
|
+
case 'sw_extrude':
|
|
202
|
+
result = await swExtrude(client, ExtrudeSchema.parse(params));
|
|
203
|
+
break;
|
|
204
|
+
case 'sw_extrude_cut':
|
|
205
|
+
result = await swExtrudeCut(client, ExtrudeCutSchema.parse(params));
|
|
206
|
+
break;
|
|
207
|
+
case 'sw_revolve':
|
|
208
|
+
result = await swRevolve(client, RevolveSchema.parse(params));
|
|
209
|
+
break;
|
|
210
|
+
case 'sw_fillet':
|
|
211
|
+
result = await swFillet(client, FilletSchema.parse(params));
|
|
212
|
+
break;
|
|
213
|
+
case 'sw_chamfer':
|
|
214
|
+
result = await swChamfer(client, ChamferSchema.parse(params));
|
|
215
|
+
break;
|
|
216
|
+
case 'sw_shell':
|
|
217
|
+
result = await swShell(client, ShellSchema.parse(params));
|
|
218
|
+
break;
|
|
219
|
+
case 'sw_simple_hole':
|
|
220
|
+
result = await swSimpleHole(client, SimpleHoleSchema.parse(params));
|
|
221
|
+
break;
|
|
222
|
+
// Assembly
|
|
223
|
+
case 'sw_insert_component':
|
|
224
|
+
result = await swInsertComponent(client, InsertComponentSchema.parse(params));
|
|
225
|
+
break;
|
|
226
|
+
case 'sw_add_mate_coincident':
|
|
227
|
+
await swAddMateCoincident(client, AddMateCoincidentSchema.parse(params));
|
|
228
|
+
result = { ok: true };
|
|
229
|
+
break;
|
|
230
|
+
case 'sw_add_mate_concentric':
|
|
231
|
+
await swAddMateConcentric(client, AddMateConcentricSchema.parse(params));
|
|
232
|
+
result = { ok: true };
|
|
233
|
+
break;
|
|
234
|
+
case 'sw_add_mate_parallel':
|
|
235
|
+
await swAddMateParallel(client, AddMateParallelSchema.parse(params));
|
|
236
|
+
result = { ok: true };
|
|
237
|
+
break;
|
|
238
|
+
case 'sw_add_mate_distance':
|
|
239
|
+
await swAddMateDistance(client, AddMateDistanceSchema.parse(params));
|
|
240
|
+
result = { ok: true };
|
|
241
|
+
break;
|
|
242
|
+
case 'sw_add_mate_angle':
|
|
243
|
+
await swAddMateAngle(client, AddMateAngleSchema.parse(params));
|
|
244
|
+
result = { ok: true };
|
|
245
|
+
break;
|
|
246
|
+
case 'sw_list_components':
|
|
247
|
+
result = await swListComponents(client);
|
|
248
|
+
break;
|
|
249
|
+
default:
|
|
250
|
+
return {
|
|
251
|
+
content: [{ type: 'text', text: `Unknown tool: ${name}` }],
|
|
252
|
+
isError: true,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
return {
|
|
256
|
+
content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
261
|
+
return {
|
|
262
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
263
|
+
isError: true,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
const transport = new StdioServerTransport();
|
|
268
|
+
await server.connect(transport);
|
|
269
|
+
}
|
|
270
|
+
// Run only when this is the entry-point module (not during tests)
|
|
271
|
+
if (process.argv[1] && !process.env.VITEST) {
|
|
272
|
+
main().catch((err) => {
|
|
273
|
+
console.error('Fatal error:', err);
|
|
274
|
+
process.exit(1);
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { NamedPipeClient } from '../transport/named-pipe-client.js';
|
|
3
|
+
export interface SwComponentInfo {
|
|
4
|
+
name: string;
|
|
5
|
+
path: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const MateAlignSchema: z.ZodDefault<z.ZodEnum<["None", "AntiAligned", "Closest"]>>;
|
|
8
|
+
export declare const InsertComponentSchema: z.ZodObject<{
|
|
9
|
+
filePath: z.ZodString;
|
|
10
|
+
x: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
y: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
z: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
filePath: string;
|
|
17
|
+
z: number;
|
|
18
|
+
}, {
|
|
19
|
+
filePath: string;
|
|
20
|
+
x?: number | undefined;
|
|
21
|
+
y?: number | undefined;
|
|
22
|
+
z?: number | undefined;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const AddMateCoincidentSchema: z.ZodObject<{
|
|
25
|
+
align: z.ZodOptional<z.ZodDefault<z.ZodEnum<["None", "AntiAligned", "Closest"]>>>;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
28
|
+
}, {
|
|
29
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
30
|
+
}>;
|
|
31
|
+
export declare const AddMateConcentricSchema: z.ZodObject<{
|
|
32
|
+
align: z.ZodOptional<z.ZodDefault<z.ZodEnum<["None", "AntiAligned", "Closest"]>>>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
35
|
+
}, {
|
|
36
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
37
|
+
}>;
|
|
38
|
+
export declare const AddMateParallelSchema: z.ZodObject<{
|
|
39
|
+
align: z.ZodOptional<z.ZodDefault<z.ZodEnum<["None", "AntiAligned", "Closest"]>>>;
|
|
40
|
+
}, "strip", z.ZodTypeAny, {
|
|
41
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
42
|
+
}, {
|
|
43
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
44
|
+
}>;
|
|
45
|
+
export declare const AddMateDistanceSchema: z.ZodObject<{
|
|
46
|
+
distance: z.ZodNumber;
|
|
47
|
+
align: z.ZodOptional<z.ZodDefault<z.ZodEnum<["None", "AntiAligned", "Closest"]>>>;
|
|
48
|
+
}, "strip", z.ZodTypeAny, {
|
|
49
|
+
distance: number;
|
|
50
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
51
|
+
}, {
|
|
52
|
+
distance: number;
|
|
53
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
54
|
+
}>;
|
|
55
|
+
export declare const AddMateAngleSchema: z.ZodObject<{
|
|
56
|
+
angleDegrees: z.ZodNumber;
|
|
57
|
+
align: z.ZodOptional<z.ZodDefault<z.ZodEnum<["None", "AntiAligned", "Closest"]>>>;
|
|
58
|
+
}, "strip", z.ZodTypeAny, {
|
|
59
|
+
angleDegrees: number;
|
|
60
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
61
|
+
}, {
|
|
62
|
+
angleDegrees: number;
|
|
63
|
+
align?: "None" | "AntiAligned" | "Closest" | undefined;
|
|
64
|
+
}>;
|
|
65
|
+
export declare const ListComponentsSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
66
|
+
export declare function swInsertComponent(client: NamedPipeClient, params: z.input<typeof InsertComponentSchema>): Promise<SwComponentInfo>;
|
|
67
|
+
export declare function swAddMateCoincident(client: NamedPipeClient, params: z.infer<typeof AddMateCoincidentSchema>): Promise<void>;
|
|
68
|
+
export declare function swAddMateConcentric(client: NamedPipeClient, params: z.infer<typeof AddMateConcentricSchema>): Promise<void>;
|
|
69
|
+
export declare function swAddMateParallel(client: NamedPipeClient, params: z.infer<typeof AddMateParallelSchema>): Promise<void>;
|
|
70
|
+
export declare function swAddMateDistance(client: NamedPipeClient, params: z.infer<typeof AddMateDistanceSchema>): Promise<void>;
|
|
71
|
+
export declare function swAddMateAngle(client: NamedPipeClient, params: z.infer<typeof AddMateAngleSchema>): Promise<void>;
|
|
72
|
+
export declare function swListComponents(client: NamedPipeClient): Promise<SwComponentInfo[]>;
|
|
73
|
+
//# sourceMappingURL=assembly-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assembly-tools.d.ts","sourceRoot":"","sources":["../../src/tools/assembly-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAIzE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAID,eAAO,MAAM,eAAe,6DAGgC,CAAC;AAI7D,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAQhC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,oBAAoB,gDAEkC,CAAC;AAIpE,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAC5C,OAAO,CAAC,eAAe,CAAC,CAS1B;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GACzC,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,eAAe,EAAE,CAAC,CAI5B"}
|