@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 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 bb4fe034ac7b14f59781a361a3469bd6d65752b9 at 2026-10-21T01:28:16.657Z. Source: https://github.com/ecto/vcad
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
- "tube",
55974
- "polyline_tube",
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 existingIds = Object.keys(doc.nodes).map(Number);
62620
- const partNodeId = (existingIds.length ? Math.max(...existingIds) : 0) + 1;
62621
- const partNode = {
62622
- id: partNodeId,
62623
- name: typeof args.name === "string" ? args.name : entry.name,
62624
- op: {
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 translateId = partNodeId + 1;
62636
- doc.nodes[String(translateId)] = {
62637
- id: translateId,
62638
- name: null,
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
- rootId = translateId;
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: partIdForNode(doc, rootId),
62710
+ part_id: partId,
62663
62711
  placed: {
62664
62712
  path,
62665
62713
  version: entry.version,
62666
62714
  params,
62667
- node_id: partNodeId
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
- init_part_ids2();
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.119") {
87295
- return "0.10.0-main.119";
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 = "bb4fe034ac7b14f59781a361a3469bd6d65752b9";
87305
- BUILD_TIME = "2026-10-21T01:28:16.657Z";
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.119",
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": "bb4fe034ac7b14f59781a361a3469bd6d65752b9",
23
- "builtAt": "2026-10-21T01:28:16.657Z"
22
+ "sha": "8043f5abee602db89815a1ad7ecc319ed0980648",
23
+ "builtAt": "2026-10-21T02:20:10.272Z"
24
24
  }
25
25
  }
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
2
  name: package/vcad_kernel_wasm_bg.wasm
3
- size: 35332501 bytes
4
- sha256: db55b9e42bbd1d2b43f985c8fdc7e75b9514bd2159a92c64bd5b6014dfe17274
3
+ size: 35320568 bytes
4
+ sha256: 24dd687cb75b71263edce9eab3a9d751c7e679dd114f99b4f49e975a4677756f