formlab-mcp 0.6.8 → 0.6.9
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 +1 -1
- package/server.json +2 -2
- package/tools/formulations.js +13 -0
- package/tools/ingredients.js +2 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "formlab-mcp",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.9",
|
|
4
4
|
"mcpName": "io.github.juliu1980/formlab-mcp",
|
|
5
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",
|
package/server.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
3
3
|
"name": "io.github.juliu1980/formlab-mcp",
|
|
4
4
|
"description": "Read-only MCP for FormLab — let Claude query your formulation lab. Free reads a local export; Pro connects to your live cloud workspace with a dedicated read-only token.",
|
|
5
|
-
"version": "0.6.
|
|
5
|
+
"version": "0.6.9",
|
|
6
6
|
"websiteUrl": "https://formvix.com/mcp",
|
|
7
7
|
"repository": {
|
|
8
8
|
"url": "https://github.com/juliu1980/FormLab",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
{
|
|
14
14
|
"registryType": "npm",
|
|
15
15
|
"identifier": "formlab-mcp",
|
|
16
|
-
"version": "0.6.
|
|
16
|
+
"version": "0.6.9",
|
|
17
17
|
"runtimeHint": "npx",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
package/tools/formulations.js
CHANGED
|
@@ -107,6 +107,19 @@ const get_formulation = {
|
|
|
107
107
|
})),
|
|
108
108
|
compositionFlattenedWtPct: flatRows,
|
|
109
109
|
stepCount: (f.steps || []).length,
|
|
110
|
+
// The actual procedure — the tool description promises "step procedure",
|
|
111
|
+
// so return the ordered steps, not just the count. Keep only the
|
|
112
|
+
// meaningful fields; drop empties so simple recipes stay clean.
|
|
113
|
+
steps: (f.steps || []).map(s => ({
|
|
114
|
+
description: (s && (s.description || s.action || s.type)) || '',
|
|
115
|
+
...(s && s.duration != null && s.duration !== '' ? { duration: s.duration } : {}),
|
|
116
|
+
...(s && s.temperature != null && s.temperature !== '' ? { temperature: s.temperature } : {}),
|
|
117
|
+
...(s && s.rpm != null && s.rpm !== '' ? { rpm: s.rpm } : {}),
|
|
118
|
+
...(s && s.equipment ? { equipment: s.equipment } : {}),
|
|
119
|
+
...(s && s.notes ? { notes: s.notes } : {}),
|
|
120
|
+
})),
|
|
121
|
+
// User-defined fields (incl. the "DOE factor"/"DOE value" convention).
|
|
122
|
+
customFields: (f.customFields || []).filter(c => c && c.name).map(c => ({ name: c.name, value: c.value != null ? c.value : '' })),
|
|
110
123
|
batchCount: batches.length,
|
|
111
124
|
sampleCount: samples.length,
|
|
112
125
|
};
|
package/tools/ingredients.js
CHANGED
|
@@ -43,12 +43,14 @@ function _trimIngredient(i) {
|
|
|
43
43
|
id: i.id,
|
|
44
44
|
uid: i.uid,
|
|
45
45
|
name: i.name,
|
|
46
|
+
chemicalName: i.chemicalName || '',
|
|
46
47
|
family: i.family || '',
|
|
47
48
|
supplier: i.supplier || '',
|
|
48
49
|
casNumber: i.cas || i.casNumber || '',
|
|
49
50
|
grade: i.grade || '',
|
|
50
51
|
state: i.state || '',
|
|
51
52
|
function: i.function || '',
|
|
53
|
+
storage: i.storage || '',
|
|
52
54
|
mw: i.mw != null && i.mw !== '' ? Number(i.mw) : null,
|
|
53
55
|
// % active for a technical/impure raw material (drives purity-corrected
|
|
54
56
|
// weigh-out). null when full-strength / unspecified.
|