@enfyra/mcp-server 0.1.69 → 0.1.71

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 (248) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/config-local-adapters.d.ts +18 -0
  3. package/dist/lib/config-local-adapters.js +271 -0
  4. package/dist/lib/config-local-adapters.js.map +1 -0
  5. package/dist/lib/config-local-contracts.d.ts +28 -0
  6. package/dist/lib/config-local-contracts.js +200 -0
  7. package/dist/lib/config-local-contracts.js.map +1 -0
  8. package/dist/lib/config-local-prompts.d.ts +10 -0
  9. package/dist/lib/config-local-prompts.js +185 -0
  10. package/dist/lib/config-local-prompts.js.map +1 -0
  11. package/dist/lib/config-local-types.d.ts +23 -0
  12. package/dist/lib/config-local-types.js +2 -0
  13. package/dist/lib/config-local-types.js.map +1 -0
  14. package/dist/lib/config-local.js +3 -649
  15. package/dist/lib/config-local.js.map +1 -1
  16. package/dist/lib/discovery-tools.d.ts +4 -0
  17. package/dist/lib/discovery-tools.js +546 -0
  18. package/dist/lib/discovery-tools.js.map +1 -0
  19. package/dist/lib/dynamic-repository-builder.d.ts +1 -1
  20. package/dist/lib/dynamic-script-context-contract.d.ts +100 -0
  21. package/dist/lib/dynamic-script-context-contract.js +163 -0
  22. package/dist/lib/dynamic-script-context-contract.js.map +1 -0
  23. package/dist/lib/enfyra-mcp-server.d.ts +3 -0
  24. package/dist/lib/enfyra-mcp-server.js +79 -0
  25. package/dist/lib/enfyra-mcp-server.js.map +1 -0
  26. package/dist/lib/enfyra-tool-logic.d.ts +7 -0
  27. package/dist/lib/enfyra-tool-logic.js +8 -0
  28. package/dist/lib/enfyra-tool-logic.js.map +1 -0
  29. package/dist/lib/enfyra-tool-types.d.ts +27 -0
  30. package/dist/lib/enfyra-tool-types.js +2 -0
  31. package/dist/lib/enfyra-tool-types.js.map +1 -0
  32. package/dist/lib/extension-api-builders.d.ts +17 -0
  33. package/dist/lib/extension-api-builders.js +235 -0
  34. package/dist/lib/extension-api-builders.js.map +1 -0
  35. package/dist/lib/extension-component-builders.d.ts +87 -0
  36. package/dist/lib/extension-component-builders.js +623 -0
  37. package/dist/lib/extension-component-builders.js.map +1 -0
  38. package/dist/lib/extension-contract-review.d.ts +26 -0
  39. package/dist/lib/extension-contract-review.js +187 -0
  40. package/dist/lib/extension-contract-review.js.map +1 -0
  41. package/dist/lib/extension-theme-contract.d.ts +63 -0
  42. package/dist/lib/extension-theme-contract.js +417 -0
  43. package/dist/lib/extension-theme-contract.js.map +1 -0
  44. package/dist/lib/identity-tools.d.ts +4 -0
  45. package/dist/lib/identity-tools.js +46 -0
  46. package/dist/lib/identity-tools.js.map +1 -0
  47. package/dist/lib/log-tools.d.ts +4 -0
  48. package/dist/lib/log-tools.js +65 -0
  49. package/dist/lib/log-tools.js.map +1 -0
  50. package/dist/lib/mcp-example-connect.d.ts +9 -0
  51. package/dist/lib/mcp-example-connect.js +442 -0
  52. package/dist/lib/mcp-example-connect.js.map +1 -0
  53. package/dist/lib/mcp-example-extensions.d.ts +9 -0
  54. package/dist/lib/mcp-example-extensions.js +729 -0
  55. package/dist/lib/mcp-example-extensions.js.map +1 -0
  56. package/dist/lib/mcp-example-files.d.ts +9 -0
  57. package/dist/lib/mcp-example-files.js +51 -0
  58. package/dist/lib/mcp-example-files.js.map +1 -0
  59. package/dist/lib/mcp-example-flows.d.ts +9 -0
  60. package/dist/lib/mcp-example-flows.js +76 -0
  61. package/dist/lib/mcp-example-flows.js.map +1 -0
  62. package/dist/lib/mcp-example-graphql.d.ts +9 -0
  63. package/dist/lib/mcp-example-graphql.js +57 -0
  64. package/dist/lib/mcp-example-graphql.js.map +1 -0
  65. package/dist/lib/mcp-example-handlers-hooks.d.ts +9 -0
  66. package/dist/lib/mcp-example-handlers-hooks.js +328 -0
  67. package/dist/lib/mcp-example-handlers-hooks.js.map +1 -0
  68. package/dist/lib/mcp-example-oauth-setup.d.ts +9 -0
  69. package/dist/lib/mcp-example-oauth-setup.js +41 -0
  70. package/dist/lib/mcp-example-oauth-setup.js.map +1 -0
  71. package/dist/lib/mcp-example-permissions-rls.d.ts +9 -0
  72. package/dist/lib/mcp-example-permissions-rls.js +210 -0
  73. package/dist/lib/mcp-example-permissions-rls.js.map +1 -0
  74. package/dist/lib/mcp-example-queries-deep.d.ts +9 -0
  75. package/dist/lib/mcp-example-queries-deep.js +220 -0
  76. package/dist/lib/mcp-example-queries-deep.js.map +1 -0
  77. package/dist/lib/mcp-example-schema-relations.d.ts +9 -0
  78. package/dist/lib/mcp-example-schema-relations.js +148 -0
  79. package/dist/lib/mcp-example-schema-relations.js.map +1 -0
  80. package/dist/lib/mcp-example-websocket.d.ts +9 -0
  81. package/dist/lib/mcp-example-websocket.js +103 -0
  82. package/dist/lib/mcp-example-websocket.js.map +1 -0
  83. package/dist/lib/mcp-examples.d.ts +5 -5
  84. package/dist/lib/mcp-examples.js +22 -2394
  85. package/dist/lib/mcp-examples.js.map +1 -1
  86. package/dist/lib/method-tools.d.ts +4 -0
  87. package/dist/lib/method-tools.js +217 -0
  88. package/dist/lib/method-tools.js.map +1 -0
  89. package/dist/lib/package-tools.d.ts +4 -0
  90. package/dist/lib/package-tools.js +98 -0
  91. package/dist/lib/package-tools.js.map +1 -0
  92. package/dist/lib/platform-data-operations.d.ts +24 -0
  93. package/dist/lib/platform-data-operations.js +71 -0
  94. package/dist/lib/platform-data-operations.js.map +1 -0
  95. package/dist/lib/platform-endpoint-workflow.d.ts +42 -0
  96. package/dist/lib/platform-endpoint-workflow.js +382 -0
  97. package/dist/lib/platform-endpoint-workflow.js.map +1 -0
  98. package/dist/lib/platform-extension-source.d.ts +487 -0
  99. package/dist/lib/platform-extension-source.js +524 -0
  100. package/dist/lib/platform-extension-source.js.map +1 -0
  101. package/dist/lib/platform-extension-tools.d.ts +1 -0
  102. package/dist/lib/platform-extension-tools.js +416 -0
  103. package/dist/lib/platform-extension-tools.js.map +1 -0
  104. package/dist/lib/platform-extension-ui.d.ts +4 -0
  105. package/dist/lib/platform-extension-ui.js +5 -0
  106. package/dist/lib/platform-extension-ui.js.map +1 -0
  107. package/dist/lib/platform-extension-workflow.d.ts +54 -0
  108. package/dist/lib/platform-extension-workflow.js +194 -0
  109. package/dist/lib/platform-extension-workflow.js.map +1 -0
  110. package/dist/lib/platform-flow-operations.d.ts +554 -0
  111. package/dist/lib/platform-flow-operations.js +317 -0
  112. package/dist/lib/platform-flow-operations.js.map +1 -0
  113. package/dist/lib/platform-flow-tools.d.ts +1 -0
  114. package/dist/lib/platform-flow-tools.js +248 -0
  115. package/dist/lib/platform-flow-tools.js.map +1 -0
  116. package/dist/lib/platform-operation-logic.d.ts +10 -0
  117. package/dist/lib/platform-operation-logic.js +11 -0
  118. package/dist/lib/platform-operation-logic.js.map +1 -0
  119. package/dist/lib/platform-operation-tools.d.ts +1 -324
  120. package/dist/lib/platform-operation-tools.js +13 -4620
  121. package/dist/lib/platform-operation-tools.js.map +1 -1
  122. package/dist/lib/platform-operation-types.d.ts +46 -0
  123. package/dist/lib/platform-operation-types.js +2 -0
  124. package/dist/lib/platform-operation-types.js.map +1 -0
  125. package/dist/lib/platform-policy-tools.d.ts +1 -0
  126. package/dist/lib/platform-policy-tools.js +248 -0
  127. package/dist/lib/platform-policy-tools.js.map +1 -0
  128. package/dist/lib/platform-resource-operations.d.ts +124 -0
  129. package/dist/lib/platform-resource-operations.js +109 -0
  130. package/dist/lib/platform-resource-operations.js.map +1 -0
  131. package/dist/lib/platform-resource-tools.d.ts +1 -0
  132. package/dist/lib/platform-resource-tools.js +70 -0
  133. package/dist/lib/platform-resource-tools.js.map +1 -0
  134. package/dist/lib/platform-route-operations.d.ts +222 -0
  135. package/dist/lib/platform-route-operations.js +290 -0
  136. package/dist/lib/platform-route-operations.js.map +1 -0
  137. package/dist/lib/platform-route-tools.d.ts +1 -0
  138. package/dist/lib/platform-route-tools.js +307 -0
  139. package/dist/lib/platform-route-tools.js.map +1 -0
  140. package/dist/lib/platform-shared-operations.d.ts +7 -0
  141. package/dist/lib/platform-shared-operations.js +4 -0
  142. package/dist/lib/platform-shared-operations.js.map +1 -0
  143. package/dist/lib/platform-websocket-tools.d.ts +1 -0
  144. package/dist/lib/platform-websocket-tools.js +70 -0
  145. package/dist/lib/platform-websocket-tools.js.map +1 -0
  146. package/dist/lib/record-tools.d.ts +4 -0
  147. package/dist/lib/record-tools.js +418 -0
  148. package/dist/lib/record-tools.js.map +1 -0
  149. package/dist/lib/required-knowledge.d.ts +1 -1
  150. package/dist/lib/required-knowledge.js +3 -2
  151. package/dist/lib/required-knowledge.js.map +1 -1
  152. package/dist/lib/route-access-tools.d.ts +4 -0
  153. package/dist/lib/route-access-tools.js +172 -0
  154. package/dist/lib/route-access-tools.js.map +1 -0
  155. package/dist/lib/route-definition-tools.d.ts +4 -0
  156. package/dist/lib/route-definition-tools.js +285 -0
  157. package/dist/lib/route-definition-tools.js.map +1 -0
  158. package/dist/lib/route-inspection-tools.d.ts +4 -0
  159. package/dist/lib/route-inspection-tools.js +319 -0
  160. package/dist/lib/route-inspection-tools.js.map +1 -0
  161. package/dist/lib/route-tools.d.ts +1 -0
  162. package/dist/lib/route-tools.js +9 -0
  163. package/dist/lib/route-tools.js.map +1 -0
  164. package/dist/lib/runtime-zone-registry.d.ts +27 -0
  165. package/dist/lib/runtime-zone-registry.js +81 -0
  166. package/dist/lib/runtime-zone-registry.js.map +1 -0
  167. package/dist/lib/runtime-zone-search.d.ts +303 -0
  168. package/dist/lib/runtime-zone-search.js +596 -0
  169. package/dist/lib/runtime-zone-search.js.map +1 -0
  170. package/dist/lib/runtime-zone-tools.d.ts +2 -307
  171. package/dist/lib/runtime-zone-tools.js +2 -674
  172. package/dist/lib/runtime-zone-tools.js.map +1 -1
  173. package/dist/lib/schema-column-tools.d.ts +3 -0
  174. package/dist/lib/schema-column-tools.js +80 -0
  175. package/dist/lib/schema-column-tools.js.map +1 -0
  176. package/dist/lib/schema-mutation-coordinator.d.ts +28 -0
  177. package/dist/lib/schema-mutation-coordinator.js +154 -0
  178. package/dist/lib/schema-mutation-coordinator.js.map +1 -0
  179. package/dist/lib/schema-relation-contracts.d.ts +39 -0
  180. package/dist/lib/schema-relation-contracts.js +160 -0
  181. package/dist/lib/schema-relation-contracts.js.map +1 -0
  182. package/dist/lib/schema-relation-tools.d.ts +3 -0
  183. package/dist/lib/schema-relation-tools.js +61 -0
  184. package/dist/lib/schema-relation-tools.js.map +1 -0
  185. package/dist/lib/schema-table-contracts.d.ts +28 -0
  186. package/dist/lib/schema-table-contracts.js +263 -0
  187. package/dist/lib/schema-table-contracts.js.map +1 -0
  188. package/dist/lib/schema-table-tools.d.ts +3 -0
  189. package/dist/lib/schema-table-tools.js +297 -0
  190. package/dist/lib/schema-table-tools.js.map +1 -0
  191. package/dist/lib/schema-tool-operations.d.ts +150 -0
  192. package/dist/lib/schema-tool-operations.js +468 -0
  193. package/dist/lib/schema-tool-operations.js.map +1 -0
  194. package/dist/lib/schema-tool-types.d.ts +38 -0
  195. package/dist/lib/schema-tool-types.js +2 -0
  196. package/dist/lib/schema-tool-types.js.map +1 -0
  197. package/dist/lib/schema-verification.d.ts +14 -0
  198. package/dist/lib/schema-verification.js +105 -0
  199. package/dist/lib/schema-verification.js.map +1 -0
  200. package/dist/lib/script-tools.d.ts +4 -0
  201. package/dist/lib/script-tools.js +127 -0
  202. package/dist/lib/script-tools.js.map +1 -0
  203. package/dist/lib/system-tools.d.ts +4 -0
  204. package/dist/lib/system-tools.js +41 -0
  205. package/dist/lib/system-tools.js.map +1 -0
  206. package/dist/lib/table-tool-logic.d.ts +5 -0
  207. package/dist/lib/table-tool-logic.js +6 -0
  208. package/dist/lib/table-tool-logic.js.map +1 -0
  209. package/dist/lib/table-tools.d.ts +1 -84
  210. package/dist/lib/table-tools.js +7 -1522
  211. package/dist/lib/table-tools.js.map +1 -1
  212. package/dist/lib/tool-catalog.d.ts +2 -1
  213. package/dist/lib/tool-catalog.js +23 -2
  214. package/dist/lib/tool-catalog.js.map +1 -1
  215. package/dist/lib/tool-metadata-operations.d.ts +27 -0
  216. package/dist/lib/tool-metadata-operations.js +93 -0
  217. package/dist/lib/tool-metadata-operations.js.map +1 -0
  218. package/dist/lib/tool-permission-profile.d.ts +37 -0
  219. package/dist/lib/tool-permission-profile.js +106 -0
  220. package/dist/lib/tool-permission-profile.js.map +1 -0
  221. package/dist/lib/tool-record-operations.d.ts +102 -0
  222. package/dist/lib/tool-record-operations.js +260 -0
  223. package/dist/lib/tool-record-operations.js.map +1 -0
  224. package/dist/lib/tool-route-inspection.d.ts +47 -0
  225. package/dist/lib/tool-route-inspection.js +168 -0
  226. package/dist/lib/tool-route-inspection.js.map +1 -0
  227. package/dist/lib/tool-routing.d.ts +3 -417
  228. package/dist/lib/tool-routing.js +3 -1038
  229. package/dist/lib/tool-routing.js.map +1 -1
  230. package/dist/lib/tool-runtime-config.d.ts +33 -0
  231. package/dist/lib/tool-runtime-config.js +237 -0
  232. package/dist/lib/tool-runtime-config.js.map +1 -0
  233. package/dist/lib/tool-script-operations.d.ts +34 -0
  234. package/dist/lib/tool-script-operations.js +153 -0
  235. package/dist/lib/tool-script-operations.js.map +1 -0
  236. package/dist/lib/workflow-definitions.d.ts +366 -0
  237. package/dist/lib/workflow-definitions.js +703 -0
  238. package/dist/lib/workflow-definitions.js.map +1 -0
  239. package/dist/lib/workflow-planner.d.ts +45 -0
  240. package/dist/lib/workflow-planner.js +338 -0
  241. package/dist/lib/workflow-planner.js.map +1 -0
  242. package/dist/lib/workflow-types.d.ts +39 -0
  243. package/dist/lib/workflow-types.js +2 -0
  244. package/dist/lib/workflow-types.js.map +1 -0
  245. package/dist/mcp-server-entry.d.ts +0 -3
  246. package/dist/mcp-server-entry.js +2 -3249
  247. package/dist/mcp-server-entry.js.map +1 -1
  248. package/package.json +1 -1
