@vcad/mcp 0.10.0-main.119 → 0.10.0-main.121
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 +1 -1
- package/index.mjs +95 -47
- package/package.json +3 -3
- package/vcad_kernel_wasm_bg.wasm +2 -2
package/README.md
CHANGED
|
@@ -6,4 +6,4 @@ vcad's MCP server as a self-contained bundle (server + BRep kernel WASM).
|
|
|
6
6
|
{ "mcpServers": { "vcad": { "command": "npx", "args": ["-y", "@vcad/mcp"] } } }
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
Built from
|
|
9
|
+
Built from 8043f5abee602db89815a1ad7ecc319ed0980648 at 2026-10-21T02:20:10.272Z. Source: https://github.com/ecto/vcad
|
package/index.mjs
CHANGED
|
@@ -41824,6 +41824,32 @@ var init_CHANGELOG = __esm({
|
|
|
41824
41824
|
CHANGELOG_default = {
|
|
41825
41825
|
$schema: "./changelog.schema.json",
|
|
41826
41826
|
entries: [
|
|
41827
|
+
{
|
|
41828
|
+
id: "2026-10-21-loon-relative-mesh-paths",
|
|
41829
|
+
version: "0.10.0",
|
|
41830
|
+
date: "2026-10-21",
|
|
41831
|
+
category: "fix",
|
|
41832
|
+
title: "Relative .loon paths no longer drop imported meshes",
|
|
41833
|
+
summary: "vcad commands given a .loon by relative path resolved import-mesh paths twice, so every STL part silently went missing from exports and renders.",
|
|
41834
|
+
features: [
|
|
41835
|
+
"loon",
|
|
41836
|
+
"mesh-import",
|
|
41837
|
+
"cli"
|
|
41838
|
+
]
|
|
41839
|
+
},
|
|
41840
|
+
{
|
|
41841
|
+
id: "2026-10-21-desktop-agent",
|
|
41842
|
+
version: "0.10.0",
|
|
41843
|
+
date: "2026-10-21",
|
|
41844
|
+
category: "feat",
|
|
41845
|
+
title: "Built-in Agent edits documents in the Mac app",
|
|
41846
|
+
summary: "A chat panel in the native Mac app where an agent edits the open document through engine tools: edits show live, each turn is one undo step, and tool errors go back to the model.",
|
|
41847
|
+
features: [
|
|
41848
|
+
"desktop",
|
|
41849
|
+
"agent",
|
|
41850
|
+
"ai"
|
|
41851
|
+
]
|
|
41852
|
+
},
|
|
41827
41853
|
{
|
|
41828
41854
|
id: "2026-10-20-vendor-verified-power-imu-footprints",
|
|
41829
41855
|
version: "0.10.0",
|
|
@@ -41855,6 +41881,19 @@ var init_CHANGELOG = __esm({
|
|
|
41855
41881
|
"update"
|
|
41856
41882
|
]
|
|
41857
41883
|
},
|
|
41884
|
+
{
|
|
41885
|
+
id: "2026-10-20-stale-photoreal-renderer",
|
|
41886
|
+
version: "0.10.0",
|
|
41887
|
+
date: "2026-10-20",
|
|
41888
|
+
category: "fix",
|
|
41889
|
+
title: "Photoreal refuses a stale vcad-render that facets lofts",
|
|
41890
|
+
summary: "The Mac app's photoreal button now detects a pre-mesh-mode vcad-render (which traced polyline lofts as flat strips) and asks for a rebuild instead of rendering jagged rounds.",
|
|
41891
|
+
features: [
|
|
41892
|
+
"photoreal",
|
|
41893
|
+
"render",
|
|
41894
|
+
"loft"
|
|
41895
|
+
]
|
|
41896
|
+
},
|
|
41858
41897
|
{
|
|
41859
41898
|
id: "2026-10-20-schematic-power-flags",
|
|
41860
41899
|
version: "0.10.0",
|
|
@@ -41932,6 +41971,23 @@ var init_CHANGELOG = __esm({
|
|
|
41932
41971
|
"native"
|
|
41933
41972
|
]
|
|
41934
41973
|
},
|
|
41974
|
+
{
|
|
41975
|
+
id: "2026-10-20-mcp-tube-tools-engine",
|
|
41976
|
+
version: "0.10.0",
|
|
41977
|
+
date: "2026-10-20",
|
|
41978
|
+
category: "feat",
|
|
41979
|
+
title: "MCP tube and polyline_tube tools on the engine",
|
|
41980
|
+
summary: "tube and polyline_tube are now available over MCP, lowered by the Rust document engine; place_part also inserts through the engine.",
|
|
41981
|
+
features: [
|
|
41982
|
+
"mcp",
|
|
41983
|
+
"engine"
|
|
41984
|
+
],
|
|
41985
|
+
mcpTools: [
|
|
41986
|
+
"tube",
|
|
41987
|
+
"polyline_tube",
|
|
41988
|
+
"place_part"
|
|
41989
|
+
]
|
|
41990
|
+
},
|
|
41935
41991
|
{
|
|
41936
41992
|
id: "2026-10-20-mcp-stable-part-ids",
|
|
41937
41993
|
version: "0.10.0",
|
|
@@ -41989,6 +42045,20 @@ var init_CHANGELOG = __esm({
|
|
|
41989
42045
|
"set_material"
|
|
41990
42046
|
]
|
|
41991
42047
|
},
|
|
42048
|
+
{
|
|
42049
|
+
id: "2026-10-20-mac-new-part-materials",
|
|
42050
|
+
version: "0.10.0",
|
|
42051
|
+
date: "2026-10-20",
|
|
42052
|
+
category: "fix",
|
|
42053
|
+
title: "Mac app keeps materials on new parts and saves",
|
|
42054
|
+
summary: "New parts in the Mac editor take the document's first material again (combines and fillets keep the base part's), and a picked preset's definition is saved into the file's materials.",
|
|
42055
|
+
features: [
|
|
42056
|
+
"mac",
|
|
42057
|
+
"materials",
|
|
42058
|
+
"engine"
|
|
42059
|
+
],
|
|
42060
|
+
mcpTools: []
|
|
42061
|
+
},
|
|
41992
42062
|
{
|
|
41993
42063
|
id: "2026-10-20-mac-editor-engine",
|
|
41994
42064
|
version: "0.10.0",
|
|
@@ -55970,13 +56040,8 @@ var init_registry_dispatch = __esm({
|
|
|
55970
56040
|
"screenshot_viewport"
|
|
55971
56041
|
]);
|
|
55972
56042
|
DEFERRED_TOOLS = /* @__PURE__ */ new Set([
|
|
55973
|
-
|
|
55974
|
-
|
|
55975
|
-
"linear_pattern",
|
|
55976
|
-
"circular_pattern",
|
|
55977
|
-
"mirror",
|
|
55978
|
-
// search_parts / place_part are implemented separately in parts.ts —
|
|
55979
|
-
// they take a Document directly and don't need the planner round-trip.
|
|
56043
|
+
// search_parts / place_part are served by parts.ts (place_part still
|
|
56044
|
+
// mutates through the engine, via runMutation).
|
|
55980
56045
|
"search_parts",
|
|
55981
56046
|
"place_part"
|
|
55982
56047
|
]);
|
|
@@ -56033,7 +56098,9 @@ var init_registry_dispatch = __esm({
|
|
|
56033
56098
|
"shell",
|
|
56034
56099
|
"tube",
|
|
56035
56100
|
"polyline_tube",
|
|
56036
|
-
"place"
|
|
56101
|
+
"place",
|
|
56102
|
+
// Reached via parts.ts (place_part handler), not registry dispatch.
|
|
56103
|
+
"place_part"
|
|
56037
56104
|
]);
|
|
56038
56105
|
}
|
|
56039
56106
|
});
|
|
@@ -57729,6 +57796,8 @@ var init_tool_metadata = __esm({
|
|
|
57729
57796
|
delete: { title: "Delete Node", annotations: DESTRUCTIVE },
|
|
57730
57797
|
set_material: { title: "Set Material", annotations: RW },
|
|
57731
57798
|
place: { title: "Place Part by Anchor", annotations: RW },
|
|
57799
|
+
tube: { title: "Create Tube", annotations: RW },
|
|
57800
|
+
polyline_tube: { title: "Create Polyline Tube", annotations: RW },
|
|
57732
57801
|
inspect_part: { title: "Inspect Part", annotations: RO },
|
|
57733
57802
|
describe_scene: { title: "Describe Scene", annotations: RO },
|
|
57734
57803
|
// ── MCP Apps: app-only preview fetchers ────────────────────────────────
|
|
@@ -62616,42 +62685,21 @@ function placePartTool(args, engine) {
|
|
|
62616
62685
|
...defaultParamsFor(entry),
|
|
62617
62686
|
...userParams
|
|
62618
62687
|
};
|
|
62619
|
-
const
|
|
62620
|
-
const
|
|
62621
|
-
|
|
62622
|
-
|
|
62623
|
-
|
|
62624
|
-
|
|
62625
|
-
type: "PartInstance",
|
|
62626
|
-
path,
|
|
62627
|
-
version: entry.version,
|
|
62628
|
-
params
|
|
62629
|
-
}
|
|
62630
|
-
};
|
|
62631
|
-
doc.nodes[String(partNodeId)] = partNode;
|
|
62632
|
-
let rootId = partNodeId;
|
|
62688
|
+
const name = typeof args.name === "string" ? args.name : entry.name;
|
|
62689
|
+
const placed = JSON.parse(
|
|
62690
|
+
runMutation("place_part", { path, version: entry.version, params, name }, doc, documentId).content[0].text
|
|
62691
|
+
);
|
|
62692
|
+
const partId = placed.part_id;
|
|
62693
|
+
if (!partId) throw new Error("place_part: engine created no part");
|
|
62633
62694
|
const position = args.position;
|
|
62634
62695
|
if (position && (Number.isFinite(position.x) || Number.isFinite(position.y) || Number.isFinite(position.z))) {
|
|
62635
|
-
const
|
|
62636
|
-
|
|
62637
|
-
|
|
62638
|
-
|
|
62639
|
-
op: {
|
|
62640
|
-
type: "Translate",
|
|
62641
|
-
child: partNodeId,
|
|
62642
|
-
offset: {
|
|
62643
|
-
x: typeof position.x === "number" ? position.x : 0,
|
|
62644
|
-
y: typeof position.y === "number" ? position.y : 0,
|
|
62645
|
-
z: typeof position.z === "number" ? position.z : 0
|
|
62646
|
-
}
|
|
62647
|
-
}
|
|
62696
|
+
const offset = {
|
|
62697
|
+
x: typeof position.x === "number" ? position.x : 0,
|
|
62698
|
+
y: typeof position.y === "number" ? position.y : 0,
|
|
62699
|
+
z: typeof position.z === "number" ? position.z : 0
|
|
62648
62700
|
};
|
|
62649
|
-
|
|
62701
|
+
runMutation("translate", { child: partId, offset }, doc, documentId);
|
|
62650
62702
|
}
|
|
62651
|
-
doc.roots.push({
|
|
62652
|
-
root: rootId,
|
|
62653
|
-
material: "default"
|
|
62654
|
-
});
|
|
62655
62703
|
return {
|
|
62656
62704
|
content: [
|
|
62657
62705
|
{
|
|
@@ -62659,12 +62707,12 @@ function placePartTool(args, engine) {
|
|
|
62659
62707
|
text: JSON.stringify(
|
|
62660
62708
|
{
|
|
62661
62709
|
document_id: documentId,
|
|
62662
|
-
part_id:
|
|
62710
|
+
part_id: partId,
|
|
62663
62711
|
placed: {
|
|
62664
62712
|
path,
|
|
62665
62713
|
version: entry.version,
|
|
62666
62714
|
params,
|
|
62667
|
-
node_id:
|
|
62715
|
+
node_id: placed.node_id
|
|
62668
62716
|
}
|
|
62669
62717
|
},
|
|
62670
62718
|
null,
|
|
@@ -62680,7 +62728,7 @@ var init_parts2 = __esm({
|
|
|
62680
62728
|
"use strict";
|
|
62681
62729
|
init_dist();
|
|
62682
62730
|
init_session2();
|
|
62683
|
-
|
|
62731
|
+
init_registry_dispatch();
|
|
62684
62732
|
init_tool_def();
|
|
62685
62733
|
searchPartsSchema = {
|
|
62686
62734
|
type: "object",
|
|
@@ -87291,8 +87339,8 @@ var init_server3 = __esm({
|
|
|
87291
87339
|
init_order_feed();
|
|
87292
87340
|
init_animate();
|
|
87293
87341
|
PKG_VERSION = (() => {
|
|
87294
|
-
if ("0.10.0-main.
|
|
87295
|
-
return "0.10.0-main.
|
|
87342
|
+
if ("0.10.0-main.121") {
|
|
87343
|
+
return "0.10.0-main.121";
|
|
87296
87344
|
}
|
|
87297
87345
|
try {
|
|
87298
87346
|
const req = createRequire2(import.meta.url);
|
|
@@ -87301,8 +87349,8 @@ var init_server3 = __esm({
|
|
|
87301
87349
|
return "0.0.0";
|
|
87302
87350
|
}
|
|
87303
87351
|
})();
|
|
87304
|
-
BUILD_SHA = "
|
|
87305
|
-
BUILD_TIME = "2026-10-
|
|
87352
|
+
BUILD_SHA = "8043f5abee602db89815a1ad7ecc319ed0980648";
|
|
87353
|
+
BUILD_TIME = "2026-10-21T02:20:10.272Z";
|
|
87306
87354
|
SHORT_SHA = BUILD_SHA === "unknown" ? "unknown" : BUILD_SHA.slice(0, 7);
|
|
87307
87355
|
VERSION_WITH_BUILD = SHORT_SHA === "unknown" ? PKG_VERSION : `${PKG_VERSION}+${SHORT_SHA}`;
|
|
87308
87356
|
INSTANCE_ID = randomUUID7().slice(0, 8);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vcad/mcp",
|
|
3
|
-
"version": "0.10.0-main.
|
|
3
|
+
"version": "0.10.0-main.121",
|
|
4
4
|
"description": "vcad MCP server — parametric CAD + PCB design tools for AI agents (self-contained: bundled server + kernel WASM)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
"homepage": "https://vcad.io",
|
|
21
21
|
"vcadBuild": {
|
|
22
|
-
"sha": "
|
|
23
|
-
"builtAt": "2026-10-
|
|
22
|
+
"sha": "8043f5abee602db89815a1ad7ecc319ed0980648",
|
|
23
|
+
"builtAt": "2026-10-21T02:20:10.272Z"
|
|
24
24
|
}
|
|
25
25
|
}
|
package/vcad_kernel_wasm_bg.wasm
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/vcad_kernel_wasm_bg.wasm
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 35320568 bytes
|
|
4
|
+
sha256: 24dd687cb75b71263edce9eab3a9d751c7e679dd114f99b4f49e975a4677756f
|