n8n-mcp 2.7.7
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/.env.example +79 -0
- package/LICENSE +21 -0
- package/README.md +670 -0
- package/data/nodes.db +0 -0
- package/dist/config/n8n-api.d.ts +9 -0
- package/dist/config/n8n-api.d.ts.map +1 -0
- package/dist/config/n8n-api.js +41 -0
- package/dist/config/n8n-api.js.map +1 -0
- package/dist/database/database-adapter.d.ts +32 -0
- package/dist/database/database-adapter.d.ts.map +1 -0
- package/dist/database/database-adapter.js +328 -0
- package/dist/database/database-adapter.js.map +1 -0
- package/dist/database/node-repository.d.ts +11 -0
- package/dist/database/node-repository.d.ts.map +1 -0
- package/dist/database/node-repository.js +67 -0
- package/dist/database/node-repository.js.map +1 -0
- package/dist/http-server-single-session.d.ts +21 -0
- package/dist/http-server-single-session.d.ts.map +1 -0
- package/dist/http-server-single-session.js +279 -0
- package/dist/http-server-single-session.js.map +1 -0
- package/dist/http-server.d.ts +9 -0
- package/dist/http-server.d.ts.map +1 -0
- package/dist/http-server.js +342 -0
- package/dist/http-server.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/loaders/node-loader.d.ts +11 -0
- package/dist/loaders/node-loader.d.ts.map +1 -0
- package/dist/loaders/node-loader.js +79 -0
- package/dist/loaders/node-loader.js.map +1 -0
- package/dist/mappers/docs-mapper.d.ts +6 -0
- package/dist/mappers/docs-mapper.d.ts.map +1 -0
- package/dist/mappers/docs-mapper.js +59 -0
- package/dist/mappers/docs-mapper.js.map +1 -0
- package/dist/mcp/absolute-minimal.d.ts +4 -0
- package/dist/mcp/absolute-minimal.d.ts.map +1 -0
- package/dist/mcp/absolute-minimal.js +34 -0
- package/dist/mcp/absolute-minimal.js.map +1 -0
- package/dist/mcp/fixed-protocol.d.ts +17 -0
- package/dist/mcp/fixed-protocol.d.ts.map +1 -0
- package/dist/mcp/fixed-protocol.js +162 -0
- package/dist/mcp/fixed-protocol.js.map +1 -0
- package/dist/mcp/handlers-documentation.d.ts +18 -0
- package/dist/mcp/handlers-documentation.d.ts.map +1 -0
- package/dist/mcp/handlers-documentation.js +113 -0
- package/dist/mcp/handlers-documentation.js.map +1 -0
- package/dist/mcp/handlers-n8n-manager.d.ts +21 -0
- package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -0
- package/dist/mcp/handlers-n8n-manager.js +827 -0
- package/dist/mcp/handlers-n8n-manager.js.map +1 -0
- package/dist/mcp/handlers-workflow-diff.d.ts +3 -0
- package/dist/mcp/handlers-workflow-diff.d.ts.map +1 -0
- package/dist/mcp/handlers-workflow-diff.js +125 -0
- package/dist/mcp/handlers-workflow-diff.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +106 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/minimal-test.d.ts +3 -0
- package/dist/mcp/minimal-test.d.ts.map +1 -0
- package/dist/mcp/minimal-test.js +83 -0
- package/dist/mcp/minimal-test.js.map +1 -0
- package/dist/mcp/server.d.ts +42 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +1258 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/stderr-test.d.ts +2 -0
- package/dist/mcp/stderr-test.d.ts.map +1 -0
- package/dist/mcp/stderr-test.js +32 -0
- package/dist/mcp/stderr-test.js.map +1 -0
- package/dist/mcp/stdio-wrapper.d.ts +3 -0
- package/dist/mcp/stdio-wrapper.d.ts.map +1 -0
- package/dist/mcp/stdio-wrapper.js +52 -0
- package/dist/mcp/stdio-wrapper.js.map +1 -0
- package/dist/mcp/tools-documentation.d.ts +34 -0
- package/dist/mcp/tools-documentation.d.ts.map +1 -0
- package/dist/mcp/tools-documentation.js +609 -0
- package/dist/mcp/tools-documentation.js.map +1 -0
- package/dist/mcp/tools-n8n-manager.d.ts +3 -0
- package/dist/mcp/tools-n8n-manager.d.ts.map +1 -0
- package/dist/mcp/tools-n8n-manager.js +496 -0
- package/dist/mcp/tools-n8n-manager.js.map +1 -0
- package/dist/mcp/tools.d.ts +3 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +405 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/ultra-minimal.d.ts +8 -0
- package/dist/mcp/ultra-minimal.d.ts.map +1 -0
- package/dist/mcp/ultra-minimal.js +93 -0
- package/dist/mcp/ultra-minimal.js.map +1 -0
- package/dist/mcp/working-test.d.ts +3 -0
- package/dist/mcp/working-test.d.ts.map +1 -0
- package/dist/mcp/working-test.js +48 -0
- package/dist/mcp/working-test.js.map +1 -0
- package/dist/mcp/wrapper.sh +28 -0
- package/dist/mcp-engine.d.ts +32 -0
- package/dist/mcp-engine.d.ts.map +1 -0
- package/dist/mcp-engine.js +63 -0
- package/dist/mcp-engine.js.map +1 -0
- package/dist/n8n/MCPApi.credentials.d.ts +8 -0
- package/dist/n8n/MCPApi.credentials.d.ts.map +1 -0
- package/dist/n8n/MCPApi.credentials.js +53 -0
- package/dist/n8n/MCPApi.credentials.js.map +1 -0
- package/dist/n8n/MCPNode.node.d.ts +13 -0
- package/dist/n8n/MCPNode.node.d.ts.map +1 -0
- package/dist/n8n/MCPNode.node.js +260 -0
- package/dist/n8n/MCPNode.node.js.map +1 -0
- package/dist/parsers/node-parser.d.ts +30 -0
- package/dist/parsers/node-parser.d.ts.map +1 -0
- package/dist/parsers/node-parser.js +152 -0
- package/dist/parsers/node-parser.js.map +1 -0
- package/dist/parsers/property-extractor.d.ts +10 -0
- package/dist/parsers/property-extractor.d.ts.map +1 -0
- package/dist/parsers/property-extractor.js +155 -0
- package/dist/parsers/property-extractor.js.map +1 -0
- package/dist/parsers/simple-parser.d.ts +24 -0
- package/dist/parsers/simple-parser.d.ts.map +1 -0
- package/dist/parsers/simple-parser.js +160 -0
- package/dist/parsers/simple-parser.js.map +1 -0
- package/dist/scripts/debug-n8n-auth.d.ts +3 -0
- package/dist/scripts/debug-n8n-auth.d.ts.map +1 -0
- package/dist/scripts/debug-n8n-auth.js +97 -0
- package/dist/scripts/debug-n8n-auth.js.map +1 -0
- package/dist/scripts/debug-node.d.ts +3 -0
- package/dist/scripts/debug-node.d.ts.map +1 -0
- package/dist/scripts/debug-node.js +59 -0
- package/dist/scripts/debug-node.js.map +1 -0
- package/dist/scripts/extract-from-docker.d.ts +3 -0
- package/dist/scripts/extract-from-docker.d.ts.map +1 -0
- package/dist/scripts/extract-from-docker.js +210 -0
- package/dist/scripts/extract-from-docker.js.map +1 -0
- package/dist/scripts/fetch-templates-robust.d.ts +4 -0
- package/dist/scripts/fetch-templates-robust.d.ts.map +1 -0
- package/dist/scripts/fetch-templates-robust.js +126 -0
- package/dist/scripts/fetch-templates-robust.js.map +1 -0
- package/dist/scripts/fetch-templates.d.ts +4 -0
- package/dist/scripts/fetch-templates.d.ts.map +1 -0
- package/dist/scripts/fetch-templates.js +94 -0
- package/dist/scripts/fetch-templates.js.map +1 -0
- package/dist/scripts/rebuild-database.d.ts +4 -0
- package/dist/scripts/rebuild-database.d.ts.map +1 -0
- package/dist/scripts/rebuild-database.js +95 -0
- package/dist/scripts/rebuild-database.js.map +1 -0
- package/dist/scripts/rebuild-optimized.d.ts +3 -0
- package/dist/scripts/rebuild-optimized.d.ts.map +1 -0
- package/dist/scripts/rebuild-optimized.js +198 -0
- package/dist/scripts/rebuild-optimized.js.map +1 -0
- package/dist/scripts/rebuild.d.ts +3 -0
- package/dist/scripts/rebuild.d.ts.map +1 -0
- package/dist/scripts/rebuild.js +163 -0
- package/dist/scripts/rebuild.js.map +1 -0
- package/dist/scripts/sanitize-templates.d.ts +3 -0
- package/dist/scripts/sanitize-templates.d.ts.map +1 -0
- package/dist/scripts/sanitize-templates.js +56 -0
- package/dist/scripts/sanitize-templates.js.map +1 -0
- package/dist/scripts/test-ai-workflow-validation.d.ts +3 -0
- package/dist/scripts/test-ai-workflow-validation.d.ts.map +1 -0
- package/dist/scripts/test-ai-workflow-validation.js +191 -0
- package/dist/scripts/test-ai-workflow-validation.js.map +1 -0
- package/dist/scripts/test-api-headers.d.ts +3 -0
- package/dist/scripts/test-api-headers.d.ts.map +1 -0
- package/dist/scripts/test-api-headers.js +35 -0
- package/dist/scripts/test-api-headers.js.map +1 -0
- package/dist/scripts/test-docker-config-simulation.d.ts +3 -0
- package/dist/scripts/test-docker-config-simulation.d.ts.map +1 -0
- package/dist/scripts/test-docker-config-simulation.js +74 -0
- package/dist/scripts/test-docker-config-simulation.js.map +1 -0
- package/dist/scripts/test-enhanced-validation.d.ts +3 -0
- package/dist/scripts/test-enhanced-validation.d.ts.map +1 -0
- package/dist/scripts/test-enhanced-validation.js +117 -0
- package/dist/scripts/test-enhanced-validation.js.map +1 -0
- package/dist/scripts/test-lazy-config.d.ts +3 -0
- package/dist/scripts/test-lazy-config.d.ts.map +1 -0
- package/dist/scripts/test-lazy-config.js +60 -0
- package/dist/scripts/test-lazy-config.js.map +1 -0
- package/dist/scripts/test-limited-results.d.ts +3 -0
- package/dist/scripts/test-limited-results.d.ts.map +1 -0
- package/dist/scripts/test-limited-results.js +76 -0
- package/dist/scripts/test-limited-results.js.map +1 -0
- package/dist/scripts/test-mcp-n8n-update-partial.d.ts +3 -0
- package/dist/scripts/test-mcp-n8n-update-partial.d.ts.map +1 -0
- package/dist/scripts/test-mcp-n8n-update-partial.js +138 -0
- package/dist/scripts/test-mcp-n8n-update-partial.js.map +1 -0
- package/dist/scripts/test-mcp-tools.d.ts +3 -0
- package/dist/scripts/test-mcp-tools.d.ts.map +1 -0
- package/dist/scripts/test-mcp-tools.js +36 -0
- package/dist/scripts/test-mcp-tools.js.map +1 -0
- package/dist/scripts/test-n8n-manager-integration.d.ts +3 -0
- package/dist/scripts/test-n8n-manager-integration.d.ts.map +1 -0
- package/dist/scripts/test-n8n-manager-integration.js +122 -0
- package/dist/scripts/test-n8n-manager-integration.js.map +1 -0
- package/dist/scripts/test-n8n-validate-workflow.d.ts +3 -0
- package/dist/scripts/test-n8n-validate-workflow.d.ts.map +1 -0
- package/dist/scripts/test-n8n-validate-workflow.js +125 -0
- package/dist/scripts/test-n8n-validate-workflow.js.map +1 -0
- package/dist/scripts/test-nodes.d.ts +3 -0
- package/dist/scripts/test-nodes.d.ts.map +1 -0
- package/dist/scripts/test-nodes.js +91 -0
- package/dist/scripts/test-nodes.js.map +1 -0
- package/dist/scripts/test-single-workflow.d.ts +3 -0
- package/dist/scripts/test-single-workflow.d.ts.map +1 -0
- package/dist/scripts/test-single-workflow.js +112 -0
- package/dist/scripts/test-single-workflow.js.map +1 -0
- package/dist/scripts/test-template-validation.d.ts +3 -0
- package/dist/scripts/test-template-validation.d.ts.map +1 -0
- package/dist/scripts/test-template-validation.js +142 -0
- package/dist/scripts/test-template-validation.js.map +1 -0
- package/dist/scripts/test-templates.d.ts +4 -0
- package/dist/scripts/test-templates.d.ts.map +1 -0
- package/dist/scripts/test-templates.js +99 -0
- package/dist/scripts/test-templates.js.map +1 -0
- package/dist/scripts/test-transactional-diff.d.ts +2 -0
- package/dist/scripts/test-transactional-diff.d.ts.map +1 -0
- package/dist/scripts/test-transactional-diff.js +240 -0
- package/dist/scripts/test-transactional-diff.js.map +1 -0
- package/dist/scripts/test-update-partial-debug.d.ts +3 -0
- package/dist/scripts/test-update-partial-debug.d.ts.map +1 -0
- package/dist/scripts/test-update-partial-debug.js +92 -0
- package/dist/scripts/test-update-partial-debug.js.map +1 -0
- package/dist/scripts/test-version-extraction.d.ts +2 -0
- package/dist/scripts/test-version-extraction.d.ts.map +1 -0
- package/dist/scripts/test-version-extraction.js +74 -0
- package/dist/scripts/test-version-extraction.js.map +1 -0
- package/dist/scripts/test-workflow-diff.d.ts +3 -0
- package/dist/scripts/test-workflow-diff.d.ts.map +1 -0
- package/dist/scripts/test-workflow-diff.js +328 -0
- package/dist/scripts/test-workflow-diff.js.map +1 -0
- package/dist/scripts/test-workflow-validation.d.ts +3 -0
- package/dist/scripts/test-workflow-validation.d.ts.map +1 -0
- package/dist/scripts/test-workflow-validation.js +238 -0
- package/dist/scripts/test-workflow-validation.js.map +1 -0
- package/dist/scripts/validate.d.ts +3 -0
- package/dist/scripts/validate.d.ts.map +1 -0
- package/dist/scripts/validate.js +121 -0
- package/dist/scripts/validate.js.map +1 -0
- package/dist/scripts/validation-summary.d.ts +3 -0
- package/dist/scripts/validation-summary.d.ts.map +1 -0
- package/dist/scripts/validation-summary.js +135 -0
- package/dist/scripts/validation-summary.js.map +1 -0
- package/dist/services/config-validator.d.ts +39 -0
- package/dist/services/config-validator.d.ts.map +1 -0
- package/dist/services/config-validator.js +376 -0
- package/dist/services/config-validator.js.map +1 -0
- package/dist/services/enhanced-config-validator.d.ts +38 -0
- package/dist/services/enhanced-config-validator.d.ts.map +1 -0
- package/dist/services/enhanced-config-validator.js +300 -0
- package/dist/services/enhanced-config-validator.js.map +1 -0
- package/dist/services/example-generator.d.ts +14 -0
- package/dist/services/example-generator.d.ts.map +1 -0
- package/dist/services/example-generator.js +556 -0
- package/dist/services/example-generator.js.map +1 -0
- package/dist/services/expression-validator.d.ts +27 -0
- package/dist/services/expression-validator.d.ts.map +1 -0
- package/dist/services/expression-validator.js +163 -0
- package/dist/services/expression-validator.js.map +1 -0
- package/dist/services/n8n-api-client.d.ts +39 -0
- package/dist/services/n8n-api-client.d.ts.map +1 -0
- package/dist/services/n8n-api-client.js +326 -0
- package/dist/services/n8n-api-client.js.map +1 -0
- package/dist/services/n8n-validation.d.ts +127 -0
- package/dist/services/n8n-validation.d.ts.map +1 -0
- package/dist/services/n8n-validation.js +238 -0
- package/dist/services/n8n-validation.js.map +1 -0
- package/dist/services/node-documentation-service.d.ts +70 -0
- package/dist/services/node-documentation-service.d.ts.map +1 -0
- package/dist/services/node-documentation-service.js +518 -0
- package/dist/services/node-documentation-service.js.map +1 -0
- package/dist/services/node-specific-validators.d.ts +28 -0
- package/dist/services/node-specific-validators.d.ts.map +1 -0
- package/dist/services/node-specific-validators.js +666 -0
- package/dist/services/node-specific-validators.js.map +1 -0
- package/dist/services/property-dependencies.d.ts +36 -0
- package/dist/services/property-dependencies.d.ts.map +1 -0
- package/dist/services/property-dependencies.js +168 -0
- package/dist/services/property-dependencies.js.map +1 -0
- package/dist/services/property-filter.d.ts +39 -0
- package/dist/services/property-filter.d.ts.map +1 -0
- package/dist/services/property-filter.js +362 -0
- package/dist/services/property-filter.js.map +1 -0
- package/dist/services/task-templates.d.ts +26 -0
- package/dist/services/task-templates.d.ts.map +1 -0
- package/dist/services/task-templates.js +555 -0
- package/dist/services/task-templates.js.map +1 -0
- package/dist/services/workflow-diff-engine.d.ts +31 -0
- package/dist/services/workflow-diff-engine.d.ts.map +1 -0
- package/dist/services/workflow-diff-engine.js +478 -0
- package/dist/services/workflow-diff-engine.js.map +1 -0
- package/dist/services/workflow-validator.d.ts +87 -0
- package/dist/services/workflow-validator.d.ts.map +1 -0
- package/dist/services/workflow-validator.js +656 -0
- package/dist/services/workflow-validator.js.map +1 -0
- package/dist/templates/template-fetcher.d.ts +41 -0
- package/dist/templates/template-fetcher.d.ts.map +1 -0
- package/dist/templates/template-fetcher.js +94 -0
- package/dist/templates/template-fetcher.js.map +1 -0
- package/dist/templates/template-repository.d.ts +34 -0
- package/dist/templates/template-repository.d.ts.map +1 -0
- package/dist/templates/template-repository.js +121 -0
- package/dist/templates/template-repository.js.map +1 -0
- package/dist/templates/template-service.d.ts +31 -0
- package/dist/templates/template-service.d.ts.map +1 -0
- package/dist/templates/template-service.js +131 -0
- package/dist/templates/template-service.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/n8n-api.d.ts +241 -0
- package/dist/types/n8n-api.d.ts.map +1 -0
- package/dist/types/n8n-api.js +10 -0
- package/dist/types/n8n-api.js.map +1 -0
- package/dist/types/workflow-diff.d.ts +113 -0
- package/dist/types/workflow-diff.d.ts.map +1 -0
- package/dist/types/workflow-diff.js +15 -0
- package/dist/types/workflow-diff.js.map +1 -0
- package/dist/utils/auth.d.ts +12 -0
- package/dist/utils/auth.d.ts.map +1 -0
- package/dist/utils/auth.js +66 -0
- package/dist/utils/auth.js.map +1 -0
- package/dist/utils/bridge.d.ts +12 -0
- package/dist/utils/bridge.d.ts.map +1 -0
- package/dist/utils/bridge.js +127 -0
- package/dist/utils/bridge.js.map +1 -0
- package/dist/utils/console-manager.d.ts +10 -0
- package/dist/utils/console-manager.d.ts.map +1 -0
- package/dist/utils/console-manager.js +63 -0
- package/dist/utils/console-manager.js.map +1 -0
- package/dist/utils/documentation-fetcher.d.ts +2 -0
- package/dist/utils/documentation-fetcher.d.ts.map +1 -0
- package/dist/utils/documentation-fetcher.js +18 -0
- package/dist/utils/documentation-fetcher.js.map +1 -0
- package/dist/utils/enhanced-documentation-fetcher.d.ts +73 -0
- package/dist/utils/enhanced-documentation-fetcher.d.ts.map +1 -0
- package/dist/utils/enhanced-documentation-fetcher.js +397 -0
- package/dist/utils/enhanced-documentation-fetcher.js.map +1 -0
- package/dist/utils/error-handler.d.ts +24 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +84 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/example-generator.d.ts +8 -0
- package/dist/utils/example-generator.d.ts.map +1 -0
- package/dist/utils/example-generator.js +106 -0
- package/dist/utils/example-generator.js.map +1 -0
- package/dist/utils/logger.d.ts +32 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +97 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/mcp-client.d.ts +21 -0
- package/dist/utils/mcp-client.d.ts.map +1 -0
- package/dist/utils/mcp-client.js +96 -0
- package/dist/utils/mcp-client.js.map +1 -0
- package/dist/utils/n8n-errors.d.ts +25 -0
- package/dist/utils/n8n-errors.d.ts.map +1 -0
- package/dist/utils/n8n-errors.js +129 -0
- package/dist/utils/n8n-errors.js.map +1 -0
- package/dist/utils/node-source-extractor.d.ts +21 -0
- package/dist/utils/node-source-extractor.d.ts.map +1 -0
- package/dist/utils/node-source-extractor.js +377 -0
- package/dist/utils/node-source-extractor.js.map +1 -0
- package/dist/utils/simple-cache.d.ts +8 -0
- package/dist/utils/simple-cache.d.ts.map +1 -0
- package/dist/utils/simple-cache.js +34 -0
- package/dist/utils/simple-cache.js.map +1 -0
- package/dist/utils/template-sanitizer.d.ts +21 -0
- package/dist/utils/template-sanitizer.d.ts.map +1 -0
- package/dist/utils/template-sanitizer.js +108 -0
- package/dist/utils/template-sanitizer.js.map +1 -0
- package/dist/utils/version.d.ts +2 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +18 -0
- package/dist/utils/version.js.map +1 -0
- package/package.json +100 -0
- package/package.runtime.json +19 -0
|
@@ -0,0 +1,827 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getN8nApiClient = getN8nApiClient;
|
|
4
|
+
exports.handleCreateWorkflow = handleCreateWorkflow;
|
|
5
|
+
exports.handleGetWorkflow = handleGetWorkflow;
|
|
6
|
+
exports.handleGetWorkflowDetails = handleGetWorkflowDetails;
|
|
7
|
+
exports.handleGetWorkflowStructure = handleGetWorkflowStructure;
|
|
8
|
+
exports.handleGetWorkflowMinimal = handleGetWorkflowMinimal;
|
|
9
|
+
exports.handleUpdateWorkflow = handleUpdateWorkflow;
|
|
10
|
+
exports.handleDeleteWorkflow = handleDeleteWorkflow;
|
|
11
|
+
exports.handleListWorkflows = handleListWorkflows;
|
|
12
|
+
exports.handleValidateWorkflow = handleValidateWorkflow;
|
|
13
|
+
exports.handleTriggerWebhookWorkflow = handleTriggerWebhookWorkflow;
|
|
14
|
+
exports.handleGetExecution = handleGetExecution;
|
|
15
|
+
exports.handleListExecutions = handleListExecutions;
|
|
16
|
+
exports.handleDeleteExecution = handleDeleteExecution;
|
|
17
|
+
exports.handleHealthCheck = handleHealthCheck;
|
|
18
|
+
exports.handleListAvailableTools = handleListAvailableTools;
|
|
19
|
+
exports.handleDiagnostic = handleDiagnostic;
|
|
20
|
+
const n8n_api_client_1 = require("../services/n8n-api-client");
|
|
21
|
+
const n8n_api_1 = require("../config/n8n-api");
|
|
22
|
+
const n8n_api_2 = require("../types/n8n-api");
|
|
23
|
+
const n8n_validation_1 = require("../services/n8n-validation");
|
|
24
|
+
const n8n_errors_1 = require("../utils/n8n-errors");
|
|
25
|
+
const logger_1 = require("../utils/logger");
|
|
26
|
+
const zod_1 = require("zod");
|
|
27
|
+
const workflow_validator_1 = require("../services/workflow-validator");
|
|
28
|
+
const enhanced_config_validator_1 = require("../services/enhanced-config-validator");
|
|
29
|
+
let apiClient = null;
|
|
30
|
+
let lastConfigUrl = null;
|
|
31
|
+
function getN8nApiClient() {
|
|
32
|
+
const config = (0, n8n_api_1.getN8nApiConfig)();
|
|
33
|
+
if (!config) {
|
|
34
|
+
if (apiClient) {
|
|
35
|
+
logger_1.logger.info('n8n API configuration removed, clearing client');
|
|
36
|
+
apiClient = null;
|
|
37
|
+
lastConfigUrl = null;
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
if (!apiClient || lastConfigUrl !== config.baseUrl) {
|
|
42
|
+
logger_1.logger.info('n8n API client initialized', { url: config.baseUrl });
|
|
43
|
+
apiClient = new n8n_api_client_1.N8nApiClient(config);
|
|
44
|
+
lastConfigUrl = config.baseUrl;
|
|
45
|
+
}
|
|
46
|
+
return apiClient;
|
|
47
|
+
}
|
|
48
|
+
function ensureApiConfigured() {
|
|
49
|
+
const client = getN8nApiClient();
|
|
50
|
+
if (!client) {
|
|
51
|
+
throw new Error('n8n API not configured. Please set N8N_API_URL and N8N_API_KEY environment variables.');
|
|
52
|
+
}
|
|
53
|
+
return client;
|
|
54
|
+
}
|
|
55
|
+
const createWorkflowSchema = zod_1.z.object({
|
|
56
|
+
name: zod_1.z.string(),
|
|
57
|
+
nodes: zod_1.z.array(zod_1.z.any()),
|
|
58
|
+
connections: zod_1.z.record(zod_1.z.any()),
|
|
59
|
+
settings: zod_1.z.object({
|
|
60
|
+
executionOrder: zod_1.z.enum(['v0', 'v1']).optional(),
|
|
61
|
+
timezone: zod_1.z.string().optional(),
|
|
62
|
+
saveDataErrorExecution: zod_1.z.enum(['all', 'none']).optional(),
|
|
63
|
+
saveDataSuccessExecution: zod_1.z.enum(['all', 'none']).optional(),
|
|
64
|
+
saveManualExecutions: zod_1.z.boolean().optional(),
|
|
65
|
+
saveExecutionProgress: zod_1.z.boolean().optional(),
|
|
66
|
+
executionTimeout: zod_1.z.number().optional(),
|
|
67
|
+
errorWorkflow: zod_1.z.string().optional(),
|
|
68
|
+
}).optional(),
|
|
69
|
+
});
|
|
70
|
+
const updateWorkflowSchema = zod_1.z.object({
|
|
71
|
+
id: zod_1.z.string(),
|
|
72
|
+
name: zod_1.z.string().optional(),
|
|
73
|
+
nodes: zod_1.z.array(zod_1.z.any()).optional(),
|
|
74
|
+
connections: zod_1.z.record(zod_1.z.any()).optional(),
|
|
75
|
+
settings: zod_1.z.any().optional(),
|
|
76
|
+
});
|
|
77
|
+
const listWorkflowsSchema = zod_1.z.object({
|
|
78
|
+
limit: zod_1.z.number().min(1).max(100).optional(),
|
|
79
|
+
cursor: zod_1.z.string().optional(),
|
|
80
|
+
active: zod_1.z.boolean().optional(),
|
|
81
|
+
tags: zod_1.z.array(zod_1.z.string()).optional(),
|
|
82
|
+
projectId: zod_1.z.string().optional(),
|
|
83
|
+
excludePinnedData: zod_1.z.boolean().optional(),
|
|
84
|
+
});
|
|
85
|
+
const validateWorkflowSchema = zod_1.z.object({
|
|
86
|
+
id: zod_1.z.string(),
|
|
87
|
+
options: zod_1.z.object({
|
|
88
|
+
validateNodes: zod_1.z.boolean().optional(),
|
|
89
|
+
validateConnections: zod_1.z.boolean().optional(),
|
|
90
|
+
validateExpressions: zod_1.z.boolean().optional(),
|
|
91
|
+
profile: zod_1.z.enum(['minimal', 'runtime', 'ai-friendly', 'strict']).optional(),
|
|
92
|
+
}).optional(),
|
|
93
|
+
});
|
|
94
|
+
const triggerWebhookSchema = zod_1.z.object({
|
|
95
|
+
webhookUrl: zod_1.z.string().url(),
|
|
96
|
+
httpMethod: zod_1.z.enum(['GET', 'POST', 'PUT', 'DELETE']).optional(),
|
|
97
|
+
data: zod_1.z.record(zod_1.z.unknown()).optional(),
|
|
98
|
+
headers: zod_1.z.record(zod_1.z.string()).optional(),
|
|
99
|
+
waitForResponse: zod_1.z.boolean().optional(),
|
|
100
|
+
});
|
|
101
|
+
const listExecutionsSchema = zod_1.z.object({
|
|
102
|
+
limit: zod_1.z.number().min(1).max(100).optional(),
|
|
103
|
+
cursor: zod_1.z.string().optional(),
|
|
104
|
+
workflowId: zod_1.z.string().optional(),
|
|
105
|
+
projectId: zod_1.z.string().optional(),
|
|
106
|
+
status: zod_1.z.enum(['success', 'error', 'waiting']).optional(),
|
|
107
|
+
includeData: zod_1.z.boolean().optional(),
|
|
108
|
+
});
|
|
109
|
+
async function handleCreateWorkflow(args) {
|
|
110
|
+
try {
|
|
111
|
+
const client = ensureApiConfigured();
|
|
112
|
+
const input = createWorkflowSchema.parse(args);
|
|
113
|
+
const errors = (0, n8n_validation_1.validateWorkflowStructure)(input);
|
|
114
|
+
if (errors.length > 0) {
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: 'Workflow validation failed',
|
|
118
|
+
details: { errors }
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
const workflow = await client.createWorkflow(input);
|
|
122
|
+
return {
|
|
123
|
+
success: true,
|
|
124
|
+
data: workflow,
|
|
125
|
+
message: `Workflow "${workflow.name}" created successfully with ID: ${workflow.id}`
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
130
|
+
return {
|
|
131
|
+
success: false,
|
|
132
|
+
error: 'Invalid input',
|
|
133
|
+
details: { errors: error.errors }
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
137
|
+
return {
|
|
138
|
+
success: false,
|
|
139
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
140
|
+
code: error.code,
|
|
141
|
+
details: error.details
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return {
|
|
145
|
+
success: false,
|
|
146
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function handleGetWorkflow(args) {
|
|
151
|
+
try {
|
|
152
|
+
const client = ensureApiConfigured();
|
|
153
|
+
const { id } = zod_1.z.object({ id: zod_1.z.string() }).parse(args);
|
|
154
|
+
const workflow = await client.getWorkflow(id);
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
data: workflow
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
162
|
+
return {
|
|
163
|
+
success: false,
|
|
164
|
+
error: 'Invalid input',
|
|
165
|
+
details: { errors: error.errors }
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
169
|
+
return {
|
|
170
|
+
success: false,
|
|
171
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
172
|
+
code: error.code
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
success: false,
|
|
177
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
async function handleGetWorkflowDetails(args) {
|
|
182
|
+
try {
|
|
183
|
+
const client = ensureApiConfigured();
|
|
184
|
+
const { id } = zod_1.z.object({ id: zod_1.z.string() }).parse(args);
|
|
185
|
+
const workflow = await client.getWorkflow(id);
|
|
186
|
+
const executions = await client.listExecutions({
|
|
187
|
+
workflowId: id,
|
|
188
|
+
limit: 10
|
|
189
|
+
});
|
|
190
|
+
const stats = {
|
|
191
|
+
totalExecutions: executions.data.length,
|
|
192
|
+
successCount: executions.data.filter(e => e.status === n8n_api_2.ExecutionStatus.SUCCESS).length,
|
|
193
|
+
errorCount: executions.data.filter(e => e.status === n8n_api_2.ExecutionStatus.ERROR).length,
|
|
194
|
+
lastExecutionTime: executions.data[0]?.startedAt || null
|
|
195
|
+
};
|
|
196
|
+
return {
|
|
197
|
+
success: true,
|
|
198
|
+
data: {
|
|
199
|
+
workflow,
|
|
200
|
+
executionStats: stats,
|
|
201
|
+
hasWebhookTrigger: (0, n8n_validation_1.hasWebhookTrigger)(workflow),
|
|
202
|
+
webhookPath: (0, n8n_validation_1.getWebhookUrl)(workflow)
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
208
|
+
return {
|
|
209
|
+
success: false,
|
|
210
|
+
error: 'Invalid input',
|
|
211
|
+
details: { errors: error.errors }
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
215
|
+
return {
|
|
216
|
+
success: false,
|
|
217
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
218
|
+
code: error.code
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
success: false,
|
|
223
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
async function handleGetWorkflowStructure(args) {
|
|
228
|
+
try {
|
|
229
|
+
const client = ensureApiConfigured();
|
|
230
|
+
const { id } = zod_1.z.object({ id: zod_1.z.string() }).parse(args);
|
|
231
|
+
const workflow = await client.getWorkflow(id);
|
|
232
|
+
const simplifiedNodes = workflow.nodes.map(node => ({
|
|
233
|
+
id: node.id,
|
|
234
|
+
name: node.name,
|
|
235
|
+
type: node.type,
|
|
236
|
+
position: node.position,
|
|
237
|
+
disabled: node.disabled || false
|
|
238
|
+
}));
|
|
239
|
+
return {
|
|
240
|
+
success: true,
|
|
241
|
+
data: {
|
|
242
|
+
id: workflow.id,
|
|
243
|
+
name: workflow.name,
|
|
244
|
+
active: workflow.active,
|
|
245
|
+
nodes: simplifiedNodes,
|
|
246
|
+
connections: workflow.connections,
|
|
247
|
+
nodeCount: workflow.nodes.length,
|
|
248
|
+
connectionCount: Object.keys(workflow.connections).length
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
254
|
+
return {
|
|
255
|
+
success: false,
|
|
256
|
+
error: 'Invalid input',
|
|
257
|
+
details: { errors: error.errors }
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
261
|
+
return {
|
|
262
|
+
success: false,
|
|
263
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
264
|
+
code: error.code
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
success: false,
|
|
269
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
async function handleGetWorkflowMinimal(args) {
|
|
274
|
+
try {
|
|
275
|
+
const client = ensureApiConfigured();
|
|
276
|
+
const { id } = zod_1.z.object({ id: zod_1.z.string() }).parse(args);
|
|
277
|
+
const workflow = await client.getWorkflow(id);
|
|
278
|
+
return {
|
|
279
|
+
success: true,
|
|
280
|
+
data: {
|
|
281
|
+
id: workflow.id,
|
|
282
|
+
name: workflow.name,
|
|
283
|
+
active: workflow.active,
|
|
284
|
+
tags: workflow.tags || [],
|
|
285
|
+
createdAt: workflow.createdAt,
|
|
286
|
+
updatedAt: workflow.updatedAt
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
catch (error) {
|
|
291
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
292
|
+
return {
|
|
293
|
+
success: false,
|
|
294
|
+
error: 'Invalid input',
|
|
295
|
+
details: { errors: error.errors }
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
299
|
+
return {
|
|
300
|
+
success: false,
|
|
301
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
302
|
+
code: error.code
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
return {
|
|
306
|
+
success: false,
|
|
307
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
async function handleUpdateWorkflow(args) {
|
|
312
|
+
try {
|
|
313
|
+
const client = ensureApiConfigured();
|
|
314
|
+
const input = updateWorkflowSchema.parse(args);
|
|
315
|
+
const { id, ...updateData } = input;
|
|
316
|
+
if (updateData.nodes || updateData.connections) {
|
|
317
|
+
let fullWorkflow = updateData;
|
|
318
|
+
if (!updateData.nodes || !updateData.connections) {
|
|
319
|
+
const current = await client.getWorkflow(id);
|
|
320
|
+
fullWorkflow = {
|
|
321
|
+
...current,
|
|
322
|
+
...updateData
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
const errors = (0, n8n_validation_1.validateWorkflowStructure)(fullWorkflow);
|
|
326
|
+
if (errors.length > 0) {
|
|
327
|
+
return {
|
|
328
|
+
success: false,
|
|
329
|
+
error: 'Workflow validation failed',
|
|
330
|
+
details: { errors }
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
const workflow = await client.updateWorkflow(id, updateData);
|
|
335
|
+
return {
|
|
336
|
+
success: true,
|
|
337
|
+
data: workflow,
|
|
338
|
+
message: `Workflow "${workflow.name}" updated successfully`
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
catch (error) {
|
|
342
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
343
|
+
return {
|
|
344
|
+
success: false,
|
|
345
|
+
error: 'Invalid input',
|
|
346
|
+
details: { errors: error.errors }
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
350
|
+
return {
|
|
351
|
+
success: false,
|
|
352
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
353
|
+
code: error.code,
|
|
354
|
+
details: error.details
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
success: false,
|
|
359
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
async function handleDeleteWorkflow(args) {
|
|
364
|
+
try {
|
|
365
|
+
const client = ensureApiConfigured();
|
|
366
|
+
const { id } = zod_1.z.object({ id: zod_1.z.string() }).parse(args);
|
|
367
|
+
await client.deleteWorkflow(id);
|
|
368
|
+
return {
|
|
369
|
+
success: true,
|
|
370
|
+
message: `Workflow ${id} deleted successfully`
|
|
371
|
+
};
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
375
|
+
return {
|
|
376
|
+
success: false,
|
|
377
|
+
error: 'Invalid input',
|
|
378
|
+
details: { errors: error.errors }
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
382
|
+
return {
|
|
383
|
+
success: false,
|
|
384
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
385
|
+
code: error.code
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
success: false,
|
|
390
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
async function handleListWorkflows(args) {
|
|
395
|
+
try {
|
|
396
|
+
const client = ensureApiConfigured();
|
|
397
|
+
const input = listWorkflowsSchema.parse(args || {});
|
|
398
|
+
const response = await client.listWorkflows({
|
|
399
|
+
limit: input.limit || 100,
|
|
400
|
+
cursor: input.cursor,
|
|
401
|
+
active: input.active,
|
|
402
|
+
tags: input.tags,
|
|
403
|
+
projectId: input.projectId,
|
|
404
|
+
excludePinnedData: input.excludePinnedData ?? true
|
|
405
|
+
});
|
|
406
|
+
return {
|
|
407
|
+
success: true,
|
|
408
|
+
data: {
|
|
409
|
+
workflows: response.data,
|
|
410
|
+
nextCursor: response.nextCursor,
|
|
411
|
+
total: response.data.length
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
417
|
+
return {
|
|
418
|
+
success: false,
|
|
419
|
+
error: 'Invalid input',
|
|
420
|
+
details: { errors: error.errors }
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
424
|
+
return {
|
|
425
|
+
success: false,
|
|
426
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
427
|
+
code: error.code
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
return {
|
|
431
|
+
success: false,
|
|
432
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
async function handleValidateWorkflow(args, repository) {
|
|
437
|
+
try {
|
|
438
|
+
const client = ensureApiConfigured();
|
|
439
|
+
const input = validateWorkflowSchema.parse(args);
|
|
440
|
+
const workflowResponse = await handleGetWorkflow({ id: input.id });
|
|
441
|
+
if (!workflowResponse.success) {
|
|
442
|
+
return workflowResponse;
|
|
443
|
+
}
|
|
444
|
+
const workflow = workflowResponse.data;
|
|
445
|
+
const validator = new workflow_validator_1.WorkflowValidator(repository, enhanced_config_validator_1.EnhancedConfigValidator);
|
|
446
|
+
const validationResult = await validator.validateWorkflow(workflow, input.options);
|
|
447
|
+
const response = {
|
|
448
|
+
valid: validationResult.valid,
|
|
449
|
+
workflowId: workflow.id,
|
|
450
|
+
workflowName: workflow.name,
|
|
451
|
+
summary: {
|
|
452
|
+
totalNodes: validationResult.statistics.totalNodes,
|
|
453
|
+
enabledNodes: validationResult.statistics.enabledNodes,
|
|
454
|
+
triggerNodes: validationResult.statistics.triggerNodes,
|
|
455
|
+
validConnections: validationResult.statistics.validConnections,
|
|
456
|
+
invalidConnections: validationResult.statistics.invalidConnections,
|
|
457
|
+
expressionsValidated: validationResult.statistics.expressionsValidated,
|
|
458
|
+
errorCount: validationResult.errors.length,
|
|
459
|
+
warningCount: validationResult.warnings.length
|
|
460
|
+
}
|
|
461
|
+
};
|
|
462
|
+
if (validationResult.errors.length > 0) {
|
|
463
|
+
response.errors = validationResult.errors.map(e => ({
|
|
464
|
+
node: e.nodeName || 'workflow',
|
|
465
|
+
message: e.message,
|
|
466
|
+
details: e.details
|
|
467
|
+
}));
|
|
468
|
+
}
|
|
469
|
+
if (validationResult.warnings.length > 0) {
|
|
470
|
+
response.warnings = validationResult.warnings.map(w => ({
|
|
471
|
+
node: w.nodeName || 'workflow',
|
|
472
|
+
message: w.message,
|
|
473
|
+
details: w.details
|
|
474
|
+
}));
|
|
475
|
+
}
|
|
476
|
+
if (validationResult.suggestions.length > 0) {
|
|
477
|
+
response.suggestions = validationResult.suggestions;
|
|
478
|
+
}
|
|
479
|
+
return {
|
|
480
|
+
success: true,
|
|
481
|
+
data: response
|
|
482
|
+
};
|
|
483
|
+
}
|
|
484
|
+
catch (error) {
|
|
485
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
486
|
+
return {
|
|
487
|
+
success: false,
|
|
488
|
+
error: 'Invalid input',
|
|
489
|
+
details: { errors: error.errors }
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
493
|
+
return {
|
|
494
|
+
success: false,
|
|
495
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
496
|
+
code: error.code
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
return {
|
|
500
|
+
success: false,
|
|
501
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
async function handleTriggerWebhookWorkflow(args) {
|
|
506
|
+
try {
|
|
507
|
+
const client = ensureApiConfigured();
|
|
508
|
+
const input = triggerWebhookSchema.parse(args);
|
|
509
|
+
const webhookRequest = {
|
|
510
|
+
webhookUrl: input.webhookUrl,
|
|
511
|
+
httpMethod: input.httpMethod || 'POST',
|
|
512
|
+
data: input.data,
|
|
513
|
+
headers: input.headers,
|
|
514
|
+
waitForResponse: input.waitForResponse ?? true
|
|
515
|
+
};
|
|
516
|
+
const response = await client.triggerWebhook(webhookRequest);
|
|
517
|
+
return {
|
|
518
|
+
success: true,
|
|
519
|
+
data: response,
|
|
520
|
+
message: 'Webhook triggered successfully'
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
catch (error) {
|
|
524
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
525
|
+
return {
|
|
526
|
+
success: false,
|
|
527
|
+
error: 'Invalid input',
|
|
528
|
+
details: { errors: error.errors }
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
532
|
+
return {
|
|
533
|
+
success: false,
|
|
534
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
535
|
+
code: error.code,
|
|
536
|
+
details: error.details
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
return {
|
|
540
|
+
success: false,
|
|
541
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
async function handleGetExecution(args) {
|
|
546
|
+
try {
|
|
547
|
+
const client = ensureApiConfigured();
|
|
548
|
+
const { id, includeData } = zod_1.z.object({
|
|
549
|
+
id: zod_1.z.string(),
|
|
550
|
+
includeData: zod_1.z.boolean().optional()
|
|
551
|
+
}).parse(args);
|
|
552
|
+
const execution = await client.getExecution(id, includeData || false);
|
|
553
|
+
return {
|
|
554
|
+
success: true,
|
|
555
|
+
data: execution
|
|
556
|
+
};
|
|
557
|
+
}
|
|
558
|
+
catch (error) {
|
|
559
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
560
|
+
return {
|
|
561
|
+
success: false,
|
|
562
|
+
error: 'Invalid input',
|
|
563
|
+
details: { errors: error.errors }
|
|
564
|
+
};
|
|
565
|
+
}
|
|
566
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
567
|
+
return {
|
|
568
|
+
success: false,
|
|
569
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
570
|
+
code: error.code
|
|
571
|
+
};
|
|
572
|
+
}
|
|
573
|
+
return {
|
|
574
|
+
success: false,
|
|
575
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
576
|
+
};
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
async function handleListExecutions(args) {
|
|
580
|
+
try {
|
|
581
|
+
const client = ensureApiConfigured();
|
|
582
|
+
const input = listExecutionsSchema.parse(args || {});
|
|
583
|
+
const response = await client.listExecutions({
|
|
584
|
+
limit: input.limit || 100,
|
|
585
|
+
cursor: input.cursor,
|
|
586
|
+
workflowId: input.workflowId,
|
|
587
|
+
projectId: input.projectId,
|
|
588
|
+
status: input.status,
|
|
589
|
+
includeData: input.includeData || false
|
|
590
|
+
});
|
|
591
|
+
return {
|
|
592
|
+
success: true,
|
|
593
|
+
data: {
|
|
594
|
+
executions: response.data,
|
|
595
|
+
nextCursor: response.nextCursor,
|
|
596
|
+
total: response.data.length
|
|
597
|
+
}
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
catch (error) {
|
|
601
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
602
|
+
return {
|
|
603
|
+
success: false,
|
|
604
|
+
error: 'Invalid input',
|
|
605
|
+
details: { errors: error.errors }
|
|
606
|
+
};
|
|
607
|
+
}
|
|
608
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
609
|
+
return {
|
|
610
|
+
success: false,
|
|
611
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
612
|
+
code: error.code
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
return {
|
|
616
|
+
success: false,
|
|
617
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
618
|
+
};
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
async function handleDeleteExecution(args) {
|
|
622
|
+
try {
|
|
623
|
+
const client = ensureApiConfigured();
|
|
624
|
+
const { id } = zod_1.z.object({ id: zod_1.z.string() }).parse(args);
|
|
625
|
+
await client.deleteExecution(id);
|
|
626
|
+
return {
|
|
627
|
+
success: true,
|
|
628
|
+
message: `Execution ${id} deleted successfully`
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
catch (error) {
|
|
632
|
+
if (error instanceof zod_1.z.ZodError) {
|
|
633
|
+
return {
|
|
634
|
+
success: false,
|
|
635
|
+
error: 'Invalid input',
|
|
636
|
+
details: { errors: error.errors }
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
640
|
+
return {
|
|
641
|
+
success: false,
|
|
642
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
643
|
+
code: error.code
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
return {
|
|
647
|
+
success: false,
|
|
648
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
async function handleHealthCheck() {
|
|
653
|
+
try {
|
|
654
|
+
const client = ensureApiConfigured();
|
|
655
|
+
const health = await client.healthCheck();
|
|
656
|
+
return {
|
|
657
|
+
success: true,
|
|
658
|
+
data: {
|
|
659
|
+
status: health.status,
|
|
660
|
+
instanceId: health.instanceId,
|
|
661
|
+
n8nVersion: health.n8nVersion,
|
|
662
|
+
features: health.features,
|
|
663
|
+
apiUrl: (0, n8n_api_1.getN8nApiConfig)()?.baseUrl
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
catch (error) {
|
|
668
|
+
if (error instanceof n8n_errors_1.N8nApiError) {
|
|
669
|
+
return {
|
|
670
|
+
success: false,
|
|
671
|
+
error: (0, n8n_errors_1.getUserFriendlyErrorMessage)(error),
|
|
672
|
+
code: error.code,
|
|
673
|
+
details: {
|
|
674
|
+
apiUrl: (0, n8n_api_1.getN8nApiConfig)()?.baseUrl,
|
|
675
|
+
hint: 'Check if n8n is running and API is enabled'
|
|
676
|
+
}
|
|
677
|
+
};
|
|
678
|
+
}
|
|
679
|
+
return {
|
|
680
|
+
success: false,
|
|
681
|
+
error: error instanceof Error ? error.message : 'Unknown error occurred'
|
|
682
|
+
};
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
async function handleListAvailableTools() {
|
|
686
|
+
const tools = [
|
|
687
|
+
{
|
|
688
|
+
category: 'Workflow Management',
|
|
689
|
+
tools: [
|
|
690
|
+
{ name: 'n8n_create_workflow', description: 'Create new workflows' },
|
|
691
|
+
{ name: 'n8n_get_workflow', description: 'Get workflow by ID' },
|
|
692
|
+
{ name: 'n8n_get_workflow_details', description: 'Get detailed workflow info with stats' },
|
|
693
|
+
{ name: 'n8n_get_workflow_structure', description: 'Get simplified workflow structure' },
|
|
694
|
+
{ name: 'n8n_get_workflow_minimal', description: 'Get minimal workflow info' },
|
|
695
|
+
{ name: 'n8n_update_workflow', description: 'Update existing workflows' },
|
|
696
|
+
{ name: 'n8n_delete_workflow', description: 'Delete workflows' },
|
|
697
|
+
{ name: 'n8n_list_workflows', description: 'List workflows with filters' },
|
|
698
|
+
{ name: 'n8n_validate_workflow', description: 'Validate workflow from n8n instance' }
|
|
699
|
+
]
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
category: 'Execution Management',
|
|
703
|
+
tools: [
|
|
704
|
+
{ name: 'n8n_trigger_webhook_workflow', description: 'Trigger workflows via webhook' },
|
|
705
|
+
{ name: 'n8n_get_execution', description: 'Get execution details' },
|
|
706
|
+
{ name: 'n8n_list_executions', description: 'List executions with filters' },
|
|
707
|
+
{ name: 'n8n_delete_execution', description: 'Delete execution records' }
|
|
708
|
+
]
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
category: 'System',
|
|
712
|
+
tools: [
|
|
713
|
+
{ name: 'n8n_health_check', description: 'Check API connectivity' },
|
|
714
|
+
{ name: 'n8n_list_available_tools', description: 'List all available tools' }
|
|
715
|
+
]
|
|
716
|
+
}
|
|
717
|
+
];
|
|
718
|
+
const config = (0, n8n_api_1.getN8nApiConfig)();
|
|
719
|
+
const apiConfigured = config !== null;
|
|
720
|
+
return {
|
|
721
|
+
success: true,
|
|
722
|
+
data: {
|
|
723
|
+
tools,
|
|
724
|
+
apiConfigured,
|
|
725
|
+
configuration: config ? {
|
|
726
|
+
apiUrl: config.baseUrl,
|
|
727
|
+
timeout: config.timeout,
|
|
728
|
+
maxRetries: config.maxRetries
|
|
729
|
+
} : null,
|
|
730
|
+
limitations: [
|
|
731
|
+
'Cannot activate/deactivate workflows via API',
|
|
732
|
+
'Cannot execute workflows directly (must use webhooks)',
|
|
733
|
+
'Cannot stop running executions',
|
|
734
|
+
'Tags and credentials have limited API support'
|
|
735
|
+
]
|
|
736
|
+
}
|
|
737
|
+
};
|
|
738
|
+
}
|
|
739
|
+
async function handleDiagnostic(request) {
|
|
740
|
+
const verbose = request.params?.arguments?.verbose || false;
|
|
741
|
+
const envVars = {
|
|
742
|
+
N8N_API_URL: process.env.N8N_API_URL || null,
|
|
743
|
+
N8N_API_KEY: process.env.N8N_API_KEY ? '***configured***' : null,
|
|
744
|
+
NODE_ENV: process.env.NODE_ENV || 'production',
|
|
745
|
+
MCP_MODE: process.env.MCP_MODE || 'stdio'
|
|
746
|
+
};
|
|
747
|
+
const apiConfig = (0, n8n_api_1.getN8nApiConfig)();
|
|
748
|
+
const apiConfigured = apiConfig !== null;
|
|
749
|
+
const apiClient = getN8nApiClient();
|
|
750
|
+
let apiStatus = {
|
|
751
|
+
configured: apiConfigured,
|
|
752
|
+
connected: false,
|
|
753
|
+
error: null,
|
|
754
|
+
version: null
|
|
755
|
+
};
|
|
756
|
+
if (apiClient) {
|
|
757
|
+
try {
|
|
758
|
+
const health = await apiClient.healthCheck();
|
|
759
|
+
apiStatus.connected = true;
|
|
760
|
+
apiStatus.version = health.n8nVersion || 'unknown';
|
|
761
|
+
}
|
|
762
|
+
catch (error) {
|
|
763
|
+
apiStatus.error = error instanceof Error ? error.message : 'Unknown error';
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
const documentationTools = 22;
|
|
767
|
+
const managementTools = apiConfigured ? 16 : 0;
|
|
768
|
+
const totalTools = documentationTools + managementTools;
|
|
769
|
+
const diagnostic = {
|
|
770
|
+
timestamp: new Date().toISOString(),
|
|
771
|
+
environment: envVars,
|
|
772
|
+
apiConfiguration: {
|
|
773
|
+
configured: apiConfigured,
|
|
774
|
+
status: apiStatus,
|
|
775
|
+
config: apiConfig ? {
|
|
776
|
+
baseUrl: apiConfig.baseUrl,
|
|
777
|
+
timeout: apiConfig.timeout,
|
|
778
|
+
maxRetries: apiConfig.maxRetries
|
|
779
|
+
} : null
|
|
780
|
+
},
|
|
781
|
+
toolsAvailability: {
|
|
782
|
+
documentationTools: {
|
|
783
|
+
count: documentationTools,
|
|
784
|
+
enabled: true,
|
|
785
|
+
description: 'Always available - node info, search, validation, etc.'
|
|
786
|
+
},
|
|
787
|
+
managementTools: {
|
|
788
|
+
count: managementTools,
|
|
789
|
+
enabled: apiConfigured,
|
|
790
|
+
description: apiConfigured ?
|
|
791
|
+
'Management tools are ENABLED - create, update, execute workflows' :
|
|
792
|
+
'Management tools are DISABLED - configure N8N_API_URL and N8N_API_KEY to enable'
|
|
793
|
+
},
|
|
794
|
+
totalAvailable: totalTools
|
|
795
|
+
},
|
|
796
|
+
troubleshooting: {
|
|
797
|
+
steps: apiConfigured ? [
|
|
798
|
+
'API is configured and should work',
|
|
799
|
+
'If tools are not showing in Claude Desktop:',
|
|
800
|
+
'1. Restart Claude Desktop completely',
|
|
801
|
+
'2. Check if using latest Docker image',
|
|
802
|
+
'3. Verify environment variables are passed correctly',
|
|
803
|
+
'4. Try running n8n_health_check to test connectivity'
|
|
804
|
+
] : [
|
|
805
|
+
'To enable management tools:',
|
|
806
|
+
'1. Set N8N_API_URL environment variable (e.g., https://your-n8n-instance.com)',
|
|
807
|
+
'2. Set N8N_API_KEY environment variable (get from n8n API settings)',
|
|
808
|
+
'3. Restart the MCP server',
|
|
809
|
+
'4. Management tools will automatically appear'
|
|
810
|
+
],
|
|
811
|
+
documentation: 'For detailed setup instructions, see: https://github.com/czlonkowski/n8n-mcp#n8n-management-tools-new-v260---requires-api-configuration'
|
|
812
|
+
}
|
|
813
|
+
};
|
|
814
|
+
if (verbose) {
|
|
815
|
+
diagnostic['debug'] = {
|
|
816
|
+
processEnv: Object.keys(process.env).filter(key => key.startsWith('N8N_') || key.startsWith('MCP_')),
|
|
817
|
+
nodeVersion: process.version,
|
|
818
|
+
platform: process.platform,
|
|
819
|
+
workingDirectory: process.cwd()
|
|
820
|
+
};
|
|
821
|
+
}
|
|
822
|
+
return {
|
|
823
|
+
success: true,
|
|
824
|
+
data: diagnostic
|
|
825
|
+
};
|
|
826
|
+
}
|
|
827
|
+
//# sourceMappingURL=handlers-n8n-manager.js.map
|