@@ -0,0 +1,105 @@
1
+ import { fetchTableWithDetails, normalizeTablesFromMetadata, } from './schema-mutation-coordinator.js';
2
+ import { getId, normalizeColumnForTablePatch, normalizeColumnOptionsValue, normalizeColumnTypeForLiveMetadata, parseColumnTypeOptions, sanitizeExistingRelationForTablePatch, } from './schema-relation-contracts.js';
3
+ function findMetadataTable(metadata, tableName) {
4
+ return normalizeTablesFromMetadata(metadata).find((table) => table?.name === tableName) || null;
5
+ }
6
+ export function metadataColumnNames(metadata, tableName) {
7
+ return (findMetadataTable(metadata, tableName)?.columns || [])
8
+ .map((column) => column?.name)
9
+ .filter(Boolean);
10
+ }
11
+ export function metadataColumnOptions(metadata, tableName, columnName) {
12
+ const column = (findMetadataTable(metadata, tableName)?.columns || [])
13
+ .find((item) => item?.name === columnName);
14
+ return parseColumnTypeOptions(column?.options);
15
+ }
16
+ export function summarizeCreatedTableSchema(table, fallbackName) {
17
+ if (!table)
18
+ return null;
19
+ const columns = (table.columns || [])
20
+ .map((column) => column?.name)
21
+ .filter(Boolean);
22
+ const relations = (table.relations || [])
23
+ .map((relation) => relation?.propertyName)
24
+ .filter(Boolean);
25
+ return {
26
+ tableName: table.name || fallbackName,
27
+ primaryKey: (table.columns || []).find((column) => column?.isPrimary)?.name || null,
28
+ fields: [...columns, ...relations].sort(),
29
+ columns,
30
+ relations,
31
+ };
32
+ }
33
+ export function getPatchableColumns(columns = []) {
34
+ return (columns || [])
35
+ .filter((column) => getId(column) !== null)
36
+ .map(normalizeColumnForTablePatch);
37
+ }
38
+ function getMissingIds(beforeIds, afterIds, excludedIds = []) {
39
+ const afterSet = new Set(afterIds.map(String));
40
+ const excludedSet = new Set(excludedIds.map(String));
41
+ return beforeIds
42
+ .map(String)
43
+ .filter((id) => !excludedSet.has(id) && !afterSet.has(id));
44
+ }
45
+ export async function verifyColumnCascade(ENFYRA_API_URL, tableId, beforeIds, { action, columnId, columnName, }) {
46
+ const tableData = await fetchTableWithDetails(ENFYRA_API_URL, tableId);
47
+ const afterColumns = getPatchableColumns(tableData.columns);
48
+ const afterIds = afterColumns.map((column) => String(getId(column)));
49
+ const excludedIds = action === 'delete' ? [columnId] : [];
50
+ const missingIds = getMissingIds(beforeIds, afterIds, excludedIds);
51
+ if (missingIds.length > 0) {
52
+ throw new Error(`Schema cascade verification failed: unrelated column ids disappeared: ${missingIds.join(', ')}`);
53
+ }
54
+ if (action === 'create' && !afterColumns.some((column) => column.name === columnName)) {
55
+ throw new Error(`Schema cascade verification failed: column "${columnName}" was not found after create.`);
56
+ }
57
+ if (action === 'delete' && afterIds.includes(String(columnId))) {
58
+ throw new Error(`Schema cascade verification failed: column ${columnId} still exists after delete.`);
59
+ }
60
+ if (action === 'update' && !afterIds.includes(String(columnId))) {
61
+ throw new Error(`Schema cascade verification failed: column ${columnId} was not found after update.`);
62
+ }
63
+ return afterColumns;
64
+ }
65
+ export async function verifyRelationCascade(ENFYRA_API_URL, tableId, beforeIds, { action, relationId, propertyName, }) {
66
+ const tableData = await fetchTableWithDetails(ENFYRA_API_URL, tableId);
67
+ const afterRelations = (tableData.relations || []).map(sanitizeExistingRelationForTablePatch);
68
+ const afterIds = afterRelations.map((relation) => String(getId(relation))).filter((id) => id !== 'null');
69
+ const excludedIds = action === 'delete' ? [relationId] : [];
70
+ const missingIds = getMissingIds(beforeIds, afterIds, excludedIds);
71
+ if (missingIds.length > 0) {
72
+ throw new Error(`Schema cascade verification failed: unrelated relation ids disappeared: ${missingIds.join(', ')}`);
73
+ }
74
+ if (action === 'create' && !afterRelations.some((relation) => relation.propertyName === propertyName)) {
75
+ throw new Error(`Schema cascade verification failed: relation "${propertyName}" was not found after create.`);
76
+ }
77
+ if (action === 'delete' && afterIds.includes(String(relationId))) {
78
+ throw new Error(`Schema cascade verification failed: relation ${relationId} still exists after delete.`);
79
+ }
80
+ return afterRelations;
81
+ }
82
+ export function buildColumnDefinition({ name, type, supportedTypes, isNullable, isUnique, isPublished, isUpdatable, isEncrypted, isPrimary, isGenerated, isSystem, defaultValue, description, options, }) {
83
+ const normalizedType = normalizeColumnTypeForLiveMetadata(type, supportedTypes).type;
84
+ const column = {
85
+ name,
86
+ type: normalizedType,
87
+ isNullable: isNullable ?? true,
88
+ isPrimary: isPrimary ?? false,
89
+ isGenerated: isGenerated ?? false,
90
+ isSystem: isSystem ?? false,
91
+ isPublished: isPublished ?? true,
92
+ isUpdatable: isUpdatable ?? true,
93
+ isEncrypted: isEncrypted ?? false,
94
+ };
95
+ if (isUnique !== undefined)
96
+ column.isUnique = isUnique;
97
+ if (defaultValue !== undefined)
98
+ column.defaultValue = defaultValue;
99
+ if (description !== undefined)
100
+ column.description = description;
101
+ if (options !== undefined)
102
+ column.options = normalizeColumnOptionsValue(options);
103
+ return column;
104
+ }
105
+ //# sourceMappingURL=schema-verification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-verification.js","sourceRoot":"","sources":["../../src/lib/schema-verification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Enfyra MCP — stdio server (loaded by index.ts / dist/index.js).
3
+ */
4
+ export declare function registerScriptTools(server: any, ENFYRA_API_URL: any): void;
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Enfyra MCP — stdio server (loaded by index.ts / dist/index.js).
3
+ */
4
+ import { z } from 'zod';
5
+ import { fetchAPI, validateTableName } from './fetch.js';
6
+ import { assertDynamicCodeKnowledgeAck, assertGlobalRulesAck, dynamicCodeKnowledgeAckParam, globalRulesAckParam, } from './required-knowledge.js';
7
+ import { writeSourceArtifact } from './source-artifacts.js';
8
+ import { SCRIPT_BACKED_TABLES, fetchScriptRecord, prepareGenericMutation, replaceOccurrence, scriptRecordLabel, sha256, sourcePreview, summarizeMutationResult, } from './enfyra-tool-logic.js';
9
+ export function registerScriptTools(server, ENFYRA_API_URL) {
10
+ server.tool('get_script_source', [
11
+ 'Fetch the full editable source for one script-backed metadata record without preview truncation.',
12
+ 'Use search_runtime_zone first and pass the returned nextInspect.input to inspect the concrete record. The inspection already returns exact source artifacts.',
13
+ 'Call get_script_source only when a fresh artifact is needed for that located record. Never guess or probe record ids.',
14
+ ].join(' '), {
15
+ tableName: z.enum(SCRIPT_BACKED_TABLES).describe('Script-backed table to read'),
16
+ id: z.string().describe('Concrete record id returned by search_runtime_zone, inspect output, or a successful create/update operation. Never guess an id.'),
17
+ }, async ({ tableName, id }) => {
18
+ const { primaryKey, record, sourceField, sourceCode } = await fetchScriptRecord(tableName, id);
19
+ const sourceArtifact = writeSourceArtifact({ tableName, id, fieldName: sourceField, source: sourceCode });
20
+ return { content: [{ type: 'text', text: JSON.stringify({
21
+ tableName,
22
+ id,
23
+ primaryKey,
24
+ sourceField,
25
+ sourceFile: sourceArtifact.tmpFile,
26
+ sourcePreview: sourceArtifact.preview,
27
+ sourceLength: sourceCode.length,
28
+ sourceSha256: sha256(sourceCode),
29
+ scriptLanguage: record.scriptLanguage || record.language || null,
30
+ record: scriptRecordLabel(tableName, record),
31
+ }, null, 2) }] };
32
+ });
33
+ server.tool('patch_script_source', [
34
+ 'Patch sourceCode on a script-backed record using exact search/replace with optional hash checking.',
35
+ 'By default this returns a preview only. Set apply=true to validate through /admin/script/validate and save.',
36
+ 'Use get_script_source first for long scripts, then patch only the exact block you intend to change.',
37
+ ].join(' '), {
38
+ tableName: z.enum(SCRIPT_BACKED_TABLES).describe('Script-backed table to patch'),
39
+ id: z.string().describe('Record ID to patch'),
40
+ oldText: z.string().describe('Exact text to replace'),
41
+ newText: z.string().describe('Replacement text'),
42
+ occurrence: z.enum(['first', 'all']).optional().default('all').describe('Replace first occurrence or all occurrences.'),
43
+ expectedSourceSha256: z.string().optional().describe('Optional SHA-256 from get_script_source; fails if source changed.'),
44
+ scriptLanguage: z.string().optional().describe('Script language to save. Defaults to existing scriptLanguage or javascript.'),
45
+ apply: z.boolean().optional().default(false).describe('false returns preview only; true validates and saves.'),
46
+ globalRulesAckKey: globalRulesAckParam(z).optional().describe('Required when apply=true. Use globalRulesAckKey from get_enfyra_required_knowledge.'),
47
+ knowledgeAckKey: dynamicCodeKnowledgeAckParam(z).optional().describe('Required when apply=true. Use dynamicCodeAckKey from get_enfyra_required_knowledge.'),
48
+ }, async ({ tableName, id, oldText, newText, occurrence, expectedSourceSha256, scriptLanguage, apply, globalRulesAckKey, knowledgeAckKey }) => {
49
+ const { record, sourceField, sourceCode } = await fetchScriptRecord(tableName, id);
50
+ if (sourceField !== 'sourceCode') {
51
+ throw new Error(`patch_script_source only saves sourceCode records. Record uses "${sourceField}"; use update_records intentionally for this legacy field.`);
52
+ }
53
+ const beforeHash = sha256(sourceCode);
54
+ if (expectedSourceSha256 && expectedSourceSha256 !== beforeHash) {
55
+ throw new Error(`Source hash mismatch. Current sha256 is ${beforeHash}; re-read with get_script_source before patching.`);
56
+ }
57
+ const { occurrences, patched, replaced } = replaceOccurrence(sourceCode, oldText, newText, occurrence || 'all');
58
+ const afterHash = sha256(patched);
59
+ const payload = {
60
+ action: apply ? 'patch_script_source_applied' : 'patch_script_source_preview',
61
+ tableName,
62
+ id,
63
+ sourceField,
64
+ sourceLengthBefore: sourceCode.length,
65
+ sourceLengthAfter: patched.length,
66
+ sourceSha256Before: beforeHash,
67
+ sourceSha256After: afterHash,
68
+ occurrences,
69
+ replaced,
70
+ preview: {
71
+ before: sourcePreview(sourceCode, oldText),
72
+ after: sourcePreview(patched, newText),
73
+ },
74
+ next: apply ? undefined : 'Call patch_script_source again with apply=true and expectedSourceSha256 set to sourceSha256Before to validate and save.',
75
+ };
76
+ if (!apply) {
77
+ return { content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }] };
78
+ }
79
+ assertGlobalRulesAck(globalRulesAckKey);
80
+ assertDynamicCodeKnowledgeAck(knowledgeAckKey);
81
+ const language = scriptLanguage || record.scriptLanguage || 'javascript';
82
+ const prepared = await prepareGenericMutation(tableName, JSON.stringify({ sourceCode: patched, scriptLanguage: language }));
83
+ const result = await fetchAPI(ENFYRA_API_URL, `/${tableName}/${encodeURIComponent(String(id))}`, { method: 'PATCH', body: JSON.stringify(prepared.payload) });
84
+ return { content: [{ type: 'text', text: JSON.stringify({
85
+ ...payload,
86
+ ...summarizeMutationResult(result, 'patch_script_source_applied', tableName),
87
+ id,
88
+ scriptLanguage: language,
89
+ scriptValidation: prepared.scriptValidation,
90
+ }, null, 2) }] };
91
+ });
92
+ server.tool('update_script_source', [
93
+ 'Update sourceCode on a script-backed record without forcing the caller to JSON-escape long code.',
94
+ 'Use this for enfyra_flow_step, enfyra_route_handler, enfyra_pre_hook, enfyra_post_hook, enfyra_websocket_event, enfyra_websocket, enfyra_oauth_config, and enfyra_bootstrap_script.',
95
+ 'The tool validates sourceCode through /admin/script/validate before saving and never accepts compiledCode.',
96
+ ].join(' '), {
97
+ tableName: z.enum([
98
+ 'enfyra_route_handler',
99
+ 'enfyra_pre_hook',
100
+ 'enfyra_post_hook',
101
+ 'enfyra_flow_step',
102
+ 'enfyra_websocket_event',
103
+ 'enfyra_websocket',
104
+ 'enfyra_oauth_config',
105
+ 'enfyra_bootstrap_script',
106
+ ]).describe('Script-backed table to update'),
107
+ id: z.string().describe('Record ID to update'),
108
+ sourceCode: z.string().describe('Editable script sourceCode. Pass the raw code string; do not JSON-escape it yourself.'),
109
+ scriptLanguage: z.string().optional().default('javascript').describe('Script language, usually javascript or typescript'),
110
+ globalRulesAckKey: globalRulesAckParam(z),
111
+ knowledgeAckKey: dynamicCodeKnowledgeAckParam(z),
112
+ }, async ({ tableName, id, sourceCode, scriptLanguage, globalRulesAckKey, knowledgeAckKey }) => {
113
+ assertGlobalRulesAck(globalRulesAckKey);
114
+ assertDynamicCodeKnowledgeAck(knowledgeAckKey);
115
+ validateTableName(tableName);
116
+ const prepared = await prepareGenericMutation(tableName, JSON.stringify({ sourceCode, scriptLanguage }));
117
+ const result = await fetchAPI(ENFYRA_API_URL, `/${tableName}/${encodeURIComponent(String(id))}`, { method: 'PATCH', body: JSON.stringify(prepared.payload) });
118
+ return { content: [{ type: 'text', text: JSON.stringify({
119
+ ...summarizeMutationResult(result, 'updated_script_source', tableName),
120
+ id,
121
+ sourceLength: sourceCode.length,
122
+ scriptLanguage,
123
+ scriptValidation: prepared.scriptValidation,
124
+ }, null, 2) }] };
125
+ });
126
+ }
127
+ //# sourceMappingURL=script-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-tools.js","sourceRoot":"","sources":["../../src/lib/script-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Enfyra MCP — stdio server (loaded by index.ts / dist/index.js).
3
+ */
4
+ export declare function registerSystemTools(server: any, ENFYRA_API_URL: any): void;
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Enfyra MCP — stdio server (loaded by index.ts / dist/index.js).
3
+ */
4
+ import { z } from 'zod';
5
+ import { fetchAPI } from './fetch.js';
6
+ import { assertGlobalRulesAck, globalRulesAckParam, } from './required-knowledge.js';
7
+ import { jsonContent } from './response-format.js';
8
+ export function registerSystemTools(server, ENFYRA_API_URL) {
9
+ // ============================================================================
10
+ // CACHE & SYSTEM TOOLS
11
+ // ============================================================================
12
+ server.tool('reload_all', 'Reload all caches (metadata, routes, GraphQL)', {
13
+ globalRulesAckKey: globalRulesAckParam(z),
14
+ }, async ({ globalRulesAckKey }) => {
15
+ assertGlobalRulesAck(globalRulesAckKey);
16
+ const result = await fetchAPI(ENFYRA_API_URL, '/admin/reload', { method: 'POST' });
17
+ return jsonContent({ action: 'reloaded_all', result });
18
+ });
19
+ server.tool('reload_metadata', 'Reload metadata cache only', {
20
+ globalRulesAckKey: globalRulesAckParam(z),
21
+ }, async ({ globalRulesAckKey }) => {
22
+ assertGlobalRulesAck(globalRulesAckKey);
23
+ const result = await fetchAPI(ENFYRA_API_URL, '/admin/reload/metadata', { method: 'POST' });
24
+ return jsonContent({ action: 'reloaded_metadata', result });
25
+ });
26
+ server.tool('reload_routes', 'Reload routes cache only', {
27
+ globalRulesAckKey: globalRulesAckParam(z),
28
+ }, async ({ globalRulesAckKey }) => {
29
+ assertGlobalRulesAck(globalRulesAckKey);
30
+ const result = await fetchAPI(ENFYRA_API_URL, '/admin/reload/routes', { method: 'POST' });
31
+ return jsonContent({ action: 'reloaded_routes', result });
32
+ });
33
+ server.tool('reload_graphql', 'Reload GraphQL schema', {
34
+ globalRulesAckKey: globalRulesAckParam(z),
35
+ }, async ({ globalRulesAckKey }) => {
36
+ assertGlobalRulesAck(globalRulesAckKey);
37
+ const result = await fetchAPI(ENFYRA_API_URL, '/admin/reload/graphql', { method: 'POST' });
38
+ return jsonContent({ action: 'reloaded_graphql', result });
39
+ });
40
+ }
41
+ //# sourceMappingURL=system-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-tools.js","sourceRoot":"","sources":["../../src/lib/system-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,QAAQ,EAAqC,MAAM,YAAY,CAAC;AAmBzE,OAAO,EAIL,oBAAoB,EAKpB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAgC,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAsBjF,MAAM,UAAU,mBAAmB,CAAC,MAAM,EAAE,cAAc;IACxD,+EAA+E;IAC/E,uBAAuB;IACvB,+EAA+E;IAE/E,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,+CAA+C,EAAE;QACzE,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;KAC1C,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACjC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACnF,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,4BAA4B,EAAE;QAC3D,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;KAC1C,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACjC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,wBAAwB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5F,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,0BAA0B,EAAE;QACvD,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;KAC1C,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACjC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1F,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,uBAAuB,EAAE;QACrD,iBAAiB,EAAE,mBAAmB,CAAC,CAAC,CAAC;KAC1C,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACjC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3F,OAAO,WAAW,CAAC,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './schema-mutation-coordinator.js';
2
+ export * from './schema-table-contracts.js';
3
+ export * from './schema-relation-contracts.js';
4
+ export * from './schema-verification.js';
5
+ export * from './schema-tool-types.js';
@@ -0,0 +1,6 @@
1
+ export * from './schema-mutation-coordinator.js';
2
+ export * from './schema-table-contracts.js';
3
+ export * from './schema-relation-contracts.js';
4
+ export * from './schema-verification.js';
5
+ export * from './schema-tool-types.js';
6
+ //# sourceMappingURL=table-tool-logic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-tool-logic.js","sourceRoot":"","sources":["../../src/lib/table-tool-logic.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC"}
@@ -1,87 +1,4 @@
1
- type AnyRecord = Record<string, any>;
2
- type ConstraintGroup = string[];
3
- type ColumnPatch = AnyRecord & {
4
- id?: unknown;
5
- _id?: unknown;
6
- name?: string;
7
- type?: string;
8
- isNullable?: boolean;
9
- isPrimary?: boolean;
10
- isGenerated?: boolean;
11
- isSystem?: boolean;
12
- isPublished?: boolean;
13
- isUpdatable?: boolean;
14
- isEncrypted?: boolean;
15
- isUnique?: boolean;
16
- defaultValue?: unknown;
17
- description?: string;
18
- options?: unknown;
19
- };
20
- type RelationPatch = AnyRecord & {
21
- id?: unknown;
22
- _id?: unknown;
23
- targetTable?: unknown;
24
- type?: string;
25
- propertyName?: string;
26
- inversePropertyName?: string | null;
27
- mappedBy?: unknown;
28
- isNullable?: boolean;
29
- onDelete?: string;
30
- description?: string;
31
- };
32
- export declare function assertColumnContractBroadening(existingColumn: AnyRecord, requested: AnyRecord, toolset?: string): string[];
33
- export declare function buildPrimaryColumnForDbType(dbType: string | null | undefined): ColumnPatch;
34
- export declare function normalizeTablesFromMetadata(metadata: any): any[];
35
- export declare function resolveTableFromMetadata(metadata: any, tableId: any): any;
36
- export declare function resolveTableFromMetadataByName(metadata: any, tableName: any): any;
37
- export declare function resolveTableIdentifierFromMetadata(metadata: any, tableRef: any, label?: string): any;
38
- /**
39
- * Helper: fetch table with full columns and relations.
40
- * Schema cascade tools resolve the table catalog entry first, then request the
41
- * complete permission-projected schema from /metadata/:name.
42
- */
43
- export declare function fetchTableWithDetails(ENFYRA_API_URL: any, tableId: any): Promise<AnyRecord>;
44
- export declare function normalizeCreateTableDefinitions(items: AnyRecord[]): {
45
- _requestedTableName?: string;
46
- relations?: any;
47
- name: string;
48
- }[];
49
- export declare function computeBatchCleanupOrder(items: AnyRecord[]): string[];
50
- export declare function assertIndexesDoNotReferenceUniqueFields(indexes: ConstraintGroup[], uniques: ConstraintGroup[]): void;
51
- export declare function normalizeRelationForTablePatch(relation: AnyRecord): RelationPatch;
52
- export declare function normalizeRelationType(type: unknown): string;
53
- export declare function sanitizeExistingRelationForTablePatch(relation: AnyRecord): RelationPatch;
54
- export declare function resolveRelationTargetsFromMetadata(metadata: any, relations: RelationPatch[]): (RelationPatch | {
55
- targetTable: any;
56
- id?: unknown;
57
- _id?: unknown;
58
- type?: string;
59
- propertyName?: string;
60
- inversePropertyName?: string | null;
61
- mappedBy?: unknown;
62
- isNullable?: boolean;
63
- onDelete?: string;
64
- description?: string;
65
- })[];
66
- export declare function getSupportedColumnTypesFromMetadata(metadata: AnyRecord): string[];
67
- export declare function normalizeColumnTypeForLiveMetadata(type: unknown, supportedTypes?: string[]): {
68
- type: string;
69
- changed: boolean;
70
- originalType: string;
71
- };
72
- export declare function normalizeColumnsForLiveMetadata(columns: AnyRecord[], supportedTypes: string[]): {
73
- columns: AnyRecord[];
74
- normalizations: {
75
- column: string;
76
- from: string;
77
- to: string;
78
- }[];
79
- };
80
- export declare function buildColumnDefinition({ name, type, supportedTypes, isNullable, isUnique, isPublished, isUpdatable, isEncrypted, isPrimary, isGenerated, isSystem, defaultValue, description, options, }: AnyRecord): ColumnPatch;
81
- /**
82
- * Register table tools with MCP server
83
- */
1
+ export * from './table-tool-logic.js';
84
2
  export declare function registerTableTools(server: any, ENFYRA_API_URL: any, options?: {
85
3
  toolset?: string;
86
4
  }): void;
87
- export {};