@path58/n8n-mcp 0.1.0

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 (319) hide show
  1. package/AGENT_INSTALL.md +223 -0
  2. package/CHANGELOG.md +38 -0
  3. package/LICENSE +21 -0
  4. package/README.md +187 -0
  5. package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js +465 -0
  6. package/dist/autofix/suggestion-fixers/deprecated-node-fixer.js.map +1 -0
  7. package/dist/autofix/suggestion-fixers/fixer-registry.js +495 -0
  8. package/dist/autofix/suggestion-fixers/fixer-registry.js.map +1 -0
  9. package/dist/autofix/suggestion-fixers/l1-structure-fixer.js +639 -0
  10. package/dist/autofix/suggestion-fixers/l1-structure-fixer.js.map +1 -0
  11. package/dist/autofix/suggestion-fixers/l4-connection-fixer.js +449 -0
  12. package/dist/autofix/suggestion-fixers/l4-connection-fixer.js.map +1 -0
  13. package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js +575 -0
  14. package/dist/autofix/suggestion-fixers/l5-parameter-fixer.js.map +1 -0
  15. package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js +431 -0
  16. package/dist/autofix/suggestion-fixers/l5-typeversion-fixer.js.map +1 -0
  17. package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js +356 -0
  18. package/dist/autofix/suggestion-fixers/l5-webhook-path-fixer.js.map +1 -0
  19. package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js +618 -0
  20. package/dist/autofix/suggestion-fixers/l6-ai-tool-variant-fixer.js.map +1 -0
  21. package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js +1475 -0
  22. package/dist/autofix/suggestion-fixers/l6-pattern-fixer.js.map +1 -0
  23. package/dist/autofix/suggestion-fixers/llm-fixer.js +716 -0
  24. package/dist/autofix/suggestion-fixers/llm-fixer.js.map +1 -0
  25. package/dist/autofix/suggestion-fixers/missing-credential-fixer.js +336 -0
  26. package/dist/autofix/suggestion-fixers/missing-credential-fixer.js.map +1 -0
  27. package/dist/autofix/suggestion-fixers/types.js +29 -0
  28. package/dist/autofix/suggestion-fixers/types.js.map +1 -0
  29. package/dist/autofix/suggestion-fixers/typo-fixer.js +197 -0
  30. package/dist/autofix/suggestion-fixers/typo-fixer.js.map +1 -0
  31. package/dist/classification/certification-engine.js +208 -0
  32. package/dist/classification/certification-engine.js.map +1 -0
  33. package/dist/classification/feedback-collector.js +516 -0
  34. package/dist/classification/feedback-collector.js.map +1 -0
  35. package/dist/classification/l5-parameter-analyzer.js +670 -0
  36. package/dist/classification/l5-parameter-analyzer.js.map +1 -0
  37. package/dist/classification/l6-graph-analyzer.js +613 -0
  38. package/dist/classification/l6-graph-analyzer.js.map +1 -0
  39. package/dist/classification/severity-classifier.js +237 -0
  40. package/dist/classification/severity-classifier.js.map +1 -0
  41. package/dist/config/env.js +280 -0
  42. package/dist/config/env.js.map +1 -0
  43. package/dist/config/env.schema.js +234 -0
  44. package/dist/config/env.schema.js.map +1 -0
  45. package/dist/config/scraperEnv.js +55 -0
  46. package/dist/config/scraperEnv.js.map +1 -0
  47. package/dist/db/postgresClient.js +38 -0
  48. package/dist/db/postgresClient.js.map +1 -0
  49. package/dist/db/scraperDb.js +6 -0
  50. package/dist/db/scraperDb.js.map +1 -0
  51. package/dist/db/scraperPostgresClient.js +118 -0
  52. package/dist/db/scraperPostgresClient.js.map +1 -0
  53. package/dist/db/validationRepository.js +55 -0
  54. package/dist/db/validationRepository.js.map +1 -0
  55. package/dist/db/validatorPostgresClient.js +248 -0
  56. package/dist/db/validatorPostgresClient.js.map +1 -0
  57. package/dist/db/workflowInstanceMappingRepository.js +128 -0
  58. package/dist/db/workflowInstanceMappingRepository.js.map +1 -0
  59. package/dist/errors/AppError.js +156 -0
  60. package/dist/errors/AppError.js.map +1 -0
  61. package/dist/errors/index.js +7 -0
  62. package/dist/errors/index.js.map +1 -0
  63. package/dist/factory/error-to-problem-mappers.js +385 -0
  64. package/dist/factory/error-to-problem-mappers.js.map +1 -0
  65. package/dist/factory/gap-recorder.js +260 -0
  66. package/dist/factory/gap-recorder.js.map +1 -0
  67. package/dist/factory/problem-recorder.js +94 -0
  68. package/dist/factory/problem-recorder.js.map +1 -0
  69. package/dist/factory/warning-to-gap-mappers.js +493 -0
  70. package/dist/factory/warning-to-gap-mappers.js.map +1 -0
  71. package/dist/factory/workflow-normalizer.js +247 -0
  72. package/dist/factory/workflow-normalizer.js.map +1 -0
  73. package/dist/mcp/adapters/catalog.js +13 -0
  74. package/dist/mcp/adapters/catalog.js.map +1 -0
  75. package/dist/mcp/adapters/index.js +36 -0
  76. package/dist/mcp/adapters/index.js.map +1 -0
  77. package/dist/mcp/adapters/supabase-catalog.js +467 -0
  78. package/dist/mcp/adapters/supabase-catalog.js.map +1 -0
  79. package/dist/mcp/adapters/test-catalog-adapter.js +100 -0
  80. package/dist/mcp/adapters/test-catalog-adapter.js.map +1 -0
  81. package/dist/mcp/adapters/validation.js +258 -0
  82. package/dist/mcp/adapters/validation.js.map +1 -0
  83. package/dist/mcp/build-email-workflow.js +113 -0
  84. package/dist/mcp/build-email-workflow.js.map +1 -0
  85. package/dist/mcp/config.js +22 -0
  86. package/dist/mcp/config.js.map +1 -0
  87. package/dist/mcp/formatters/errors.js +217 -0
  88. package/dist/mcp/formatters/errors.js.map +1 -0
  89. package/dist/mcp/formatters/index.js +12 -0
  90. package/dist/mcp/formatters/index.js.map +1 -0
  91. package/dist/mcp/formatters/response.js +141 -0
  92. package/dist/mcp/formatters/response.js.map +1 -0
  93. package/dist/mcp/quick-test.js +33 -0
  94. package/dist/mcp/quick-test.js.map +1 -0
  95. package/dist/mcp/server.js +70 -0
  96. package/dist/mcp/server.js.map +1 -0
  97. package/dist/mcp/test-mcp-error.js +81 -0
  98. package/dist/mcp/test-mcp-error.js.map +1 -0
  99. package/dist/mcp/test-mcp.js +80 -0
  100. package/dist/mcp/test-mcp.js.map +1 -0
  101. package/dist/mcp/tools/fixes/expression-fixes.js +166 -0
  102. package/dist/mcp/tools/fixes/expression-fixes.js.map +1 -0
  103. package/dist/mcp/tools/fixes/flow-fixes.js +155 -0
  104. package/dist/mcp/tools/fixes/flow-fixes.js.map +1 -0
  105. package/dist/mcp/tools/fixes/index.js +91 -0
  106. package/dist/mcp/tools/fixes/index.js.map +1 -0
  107. package/dist/mcp/tools/fixes/node-fixes.js +233 -0
  108. package/dist/mcp/tools/fixes/node-fixes.js.map +1 -0
  109. package/dist/mcp/tools/fixes/parameter-fixes.js +277 -0
  110. package/dist/mcp/tools/fixes/parameter-fixes.js.map +1 -0
  111. package/dist/mcp/tools/fixes/types.js +10 -0
  112. package/dist/mcp/tools/fixes/types.js.map +1 -0
  113. package/dist/mcp/tools/handlers/check-parameter.js +300 -0
  114. package/dist/mcp/tools/handlers/check-parameter.js.map +1 -0
  115. package/dist/mcp/tools/handlers/find-similar-pattern.js +121 -0
  116. package/dist/mcp/tools/handlers/find-similar-pattern.js.map +1 -0
  117. package/dist/mcp/tools/handlers/get-node-info.js +131 -0
  118. package/dist/mcp/tools/handlers/get-node-info.js.map +1 -0
  119. package/dist/mcp/tools/handlers/get-operation-schema.js +141 -0
  120. package/dist/mcp/tools/handlers/get-operation-schema.js.map +1 -0
  121. package/dist/mcp/tools/handlers/list-nodes.js +126 -0
  122. package/dist/mcp/tools/handlers/list-nodes.js.map +1 -0
  123. package/dist/mcp/tools/handlers/list-operations.js +138 -0
  124. package/dist/mcp/tools/handlers/list-operations.js.map +1 -0
  125. package/dist/mcp/tools/handlers/suggest-fix.js +120 -0
  126. package/dist/mcp/tools/handlers/suggest-fix.js.map +1 -0
  127. package/dist/mcp/tools/handlers/validate-workflow.js +92 -0
  128. package/dist/mcp/tools/handlers/validate-workflow.js.map +1 -0
  129. package/dist/mcp/tools/index.js +190 -0
  130. package/dist/mcp/tools/index.js.map +1 -0
  131. package/dist/mcp/tools/schemas.js +195 -0
  132. package/dist/mcp/tools/schemas.js.map +1 -0
  133. package/dist/mcp/tools/validate.js +95 -0
  134. package/dist/mcp/tools/validate.js.map +1 -0
  135. package/dist/mcp/types/mcp.js +7 -0
  136. package/dist/mcp/types/mcp.js.map +1 -0
  137. package/dist/mcp/utils/timeout.js +78 -0
  138. package/dist/mcp/utils/timeout.js.map +1 -0
  139. package/dist/services/BatchProcessor.js +433 -0
  140. package/dist/services/BatchProcessor.js.map +1 -0
  141. package/dist/services/CheckpointManager.js +281 -0
  142. package/dist/services/CheckpointManager.js.map +1 -0
  143. package/dist/services/CostCalculator.js +211 -0
  144. package/dist/services/CostCalculator.js.map +1 -0
  145. package/dist/services/EmbeddingCache.js +68 -0
  146. package/dist/services/EmbeddingCache.js.map +1 -0
  147. package/dist/services/EmbeddingService.js +143 -0
  148. package/dist/services/EmbeddingService.js.map +1 -0
  149. package/dist/services/RankingService.js +81 -0
  150. package/dist/services/RankingService.js.map +1 -0
  151. package/dist/services/RedisCache.js +376 -0
  152. package/dist/services/RedisCache.js.map +1 -0
  153. package/dist/services/RedisCatalogCache.js +680 -0
  154. package/dist/services/RedisCatalogCache.js.map +1 -0
  155. package/dist/services/ResumeManager.js +252 -0
  156. package/dist/services/ResumeManager.js.map +1 -0
  157. package/dist/services/SearchService.js +282 -0
  158. package/dist/services/SearchService.js.map +1 -0
  159. package/dist/services/SemanticCatalogSearch.js +405 -0
  160. package/dist/services/SemanticCatalogSearch.js.map +1 -0
  161. package/dist/services/ValidationCache.js +157 -0
  162. package/dist/services/ValidationCache.js.map +1 -0
  163. package/dist/services/WorkflowPipelineService.js +1997 -0
  164. package/dist/services/WorkflowPipelineService.js.map +1 -0
  165. package/dist/services/catalog/index.js +34 -0
  166. package/dist/services/catalog/index.js.map +1 -0
  167. package/dist/services/catalog/interfaces.js +17 -0
  168. package/dist/services/catalog/interfaces.js.map +1 -0
  169. package/dist/services/catalog/loaders.js +169 -0
  170. package/dist/services/catalog/loaders.js.map +1 -0
  171. package/dist/services/catalog/types.js +138 -0
  172. package/dist/services/catalog/types.js.map +1 -0
  173. package/dist/services/documentation-normalization/docUrlUtils.js +88 -0
  174. package/dist/services/documentation-normalization/docUrlUtils.js.map +1 -0
  175. package/dist/services/error-quality/ErrorQualityService.js +262 -0
  176. package/dist/services/error-quality/ErrorQualityService.js.map +1 -0
  177. package/dist/services/error-quality/analyzers/CredentialAnalyzer.js +260 -0
  178. package/dist/services/error-quality/analyzers/CredentialAnalyzer.js.map +1 -0
  179. package/dist/services/error-quality/analyzers/IssuePredictor.js +380 -0
  180. package/dist/services/error-quality/analyzers/IssuePredictor.js.map +1 -0
  181. package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js +267 -0
  182. package/dist/services/error-quality/analyzers/MockCoverageAnalyzer.js.map +1 -0
  183. package/dist/services/error-quality/data/ErrorPatternSeeder.js +963 -0
  184. package/dist/services/error-quality/data/ErrorPatternSeeder.js.map +1 -0
  185. package/dist/services/error-quality/index.js +25 -0
  186. package/dist/services/error-quality/index.js.map +1 -0
  187. package/dist/services/error-quality/reports/ReportGenerator.js +343 -0
  188. package/dist/services/error-quality/reports/ReportGenerator.js.map +1 -0
  189. package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js +698 -0
  190. package/dist/services/error-quality/taxonomy/ErrorTaxonomy.js.map +1 -0
  191. package/dist/services/error-quality/types.js +11 -0
  192. package/dist/services/error-quality/types.js.map +1 -0
  193. package/dist/services/progress/ProgressTracker.js +288 -0
  194. package/dist/services/progress/ProgressTracker.js.map +1 -0
  195. package/dist/services/progress/formatters.js +122 -0
  196. package/dist/services/progress/formatters.js.map +1 -0
  197. package/dist/services/progress/index.js +36 -0
  198. package/dist/services/progress/index.js.map +1 -0
  199. package/dist/services/progress/types.js +7 -0
  200. package/dist/services/progress/types.js.map +1 -0
  201. package/dist/services/search/embeddingGenerator.js +112 -0
  202. package/dist/services/search/embeddingGenerator.js.map +1 -0
  203. package/dist/types/aiCapabilities.js +7 -0
  204. package/dist/types/aiCapabilities.js.map +1 -0
  205. package/dist/types/aiConfigSchema.js +7 -0
  206. package/dist/types/aiConfigSchema.js.map +1 -0
  207. package/dist/utils/bannerLogger.js +186 -0
  208. package/dist/utils/bannerLogger.js.map +1 -0
  209. package/dist/utils/bannerService.js +23 -0
  210. package/dist/utils/bannerService.js.map +1 -0
  211. package/dist/utils/bannerServiceAdapter.js +54 -0
  212. package/dist/utils/bannerServiceAdapter.js.map +1 -0
  213. package/dist/utils/batchLogger.js +171 -0
  214. package/dist/utils/batchLogger.js.map +1 -0
  215. package/dist/utils/bottomStickyBanner.js +239 -0
  216. package/dist/utils/bottomStickyBanner.js.map +1 -0
  217. package/dist/utils/credentialMatcher.js +206 -0
  218. package/dist/utils/credentialMatcher.js.map +1 -0
  219. package/dist/utils/credentialNormalizer.js +442 -0
  220. package/dist/utils/credentialNormalizer.js.map +1 -0
  221. package/dist/utils/integratedBannerLogger.js +59 -0
  222. package/dist/utils/integratedBannerLogger.js.map +1 -0
  223. package/dist/utils/n8nSourceGit.js +195 -0
  224. package/dist/utils/n8nSourceGit.js.map +1 -0
  225. package/dist/utils/nodeTypeNormalizer.js +131 -0
  226. package/dist/utils/nodeTypeNormalizer.js.map +1 -0
  227. package/dist/utils/openaiClient.js +397 -0
  228. package/dist/utils/openaiClient.js.map +1 -0
  229. package/dist/utils/productionLogger.js +16 -0
  230. package/dist/utils/productionLogger.js.map +1 -0
  231. package/dist/utils/progressBarBanner.js +132 -0
  232. package/dist/utils/progressBarBanner.js.map +1 -0
  233. package/dist/utils/scriptHeartbeat.js +117 -0
  234. package/dist/utils/scriptHeartbeat.js.map +1 -0
  235. package/dist/utils/scriptLogger.js +125 -0
  236. package/dist/utils/scriptLogger.js.map +1 -0
  237. package/dist/utils/scriptRunner.js +95 -0
  238. package/dist/utils/scriptRunner.js.map +1 -0
  239. package/dist/utils/scriptTimeout.js +128 -0
  240. package/dist/utils/scriptTimeout.js.map +1 -0
  241. package/dist/utils/scriptWrapper.js +219 -0
  242. package/dist/utils/scriptWrapper.js.map +1 -0
  243. package/dist/utils/stickyBanner.js +226 -0
  244. package/dist/utils/stickyBanner.js.map +1 -0
  245. package/dist/utils/terminalSpinner.js +97 -0
  246. package/dist/utils/terminalSpinner.js.map +1 -0
  247. package/dist/utils/threeLineBanner.js +427 -0
  248. package/dist/utils/threeLineBanner.js.map +1 -0
  249. package/dist/utils/validatorCheckpointManager.js +170 -0
  250. package/dist/utils/validatorCheckpointManager.js.map +1 -0
  251. package/dist/utils/validatorConnectionManager.js +124 -0
  252. package/dist/utils/validatorConnectionManager.js.map +1 -0
  253. package/dist/validation/catalog.js +56 -0
  254. package/dist/validation/catalog.js.map +1 -0
  255. package/dist/validation/config/deprecated-nodes.js +234 -0
  256. package/dist/validation/config/deprecated-nodes.js.map +1 -0
  257. package/dist/validation/config/l6-severity.js +227 -0
  258. package/dist/validation/config/l6-severity.js.map +1 -0
  259. package/dist/validation/config/terminal-nodes.js +132 -0
  260. package/dist/validation/config/terminal-nodes.js.map +1 -0
  261. package/dist/validation/config/unreachable-nodes.js +67 -0
  262. package/dist/validation/config/unreachable-nodes.js.map +1 -0
  263. package/dist/validation/core.js +47 -0
  264. package/dist/validation/core.js.map +1 -0
  265. package/dist/validation/docExtraction.js +12 -0
  266. package/dist/validation/docExtraction.js.map +1 -0
  267. package/dist/validation/dryRunMockRunner.js +128 -0
  268. package/dist/validation/dryRunMockRunner.js.map +1 -0
  269. package/dist/validation/fixtureEngine.js +61 -0
  270. package/dist/validation/fixtureEngine.js.map +1 -0
  271. package/dist/validation/index.js +15 -0
  272. package/dist/validation/index.js.map +1 -0
  273. package/dist/validation/k-levels/k2-blockers.js +222 -0
  274. package/dist/validation/k-levels/k2-blockers.js.map +1 -0
  275. package/dist/validation/l1-structure.js +296 -0
  276. package/dist/validation/l1-structure.js.map +1 -0
  277. package/dist/validation/l2-nodes.js +282 -0
  278. package/dist/validation/l2-nodes.js.map +1 -0
  279. package/dist/validation/l3-credentials.js +322 -0
  280. package/dist/validation/l3-credentials.js.map +1 -0
  281. package/dist/validation/l4-connections.js +698 -0
  282. package/dist/validation/l4-connections.js.map +1 -0
  283. package/dist/validation/l5-parameters.js +803 -0
  284. package/dist/validation/l5-parameters.js.map +1 -0
  285. package/dist/validation/l6-checks/ai-tool-variants.js +407 -0
  286. package/dist/validation/l6-checks/ai-tool-variants.js.map +1 -0
  287. package/dist/validation/l6-checks/catalog-checks.js +260 -0
  288. package/dist/validation/l6-checks/catalog-checks.js.map +1 -0
  289. package/dist/validation/l6-checks/data-contracts.js +197 -0
  290. package/dist/validation/l6-checks/data-contracts.js.map +1 -0
  291. package/dist/validation/l6-checks/deprecation.js +133 -0
  292. package/dist/validation/l6-checks/deprecation.js.map +1 -0
  293. package/dist/validation/l6-checks/error-handling.js +193 -0
  294. package/dist/validation/l6-checks/error-handling.js.map +1 -0
  295. package/dist/validation/l6-checks/expression-syntax.js +387 -0
  296. package/dist/validation/l6-checks/expression-syntax.js.map +1 -0
  297. package/dist/validation/l6-checks/flow-integrity.js +504 -0
  298. package/dist/validation/l6-checks/flow-integrity.js.map +1 -0
  299. package/dist/validation/l6-checks/index.js +106 -0
  300. package/dist/validation/l6-checks/index.js.map +1 -0
  301. package/dist/validation/l6-checks/loops.js +370 -0
  302. package/dist/validation/l6-checks/loops.js.map +1 -0
  303. package/dist/validation/l6-checks/performance.js +182 -0
  304. package/dist/validation/l6-checks/performance.js.map +1 -0
  305. package/dist/validation/l6-checks/security.js +273 -0
  306. package/dist/validation/l6-checks/security.js.map +1 -0
  307. package/dist/validation/l6-patterns.js +472 -0
  308. package/dist/validation/l6-patterns.js.map +1 -0
  309. package/dist/validation/mockLevelResolver.js +95 -0
  310. package/dist/validation/mockLevelResolver.js.map +1 -0
  311. package/dist/validation/n8nApiClient.js +21 -0
  312. package/dist/validation/n8nApiClient.js.map +1 -0
  313. package/dist/validation/n8nCli.js +87 -0
  314. package/dist/validation/n8nCli.js.map +1 -0
  315. package/dist/validation/types.js +8 -0
  316. package/dist/validation/types.js.map +1 -0
  317. package/dist/validation/usageStats.js +82 -0
  318. package/dist/validation/usageStats.js.map +1 -0
  319. package/package.json +274 -0
