@enfyra/mcp-server 0.1.18 → 0.1.20
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/dist/lib/mcp-examples.js +156 -259
- package/dist/lib/mcp-examples.js.map +1 -1
- package/dist/lib/mcp-instructions.js +6 -5
- package/dist/lib/mcp-instructions.js.map +1 -1
- package/dist/lib/mutation-guards.d.ts +11 -0
- package/dist/lib/mutation-guards.js +47 -3
- package/dist/lib/mutation-guards.js.map +1 -1
- package/dist/lib/required-knowledge.d.ts +1 -1
- package/dist/lib/required-knowledge.js +7 -5
- package/dist/lib/required-knowledge.js.map +1 -1
- package/dist/lib/table-tools.js +396 -265
- package/dist/lib/table-tools.js.map +1 -1
- package/dist/lib/tool-routing.js +20 -14
- package/dist/lib/tool-routing.js.map +1 -1
- package/dist/mcp-server-entry.js +201 -68
- package/dist/mcp-server-entry.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export declare function parseRecordData(data: any): any;
|
|
2
|
+
export declare function parseRecordBatchData(data: any): any[];
|
|
2
3
|
export declare function getAllowedMutationFields(table: any): Set<any>;
|
|
3
4
|
export declare function validatePayloadFields(table: any, payload: any): void;
|
|
4
5
|
export declare function rejectUnsafeScriptPayload(tableName: any, payload: any): void;
|
|
@@ -31,3 +32,13 @@ export declare function prepareRecordMutation({ fetchAPI, apiUrl, tables, tableN
|
|
|
31
32
|
reason?: undefined;
|
|
32
33
|
};
|
|
33
34
|
}>;
|
|
35
|
+
export declare function prepareRecordBatchMutation({ fetchAPI, apiUrl, tables, tableName, records }: {
|
|
36
|
+
fetchAPI: any;
|
|
37
|
+
apiUrl: any;
|
|
38
|
+
tables: any;
|
|
39
|
+
tableName: any;
|
|
40
|
+
records: any;
|
|
41
|
+
}): Promise<{
|
|
42
|
+
table: any;
|
|
43
|
+
records: any[];
|
|
44
|
+
}>;
|
|
@@ -30,10 +30,25 @@ const FORBIDDEN_RELATION_DEFINITION_KEYS = new Set([
|
|
|
30
30
|
export function parseRecordData(data) {
|
|
31
31
|
const parsed = typeof data === 'string' ? JSON.parse(data) : data;
|
|
32
32
|
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
33
|
-
throw new Error('Record data must be a JSON object string.');
|
|
33
|
+
throw new Error('Record data must be a single JSON object string for internal mutation preparation. Public MCP writes use create_records/update_records/delete_records with array inputs, including one-item arrays for single mutations.');
|
|
34
34
|
}
|
|
35
35
|
return parsed;
|
|
36
36
|
}
|
|
37
|
+
export function parseRecordBatchData(data) {
|
|
38
|
+
const parsed = typeof data === 'string' ? JSON.parse(data) : data;
|
|
39
|
+
if (!Array.isArray(parsed)) {
|
|
40
|
+
throw new Error('Batch record data must be a JSON array string. For one record, pass one object in the array.');
|
|
41
|
+
}
|
|
42
|
+
if (parsed.length === 0) {
|
|
43
|
+
throw new Error('Batch record data must include at least one record.');
|
|
44
|
+
}
|
|
45
|
+
parsed.forEach((record, index) => {
|
|
46
|
+
if (!record || typeof record !== 'object' || Array.isArray(record)) {
|
|
47
|
+
throw new Error(`Batch record at index ${index} must be a JSON object.`);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
37
52
|
export function getAllowedMutationFields(table) {
|
|
38
53
|
const columns = (table?.columns || []).map((column) => column.name).filter(Boolean);
|
|
39
54
|
const relations = (table?.relations || []).map((relation) => relation.propertyName).filter(Boolean);
|
|
@@ -59,10 +74,12 @@ export function validatePayloadFields(table, payload) {
|
|
|
59
74
|
})
|
|
60
75
|
.filter(Boolean);
|
|
61
76
|
throw new Error(`Payload contains fields not present in metadata for ${table.name}: ${unknown.join(', ')}. ` +
|
|
62
|
-
`
|
|
77
|
+
`This MCP already validated the payload against live metadata before sending it to Enfyra, so do not retry the same shape. ` +
|
|
78
|
+
`Use only these metadata-backed columns and relation propertyName values: ${[...allowed].sort().join(', ')}. ` +
|
|
63
79
|
(relationHints.length
|
|
64
80
|
? `Relation hint(s): ${relationHints.join('; ')}. `
|
|
65
81
|
: '') +
|
|
82
|
+
`Call inspect_table({ tableName: "${table.name}" }) if you need full column types, enum options, or relation targets. ` +
|
|
66
83
|
'If this value links to another record, create/use an Enfyra relation and mutate the relation propertyName; Enfyra hides derived FK columns from app schema/forms.');
|
|
67
84
|
}
|
|
68
85
|
}
|
|
@@ -80,7 +97,7 @@ export function rejectUnsafeRelationDefinitionPayload(tableName, payload) {
|
|
|
80
97
|
const forbidden = Object.keys(payload).filter((key) => FORBIDDEN_RELATION_DEFINITION_KEYS.has(key));
|
|
81
98
|
if (forbidden.length > 0) {
|
|
82
99
|
throw new Error(`Do not send physical FK/junction fields to enfyra_relation: ${forbidden.join(', ')}. ` +
|
|
83
|
-
'Use
|
|
100
|
+
'Use create_relations with targetTable/type/propertyName; Enfyra derives physical columns.');
|
|
84
101
|
}
|
|
85
102
|
}
|
|
86
103
|
export async function validateScriptSourceIfPresent(fetchAPI, apiUrl, tableName, payload) {
|
|
@@ -120,4 +137,31 @@ export async function prepareRecordMutation({ fetchAPI, apiUrl, tables, tableNam
|
|
|
120
137
|
scriptValidation,
|
|
121
138
|
};
|
|
122
139
|
}
|
|
140
|
+
export async function prepareRecordBatchMutation({ fetchAPI, apiUrl, tables, tableName, records }) {
|
|
141
|
+
const parsedRecords = parseRecordBatchData(records);
|
|
142
|
+
const table = tables.find((item) => item?.name === tableName || item?.alias === tableName);
|
|
143
|
+
if (!table)
|
|
144
|
+
throw new Error(`Unknown table "${tableName}"`);
|
|
145
|
+
const preparedRecords = [];
|
|
146
|
+
for (const [index, payload] of parsedRecords.entries()) {
|
|
147
|
+
try {
|
|
148
|
+
validatePayloadFields(table, payload);
|
|
149
|
+
rejectUnsafeScriptPayload(table.name, payload);
|
|
150
|
+
rejectUnsafeRelationDefinitionPayload(table.name, payload);
|
|
151
|
+
const scriptValidation = await validateScriptSourceIfPresent(fetchAPI, apiUrl, table.name, payload);
|
|
152
|
+
preparedRecords.push({
|
|
153
|
+
index,
|
|
154
|
+
payload,
|
|
155
|
+
scriptValidation,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
throw new Error(`Record batch preflight failed at index ${index}: ${error?.message || String(error)}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
table,
|
|
164
|
+
records: preparedRecords,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
123
167
|
//# sourceMappingURL=mutation-guards.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutation-guards.js","sourceRoot":"","sources":["../../src/lib/mutation-guards.ts"],"names":[],"mappings":"AAAA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,sBAAsB;IACtB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,wBAAwB;IACxB,kBAAkB;IAClB,gBAAgB;IAChB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,sBAAsB;IACtB,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,wBAAwB;IACxB,kBAAkB;IAClB,gBAAgB;IAChB,yBAAyB;CAC1B,CAAC,CAAC;AAEH,MAAM,kCAAkC,GAAG,IAAI,GAAG,CAAC;IACjD,OAAO;IACP,UAAU;IACV,kBAAkB;IAClB,cAAc;IACd,cAAc;IACd,sBAAsB;IACtB,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,UAAU,eAAe,CAAC,IAAI;IAClC,MAAM,MAAM,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"mutation-guards.js","sourceRoot":"","sources":["../../src/lib/mutation-guards.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const GLOBAL_RULES_ACK_KEY = "EFYRA::GLOBAL-RULES::RUNTIME-ZONES::SCHEMA-DESIGN-CONTEXT::
|
|
1
|
+
export declare const GLOBAL_RULES_ACK_KEY = "EFYRA::GLOBAL-RULES::RUNTIME-ZONES::SCHEMA-DESIGN-CONTEXT::RECORD-BATCH::20260703F";
|
|
2
2
|
export declare const DYNAMIC_CODE_KNOWLEDGE_ACK_KEY = "EFYRA::SECURE-REPO-CONTRACT::R9x-kelp-42Q::NO-RAW-TRUSTED";
|
|
3
3
|
export declare const EXTENSION_KNOWLEDGE_ACK_KEY = "EFYRA::EXTENSION-THEME-CONTRACT::VIOLET-IS-NOT-A-PLAN::7mQ";
|
|
4
4
|
export declare function globalRulesAckParam(z: any): any;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export const GLOBAL_RULES_ACK_KEY = 'EFYRA::GLOBAL-RULES::RUNTIME-ZONES::SCHEMA-DESIGN-CONTEXT::
|
|
1
|
+
export const GLOBAL_RULES_ACK_KEY = 'EFYRA::GLOBAL-RULES::RUNTIME-ZONES::SCHEMA-DESIGN-CONTEXT::RECORD-BATCH::20260703F';
|
|
2
2
|
export const DYNAMIC_CODE_KNOWLEDGE_ACK_KEY = 'EFYRA::SECURE-REPO-CONTRACT::R9x-kelp-42Q::NO-RAW-TRUSTED';
|
|
3
3
|
export const EXTENSION_KNOWLEDGE_ACK_KEY = 'EFYRA::EXTENSION-THEME-CONTRACT::VIOLET-IS-NOT-A-PLAN::7mQ';
|
|
4
|
-
const REQUIRED_KNOWLEDGE_VERSION = '2026-07-03.global-rules-
|
|
4
|
+
const REQUIRED_KNOWLEDGE_VERSION = '2026-07-03.global-rules-v6-record-batch';
|
|
5
5
|
export function globalRulesAckParam(z) {
|
|
6
6
|
return z.string().describe('Required global-rules acknowledgement key from get_enfyra_required_knowledge. Call that tool, read the global Enfyra MCP rules, then pass globalRulesAckKey exactly.');
|
|
7
7
|
}
|
|
@@ -100,16 +100,18 @@ export function buildRequiredKnowledgePayload() {
|
|
|
100
100
|
rules: [
|
|
101
101
|
'Before creating a multi-table app, call get_schema_design_context first. Use its liveColumnTypes, createTableInput, columnDefinitionInput, relationDefinitionInput, and recommendedSequence instead of guessing metadata attributes.',
|
|
102
102
|
'Then call get_enfyra_examples with category=schema-relations only for reasoning patterns, not for domain-specific table names.',
|
|
103
|
-
'
|
|
103
|
+
'Use plural mutation tools for writes: create_tables/update_tables/delete_tables, create_columns/update_columns/delete_columns, create_relations/delete_relations, and create_records/update_records/delete_records. Pass one item in the array for a single mutation.',
|
|
104
|
+
'Create entity tables with scalar columns first, then add relations once target tables exist. create_tables defers relation creation until all tables in the same batch exist.',
|
|
104
105
|
'Use live Enfyra column types, not SQL dialect names. Common safe choices: varchar for short text, text/richtext for long prose, float for price/amount/rating/decimal-like values, int/bigint for counts, boolean, date/datetime/timestamp, enum, simple-json for structured objects/arrays when listed by live metadata, and code for source fields.',
|
|
105
106
|
'Do not use json/jsonb/longtext/decimal unless the live enfyra_column.type enum lists them. The MCP schema tools normalize common aliases where possible and return schemaNormalization.',
|
|
106
107
|
'Use Enfyra relations instead of scalar FK/id columns for normalized links. Do not create fields such as userId, course_id, categoryIds, authorId, or JSON arrays of related ids unless the user explicitly asks for denormalized snapshots.',
|
|
107
108
|
'When inserting/updating records with relations, use relation propertyName values in the body, not hidden physical FK columns. Inspect the table to learn propertyName values.',
|
|
109
|
+
'For record writes, always use create_records/update_records/delete_records with array inputs; these tools validate every item against live metadata before posting/patching/deleting sequentially.',
|
|
108
110
|
'For table schema, a field that appears in any uniques group must not appear in indexes.',
|
|
109
111
|
'A unique constraint already creates the indexed unique lookup for its fields.',
|
|
110
112
|
'Use uniques for data integrity and indexes only for non-unique query-performance fields that are not already unique.',
|
|
111
|
-
'Before
|
|
112
|
-
'Run schema mutation calls
|
|
113
|
+
'Before create_tables or update_tables with indexes/uniques, inspect the current table and remove indexes that reference unique fields.',
|
|
114
|
+
'Run schema mutation calls through the plural tools; they serialize work internally. Do not parallelize schema mutation tool calls.',
|
|
113
115
|
],
|
|
114
116
|
},
|
|
115
117
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"required-knowledge.js","sourceRoot":"","sources":["../../src/lib/required-knowledge.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,
|
|
1
|
+
{"version":3,"file":"required-knowledge.js","sourceRoot":"","sources":["../../src/lib/required-knowledge.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,oFAAoF,CAAC;AACzH,MAAM,CAAC,MAAM,8BAA8B,GAAG,2DAA2D,CAAC;AAC1G,MAAM,CAAC,MAAM,2BAA2B,GAAG,4DAA4D,CAAC;AAExG,MAAM,0BAA0B,GAAG,yCAAyC,CAAC;AAE7E,MAAM,UAAU,mBAAmB,CAAC,CAAC;IACnC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sKAAsK,CAAC,CAAC;AACrM,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,CAAC;IAC5C,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4KAA4K,CAAC,CAAC;AAC3M,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mKAAmK,CAAC,CAAC;AAClM,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,GAAG;IACtC,IAAI,GAAG,KAAK,oBAAoB,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,0KAA0K,CAAC,CAAC;IAC9L,CAAC;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAAS,EAAE,GAAG;IACnD,IAAI,SAAS;QAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAAG;IAC/C,IAAI,GAAG,KAAK,8BAA8B,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,wLAAwL,CAAC,CAAC;IAC5M,CAAC;AACH,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,SAAS,EAAE,GAAG;IAC5D,IAAI,SAAS;QAAE,6BAA6B,CAAC,GAAG,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAG;IAC7C,IAAI,GAAG,KAAK,2BAA2B,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,wLAAwL,CAAC,CAAC;IAC5M,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,SAAS,EAAE,GAAG;IAC1D,IAAI,SAAS;QAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,OAAO,EAAE,0BAA0B;QACnC,OAAO,EAAE,yJAAyJ;QAClK,iBAAiB,EAAE,oBAAoB;QACvC,iBAAiB,EAAE,8BAA8B;QACjD,eAAe,EAAE,2BAA2B;QAC5C,KAAK,EAAE;YACL,mMAAmM;YACnM,qHAAqH;YACrH,8HAA8H;SAC/H;QACD,WAAW,EAAE;YACX;gBACE,EAAE,EAAE,gCAAgC;gBACpC,KAAK,EAAE;oBACL,mEAAmE;oBACnE,uJAAuJ;oBACvJ,mJAAmJ;iBACpJ;aACF;YACD;gBACE,EAAE,EAAE,0BAA0B;gBAC9B,KAAK,EAAE;oBACL,8GAA8G;oBAC9G,0IAA0I;oBAC1I,8KAA8K;oBAC9K,kEAAkE;iBACnE;aACF;YACD;gBACE,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE;oBACL,+IAA+I;oBAC/I,mIAAmI;oBACnI,uNAAuN;oBACvN,wIAAwI;oBACxI,0EAA0E;oBAC1E,wFAAwF;oBACxF,6FAA6F;oBAC7F,oHAAoH;oBACpH,sFAAsF;oBACtF,+HAA+H;oBAC/H,8IAA8I;oBAC9I,qJAAqJ;oBACrJ,oJAAoJ;iBACrJ;aACF;YACD;gBACE,EAAE,EAAE,2BAA2B;gBAC/B,KAAK,EAAE;oBACL,gFAAgF;oBAChF,gGAAgG;oBAChG,qHAAqH;oBACrH,+FAA+F;iBAChG;aACF;YACD;gBACE,EAAE,EAAE,oBAAoB;gBACxB,KAAK,EAAE;oBACL,sOAAsO;oBACtO,gIAAgI;oBAChI,uQAAuQ;oBACvQ,+KAA+K;oBAC/K,uVAAuV;oBACvV,yLAAyL;oBACzL,6OAA6O;oBAC7O,+KAA+K;oBAC/K,oMAAoM;oBACpM,yFAAyF;oBACzF,+EAA+E;oBAC/E,sHAAsH;oBACtH,wIAAwI;oBACxI,oIAAoI;iBACrI;aACF;YACD;gBACE,EAAE,EAAE,gBAAgB;gBACpB,KAAK,EAAE;oBACL,6IAA6I;oBAC7I,0KAA0K;oBAC1K,6KAA6K;iBAC9K;aACF;YACD;gBACE,EAAE,EAAE,eAAe;gBACnB,KAAK,EAAE;oBACL,wGAAwG;oBACxG,wGAAwG;oBACxG,2DAA2D;oBAC3D,0JAA0J;iBAC3J;aACF;SACF;QACD,iBAAiB,EAAE;YACjB;gBACE,EAAE,EAAE,gCAAgC;gBACpC,KAAK,EAAE;oBACL,kHAAkH;oBAClH,mMAAmM;oBACnM,+KAA+K;oBAC/K,uGAAuG;iBACxG;aACF;YACD;gBACE,EAAE,EAAE,2BAA2B;gBAC/B,KAAK,EAAE;oBACL,oFAAoF;oBACpF,2HAA2H;oBAC3H,6MAA6M;iBAC9M;aACF;YACD;gBACE,EAAE,EAAE,6BAA6B;gBACjC,KAAK,EAAE;oBACL,6FAA6F;oBAC7F,6FAA6F;oBAC7F,qKAAqK;oBACrK,mKAAmK;iBACpK;aACF;YACD;gBACE,EAAE,EAAE,sBAAsB;gBAC1B,KAAK,EAAE;oBACL,6DAA6D;oBAC7D,mIAAmI;oBACnI,yCAAyC;oBACzC,8GAA8G;iBAC/G;aACF;SACF;QACD,UAAU,EAAE;YACV;gBACE,EAAE,EAAE,sBAAsB;gBAC1B,KAAK,EAAE;oBACL,qGAAqG;oBACrG,+FAA+F;oBAC/F,kGAAkG;oBAClG,2HAA2H;oBAC3H,0HAA0H;oBAC1H,6HAA6H;oBAC7H,yGAAyG;iBAC1G;aACF;YACD;gBACE,EAAE,EAAE,0BAA0B;gBAC9B,KAAK,EAAE;oBACL,yHAAyH;oBACzH,wFAAwF;oBACxF,oHAAoH;oBACpH,2HAA2H;oBAC3H,wHAAwH;iBACzH;aACF;YACD;gBACE,EAAE,EAAE,4BAA4B;gBAChC,KAAK,EAAE;oBACL,qGAAqG;oBACrG,kNAAkN;oBAClN,qFAAqF;oBACrF,uGAAuG;oBACvG,yGAAyG;oBACzG,4LAA4L;oBAC5L,8NAA8N;iBAC/N;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|