formlab-mcp 0.6.0 → 0.6.2

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/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "formlab-mcp",
3
- "version": "0.6.0",
3
+ "version": "0.6.2",
4
4
  "mcpName": "io.github.juliu1980/formlab-mcp",
5
- "description": "Read-only Model Context Protocol server for FormLab \u2014 lets Claude (and other MCP clients) read and analyze your FormLab data, from a local export file OR your live cloud workspace.",
5
+ "description": "Read-only Model Context Protocol server for FormLab — lets Claude (and other MCP clients) read and analyze your FormLab data, from a local export file OR your live cloud workspace.",
6
6
  "type": "module",
7
7
  "bin": {
8
8
  "formlab-mcp": "./index.js"
@@ -38,4 +38,4 @@
38
38
  "url": "https://github.com/juliu1980/FormLab",
39
39
  "directory": "mcp"
40
40
  }
41
- }
41
+ }
@@ -528,6 +528,9 @@ function _trimDoeDesign(d, db) {
528
528
  mixtureMode: !!d.mixtureMode,
529
529
  // Only D-optimal computes one; null here means "not applicable", not "failed".
530
530
  dEfficiency: Number.isFinite(d.dEfficiency) ? +d.dEfficiency.toFixed(2) : null,
531
+ dEfficiencyKind: Number.isFinite(d.dEfficiency)
532
+ ? (d.dEfficiencyKind || (/^scheffe-/.test(String((d.settings || {}).doptModel || '')) ? 'relative' : 'absolute'))
533
+ : null,
531
534
  droppedRuns: d.droppedRuns || 0,
532
535
  response: d.responseText || null,
533
536
  createdAt: d.createdAt,
@@ -623,7 +626,9 @@ const get_doe_design = {
623
626
  notes: d.notes || null,
624
627
  };
625
628
  if (Number.isFinite(d.dEfficiency)) {
626
- out.dEfficiencyNote = 'D-efficiency compares designs fitting the SAME model at the SAME run count. It is a relative score, not a pass mark, and cannot be compared across different models.';
629
+ out.dEfficiencyNote = out.dEfficiencyKind === 'relative'
630
+ ? 'RELATIVE D-efficiency: this design against the best achievable for the same model and run budget IN ITS OWN DESIGN REGION, so 100% means "as good as this model and budget allow there". It is NOT the textbook absolute measure. It is used whenever the orthogonal ideal is unreachable by construction — a mixture (components collinear, so even a perfect mixture design scores about 33% on the absolute scale) or a region carved by linear constraints (an orthogonal design generally does not survive the cut). Do not compare this figure with an unconstrained design\'s D-efficiency or with another tool\'s.'
631
+ : 'ABSOLUTE D-efficiency: 100·|XᵀX|^(1/p)/N on coded factors, where 100% is the orthogonal ideal. Compare only against designs fitting the SAME model at the SAME run count; it is not a pass mark and does not transfer across model forms.';
627
632
  }
628
633
  if (args.include_runs !== false) {
629
634
  const facs = d.factors || [];