@@ -0,0 +1,258 @@
1
+ /**
2
+ * MCP Validation Adapter - Bridges MCP tools to L1-L6 validation pipeline.
3
+ *
4
+ * Provides a unified interface for running the full validation pipeline
5
+ * and transforming results into MCP-compatible response format.
6
+ *
7
+ * @module mcp/adapters/validation
8
+ */
9
+ import { validateL1Structure, validateL2Nodes, validateL3Credentials, validateL4Connections, validateL5Parameters, validateL6Patterns, } from '../../validation/index.js';
10
+ import { loadL6CatalogCache } from '../../validation/l6-patterns.js';
11
+ /**
12
+ * Transform L1-L6 errors into unified issue format.
13
+ */
14
+ function transformError(error, level) {
15
+ return {
16
+ level,
17
+ severity: 'error',
18
+ code: error.code,
19
+ message: error.message,
20
+ location: {
21
+ node_name: error.node_name,
22
+ node_type: error.node_type,
23
+ path: error.path,
24
+ },
25
+ };
26
+ }
27
+ /**
28
+ * Transform L6 errors with suggested fixes.
29
+ */
30
+ function transformL6Error(error) {
31
+ const issue = {
32
+ level: 6,
33
+ severity: error.severity || 'error',
34
+ code: error.code,
35
+ message: error.message,
36
+ location: {
37
+ node_name: error.node_name,
38
+ node_type: error.node_type,
39
+ path: error.path,
40
+ },
41
+ };
42
+ if (error.suggested_fix) {
43
+ issue.fix = {
44
+ action: error.suggested_fix.fix_type,
45
+ target: error.suggested_fix.target_node,
46
+ explanation: error.suggested_fix.description,
47
+ };
48
+ }
49
+ return issue;
50
+ }
51
+ /**
52
+ * Transform L6 warnings into unified issue format.
53
+ */
54
+ function transformL6Warning(warning) {
55
+ const issue = {
56
+ level: 6,
57
+ severity: 'warning',
58
+ code: warning.code,
59
+ message: warning.message,
60
+ location: {
61
+ node_name: warning.node_name,
62
+ node_type: warning.node_type,
63
+ },
64
+ };
65
+ if (warning.suggested_fix) {
66
+ issue.fix = {
67
+ action: warning.suggested_fix.fix_type,
68
+ target: warning.suggested_fix.target_node,
69
+ explanation: warning.suggested_fix.description,
70
+ };
71
+ }
72
+ return issue;
73
+ }
74
+ /**
75
+ * Transform L2 warnings (deprecated nodes).
76
+ */
77
+ function transformL2Warning(warning) {
78
+ return {
79
+ level: 2,
80
+ severity: 'warning',
81
+ code: warning.code,
82
+ message: warning.message,
83
+ location: {
84
+ node_name: warning.node_name,
85
+ node_type: warning.node_type,
86
+ },
87
+ };
88
+ }
89
+ /**
90
+ * Transform L3 warnings (OAuth detection, missing fields).
91
+ */
92
+ function transformL3Warning(warning) {
93
+ return {
94
+ level: 3,
95
+ severity: 'warning',
96
+ code: warning.code,
97
+ message: warning.message,
98
+ location: {
99
+ node_name: warning.node_name,
100
+ node_type: warning.credential_type,
101
+ },
102
+ };
103
+ }
104
+ /**
105
+ * Transform L4 warnings (unknown connection patterns).
106
+ */
107
+ function transformL4Warning(warning) {
108
+ return {
109
+ level: 4,
110
+ severity: 'warning',
111
+ code: warning.code,
112
+ message: warning.message,
113
+ location: {
114
+ node_type: warning.source_type,
115
+ },
116
+ };
117
+ }
118
+ /**
119
+ * Transform L5 warnings (unknown operations/parameters).
120
+ */
121
+ function transformL5Warning(warning) {
122
+ return {
123
+ level: 5,
124
+ severity: 'warning',
125
+ code: warning.code,
126
+ message: warning.message,
127
+ location: {
128
+ node_name: warning.node_name,
129
+ node_type: warning.node_type,
130
+ parameter: warning.field,
131
+ },
132
+ };
133
+ }
134
+ /**
135
+ * Run the full L1-L6 validation pipeline.
136
+ *
137
+ * Executes validators in sequence (L1 → L6), stopping early on critical errors.
138
+ * Returns a unified response with all issues and summary statistics.
139
+ *
140
+ * @param workflowJson - Raw workflow JSON string to validate
141
+ * @param options - Validation options (max_level)
142
+ * @returns Unified validation response
143
+ */
144
+ export async function runValidationPipeline(workflowJson, options) {
145
+ const startTime = performance.now();
146
+ const maxLevel = options?.max_level ?? 6;
147
+ const issues = [];
148
+ let levelReached = 0;
149
+ // ----------------------------------------------------------------
150
+ // L1: Structure Validation
151
+ // ----------------------------------------------------------------
152
+ const l1Result = await validateL1Structure(workflowJson);
153
+ levelReached = 1;
154
+ for (const error of l1Result.errors) {
155
+ issues.push(transformError(error, 1));
156
+ }
157
+ // L1 failures are critical - cannot proceed without valid structure
158
+ if (!l1Result.passed || maxLevel === 1) {
159
+ return buildResponse(l1Result.passed && maxLevel === 1, levelReached, issues, startTime);
160
+ }
161
+ // Parse workflow for subsequent validators
162
+ const workflow = JSON.parse(workflowJson);
163
+ // ----------------------------------------------------------------
164
+ // L2: Node Catalog Validation
165
+ // ----------------------------------------------------------------
166
+ const l2Result = await validateL2Nodes(workflow);
167
+ levelReached = 2;
168
+ for (const error of l2Result.errors) {
169
+ issues.push(transformError(error, 2));
170
+ }
171
+ for (const warning of l2Result.warnings || []) {
172
+ issues.push(transformL2Warning(warning));
173
+ }
174
+ if (!l2Result.passed || maxLevel === 2) {
175
+ return buildResponse(l2Result.passed && maxLevel === 2, levelReached, issues, startTime);
176
+ }
177
+ // ----------------------------------------------------------------
178
+ // L3: Credential Validation
179
+ // ----------------------------------------------------------------
180
+ const l3Result = await validateL3Credentials(workflow);
181
+ levelReached = 3;
182
+ for (const error of l3Result.errors) {
183
+ issues.push(transformError(error, 3));
184
+ }
185
+ for (const warning of l3Result.warnings || []) {
186
+ issues.push(transformL3Warning(warning));
187
+ }
188
+ if (!l3Result.passed || maxLevel === 3) {
189
+ return buildResponse(l3Result.passed && maxLevel === 3, levelReached, issues, startTime);
190
+ }
191
+ // ----------------------------------------------------------------
192
+ // L4: Connection Validation
193
+ // ----------------------------------------------------------------
194
+ const l4Result = await validateL4Connections(workflow);
195
+ levelReached = 4;
196
+ for (const error of l4Result.errors) {
197
+ issues.push(transformError(error, 4));
198
+ }
199
+ for (const warning of l4Result.warnings || []) {
200
+ issues.push(transformL4Warning(warning));
201
+ }
202
+ if (!l4Result.passed || maxLevel === 4) {
203
+ return buildResponse(l4Result.passed && maxLevel === 4, levelReached, issues, startTime);
204
+ }
205
+ // ----------------------------------------------------------------
206
+ // L5: Parameter Validation
207
+ // ----------------------------------------------------------------
208
+ const l5Result = await validateL5Parameters(workflow);
209
+ levelReached = 5;
210
+ for (const error of l5Result.errors) {
211
+ issues.push(transformError(error, 5));
212
+ }
213
+ for (const warning of l5Result.warnings || []) {
214
+ issues.push(transformL5Warning(warning));
215
+ }
216
+ if (!l5Result.passed || maxLevel === 5) {
217
+ return buildResponse(l5Result.passed && maxLevel === 5, levelReached, issues, startTime);
218
+ }
219
+ // ----------------------------------------------------------------
220
+ // L6: Pattern Validation
221
+ // ----------------------------------------------------------------
222
+ const l6CatalogCache = await loadL6CatalogCache();
223
+ const l6Result = await validateL6Patterns(workflow, l6CatalogCache);
224
+ levelReached = 6;
225
+ for (const error of l6Result.errors) {
226
+ issues.push(transformL6Error(error));
227
+ }
228
+ for (const warning of l6Result.warnings || []) {
229
+ issues.push(transformL6Warning(warning));
230
+ }
231
+ return buildResponse(l6Result.passed, levelReached, issues, startTime);
232
+ }
233
+ /**
234
+ * Build the final validation response.
235
+ */
236
+ function buildResponse(valid, levelReached, issues, startTime) {
237
+ const errors = issues.filter((i) => i.severity === 'error').length;
238
+ const warnings = issues.filter((i) => i.severity === 'warning').length;
239
+ return {
240
+ valid,
241
+ level_reached: levelReached,
242
+ issues,
243
+ summary: {
244
+ total_issues: issues.length,
245
+ errors,
246
+ warnings,
247
+ validation_time_ms: Math.round(performance.now() - startTime),
248
+ },
249
+ };
250
+ }
251
+ /**
252
+ * Dispose of adapter resources (for cleanup).
253
+ */
254
+ export async function disposeValidationAdapter() {
255
+ // Validators manage their own caching internally
256
+ // Nothing to dispose at the adapter level
257
+ }
258
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/mcp/adapters/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Build and validate Gmail + Google Sheets workflow
3
+ */
4
+ import { handleToolCall } from './tools/index.js';
5
+ async function main() {
6
+ console.log('=== Building Gmail + Google Sheets Workflow ===\n');
7
+ // Build the workflow: Schedule -> Google Sheets -> Gmail
8
+ const workflow = {
9
+ name: 'Daily 8AM Email from Google Sheets',
10
+ nodes: [
11
+ {
12
+ id: 'schedule',
13
+ name: 'Schedule Trigger',
14
+ type: 'n8n-nodes-base.scheduleTrigger',
15
+ typeVersion: 1.2,
16
+ position: [0, 0],
17
+ parameters: {
18
+ rule: {
19
+ interval: [
20
+ {
21
+ field: 'cronExpression',
22
+ expression: '0 8 * * *', // Every day at 8:00 AM
23
+ },
24
+ ],
25
+ },
26
+ },
27
+ },
28
+ {
29
+ id: 'sheets',
30
+ name: 'Get Recipients',
31
+ type: 'n8n-nodes-base.googleSheets',
32
+ typeVersion: 4.5,
33
+ position: [220, 0],
34
+ parameters: {
35
+ operation: 'read',
36
+ documentId: {
37
+ __rl: true,
38
+ mode: 'list',
39
+ value: '', // User needs to set this
40
+ },
41
+ sheetName: {
42
+ __rl: true,
43
+ mode: 'list',
44
+ value: 'Sheet1',
45
+ },
46
+ },
47
+ credentials: {
48
+ googleSheetsOAuth2Api: {
49
+ id: 'google-sheets-credential',
50
+ name: 'Google Sheets OAuth2',
51
+ },
52
+ },
53
+ },
54
+ {
55
+ id: 'gmail',
56
+ name: 'Send Email',
57
+ type: 'n8n-nodes-base.gmail',
58
+ typeVersion: 2.1,
59
+ position: [440, 0],
60
+ parameters: {
61
+ operation: 'send',
62
+ sendTo: '={{ $json.email }}', // Email column from sheets
63
+ subject: 'Daily Update',
64
+ emailType: 'text',
65
+ message: '={{ $json.message || "Hello! This is your daily update." }}',
66
+ },
67
+ credentials: {
68
+ gmailOAuth2: {
69
+ id: 'gmail-credential',
70
+ name: 'Gmail OAuth2',
71
+ },
72
+ },
73
+ },
74
+ ],
75
+ connections: {
76
+ 'Schedule Trigger': {
77
+ main: [[{ node: 'Get Recipients', type: 'main', index: 0 }]],
78
+ },
79
+ 'Get Recipients': {
80
+ main: [[{ node: 'Send Email', type: 'main', index: 0 }]],
81
+ },
82
+ },
83
+ };
84
+ console.log('Workflow JSON:');
85
+ console.log(JSON.stringify(workflow, null, 2));
86
+ console.log('\n');
87
+ // Validate the workflow
88
+ console.log('=== Validating Workflow ===\n');
89
+ const result = await handleToolCall('validate_workflow', {
90
+ workflow: JSON.stringify(workflow),
91
+ });
92
+ const response = JSON.parse(result.content[0].text);
93
+ console.log('Validation Result:');
94
+ console.log(JSON.stringify(response, null, 2));
95
+ if (response.data?.issues?.length > 0) {
96
+ console.log('\n=== Getting Fix Suggestions ===\n');
97
+ for (const issue of response.data.issues.slice(0, 3)) {
98
+ console.log(`Issue: ${issue.code} - ${issue.message}`);
99
+ const fix = await handleToolCall('suggest_fix', {
100
+ issue_code: issue.code,
101
+ context: {
102
+ node_type: issue.node_type || 'n8n-nodes-base.gmail',
103
+ operation: issue.operation,
104
+ parameter_name: issue.parameter_name,
105
+ },
106
+ });
107
+ console.log('Fix:', fix.content[0].text);
108
+ console.log('---');
109
+ }
110
+ }
111
+ }
112
+ main().catch(console.error);
113
+ //# sourceMappingURL=build-email-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-email-workflow.js","sourceRoot":"","sources":["../../src/mcp/build-email-workflow.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAEjE,yDAAyD;IACzD,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,oCAAoC;QAC1C,KAAK,EAAE;YACL;gBACE,EAAE,EAAE,UAAU;gBACd,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,gCAAgC;gBACtC,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAChB,UAAU,EAAE;oBACV,IAAI,EAAE;wBACJ,QAAQ,EAAE;4BACR;gCACE,KAAK,EAAE,gBAAgB;gCACvB,UAAU,EAAE,WAAW,EAAE,uBAAuB;6BACjD;yBACF;qBACF;iBACF;aACF;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,6BAA6B;gBACnC,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClB,UAAU,EAAE;oBACV,SAAS,EAAE,MAAM;oBACjB,UAAU,EAAE;wBACV,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,EAAE,EAAE,yBAAyB;qBACrC;oBACD,SAAS,EAAE;wBACT,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,QAAQ;qBAChB;iBACF;gBACD,WAAW,EAAE;oBACX,qBAAqB,EAAE;wBACrB,EAAE,EAAE,0BAA0B;wBAC9B,IAAI,EAAE,sBAAsB;qBAC7B;iBACF;aACF;YACD;gBACE,EAAE,EAAE,OAAO;gBACX,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,sBAAsB;gBAC5B,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClB,UAAU,EAAE;oBACV,SAAS,EAAE,MAAM;oBACjB,MAAM,EAAE,oBAAoB,EAAE,2BAA2B;oBACzD,OAAO,EAAE,cAAc;oBACvB,SAAS,EAAE,MAAM;oBACjB,OAAO,EAAE,6DAA6D;iBACvE;gBACD,WAAW,EAAE;oBACX,WAAW,EAAE;wBACX,EAAE,EAAE,kBAAkB;wBACtB,IAAI,EAAE,cAAc;qBACrB;iBACF;aACF;SACF;QACD,WAAW,EAAE;YACX,kBAAkB,EAAE;gBAClB,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aAC7D;YACD,gBAAgB,EAAE;gBAChB,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aACzD;SACF;KACF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAElB,wBAAwB;IACxB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,mBAAmB,EAAE;QACvD,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;KACnC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE/C,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,aAAa,EAAE;gBAC9C,UAAU,EAAE,KAAK,CAAC,IAAI;gBACtB,OAAO,EAAE;oBACP,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,sBAAsB;oBACpD,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;iBACrC;aACF,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,MAAM,EAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAsB,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Configuration for the n8n-validator MCP server.
3
+ *
4
+ * @module mcp/config
5
+ */
6
+ /**
7
+ * Server configuration constants and environment variables.
8
+ */
9
+ export const config = {
10
+ // Server identity
11
+ SERVER_NAME: 'p58-n8n',
12
+ SERVER_VERSION: '0.1.0',
13
+ // Database configuration (from environment)
14
+ SUPABASE_URL: process.env.SUPABASE_URL,
15
+ SUPABASE_KEY: process.env.SUPABASE_KEY,
16
+ // Redis cache configuration
17
+ REDIS_URL: process.env.REDIS_URL,
18
+ // Performance settings
19
+ VALIDATION_TIMEOUT_MS: 5000,
20
+ CACHE_TTL_MS: 60000,
21
+ };
22
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/mcp/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,kBAAkB;IAClB,WAAW,EAAE,SAAS;IACtB,cAAc,EAAE,OAAO;IAEvB,4CAA4C;IAC5C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;IAEtC,4BAA4B;IAC5B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;IAEhC,uBAAuB;IACvB,qBAAqB,EAAE,IAAI;IAC3B,YAAY,EAAE,KAAK;CACX,CAAC"}
@@ -0,0 +1,217 @@
1
+ /**
2
+ * Error taxonomy and safe error factory for the MCP server.
3
+ * Ensures errors NEVER expose internal paths, stack traces, or sensitive information in production.
4
+ *
5
+ * @module mcp/formatters/errors
6
+ */
7
+ /**
8
+ * Error code definitions with retry guidance.
9
+ */
10
+ const ERROR_METADATA = {
11
+ INVALID_INPUT: {
12
+ retryable: false,
13
+ userGuidance: 'Fix input format',
14
+ safeMessage: 'Invalid input provided',
15
+ },
16
+ NOT_FOUND: {
17
+ retryable: false,
18
+ userGuidance: 'Check node/operation name',
19
+ safeMessage: 'Requested resource not found',
20
+ },
21
+ VALIDATION_ERROR: {
22
+ retryable: false,
23
+ userGuidance: 'Review validation issues and fix workflow',
24
+ safeMessage: 'Workflow validation found issues',
25
+ },
26
+ TIMEOUT: {
27
+ retryable: true,
28
+ userGuidance: 'Simplify request or try again',
29
+ safeMessage: 'Operation timed out',
30
+ },
31
+ RATE_LIMITED: {
32
+ retryable: true,
33
+ userGuidance: 'Wait and retry',
34
+ safeMessage: 'Too many requests, please wait',
35
+ },
36
+ INTERNAL_ERROR: {
37
+ retryable: true,
38
+ userGuidance: 'Contact support if persists',
39
+ safeMessage: 'An internal error occurred',
40
+ },
41
+ UNAVAILABLE: {
42
+ retryable: true,
43
+ userGuidance: 'Service temporarily unavailable, try again later',
44
+ safeMessage: 'Service temporarily unavailable',
45
+ },
46
+ };
47
+ /**
48
+ * Check if the current environment is production.
49
+ */
50
+ function isProduction() {
51
+ return process.env.NODE_ENV === 'production';
52
+ }
53
+ /**
54
+ * Get the safe user-facing message for an error code.
55
+ */
56
+ function getSafeMessage(code) {
57
+ return ERROR_METADATA[code].safeMessage;
58
+ }
59
+ /**
60
+ * Determine if an error code represents a retryable error.
61
+ */
62
+ function isRetryable(code) {
63
+ return ERROR_METADATA[code].retryable;
64
+ }
65
+ /**
66
+ * Get user guidance for an error code.
67
+ */
68
+ export function getUserGuidance(code) {
69
+ return ERROR_METADATA[code].userGuidance;
70
+ }
71
+ /**
72
+ * Default retry delay for retryable errors (5 seconds).
73
+ */
74
+ const DEFAULT_RETRY_DELAY_MS = 5000;
75
+ /**
76
+ * Retry delays by error code (overrides default).
77
+ */
78
+ const RETRY_DELAYS = {
79
+ RATE_LIMITED: 30000,
80
+ TIMEOUT: 10000,
81
+ UNAVAILABLE: 15000,
82
+ };
83
+ /**
84
+ * Get the retry delay for an error code.
85
+ */
86
+ function getRetryDelay(code) {
87
+ if (!isRetryable(code)) {
88
+ return undefined;
89
+ }
90
+ return RETRY_DELAYS[code] ?? DEFAULT_RETRY_DELAY_MS;
91
+ }
92
+ /**
93
+ * Sanitize error details to remove sensitive information.
94
+ * In production: returns undefined (no details exposed).
95
+ * In development: returns a hint from the original error.
96
+ */
97
+ function sanitizeDetails(originalError, customDetails) {
98
+ if (isProduction()) {
99
+ return undefined;
100
+ }
101
+ // In development, provide helpful hints
102
+ if (customDetails !== undefined) {
103
+ return customDetails;
104
+ }
105
+ if (originalError) {
106
+ return { hint: originalError.message };
107
+ }
108
+ return undefined;
109
+ }
110
+ /**
111
+ * Create a safe error response that never exposes internal details in production.
112
+ *
113
+ * @param code - Error code from the taxonomy
114
+ * @param correlationId - Request correlation ID
115
+ * @param originalError - The original error (optional)
116
+ * @param customDetails - Custom details to include (dev only)
117
+ * @returns Safe error response
118
+ */
119
+ export function createSafeError(code, correlationId, originalError, customDetails) {
120
+ const retryDelayMs = getRetryDelay(code);
121
+ return {
122
+ success: false,
123
+ correlation_id: correlationId,
124
+ error: {
125
+ code,
126
+ message: getSafeMessage(code),
127
+ retryable: isRetryable(code),
128
+ ...(retryDelayMs !== undefined && { retry_after_ms: retryDelayMs }),
129
+ details: sanitizeDetails(originalError, customDetails),
130
+ },
131
+ };
132
+ }
133
+ /**
134
+ * Create an INVALID_INPUT error response.
135
+ */
136
+ export function createInvalidInputError(correlationId, validationErrors) {
137
+ return createSafeError('INVALID_INPUT', correlationId, undefined, validationErrors);
138
+ }
139
+ /**
140
+ * Create a NOT_FOUND error response.
141
+ */
142
+ export function createNotFoundError(correlationId, resourceType, resourceId) {
143
+ const details = resourceType && resourceId
144
+ ? { resource_type: resourceType, resource_id: resourceId }
145
+ : undefined;
146
+ return createSafeError('NOT_FOUND', correlationId, undefined, details);
147
+ }
148
+ /**
149
+ * Create a VALIDATION_ERROR response (workflow failed validation).
150
+ */
151
+ export function createValidationError(correlationId, validationIssues) {
152
+ return createSafeError('VALIDATION_ERROR', correlationId, undefined, validationIssues);
153
+ }
154
+ /**
155
+ * Create a TIMEOUT error response.
156
+ */
157
+ export function createTimeoutError(correlationId, operation) {
158
+ const details = operation ? { operation } : undefined;
159
+ return createSafeError('TIMEOUT', correlationId, undefined, details);
160
+ }
161
+ /**
162
+ * Create a RATE_LIMITED error response.
163
+ */
164
+ export function createRateLimitedError(correlationId, retryAfterMs) {
165
+ const response = createSafeError('RATE_LIMITED', correlationId);
166
+ if (retryAfterMs !== undefined) {
167
+ response.error.retry_after_ms = retryAfterMs;
168
+ }
169
+ return response;
170
+ }
171
+ /**
172
+ * Create an INTERNAL_ERROR response from an unexpected error.
173
+ * NEVER exposes stack traces or internal paths.
174
+ */
175
+ export function createInternalError(correlationId, originalError) {
176
+ return createSafeError('INTERNAL_ERROR', correlationId, originalError);
177
+ }
178
+ /**
179
+ * Create an UNAVAILABLE error response.
180
+ */
181
+ export function createUnavailableError(correlationId, service) {
182
+ const details = service ? { service } : undefined;
183
+ return createSafeError('UNAVAILABLE', correlationId, undefined, details);
184
+ }
185
+ /**
186
+ * Map common error types to appropriate error codes.
187
+ */
188
+ export function classifyError(error) {
189
+ if (error instanceof Error) {
190
+ const message = error.message.toLowerCase();
191
+ if (message.includes('timeout') || message.includes('timed out')) {
192
+ return 'TIMEOUT';
193
+ }
194
+ if (message.includes('rate limit') || message.includes('too many')) {
195
+ return 'RATE_LIMITED';
196
+ }
197
+ if (message.includes('not found') || message.includes('does not exist')) {
198
+ return 'NOT_FOUND';
199
+ }
200
+ if (message.includes('invalid') || message.includes('validation')) {
201
+ return 'INVALID_INPUT';
202
+ }
203
+ if (message.includes('unavailable') || message.includes('offline')) {
204
+ return 'UNAVAILABLE';
205
+ }
206
+ }
207
+ return 'INTERNAL_ERROR';
208
+ }
209
+ /**
210
+ * Create an appropriate error response by classifying the error.
211
+ */
212
+ export function createErrorFromException(correlationId, error) {
213
+ const code = classifyError(error);
214
+ const originalError = error instanceof Error ? error : new Error(String(error));
215
+ return createSafeError(code, correlationId, originalError);
216
+ }
217
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/mcp/formatters/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MCP Response Formatters
3
+ *
4
+ * Exports standardized response formatting and safe error handling utilities.
5
+ *
6
+ * @module mcp/formatters
7
+ */
8
+ // Error types and factories
9
+ export { createSafeError, createInvalidInputError, createNotFoundError, createValidationError, createTimeoutError, createRateLimitedError, createInternalError, createUnavailableError, createErrorFromException, classifyError, getUserGuidance, } from './errors.js';
10
+ // Response types and utilities
11
+ export { generateCorrelationId, createSuccessResponse, createSuccessResponseWithTiming, withResponseFormatting, isSuccessResponse, isErrorResponse, serializeResponse, toMCPResponse, mcpSuccess, mcpError, executeToolHandler, } from './response.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/mcp/formatters/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,4BAA4B;AAC5B,OAAO,EAGL,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC;AAErB,+BAA+B;AAC/B,OAAO,EAKL,qBAAqB,EACrB,qBAAqB,EACrB,+BAA+B,EAC/B,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,QAAQ,EACR,kBAAkB,GACnB,MAAM,eAAe,CAAC"}