@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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/index.mjs +68 -6
  3. 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 b84bf591f0a44018628cfdc7cf1ce0156c30f277 at 2026-11-11T00:51:30.826Z. Source: https://github.com/ecto/vcad
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.147") {
90583
- return "0.11.0-main.147";
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 = "b84bf591f0a44018628cfdc7cf1ce0156c30f277";
90593
- BUILD_TIME = "2026-11-11T00:51:30.826Z";
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.147",
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": "b84bf591f0a44018628cfdc7cf1ce0156c30f277",
23
- "builtAt": "2026-11-11T00:51:30.826Z"
22
+ "sha": "94132cad17c41dc78e0ac0abd5a4d89316ac5325",
23
+ "builtAt": "2026-11-11T02:03:58.696Z"
24
24
  }
25
25
  }