@vcad/mcp 0.11.0-main.148 → 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 +55 -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",
|
|
@@ -70970,9 +71004,11 @@ async function fabPrep(args) {
|
|
|
70970
71004
|
prune_dangling: args.prune_dangling === void 0 ? true : Boolean(args.prune_dangling),
|
|
70971
71005
|
max_rounds: Math.max(0, Math.round(Number(args.max_rounds ?? 8))),
|
|
70972
71006
|
accept_rules: Array.isArray(args.accept_rules) ? args.accept_rules : [],
|
|
71007
|
+
allow_incomplete: args.allow_incomplete === true,
|
|
70973
71008
|
verdict: {
|
|
70974
71009
|
budget: Math.max(1, Math.round(Number(args.budget ?? 5e6))),
|
|
70975
|
-
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
|
|
70976
71012
|
}
|
|
70977
71013
|
};
|
|
70978
71014
|
const out = await runFabPrep(pcb, options);
|
|
@@ -71023,11 +71059,16 @@ async function fabPrep(args) {
|
|
|
71023
71059
|
return { content: [{ type: "text", text: JSON.stringify(payload) }] };
|
|
71024
71060
|
}
|
|
71025
71061
|
function fabPrepHeadline(report) {
|
|
71062
|
+
const open2 = report.connectivity.open_nets?.length ?? 0;
|
|
71026
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
|
+
}
|
|
71027
71067
|
return `NOT FAB-READY \u2014 ${report.delta.route_attributable_fixable} route-attributable violation(s) remain (${report.blocker ?? "loop did not converge"})`;
|
|
71028
71068
|
}
|
|
71069
|
+
const incomplete = report.shipped_incomplete ? ` \u2014 NOT FULLY ROUTED: ${open2} net(s) open (shipped under allow_incomplete)` : "";
|
|
71029
71070
|
const waived = report.delta.route_attributable_accepted > 0 ? `, ${report.delta.route_attributable_accepted} waived under ${report.accepted_rules.join("+")}` : "";
|
|
71030
|
-
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}`;
|
|
71031
71072
|
}
|
|
71032
71073
|
async function validateForFab(args) {
|
|
71033
71074
|
const ctx = resolveDocInput(args);
|
|
@@ -76958,6 +76999,14 @@ var init_ecad2 = __esm({
|
|
|
76958
76999
|
items: { type: "string" },
|
|
76959
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.'
|
|
76960
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
|
+
},
|
|
76961
77010
|
dry_run: {
|
|
76962
77011
|
type: "boolean",
|
|
76963
77012
|
description: "Compute the receipt without writing the fixed board back to the session."
|
|
@@ -90592,8 +90641,8 @@ var init_server3 = __esm({
|
|
|
90592
90641
|
init_order_feed();
|
|
90593
90642
|
init_animate();
|
|
90594
90643
|
PKG_VERSION = (() => {
|
|
90595
|
-
if ("0.11.0-main.
|
|
90596
|
-
return "0.11.0-main.
|
|
90644
|
+
if ("0.11.0-main.149") {
|
|
90645
|
+
return "0.11.0-main.149";
|
|
90597
90646
|
}
|
|
90598
90647
|
try {
|
|
90599
90648
|
const req = createRequire2(import.meta.url);
|
|
@@ -90602,8 +90651,8 @@ var init_server3 = __esm({
|
|
|
90602
90651
|
return "0.0.0";
|
|
90603
90652
|
}
|
|
90604
90653
|
})();
|
|
90605
|
-
BUILD_SHA = "
|
|
90606
|
-
BUILD_TIME = "2026-11-
|
|
90654
|
+
BUILD_SHA = "94132cad17c41dc78e0ac0abd5a4d89316ac5325";
|
|
90655
|
+
BUILD_TIME = "2026-11-11T02:03:58.696Z";
|
|
90607
90656
|
SHORT_SHA = BUILD_SHA === "unknown" ? "unknown" : BUILD_SHA.slice(0, 7);
|
|
90608
90657
|
VERSION_WITH_BUILD = SHORT_SHA === "unknown" ? PKG_VERSION : `${PKG_VERSION}+${SHORT_SHA}`;
|
|
90609
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
|
}
|