@vcad/mcp 0.11.0-main.147 → 0.11.0-main.149
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 +68 -6
- package/package.json +3 -3
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 94132cad17c41dc78e0ac0abd5a4d89316ac5325 at 2026-11-11T02:03:58.696Z. Source: https://github.com/ecto/vcad
|
package/index.mjs
CHANGED
|
@@ -44788,6 +44788,22 @@ var init_CHANGELOG = __esm({
|
|
|
44788
44788
|
"modeling"
|
|
44789
44789
|
]
|
|
44790
44790
|
},
|
|
44791
|
+
{
|
|
44792
|
+
id: "2026-11-07-router-island-terminals",
|
|
44793
|
+
version: "0.11.0",
|
|
44794
|
+
date: "2026-11-07",
|
|
44795
|
+
category: "fix",
|
|
44796
|
+
title: "Router starts from any copper joined to a pad",
|
|
44797
|
+
summary: "fab-prep routes island-to-island: a connection can start on fan-out stubs, vias or earlier traces already joined to its pad, so a walled-in fine-pitch pad with hand-placed fan-out now routes.",
|
|
44798
|
+
features: [
|
|
44799
|
+
"pcb",
|
|
44800
|
+
"fab-prep",
|
|
44801
|
+
"autoroute"
|
|
44802
|
+
],
|
|
44803
|
+
mcpTools: [
|
|
44804
|
+
"fab_prep"
|
|
44805
|
+
]
|
|
44806
|
+
},
|
|
44791
44807
|
{
|
|
44792
44808
|
id: "2026-11-07-native-liquid-glass-shell",
|
|
44793
44809
|
version: "0.11.0",
|
|
@@ -44930,6 +44946,24 @@ var init_CHANGELOG = __esm({
|
|
|
44930
44946
|
"native"
|
|
44931
44947
|
]
|
|
44932
44948
|
},
|
|
44949
|
+
{
|
|
44950
|
+
id: "2026-11-07-fab-prep-fail-closed-incomplete",
|
|
44951
|
+
version: "0.11.0",
|
|
44952
|
+
date: "2026-11-07",
|
|
44953
|
+
category: "fix",
|
|
44954
|
+
title: "fab-prep fails closed on open nets; pinned, through-only routing",
|
|
44955
|
+
summary: "fab-prep no longer ships boards with unconnected nets (opt in with --allow-incomplete), pins traces to pad layers, emits through vias by default, and autoroute reports true open nets.",
|
|
44956
|
+
features: [
|
|
44957
|
+
"pcb",
|
|
44958
|
+
"fab-prep",
|
|
44959
|
+
"autoroute",
|
|
44960
|
+
"drc",
|
|
44961
|
+
"native-app"
|
|
44962
|
+
],
|
|
44963
|
+
mcpTools: [
|
|
44964
|
+
"fab_prep"
|
|
44965
|
+
]
|
|
44966
|
+
},
|
|
44933
44967
|
{
|
|
44934
44968
|
id: "2026-11-07-drawing-feature-edges",
|
|
44935
44969
|
version: "undefined",
|
|
@@ -45074,6 +45108,19 @@ var init_CHANGELOG = __esm({
|
|
|
45074
45108
|
"distribution"
|
|
45075
45109
|
]
|
|
45076
45110
|
},
|
|
45111
|
+
{
|
|
45112
|
+
id: "2026-10-26-emissive-materials",
|
|
45113
|
+
version: "0.10.0",
|
|
45114
|
+
date: "2026-10-26",
|
|
45115
|
+
category: "feat",
|
|
45116
|
+
title: "Emissive materials in loon and photoreal renders",
|
|
45117
|
+
summary: "Materials can emit light: `emissive` + `emissive_strength` in the IR and `[material-emissive ...]` in loon; the photoreal path tracer draws them. Image-mapped emission is recorded but refused until the renderer supports it.",
|
|
45118
|
+
features: [
|
|
45119
|
+
"materials",
|
|
45120
|
+
"loon",
|
|
45121
|
+
"photoreal"
|
|
45122
|
+
]
|
|
45123
|
+
},
|
|
45077
45124
|
{
|
|
45078
45125
|
id: "2026-10-21-vcad-printer-cli",
|
|
45079
45126
|
version: "0.10.0",
|
|
@@ -70957,9 +71004,11 @@ async function fabPrep(args) {
|
|
|
70957
71004
|
prune_dangling: args.prune_dangling === void 0 ? true : Boolean(args.prune_dangling),
|
|
70958
71005
|
max_rounds: Math.max(0, Math.round(Number(args.max_rounds ?? 8))),
|
|
70959
71006
|
accept_rules: Array.isArray(args.accept_rules) ? args.accept_rules : [],
|
|
71007
|
+
allow_incomplete: args.allow_incomplete === true,
|
|
70960
71008
|
verdict: {
|
|
70961
71009
|
budget: Math.max(1, Math.round(Number(args.budget ?? 5e6))),
|
|
70962
|
-
max_cluster: Math.max(1, Math.round(Number(args.max_cluster ?? 6)))
|
|
71010
|
+
max_cluster: Math.max(1, Math.round(Number(args.max_cluster ?? 6))),
|
|
71011
|
+
allow_blind_vias: args.allow_blind_vias === true
|
|
70963
71012
|
}
|
|
70964
71013
|
};
|
|
70965
71014
|
const out = await runFabPrep(pcb, options);
|
|
@@ -71010,11 +71059,16 @@ async function fabPrep(args) {
|
|
|
71010
71059
|
return { content: [{ type: "text", text: JSON.stringify(payload) }] };
|
|
71011
71060
|
}
|
|
71012
71061
|
function fabPrepHeadline(report) {
|
|
71062
|
+
const open2 = report.connectivity.open_nets?.length ?? 0;
|
|
71013
71063
|
if (!report.converged) {
|
|
71064
|
+
if (report.delta.route_attributable_fixable === 0 && open2 > 0) {
|
|
71065
|
+
return `NOT FAB-READY \u2014 board not fully routed, ${open2} net(s) open (${report.blocker ?? "connectivity incomplete"})`;
|
|
71066
|
+
}
|
|
71014
71067
|
return `NOT FAB-READY \u2014 ${report.delta.route_attributable_fixable} route-attributable violation(s) remain (${report.blocker ?? "loop did not converge"})`;
|
|
71015
71068
|
}
|
|
71069
|
+
const incomplete = report.shipped_incomplete ? ` \u2014 NOT FULLY ROUTED: ${open2} net(s) open (shipped under allow_incomplete)` : "";
|
|
71016
71070
|
const waived = report.delta.route_attributable_accepted > 0 ? `, ${report.delta.route_attributable_accepted} waived under ${report.accepted_rules.join("+")}` : "";
|
|
71017
|
-
return `zero route-attributable violations${waived} \u2014 ${report.delta.final_total} on the finished board, ${report.delta.baseline_total} on the same board stripped of all routing`;
|
|
71071
|
+
return `zero route-attributable violations${waived} \u2014 ${report.delta.final_total} on the finished board, ${report.delta.baseline_total} on the same board stripped of all routing${incomplete}`;
|
|
71018
71072
|
}
|
|
71019
71073
|
async function validateForFab(args) {
|
|
71020
71074
|
const ctx = resolveDocInput(args);
|
|
@@ -76945,6 +76999,14 @@ var init_ecad2 = __esm({
|
|
|
76945
76999
|
items: { type: "string" },
|
|
76946
77000
|
description: 'DRC rule names whose route-attributable violations are ACCEPTED rather than fixed (e.g. ["MinTraceWidth"]). Real fab packages ship with real, named exceptions; the difference between that and a footgun is whether the exception is written down. Waived violations are still counted, still listed, and the waiver is named in the receipt \u2014 it stops blocking the verdict, it does not hide anything. An unrecognised rule name refuses the run rather than silently accepting nothing.'
|
|
76947
77001
|
},
|
|
77002
|
+
allow_incomplete: {
|
|
77003
|
+
type: "boolean",
|
|
77004
|
+
description: "Let a geometrically clean board that still has OPEN nets (unconnected, islanded, or an SMD pad unstitched from its plane) converge (default FALSE \u2014 such a run fails closed). The opt-in is logged in the receipt and FAB_NOTES says NOT FULLY ROUTED."
|
|
77005
|
+
},
|
|
77006
|
+
allow_blind_vias: {
|
|
77007
|
+
type: "boolean",
|
|
77008
|
+
description: "Let the router emit blind/buried (layer-pair) vias (default FALSE \u2014 through vias only, as standard 2/4-layer processes require). A board that already carries blind/buried/micro vias keeps that process."
|
|
77009
|
+
},
|
|
76948
77010
|
dry_run: {
|
|
76949
77011
|
type: "boolean",
|
|
76950
77012
|
description: "Compute the receipt without writing the fixed board back to the session."
|
|
@@ -90579,8 +90641,8 @@ var init_server3 = __esm({
|
|
|
90579
90641
|
init_order_feed();
|
|
90580
90642
|
init_animate();
|
|
90581
90643
|
PKG_VERSION = (() => {
|
|
90582
|
-
if ("0.11.0-main.
|
|
90583
|
-
return "0.11.0-main.
|
|
90644
|
+
if ("0.11.0-main.149") {
|
|
90645
|
+
return "0.11.0-main.149";
|
|
90584
90646
|
}
|
|
90585
90647
|
try {
|
|
90586
90648
|
const req = createRequire2(import.meta.url);
|
|
@@ -90589,8 +90651,8 @@ var init_server3 = __esm({
|
|
|
90589
90651
|
return "0.0.0";
|
|
90590
90652
|
}
|
|
90591
90653
|
})();
|
|
90592
|
-
BUILD_SHA = "
|
|
90593
|
-
BUILD_TIME = "2026-11-
|
|
90654
|
+
BUILD_SHA = "94132cad17c41dc78e0ac0abd5a4d89316ac5325";
|
|
90655
|
+
BUILD_TIME = "2026-11-11T02:03:58.696Z";
|
|
90594
90656
|
SHORT_SHA = BUILD_SHA === "unknown" ? "unknown" : BUILD_SHA.slice(0, 7);
|
|
90595
90657
|
VERSION_WITH_BUILD = SHORT_SHA === "unknown" ? PKG_VERSION : `${PKG_VERSION}+${SHORT_SHA}`;
|
|
90596
90658
|
INSTANCE_ID = randomUUID7().slice(0, 8);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vcad/mcp",
|
|
3
|
-
"version": "0.11.0-main.
|
|
3
|
+
"version": "0.11.0-main.149",
|
|
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-11-
|
|
22
|
+
"sha": "94132cad17c41dc78e0ac0abd5a4d89316ac5325",
|
|
23
|
+
"builtAt": "2026-11-11T02:03:58.696Z"
|
|
24
24
|
}
|
|
25
25
|
}
|