@vcad/mcp 0.10.0-main.105 → 0.10.0-main.107
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 +109 -62
- package/package.json +3 -3
- package/vcad_kernel_wasm_bg.wasm +0 -0
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 a463c0d111f8f432469d77dd4b9038fd370f6801 at 2026-10-20T21:08:32.781Z. Source: https://github.com/ecto/vcad
|
package/index.mjs
CHANGED
|
@@ -5380,11 +5380,11 @@ function __wbg_get_imports() {
|
|
|
5380
5380
|
return ret;
|
|
5381
5381
|
},
|
|
5382
5382
|
__wbindgen_generic_0000000000000004: function(arg0, arg1) {
|
|
5383
|
-
const ret = makeMutClosure(arg0, arg1,
|
|
5383
|
+
const ret = makeMutClosure(arg0, arg1, wasm_bindgen_d8ba3021eaa32f54___convert__closures_____invoke___wasm_bindgen_d8ba3021eaa32f54___sys__JsNullable_wgpu_f894171a91484cea___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_d8ba3021eaa32f54___JsError___true__447);
|
|
5384
5384
|
return ret;
|
|
5385
5385
|
},
|
|
5386
5386
|
__wbindgen_generic_0000000000000005: function(arg0, arg1) {
|
|
5387
|
-
const ret = makeMutClosure(arg0, arg1,
|
|
5387
|
+
const ret = makeMutClosure(arg0, arg1, wasm_bindgen_d8ba3021eaa32f54___convert__closures_____invoke___wasm_bindgen_d8ba3021eaa32f54___sys__JsNullable_wgpu_f894171a91484cea___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_d8ba3021eaa32f54___JsError___true__448);
|
|
5388
5388
|
return ret;
|
|
5389
5389
|
},
|
|
5390
5390
|
__wbindgen_generic_0000000000000006: function(arg0) {
|
|
@@ -5473,14 +5473,14 @@ function wasm_bindgen_d8ba3021eaa32f54___convert__closures_____invoke___wasm_bin
|
|
|
5473
5473
|
throw takeFromExternrefTable0(ret[0]);
|
|
5474
5474
|
}
|
|
5475
5475
|
}
|
|
5476
|
-
function
|
|
5477
|
-
const ret = wasm.
|
|
5476
|
+
function wasm_bindgen_d8ba3021eaa32f54___convert__closures_____invoke___wasm_bindgen_d8ba3021eaa32f54___sys__JsNullable_wgpu_f894171a91484cea___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_d8ba3021eaa32f54___JsError___true__447(arg0, arg1, arg2) {
|
|
5477
|
+
const ret = wasm.wasm_bindgen_d8ba3021eaa32f54___convert__closures_____invoke___wasm_bindgen_d8ba3021eaa32f54___sys__JsNullable_wgpu_f894171a91484cea___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_d8ba3021eaa32f54___JsError___true__447(arg0, arg1, arg2);
|
|
5478
5478
|
if (ret[1]) {
|
|
5479
5479
|
throw takeFromExternrefTable0(ret[0]);
|
|
5480
5480
|
}
|
|
5481
5481
|
}
|
|
5482
|
-
function
|
|
5483
|
-
const ret = wasm.
|
|
5482
|
+
function wasm_bindgen_d8ba3021eaa32f54___convert__closures_____invoke___wasm_bindgen_d8ba3021eaa32f54___sys__JsNullable_wgpu_f894171a91484cea___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_d8ba3021eaa32f54___JsError___true__448(arg0, arg1, arg2) {
|
|
5483
|
+
const ret = wasm.wasm_bindgen_d8ba3021eaa32f54___convert__closures_____invoke___wasm_bindgen_d8ba3021eaa32f54___sys__JsNullable_wgpu_f894171a91484cea___backend__webgpu__webgpu_sys__gen_GpuError__GpuError___core_37ee0ce0c4cd57d5___result__Result_____wasm_bindgen_d8ba3021eaa32f54___JsError___true__448(arg0, arg1, arg2);
|
|
5484
5484
|
if (ret[1]) {
|
|
5485
5485
|
throw takeFromExternrefTable0(ret[0]);
|
|
5486
5486
|
}
|
|
@@ -8030,6 +8030,52 @@ var init_vcad_kernel_wasm = __esm({
|
|
|
8030
8030
|
const ret = wasm.wasmdocumentengine_add_feature(this.__wbg_ptr, ptr0, len0);
|
|
8031
8031
|
return ret;
|
|
8032
8032
|
}
|
|
8033
|
+
/**
|
|
8034
|
+
* Apply a JSON `DocCommand` (see `vcad_app::command`). Returns the
|
|
8035
|
+
* shared JSON envelope: `{"ok":true,"result":{…}}` or
|
|
8036
|
+
* `{"ok":false,"error":{"kind":…,"message":…}}`. Unlike the per-method
|
|
8037
|
+
* calls, unknown ids and malformed input are reported, not ignored.
|
|
8038
|
+
* @param {string} command_json
|
|
8039
|
+
* @returns {string}
|
|
8040
|
+
*/
|
|
8041
|
+
apply(command_json) {
|
|
8042
|
+
let deferred2_0;
|
|
8043
|
+
let deferred2_1;
|
|
8044
|
+
try {
|
|
8045
|
+
const ptr0 = passStringToWasm0(command_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
8046
|
+
const len0 = WASM_VECTOR_LEN;
|
|
8047
|
+
const ret = wasm.wasmdocumentengine_apply(this.__wbg_ptr, ptr0, len0);
|
|
8048
|
+
deferred2_0 = ret[0];
|
|
8049
|
+
deferred2_1 = ret[1];
|
|
8050
|
+
return getStringFromWasm0(ret[0], ret[1]);
|
|
8051
|
+
} finally {
|
|
8052
|
+
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
|
|
8053
|
+
}
|
|
8054
|
+
}
|
|
8055
|
+
/**
|
|
8056
|
+
* Lower an AI tool call (`create`, `translate`, `linear_pattern`, …)
|
|
8057
|
+
* to a `DocCommand` in Rust and apply it. Same envelope as `apply`;
|
|
8058
|
+
* tools the engine can't lower yet report `{"kind":"unsupported"}`.
|
|
8059
|
+
* @param {string} tool
|
|
8060
|
+
* @param {string} args_json
|
|
8061
|
+
* @returns {string}
|
|
8062
|
+
*/
|
|
8063
|
+
apply_tool(tool, args_json) {
|
|
8064
|
+
let deferred3_0;
|
|
8065
|
+
let deferred3_1;
|
|
8066
|
+
try {
|
|
8067
|
+
const ptr0 = passStringToWasm0(tool, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
8068
|
+
const len0 = WASM_VECTOR_LEN;
|
|
8069
|
+
const ptr1 = passStringToWasm0(args_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
|
8070
|
+
const len1 = WASM_VECTOR_LEN;
|
|
8071
|
+
const ret = wasm.wasmdocumentengine_apply_tool(this.__wbg_ptr, ptr0, len0, ptr1, len1);
|
|
8072
|
+
deferred3_0 = ret[0];
|
|
8073
|
+
deferred3_1 = ret[1];
|
|
8074
|
+
return getStringFromWasm0(ret[0], ret[1]);
|
|
8075
|
+
} finally {
|
|
8076
|
+
wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
|
|
8077
|
+
}
|
|
8078
|
+
}
|
|
8033
8079
|
/**
|
|
8034
8080
|
* Whether redo is available.
|
|
8035
8081
|
* @returns {boolean}
|
|
@@ -8420,6 +8466,22 @@ var init_vcad_kernel_wasm = __esm({
|
|
|
8420
8466
|
const ret = wasm.wasmdocumentengine_set_visible(this.__wbg_ptr, ptr0, len0, visible);
|
|
8421
8467
|
return ret;
|
|
8422
8468
|
}
|
|
8469
|
+
/**
|
|
8470
|
+
* Deterministic state fingerprint; matches `vcad_engine_state_hash`.
|
|
8471
|
+
* @returns {string}
|
|
8472
|
+
*/
|
|
8473
|
+
stateHash() {
|
|
8474
|
+
let deferred1_0;
|
|
8475
|
+
let deferred1_1;
|
|
8476
|
+
try {
|
|
8477
|
+
const ret = wasm.wasmdocumentengine_stateHash(this.__wbg_ptr);
|
|
8478
|
+
deferred1_0 = ret[0];
|
|
8479
|
+
deferred1_1 = ret[1];
|
|
8480
|
+
return getStringFromWasm0(ret[0], ret[1]);
|
|
8481
|
+
} finally {
|
|
8482
|
+
wasm.__wbindgen_free(deferred1_0, deferred1_1, 1);
|
|
8483
|
+
}
|
|
8484
|
+
}
|
|
8423
8485
|
/**
|
|
8424
8486
|
* Undo the last action.
|
|
8425
8487
|
* @returns {any}
|
|
@@ -8442,6 +8504,16 @@ var init_vcad_kernel_wasm = __esm({
|
|
|
8442
8504
|
const ret = wasm.wasmdocumentengine_update_feature(this.__wbg_ptr, ptr0, len0, ptr1, len1);
|
|
8443
8505
|
return ret;
|
|
8444
8506
|
}
|
|
8507
|
+
/**
|
|
8508
|
+
* Create an empty engine with a fixed replica id (deterministic stable
|
|
8509
|
+
* ids — used by the parity harness and by hosts that persist replicas).
|
|
8510
|
+
* @param {number} replica_id
|
|
8511
|
+
* @returns {WasmDocumentEngine}
|
|
8512
|
+
*/
|
|
8513
|
+
static withReplica(replica_id) {
|
|
8514
|
+
const ret = wasm.wasmdocumentengine_withReplica(replica_id);
|
|
8515
|
+
return _WasmDocumentEngine.__wrap(ret);
|
|
8516
|
+
}
|
|
8445
8517
|
};
|
|
8446
8518
|
if (Symbol.dispose) WasmDocumentEngine.prototype[Symbol.dispose] = WasmDocumentEngine.prototype.free;
|
|
8447
8519
|
WasmKeybindings = class {
|
|
@@ -30738,8 +30810,6 @@ var init_esm2 = __esm({
|
|
|
30738
30810
|
|
|
30739
30811
|
// ../core/dist/stores/engine-command.js
|
|
30740
30812
|
function applyCommand(engine, command) {
|
|
30741
|
-
if (typeof engine.apply !== "function")
|
|
30742
|
-
return applyLegacy(engine, command);
|
|
30743
30813
|
const envelope = JSON.parse(engine.apply(JSON.stringify(command)));
|
|
30744
30814
|
if (!envelope.ok)
|
|
30745
30815
|
throw new DocCommandError(command, envelope.error);
|
|
@@ -30748,8 +30818,6 @@ function applyCommand(engine, command) {
|
|
|
30748
30818
|
return envelope.result;
|
|
30749
30819
|
}
|
|
30750
30820
|
function applyToolCall(engine, tool, args) {
|
|
30751
|
-
if (typeof engine.apply_tool !== "function")
|
|
30752
|
-
return null;
|
|
30753
30821
|
const envelope = JSON.parse(engine.apply_tool(tool, JSON.stringify(args)));
|
|
30754
30822
|
if (envelope.ok) {
|
|
30755
30823
|
for (const w of envelope.result.warnings ?? [])
|
|
@@ -30757,52 +30825,6 @@ function applyToolCall(engine, tool, args) {
|
|
|
30757
30825
|
}
|
|
30758
30826
|
return envelope;
|
|
30759
30827
|
}
|
|
30760
|
-
function applyLegacy(engine, c) {
|
|
30761
|
-
switch (c.type) {
|
|
30762
|
-
case "add_feature": {
|
|
30763
|
-
const r = engine.add_feature(JSON.stringify(c.feature));
|
|
30764
|
-
if (c.name && r.createdFeatureId) {
|
|
30765
|
-
return { ...engine.rename_feature(r.createdFeatureId, c.name), createdFeatureId: r.createdFeatureId };
|
|
30766
|
-
}
|
|
30767
|
-
return r;
|
|
30768
|
-
}
|
|
30769
|
-
case "delete_feature":
|
|
30770
|
-
return engine.delete_feature_by_id(c.id);
|
|
30771
|
-
case "set_translation":
|
|
30772
|
-
return engine.set_translation(c.id, ...c.offset);
|
|
30773
|
-
case "set_rotation":
|
|
30774
|
-
return engine.set_rotation(c.id, ...c.angles);
|
|
30775
|
-
case "set_scale":
|
|
30776
|
-
return engine.set_scale(c.id, ...c.factor);
|
|
30777
|
-
case "set_material":
|
|
30778
|
-
return engine.set_material(c.id, c.material);
|
|
30779
|
-
case "set_visible":
|
|
30780
|
-
return engine.set_visible(c.id, c.visible);
|
|
30781
|
-
case "rename":
|
|
30782
|
-
return engine.rename_feature(c.id, c.name);
|
|
30783
|
-
case "set_joint_state":
|
|
30784
|
-
return engine.set_joint_state(c.id, c.state);
|
|
30785
|
-
case "import_ir":
|
|
30786
|
-
return { consumedPartIds: [], ...engine.import_ir(JSON.stringify(c.document)) };
|
|
30787
|
-
case "set_param":
|
|
30788
|
-
return { consumedPartIds: [], ...engine.set_param(c.id, c.key, JSON.stringify(c.value)) };
|
|
30789
|
-
case "create_feature":
|
|
30790
|
-
return { consumedPartIds: [], ...engine.create_feature(c.kind, JSON.stringify(c.params ?? {})) };
|
|
30791
|
-
case "reorder": {
|
|
30792
|
-
const others = JSON.parse(engine.get_ordered_features_json()).filter((f) => f.id !== c.id);
|
|
30793
|
-
const before = c.index > 0 ? others[c.index - 1]?.id ?? "" : "";
|
|
30794
|
-
const after = others[c.index]?.id ?? "";
|
|
30795
|
-
const position = engine.compute_position_between(before, after);
|
|
30796
|
-
return { consumedPartIds: [], ...engine.move_feature(c.id, position) };
|
|
30797
|
-
}
|
|
30798
|
-
case "undo":
|
|
30799
|
-
return { consumedPartIds: [], ...engine.undo() };
|
|
30800
|
-
case "redo":
|
|
30801
|
-
return { consumedPartIds: [], ...engine.redo() };
|
|
30802
|
-
default:
|
|
30803
|
-
throw new Error(`[vcad] ${c.type} needs a kernel WASM with WasmDocumentEngine.apply`);
|
|
30804
|
-
}
|
|
30805
|
-
}
|
|
30806
30828
|
var DocCommandError;
|
|
30807
30829
|
var init_engine_command = __esm({
|
|
30808
30830
|
"../core/dist/stores/engine-command.js"() {
|
|
@@ -41443,9 +41465,7 @@ var init_camera_framing = __esm({
|
|
|
41443
41465
|
var init_executors = __esm({
|
|
41444
41466
|
"../core/dist/commands/executors.js"() {
|
|
41445
41467
|
"use strict";
|
|
41446
|
-
init_registry2();
|
|
41447
41468
|
init_engine_store();
|
|
41448
|
-
init_dist2();
|
|
41449
41469
|
init_dist();
|
|
41450
41470
|
init_camera_framing();
|
|
41451
41471
|
}
|
|
@@ -41919,6 +41939,20 @@ var init_CHANGELOG = __esm({
|
|
|
41919
41939
|
"pcb"
|
|
41920
41940
|
]
|
|
41921
41941
|
},
|
|
41942
|
+
{
|
|
41943
|
+
id: "2026-10-20-lossless-import",
|
|
41944
|
+
version: "undefined",
|
|
41945
|
+
date: "2026-10-20",
|
|
41946
|
+
category: "fix",
|
|
41947
|
+
title: "Opening older documents keeps everything",
|
|
41948
|
+
summary: "Opening an older .vcad file no longer drops PCB boards, schematics, parameters, imported meshes, part inertials and colliders, or operations the editor has no tool for.",
|
|
41949
|
+
features: [
|
|
41950
|
+
"documents",
|
|
41951
|
+
"import",
|
|
41952
|
+
"electronics",
|
|
41953
|
+
"assembly"
|
|
41954
|
+
]
|
|
41955
|
+
},
|
|
41922
41956
|
{
|
|
41923
41957
|
id: "2026-10-20-live-part-stock-check",
|
|
41924
41958
|
version: "0.10.0",
|
|
@@ -41977,6 +42011,19 @@ var init_CHANGELOG = __esm({
|
|
|
41977
42011
|
"get_footprint"
|
|
41978
42012
|
]
|
|
41979
42013
|
},
|
|
42014
|
+
{
|
|
42015
|
+
id: "2026-10-20-collab-order-and-exact-floats",
|
|
42016
|
+
version: "undefined",
|
|
42017
|
+
date: "2026-10-20",
|
|
42018
|
+
category: "fix",
|
|
42019
|
+
title: "Collaborators see the same part order; exact reloads",
|
|
42020
|
+
summary: "Parts added at the same moment by two collaborators now order identically for both; one edit is one undo step; reloading a document no longer nudges dimensions by a rounding bit.",
|
|
42021
|
+
features: [
|
|
42022
|
+
"collaboration",
|
|
42023
|
+
"undo",
|
|
42024
|
+
"documents"
|
|
42025
|
+
]
|
|
42026
|
+
},
|
|
41980
42027
|
{
|
|
41981
42028
|
id: "2026-10-20-ai-update-targets-owner",
|
|
41982
42029
|
version: "undefined",
|
|
@@ -86874,8 +86921,8 @@ var init_server3 = __esm({
|
|
|
86874
86921
|
init_order_feed();
|
|
86875
86922
|
init_animate();
|
|
86876
86923
|
PKG_VERSION = (() => {
|
|
86877
|
-
if ("0.10.0-main.
|
|
86878
|
-
return "0.10.0-main.
|
|
86924
|
+
if ("0.10.0-main.107") {
|
|
86925
|
+
return "0.10.0-main.107";
|
|
86879
86926
|
}
|
|
86880
86927
|
try {
|
|
86881
86928
|
const req = createRequire2(import.meta.url);
|
|
@@ -86884,8 +86931,8 @@ var init_server3 = __esm({
|
|
|
86884
86931
|
return "0.0.0";
|
|
86885
86932
|
}
|
|
86886
86933
|
})();
|
|
86887
|
-
BUILD_SHA = "
|
|
86888
|
-
BUILD_TIME = "2026-10-
|
|
86934
|
+
BUILD_SHA = "a463c0d111f8f432469d77dd4b9038fd370f6801";
|
|
86935
|
+
BUILD_TIME = "2026-10-20T21:08:32.781Z";
|
|
86889
86936
|
SHORT_SHA = BUILD_SHA === "unknown" ? "unknown" : BUILD_SHA.slice(0, 7);
|
|
86890
86937
|
VERSION_WITH_BUILD = SHORT_SHA === "unknown" ? PKG_VERSION : `${PKG_VERSION}+${SHORT_SHA}`;
|
|
86891
86938
|
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.107",
|
|
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": "a463c0d111f8f432469d77dd4b9038fd370f6801",
|
|
23
|
+
"builtAt": "2026-10-20T21:08:32.781Z"
|
|
24
24
|
}
|
|
25
25
|
}
|
package/vcad_kernel_wasm_bg.wasm
CHANGED
|
Binary file
|