n8n 2.11.2 → 2.12.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.
- package/dist/build.tsbuildinfo +1 -1
- package/dist/chat/chat-service.js +1 -1
- package/dist/chat/chat-service.js.map +1 -1
- package/dist/chat/utils.d.ts +1 -0
- package/dist/chat/utils.js +7 -0
- package/dist/chat/utils.js.map +1 -1
- package/dist/commands/base-command.js +1 -1
- package/dist/commands/base-command.js.map +1 -1
- package/dist/controllers/project.controller.js +0 -2
- package/dist/controllers/project.controller.js.map +1 -1
- package/dist/controllers/users.controller.d.ts +1 -3
- package/dist/controllers/users.controller.js +1 -7
- package/dist/controllers/users.controller.js.map +1 -1
- package/dist/credentials/credential-resolution-provider.interface.d.ts +1 -2
- package/dist/credentials/credentials.service.d.ts +1 -1
- package/dist/credentials/credentials.service.js +9 -4
- package/dist/credentials/credentials.service.js.map +1 -1
- package/dist/credentials/dynamic-credentials-proxy.d.ts +1 -1
- package/dist/credentials/dynamic-credentials-proxy.js +2 -2
- package/dist/credentials/dynamic-credentials-proxy.js.map +1 -1
- package/dist/credentials/validation.d.ts +6 -1
- package/dist/credentials/validation.js +4 -3
- package/dist/credentials/validation.js.map +1 -1
- package/dist/credentials-helper.d.ts +8 -7
- package/dist/credentials-helper.js +22 -46
- package/dist/credentials-helper.js.map +1 -1
- package/dist/eventbus/event-message-classes/event-message-audit.d.ts +5 -1
- package/dist/eventbus/event-message-classes/event-message-audit.js.map +1 -1
- package/dist/eventbus/event-message-classes/index.d.ts +2 -2
- package/dist/eventbus/event-message-classes/index.js +1 -0
- package/dist/eventbus/event-message-classes/index.js.map +1 -1
- package/dist/events/maps/relay.event-map.d.ts +9 -1
- package/dist/events/relays/log-streaming.event-relay.d.ts +1 -0
- package/dist/events/relays/log-streaming.event-relay.js +13 -0
- package/dist/events/relays/log-streaming.event-relay.js.map +1 -1
- package/dist/events/relays/telemetry.event-relay.d.ts +11 -3
- package/dist/events/relays/telemetry.event-relay.js +125 -4
- package/dist/events/relays/telemetry.event-relay.js.map +1 -1
- package/dist/executions/execution-redaction-proxy.service.d.ts +3 -3
- package/dist/executions/execution-redaction-proxy.service.js +5 -0
- package/dist/executions/execution-redaction-proxy.service.js.map +1 -1
- package/dist/executions/execution-redaction.d.ts +13 -2
- package/dist/executions/execution.service.d.ts +1 -1
- package/dist/executions/execution.service.js +21 -3
- package/dist/executions/execution.service.js.map +1 -1
- package/dist/license.d.ts +4 -0
- package/dist/license.js +40 -0
- package/dist/license.js.map +1 -1
- package/dist/modules/breaking-changes/breaking-changes.controller.js +1 -1
- package/dist/modules/breaking-changes/breaking-changes.controller.js.map +1 -1
- package/dist/modules/breaking-changes/breaking-changes.module.js +5 -1
- package/dist/modules/breaking-changes/breaking-changes.module.js.map +1 -1
- package/dist/modules/breaking-changes/breaking-changes.service.js +6 -4
- package/dist/modules/breaking-changes/breaking-changes.service.js.map +1 -1
- package/dist/modules/breaking-changes/rules/index.d.ts +16 -4
- package/dist/modules/breaking-changes/rules/index.js +16 -4
- package/dist/modules/breaking-changes/rules/index.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/binary-data-storage.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/binary-data-storage.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/cli-replace-update-workflow-command.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/cli-replace-update-workflow-command.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/disabled-nodes.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/disabled-nodes.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/dotenv-upgrade.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/dotenv-upgrade.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/file-access.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/file-access.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/oauth-callback-auth.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/oauth-callback-auth.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/process-env-access.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/pyodide-removed.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/pyodide-removed.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/queue-worker-max-stalled-count.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/queue-worker-max-stalled-count.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/removed-nodes.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/settings-file-permissions.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/settings-file-permissions.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/start-node-removed.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/start-node-removed.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/task-runner-docker-image.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/task-runner-docker-image.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/tunnel-option.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/tunnel-option.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/wait-node-subworkflow.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/wait-node-subworkflow.rule.js.map +1 -1
- package/dist/modules/breaking-changes/rules/v2/workflow-hooks-deprecated.rule.js +2 -2
- package/dist/modules/breaking-changes/rules/v2/workflow-hooks-deprecated.rule.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-agent.entity.d.ts +11 -1
- package/dist/modules/chat-hub/chat-hub-agent.entity.js +8 -0
- package/dist/modules/chat-hub/chat-hub-agent.entity.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-agent.service.d.ts +22 -3
- package/dist/modules/chat-hub/chat-hub-agent.service.js +156 -6
- package/dist/modules/chat-hub/chat-hub-agent.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-event-relay.service.d.ts +10 -0
- package/dist/modules/chat-hub/chat-hub-event-relay.service.js +47 -0
- package/dist/modules/chat-hub/chat-hub-event-relay.service.js.map +1 -0
- package/dist/modules/chat-hub/chat-hub-execution-watcher.service.js +1 -1
- package/dist/modules/chat-hub/chat-hub-execution-watcher.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-execution.service.d.ts +2 -1
- package/dist/modules/chat-hub/chat-hub-execution.service.js +25 -3
- package/dist/modules/chat-hub/chat-hub-execution.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-title.service.js +2 -1
- package/dist/modules/chat-hub/chat-hub-title.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub-upload.middleware.d.ts +7 -0
- package/dist/modules/chat-hub/chat-hub-upload.middleware.js +43 -0
- package/dist/modules/chat-hub/chat-hub-upload.middleware.js.map +1 -0
- package/dist/modules/chat-hub/chat-hub-workflow.service.d.ts +20 -5
- package/dist/modules/chat-hub/chat-hub-workflow.service.js +292 -14
- package/dist/modules/chat-hub/chat-hub-workflow.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.attachment.service.d.ts +1 -0
- package/dist/modules/chat-hub/chat-hub.attachment.service.js +11 -0
- package/dist/modules/chat-hub/chat-hub.attachment.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.constants.d.ts +5 -1
- package/dist/modules/chat-hub/chat-hub.constants.js +10 -1
- package/dist/modules/chat-hub/chat-hub.constants.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.controller.d.ts +5 -1
- package/dist/modules/chat-hub/chat-hub.controller.js +44 -10
- package/dist/modules/chat-hub/chat-hub.controller.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.module.d.ts +2 -1
- package/dist/modules/chat-hub/chat-hub.module.js +13 -3
- package/dist/modules/chat-hub/chat-hub.module.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.service.js +1 -1
- package/dist/modules/chat-hub/chat-hub.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.settings.controller.d.ts +2 -1
- package/dist/modules/chat-hub/chat-hub.settings.controller.js +20 -0
- package/dist/modules/chat-hub/chat-hub.settings.controller.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.settings.service.d.ts +5 -1
- package/dist/modules/chat-hub/chat-hub.settings.service.js +34 -0
- package/dist/modules/chat-hub/chat-hub.settings.service.js.map +1 -1
- package/dist/modules/chat-hub/chat-hub.types.d.ts +19 -8
- package/dist/modules/chat-hub/chat-hub.types.js.map +1 -1
- package/dist/modules/community-packages/npm-utils.js +3 -3
- package/dist/modules/community-packages/npm-utils.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/identifier-interface.d.ts +3 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/identifier-interface.js +6 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers/identifiers/identifier-interface.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers.controller.js +2 -1
- package/dist/modules/dynamic-credentials.ee/credential-resolvers.controller.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/errors/credential-resolver-not-configured.error.d.ts +4 -0
- package/dist/modules/dynamic-credentials.ee/errors/credential-resolver-not-configured.error.js +12 -0
- package/dist/modules/dynamic-credentials.ee/errors/credential-resolver-not-configured.error.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/errors/credential-resolver-not-found.error.d.ts +4 -0
- package/dist/modules/dynamic-credentials.ee/errors/credential-resolver-not-found.error.js +9 -1
- package/dist/modules/dynamic-credentials.ee/errors/credential-resolver-not-found.error.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/errors/missing-execution-context.error.d.ts +4 -0
- package/dist/modules/dynamic-credentials.ee/errors/missing-execution-context.error.js +12 -0
- package/dist/modules/dynamic-credentials.ee/errors/missing-execution-context.error.js.map +1 -0
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.d.ts +4 -4
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js +10 -7
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver-workflow.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver.service.js +5 -8
- package/dist/modules/dynamic-credentials.ee/services/credential-resolver.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.d.ts +4 -3
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.js +37 -42
- package/dist/modules/dynamic-credentials.ee/services/dynamic-credential.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/services/resolver-config-expression.service.d.ts +1 -1
- package/dist/modules/dynamic-credentials.ee/services/resolver-config-expression.service.js +2 -4
- package/dist/modules/dynamic-credentials.ee/services/resolver-config-expression.service.js.map +1 -1
- package/dist/modules/dynamic-credentials.ee/workflow-status.controller.js +6 -2
- package/dist/modules/dynamic-credentials.ee/workflow-status.controller.js.map +1 -1
- package/dist/modules/external-secrets.ee/external-secrets-providers.ee.js +2 -0
- package/dist/modules/external-secrets.ee/external-secrets-providers.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/external-secrets.controller.ee.js +1 -1
- package/dist/modules/external-secrets.ee/external-secrets.controller.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/providers/one-password.d.ts +25 -0
- package/dist/modules/external-secrets.ee/providers/one-password.js +153 -0
- package/dist/modules/external-secrets.ee/providers/one-password.js.map +1 -0
- package/dist/modules/external-secrets.ee/providers/vault.js +6 -1
- package/dist/modules/external-secrets.ee/providers/vault.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-completions.controller.ee.d.ts +1 -0
- package/dist/modules/external-secrets.ee/secrets-providers-completions.controller.ee.js +15 -4
- package/dist/modules/external-secrets.ee/secrets-providers-completions.controller.ee.js.map +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-connections.controller.ee.js +1 -1
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.d.ts +1 -0
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js +5 -0
- package/dist/modules/external-secrets.ee/secrets-providers-connections.service.ee.js.map +1 -1
- package/dist/modules/mcp/mcp.service.d.ts +14 -4
- package/dist/modules/mcp/mcp.service.js +81 -6
- package/dist/modules/mcp/mcp.service.js.map +1 -1
- package/dist/modules/mcp/mcp.types.d.ts +1 -1
- package/dist/modules/mcp/tools/execute-workflow.tool.d.ts +7 -8
- package/dist/modules/mcp/tools/execute-workflow.tool.js +26 -37
- package/dist/modules/mcp/tools/execute-workflow.tool.js.map +1 -1
- package/dist/modules/mcp/tools/get-execution.tool.d.ts +17 -0
- package/dist/modules/mcp/tools/get-execution.tool.js +126 -0
- package/dist/modules/mcp/tools/get-execution.tool.js.map +1 -0
- package/dist/modules/mcp/tools/get-workflow-details.tool.js +2 -5
- package/dist/modules/mcp/tools/get-workflow-details.tool.js.map +1 -1
- package/dist/modules/mcp/tools/publish-workflow.tool.d.ts +18 -0
- package/dist/modules/mcp/tools/publish-workflow.tool.js +91 -0
- package/dist/modules/mcp/tools/publish-workflow.tool.js.map +1 -0
- package/dist/modules/mcp/tools/unpublish-workflow.tool.d.ts +15 -0
- package/dist/modules/mcp/tools/unpublish-workflow.tool.js +81 -0
- package/dist/modules/mcp/tools/unpublish-workflow.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/constants.d.ts +1 -0
- package/dist/modules/mcp/tools/workflow-builder/constants.js +13 -0
- package/dist/modules/mcp/tools/workflow-builder/constants.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.d.ts +16 -0
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js +167 -0
- package/dist/modules/mcp/tools/workflow-builder/create-workflow-from-code.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/credentials-auto-assign.d.ts +14 -0
- package/dist/modules/mcp/tools/workflow-builder/credentials-auto-assign.js +65 -0
- package/dist/modules/mcp/tools/workflow-builder/credentials-auto-assign.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/delete-workflow.tool.d.ts +10 -0
- package/dist/modules/mcp/tools/workflow-builder/delete-workflow.tool.js +75 -0
- package/dist/modules/mcp/tools/workflow-builder/delete-workflow.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.d.ts +10 -0
- package/dist/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.js +100 -0
- package/dist/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.d.ts +28 -0
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.js +102 -0
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-sdk-reference.tool.d.ts +9 -0
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-sdk-reference.tool.js +60 -0
- package/dist/modules/mcp/tools/workflow-builder/get-workflow-sdk-reference.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/mcp-instructions.d.ts +1 -0
- package/dist/modules/mcp/tools/workflow-builder/mcp-instructions.js +30 -0
- package/dist/modules/mcp/tools/workflow-builder/mcp-instructions.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/sdk-reference-content.d.ts +2 -0
- package/dist/modules/mcp/tools/workflow-builder/sdk-reference-content.js +61 -0
- package/dist/modules/mcp/tools/workflow-builder/sdk-reference-content.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.d.ts +10 -0
- package/dist/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.js +97 -0
- package/dist/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.d.ts +17 -0
- package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js +164 -0
- package/dist/modules/mcp/tools/workflow-builder/update-workflow.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/validate-workflow-code.tool.d.ts +9 -0
- package/dist/modules/mcp/tools/workflow-builder/validate-workflow-code.tool.js +119 -0
- package/dist/modules/mcp/tools/workflow-builder/validate-workflow-code.tool.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.d.ts +17 -0
- package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.js +117 -0
- package/dist/modules/mcp/tools/workflow-builder/workflow-builder-tools.service.js.map +1 -0
- package/dist/modules/mcp/tools/workflow-validation.utils.d.ts +8 -0
- package/dist/modules/mcp/tools/workflow-validation.utils.js +20 -0
- package/dist/modules/mcp/tools/workflow-validation.utils.js.map +1 -0
- package/dist/modules/redaction/executions/execution-redaction.interfaces.d.ts +11 -0
- package/dist/modules/redaction/executions/execution-redaction.interfaces.js +3 -0
- package/dist/modules/redaction/executions/execution-redaction.interfaces.js.map +1 -0
- package/dist/modules/redaction/executions/execution-redaction.service.d.ts +11 -8
- package/dist/modules/redaction/executions/execution-redaction.service.js +61 -60
- package/dist/modules/redaction/executions/execution-redaction.service.js.map +1 -1
- package/dist/modules/redaction/executions/strategies/full-item-redaction.strategy.d.ts +9 -0
- package/dist/modules/redaction/executions/strategies/full-item-redaction.strategy.js +82 -0
- package/dist/modules/redaction/executions/strategies/full-item-redaction.strategy.js.map +1 -0
- package/dist/modules/redaction/executions/strategies/node-defined-field-redaction.strategy.d.ts +17 -0
- package/dist/modules/redaction/executions/strategies/node-defined-field-redaction.strategy.js +127 -0
- package/dist/modules/redaction/executions/strategies/node-defined-field-redaction.strategy.js.map +1 -0
- package/dist/oauth/oauth.service.d.ts +1 -0
- package/dist/oauth/oauth.service.js +81 -4
- package/dist/oauth/oauth.service.js.map +1 -1
- package/dist/posthog/index.d.ts +9 -0
- package/dist/posthog/index.js +19 -0
- package/dist/posthog/index.js.map +1 -1
- package/dist/public-api/v1/handlers/credentials/credentials.service.js +14 -5
- package/dist/public-api/v1/handlers/credentials/credentials.service.js.map +1 -1
- package/dist/public-api/v1/handlers/executions/executions.handler.js +13 -0
- package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
- package/dist/response-helper.d.ts +3 -2
- package/dist/response-helper.js +14 -8
- package/dist/response-helper.js.map +1 -1
- package/dist/services/cache/cache.constants.d.ts +1 -0
- package/dist/services/cache/cache.constants.js +5 -0
- package/dist/services/cache/cache.constants.js.map +1 -0
- package/dist/services/cache/cache.service.d.ts +2 -4
- package/dist/services/cache/cache.service.js +26 -30
- package/dist/services/cache/cache.service.js.map +1 -1
- package/dist/services/credentials-tester.service.js +1 -2
- package/dist/services/credentials-tester.service.js.map +1 -1
- package/dist/services/project.service.ee.d.ts +1 -4
- package/dist/services/project.service.ee.js +1 -18
- package/dist/services/project.service.ee.js.map +1 -1
- package/dist/services/ssrf/dns-resolver.d.ts +13 -0
- package/dist/services/ssrf/dns-resolver.js +93 -0
- package/dist/services/ssrf/dns-resolver.js.map +1 -0
- package/dist/services/ssrf/hostname-matcher.d.ts +6 -0
- package/dist/services/ssrf/hostname-matcher.js +38 -0
- package/dist/services/ssrf/hostname-matcher.js.map +1 -0
- package/dist/services/ssrf/in-memory-dns-cache.service.d.ts +11 -0
- package/dist/services/ssrf/in-memory-dns-cache.service.js +61 -0
- package/dist/services/ssrf/in-memory-dns-cache.service.js.map +1 -0
- package/dist/services/ssrf/ip-range-builder.d.ts +10 -0
- package/dist/services/ssrf/ip-range-builder.js +52 -0
- package/dist/services/ssrf/ip-range-builder.js.map +1 -0
- package/dist/services/ssrf/ssrf-blocked-ip.error.d.ts +6 -0
- package/dist/services/ssrf/ssrf-blocked-ip.error.js +16 -0
- package/dist/services/ssrf/ssrf-blocked-ip.error.js.map +1 -0
- package/dist/services/ssrf/ssrf-protection.service.d.ts +26 -0
- package/dist/services/ssrf/ssrf-protection.service.js +159 -0
- package/dist/services/ssrf/ssrf-protection.service.js.map +1 -0
- package/dist/services/workflow-statistics.service.js +6 -8
- package/dist/services/workflow-statistics.service.js.map +1 -1
- package/dist/task-runners/task-runner-module.js +0 -1
- package/dist/task-runners/task-runner-module.js.map +1 -1
- package/dist/task-runners/task-runner-process-js.js +1 -1
- package/dist/task-runners/task-runner-process-js.js.map +1 -1
- package/dist/task-runners/task-runner-process-py.js +15 -3
- package/dist/task-runners/task-runner-process-py.js.map +1 -1
- package/dist/telemetry/index.d.ts +6 -1
- package/dist/telemetry/index.js +76 -9
- package/dist/telemetry/index.js.map +1 -1
- package/dist/utils.d.ts +1 -0
- package/dist/utils.js +4 -0
- package/dist/utils.js.map +1 -1
- package/dist/workflow-execute-additional-data.js +7 -0
- package/dist/workflow-execute-additional-data.js.map +1 -1
- package/dist/workflow-helpers.js +3 -0
- package/dist/workflow-helpers.js.map +1 -1
- package/dist/workflows/workflow-creation.service.d.ts +38 -0
- package/dist/workflows/workflow-creation.service.js +185 -0
- package/dist/workflows/workflow-creation.service.js.map +1 -0
- package/dist/workflows/workflow-finder.service.d.ts +1 -0
- package/dist/workflows/workflow-finder.service.js +10 -0
- package/dist/workflows/workflow-finder.service.js.map +1 -1
- package/dist/workflows/workflow-validation.service.d.ts +5 -3
- package/dist/workflows/workflow-validation.service.js +59 -2
- package/dist/workflows/workflow-validation.service.js.map +1 -1
- package/dist/workflows/workflow.service.d.ts +1 -0
- package/dist/workflows/workflow.service.js +11 -0
- package/dist/workflows/workflow.service.js.map +1 -1
- package/dist/workflows/workflows.controller.d.ts +5 -15
- package/dist/workflows/workflows.controller.js +16 -106
- package/dist/workflows/workflows.controller.js.map +1 -1
- package/package.json +21 -20
- package/dist/errors/cache-errors/malformed-refresh-value.error.d.ts +0 -4
- package/dist/errors/cache-errors/malformed-refresh-value.error.js +0 -11
- package/dist/errors/cache-errors/malformed-refresh-value.error.js.map +0 -1
- package/dist/modules/breaking-changes/rules/v2/index.d.ts +0 -9
- package/dist/modules/breaking-changes/rules/v2/index.js +0 -41
- package/dist/modules/breaking-changes/rules/v2/index.js.map +0 -1
- package/dist/modules/breaking-changes/rules/v2/task-runners.rule.d.ts +0 -10
- package/dist/modules/breaking-changes/rules/v2/task-runners.rule.js +0 -73
- package/dist/modules/breaking-changes/rules/v2/task-runners.rule.js.map +0 -1
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createArchiveWorkflowTool = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const mcp_constants_1 = require("../../mcp.constants");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
const inputSchema = {
|
|
11
|
+
workflowId: zod_1.default.string().describe('The ID of the workflow to archive'),
|
|
12
|
+
};
|
|
13
|
+
const outputSchema = {
|
|
14
|
+
archived: zod_1.default.boolean().describe('Whether the workflow was archived'),
|
|
15
|
+
workflowId: zod_1.default.string().describe('The ID of the archived workflow'),
|
|
16
|
+
name: zod_1.default.string().describe('The name of the archived workflow'),
|
|
17
|
+
};
|
|
18
|
+
const createArchiveWorkflowTool = (user, workflowService, telemetry) => ({
|
|
19
|
+
name: constants_1.MCP_ARCHIVE_WORKFLOW_TOOL.toolName,
|
|
20
|
+
config: {
|
|
21
|
+
description: 'Archive a workflow in n8n by its ID.',
|
|
22
|
+
inputSchema,
|
|
23
|
+
outputSchema,
|
|
24
|
+
annotations: {
|
|
25
|
+
title: constants_1.MCP_ARCHIVE_WORKFLOW_TOOL.displayTitle,
|
|
26
|
+
readOnlyHint: false,
|
|
27
|
+
destructiveHint: true,
|
|
28
|
+
idempotentHint: true,
|
|
29
|
+
openWorldHint: false,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
handler: async ({ workflowId }) => {
|
|
33
|
+
const telemetryPayload = {
|
|
34
|
+
user_id: user.id,
|
|
35
|
+
tool_name: constants_1.MCP_ARCHIVE_WORKFLOW_TOOL.toolName,
|
|
36
|
+
parameters: { workflowId },
|
|
37
|
+
};
|
|
38
|
+
try {
|
|
39
|
+
const workflow = await workflowService.archive(user, workflowId, { skipArchived: true });
|
|
40
|
+
if (!workflow) {
|
|
41
|
+
throw new Error("Workflow not found or you don't have permission to archive it.");
|
|
42
|
+
}
|
|
43
|
+
telemetryPayload.results = {
|
|
44
|
+
success: true,
|
|
45
|
+
data: { workflowId },
|
|
46
|
+
};
|
|
47
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
48
|
+
const output = {
|
|
49
|
+
archived: true,
|
|
50
|
+
workflowId,
|
|
51
|
+
name: workflow.name,
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
55
|
+
structuredContent: output,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
60
|
+
telemetryPayload.results = {
|
|
61
|
+
success: false,
|
|
62
|
+
error: errorMessage,
|
|
63
|
+
};
|
|
64
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
65
|
+
const output = { error: errorMessage };
|
|
66
|
+
return {
|
|
67
|
+
content: [{ type: 'text', text: JSON.stringify(output, null, 2) }],
|
|
68
|
+
structuredContent: output,
|
|
69
|
+
isError: true,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
exports.createArchiveWorkflowTool = createArchiveWorkflowTool;
|
|
75
|
+
//# sourceMappingURL=delete-workflow.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-workflow.tool.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/tools/workflow-builder/delete-workflow.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { User } from '@n8n/db';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
import type { ToolDefinition } from '../../mcp.types';
|
|
4
|
+
import type { Telemetry } from '../../../../telemetry';
|
|
5
|
+
import type { WorkflowBuilderToolsService } from './workflow-builder-tools.service';
|
|
6
|
+
declare const inputSchema: {
|
|
7
|
+
categories: z.ZodArray<z.ZodString, "many">;
|
|
8
|
+
};
|
|
9
|
+
export declare const createGetSuggestedWorkflowNodesTool: (user: User, workflowBuilderToolsService: WorkflowBuilderToolsService, telemetry: Telemetry) => ToolDefinition<typeof inputSchema>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.createGetSuggestedWorkflowNodesTool = void 0;
|
|
40
|
+
const zod_1 = __importDefault(require("zod"));
|
|
41
|
+
const mcp_constants_1 = require("../../mcp.constants");
|
|
42
|
+
const constants_1 = require("./constants");
|
|
43
|
+
const inputSchema = {
|
|
44
|
+
categories: zod_1.default
|
|
45
|
+
.array(zod_1.default.string())
|
|
46
|
+
.min(1)
|
|
47
|
+
.describe('Workflow technique categories. Available: chatbot, notification, scheduling, data_transformation, data_persistence, data_extraction, document_processing, form_input, content_generation, triage, scraping_and_research'),
|
|
48
|
+
};
|
|
49
|
+
const outputSchema = {
|
|
50
|
+
suggestions: zod_1.default
|
|
51
|
+
.string()
|
|
52
|
+
.describe('Curated node recommendations with pattern hints and configuration guidance'),
|
|
53
|
+
};
|
|
54
|
+
const createGetSuggestedWorkflowNodesTool = (user, workflowBuilderToolsService, telemetry) => ({
|
|
55
|
+
name: constants_1.CODE_BUILDER_GET_SUGGESTED_NODES_TOOL.toolName,
|
|
56
|
+
config: {
|
|
57
|
+
description: 'Get curated node recommendations for workflow technique categories. Returns recommended nodes with pattern hints and configuration guidance. Use after analyzing what kind of workflow to build.',
|
|
58
|
+
inputSchema,
|
|
59
|
+
outputSchema,
|
|
60
|
+
annotations: {
|
|
61
|
+
title: constants_1.CODE_BUILDER_GET_SUGGESTED_NODES_TOOL.displayTitle,
|
|
62
|
+
readOnlyHint: true,
|
|
63
|
+
destructiveHint: false,
|
|
64
|
+
idempotentHint: true,
|
|
65
|
+
openWorldHint: false,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
handler: async ({ categories }) => {
|
|
69
|
+
const telemetryPayload = {
|
|
70
|
+
user_id: user.id,
|
|
71
|
+
tool_name: constants_1.CODE_BUILDER_GET_SUGGESTED_NODES_TOOL.toolName,
|
|
72
|
+
parameters: { categories },
|
|
73
|
+
};
|
|
74
|
+
try {
|
|
75
|
+
const { createGetSuggestedNodesTool } = await Promise.resolve().then(() => __importStar(require('@n8n/ai-workflow-builder')));
|
|
76
|
+
const nodeTypeParser = workflowBuilderToolsService.getNodeTypeParser();
|
|
77
|
+
const suggestTool = createGetSuggestedNodesTool(nodeTypeParser);
|
|
78
|
+
const result = await suggestTool.invoke({ categories });
|
|
79
|
+
telemetryPayload.results = {
|
|
80
|
+
success: true,
|
|
81
|
+
data: { categoryCount: categories.length },
|
|
82
|
+
};
|
|
83
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
84
|
+
return {
|
|
85
|
+
content: [{ type: 'text', text: result }],
|
|
86
|
+
structuredContent: { suggestions: result },
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
telemetryPayload.results = {
|
|
91
|
+
success: false,
|
|
92
|
+
error: error instanceof Error ? error.message : String(error),
|
|
93
|
+
};
|
|
94
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
95
|
+
throw error;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
exports.createGetSuggestedWorkflowNodesTool = createGetSuggestedWorkflowNodesTool;
|
|
100
|
+
//# sourceMappingURL=get-suggested-workflow-nodes.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-suggested-workflow-nodes.tool.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/tools/workflow-builder/get-suggested-workflow-nodes.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,8CAAoB;AAEpB,uDAAiE;AAKjE,2CAAoE;AAGpE,MAAM,WAAW,GAAG;IACnB,UAAU,EAAE,aAAC;SACX,KAAK,CAAC,aAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACR,yNAAyN,CACzN;CACsB,CAAC;AAE1B,MAAM,YAAY,GAAG;IACpB,WAAW,EAAE,aAAC;SACZ,MAAM,EAAE;SACR,QAAQ,CAAC,4EAA4E,CAAC;CAChE,CAAC;AAKnB,MAAM,mCAAmC,GAAG,CAClD,IAAU,EACV,2BAAwD,EACxD,SAAoB,EACiB,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE,iDAAqC,CAAC,QAAQ;IACpD,MAAM,EAAE;QACP,WAAW,EACV,kMAAkM;QACnM,WAAW;QACX,YAAY;QACZ,WAAW,EAAE;YACZ,KAAK,EAAE,iDAAqC,CAAC,YAAY;YACzD,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACpB;KACD;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,UAAU,EAA4B,EAAE,EAAE;QAC3D,MAAM,gBAAgB,GAAkC;YACvD,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,SAAS,EAAE,iDAAqC,CAAC,QAAQ;YACzD,UAAU,EAAE,EAAE,UAAU,EAAE;SAC1B,CAAC;QAEF,IAAI,CAAC;YACJ,MAAM,EAAE,2BAA2B,EAAE,GAAG,wDAAa,0BAA0B,GAAC,CAAC;YACjF,MAAM,cAAc,GAAG,2BAA2B,CAAC,iBAAiB,EAAE,CAAC;YACvE,MAAM,WAAW,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC;YAChE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAExD,gBAAgB,CAAC,OAAO,GAAG;gBAC1B,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,aAAa,EAAE,UAAU,CAAC,MAAM,EAAE;aAC1C,CAAC;YACF,SAAS,CAAC,KAAK,CAAC,0CAA0B,EAAE,gBAAgB,CAAC,CAAC;YAE9D,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACzC,iBAAiB,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;aAC1C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,gBAAgB,CAAC,OAAO,GAAG;gBAC1B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC;YACF,SAAS,CAAC,KAAK,CAAC,0CAA0B,EAAE,gBAAgB,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;CACD,CAAC,CAAC;AAnDU,QAAA,mCAAmC,uCAmD7C"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { User } from '@n8n/db';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
import type { ToolDefinition } from '../../mcp.types';
|
|
4
|
+
import type { Telemetry } from '../../../../telemetry';
|
|
5
|
+
import type { WorkflowBuilderToolsService } from './workflow-builder-tools.service';
|
|
6
|
+
declare const inputSchema: {
|
|
7
|
+
nodeIds: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodObject<{
|
|
8
|
+
nodeId: z.ZodString;
|
|
9
|
+
version: z.ZodOptional<z.ZodString>;
|
|
10
|
+
resource: z.ZodOptional<z.ZodString>;
|
|
11
|
+
operation: z.ZodOptional<z.ZodString>;
|
|
12
|
+
mode: z.ZodOptional<z.ZodString>;
|
|
13
|
+
}, "strip", z.ZodTypeAny, {
|
|
14
|
+
nodeId: string;
|
|
15
|
+
version?: string | undefined;
|
|
16
|
+
resource?: string | undefined;
|
|
17
|
+
operation?: string | undefined;
|
|
18
|
+
mode?: string | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
nodeId: string;
|
|
21
|
+
version?: string | undefined;
|
|
22
|
+
resource?: string | undefined;
|
|
23
|
+
operation?: string | undefined;
|
|
24
|
+
mode?: string | undefined;
|
|
25
|
+
}>]>, "many">;
|
|
26
|
+
};
|
|
27
|
+
export declare const createGetWorkflowNodeTypesTool: (user: User, workflowBuilderToolsService: WorkflowBuilderToolsService, telemetry: Telemetry) => ToolDefinition<typeof inputSchema>;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.createGetWorkflowNodeTypesTool = void 0;
|
|
40
|
+
const zod_1 = __importDefault(require("zod"));
|
|
41
|
+
const mcp_constants_1 = require("../../mcp.constants");
|
|
42
|
+
const constants_1 = require("./constants");
|
|
43
|
+
const nodeIdWithDiscriminators = zod_1.default.object({
|
|
44
|
+
nodeId: zod_1.default.string().describe('The node type ID (e.g. "n8n-nodes-base.gmail")'),
|
|
45
|
+
version: zod_1.default.string().optional().describe('Specific version (e.g. "2.1")'),
|
|
46
|
+
resource: zod_1.default.string().optional().describe('Resource discriminator (e.g. "message")'),
|
|
47
|
+
operation: zod_1.default.string().optional().describe('Operation discriminator (e.g. "send")'),
|
|
48
|
+
mode: zod_1.default.string().optional().describe('Mode discriminator'),
|
|
49
|
+
});
|
|
50
|
+
const inputSchema = {
|
|
51
|
+
nodeIds: zod_1.default
|
|
52
|
+
.array(zod_1.default.union([zod_1.default.string(), nodeIdWithDiscriminators]))
|
|
53
|
+
.min(1)
|
|
54
|
+
.describe('Node IDs to get type definitions for. Use plain strings for simple nodes, or objects with discriminators from search results.'),
|
|
55
|
+
};
|
|
56
|
+
const outputSchema = {
|
|
57
|
+
definitions: zod_1.default.string().describe('TypeScript type definitions for the requested nodes'),
|
|
58
|
+
};
|
|
59
|
+
const createGetWorkflowNodeTypesTool = (user, workflowBuilderToolsService, telemetry) => ({
|
|
60
|
+
name: constants_1.CODE_BUILDER_GET_NODE_TYPES_TOOL.toolName,
|
|
61
|
+
config: {
|
|
62
|
+
description: 'Get TypeScript type definitions for n8n nodes. Returns exact parameter names and structures. MUST be called before writing workflow code — guessing parameter names creates invalid workflows. Include discriminators (resource/operation/mode) from search results.',
|
|
63
|
+
inputSchema,
|
|
64
|
+
outputSchema,
|
|
65
|
+
annotations: {
|
|
66
|
+
title: constants_1.CODE_BUILDER_GET_NODE_TYPES_TOOL.displayTitle,
|
|
67
|
+
readOnlyHint: true,
|
|
68
|
+
destructiveHint: false,
|
|
69
|
+
idempotentHint: true,
|
|
70
|
+
openWorldHint: false,
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
handler: async ({ nodeIds }) => {
|
|
74
|
+
const telemetryPayload = {
|
|
75
|
+
user_id: user.id,
|
|
76
|
+
tool_name: constants_1.CODE_BUILDER_GET_NODE_TYPES_TOOL.toolName,
|
|
77
|
+
parameters: { nodeIdCount: nodeIds.length },
|
|
78
|
+
};
|
|
79
|
+
try {
|
|
80
|
+
const { createCodeBuilderGetTool } = await Promise.resolve().then(() => __importStar(require('@n8n/ai-workflow-builder')));
|
|
81
|
+
const nodeDefinitionDirs = workflowBuilderToolsService.getNodeDefinitionDirs();
|
|
82
|
+
const getTool = createCodeBuilderGetTool({ nodeDefinitionDirs });
|
|
83
|
+
const result = await getTool.invoke({ nodeIds });
|
|
84
|
+
telemetryPayload.results = { success: true, data: { nodeIdCount: nodeIds.length } };
|
|
85
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
86
|
+
return {
|
|
87
|
+
content: [{ type: 'text', text: result }],
|
|
88
|
+
structuredContent: { definitions: result },
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
telemetryPayload.results = {
|
|
93
|
+
success: false,
|
|
94
|
+
error: error instanceof Error ? error.message : String(error),
|
|
95
|
+
};
|
|
96
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
exports.createGetWorkflowNodeTypesTool = createGetWorkflowNodeTypesTool;
|
|
102
|
+
//# sourceMappingURL=get-workflow-node-types.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-workflow-node-types.tool.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/tools/workflow-builder/get-workflow-node-types.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { User } from '@n8n/db';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
import type { ToolDefinition } from '../../mcp.types';
|
|
4
|
+
import type { Telemetry } from '../../../../telemetry';
|
|
5
|
+
declare const inputSchema: {
|
|
6
|
+
section: z.ZodOptional<z.ZodEnum<[string, ...string[]]>>;
|
|
7
|
+
};
|
|
8
|
+
export declare const createGetWorkflowSdkReferenceTool: (user: User, telemetry: Telemetry) => ToolDefinition<typeof inputSchema>;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createGetWorkflowSdkReferenceTool = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const mcp_constants_1 = require("../../mcp.constants");
|
|
9
|
+
const constants_1 = require("./constants");
|
|
10
|
+
const sdk_reference_content_1 = require("./sdk-reference-content");
|
|
11
|
+
const VALID_SECTIONS = [
|
|
12
|
+
'patterns',
|
|
13
|
+
'expressions',
|
|
14
|
+
'functions',
|
|
15
|
+
'rules',
|
|
16
|
+
'import',
|
|
17
|
+
'guidelines',
|
|
18
|
+
'design',
|
|
19
|
+
'all',
|
|
20
|
+
];
|
|
21
|
+
const inputSchema = {
|
|
22
|
+
section: zod_1.default
|
|
23
|
+
.enum(VALID_SECTIONS)
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('Optional section to retrieve: "patterns", "expressions", "functions", "rules", "import", "guidelines", "design", or "all" (default)'),
|
|
26
|
+
};
|
|
27
|
+
const outputSchema = {
|
|
28
|
+
reference: zod_1.default.string().describe('SDK reference documentation content for the requested section'),
|
|
29
|
+
};
|
|
30
|
+
const createGetWorkflowSdkReferenceTool = (user, telemetry) => ({
|
|
31
|
+
name: constants_1.MCP_GET_SDK_REFERENCE_TOOL.toolName,
|
|
32
|
+
config: {
|
|
33
|
+
description: 'Get the n8n Workflow SDK reference documentation including patterns, expression syntax, and rules. Call this FIRST before building workflows to learn the SDK.',
|
|
34
|
+
inputSchema,
|
|
35
|
+
outputSchema,
|
|
36
|
+
annotations: {
|
|
37
|
+
title: constants_1.MCP_GET_SDK_REFERENCE_TOOL.displayTitle,
|
|
38
|
+
readOnlyHint: true,
|
|
39
|
+
destructiveHint: false,
|
|
40
|
+
idempotentHint: true,
|
|
41
|
+
openWorldHint: false,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
handler: async ({ section }) => {
|
|
45
|
+
const telemetryPayload = {
|
|
46
|
+
user_id: user.id,
|
|
47
|
+
tool_name: constants_1.MCP_GET_SDK_REFERENCE_TOOL.toolName,
|
|
48
|
+
parameters: { section },
|
|
49
|
+
};
|
|
50
|
+
const content = (0, sdk_reference_content_1.getSdkReferenceContent)(section);
|
|
51
|
+
telemetryPayload.results = { success: true };
|
|
52
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
53
|
+
return {
|
|
54
|
+
content: [{ type: 'text', text: content }],
|
|
55
|
+
structuredContent: { reference: content },
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
exports.createGetWorkflowSdkReferenceTool = createGetWorkflowSdkReferenceTool;
|
|
60
|
+
//# sourceMappingURL=get-workflow-sdk-reference.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-workflow-sdk-reference.tool.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/tools/workflow-builder/get-workflow-sdk-reference.tool.ts"],"names":[],"mappings":";;;;;;AACA,8CAAoB;AAEpB,uDAAiE;AAKjE,2CAAyD;AACzD,mEAA2F;AAE3F,MAAM,cAAc,GAA0B;IAC7C,UAAU;IACV,aAAa;IACb,WAAW;IACX,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,KAAK;CACL,CAAC;AAEF,MAAM,WAAW,GAAG;IACnB,OAAO,EAAE,aAAC;SACR,IAAI,CAAC,cAAuC,CAAC;SAC7C,QAAQ,EAAE;SACV,QAAQ,CACR,qIAAqI,CACrI;CACsB,CAAC;AAE1B,MAAM,YAAY,GAAG;IACpB,SAAS,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;CACvE,CAAC;AAMnB,MAAM,iCAAiC,GAAG,CAChD,IAAU,EACV,SAAoB,EACiB,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE,sCAA0B,CAAC,QAAQ;IACzC,MAAM,EAAE;QACP,WAAW,EACV,gKAAgK;QACjK,WAAW;QACX,YAAY;QACZ,WAAW,EAAE;YACZ,KAAK,EAAE,sCAA0B,CAAC,YAAY;YAC9C,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACpB;KACD;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAwB,EAAE,EAAE;QACpD,MAAM,gBAAgB,GAAkC;YACvD,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,SAAS,EAAE,sCAA0B,CAAC,QAAQ;YAC9C,UAAU,EAAE,EAAE,OAAO,EAAE;SACvB,CAAC;QAEF,MAAM,OAAO,GAAG,IAAA,8CAAsB,EAAC,OAA0C,CAAC,CAAC;QAEnF,gBAAgB,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC7C,SAAS,CAAC,KAAK,CAAC,0CAA0B,EAAE,gBAAgB,CAAC,CAAC;QAE9D,OAAO;YACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC1C,iBAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE;SACzC,CAAC;IACH,CAAC;CACD,CAAC,CAAC;AAnCU,QAAA,iCAAiC,qCAmC3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getMcpInstructions(isBuilderEnabled: boolean): string;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMcpInstructions = getMcpInstructions;
|
|
4
|
+
const constants_1 = require("./constants");
|
|
5
|
+
function getMcpInstructions(isBuilderEnabled) {
|
|
6
|
+
const INTRO = 'This is the official MCP server for n8n, a workflow automation platform.';
|
|
7
|
+
const BUILDER_INSTRUCTIONS = `This MCP server provides tools to build n8n workflows programmatically using the n8n Workflow SDK.
|
|
8
|
+
|
|
9
|
+
To build n8n workflows, follow these steps in order:
|
|
10
|
+
|
|
11
|
+
1. Read the SDK reference: Call ${constants_1.MCP_GET_SDK_REFERENCE_TOOL.toolName} (or use the n8n://workflow-sdk/reference resource) to learn the SDK patterns and syntax.
|
|
12
|
+
|
|
13
|
+
2. Discover nodes: Call ${constants_1.CODE_BUILDER_SEARCH_NODES_TOOL.toolName} with queries for services you need (e.g., ["gmail", "slack", "schedule trigger"]) and utility nodes (e.g., ["set", "if", "merge", "code"]). Note the discriminators (resource/operation/mode) in the results.
|
|
14
|
+
|
|
15
|
+
3. (Optional) Get suggestions: Call ${constants_1.CODE_BUILDER_GET_SUGGESTED_NODES_TOOL.toolName} with workflow technique categories for curated recommendations.
|
|
16
|
+
|
|
17
|
+
4. Get type definitions: Call ${constants_1.CODE_BUILDER_GET_NODE_TYPES_TOOL.toolName} with ALL node IDs you plan to use, including discriminators from search results. This returns the exact TypeScript parameter definitions. DO NOT skip this — guessing parameter names creates invalid workflows.
|
|
18
|
+
|
|
19
|
+
5. Write the workflow code using the SDK patterns from the reference and the exact parameter names from the type definitions. Follow the coding guidelines and design guidance sections of the SDK reference (retrieve them with ${constants_1.MCP_GET_SDK_REFERENCE_TOOL.toolName} using sections "guidelines" and "design").
|
|
20
|
+
|
|
21
|
+
6. Validate: Call ${constants_1.CODE_BUILDER_VALIDATE_TOOL.toolName} with your full code. Fix any errors and re-validate until valid.
|
|
22
|
+
|
|
23
|
+
7. Create: Call ${constants_1.MCP_CREATE_WORKFLOW_FROM_CODE_TOOL.toolName} with the validated code to save the workflow to n8n. Include a short \`description\` (1-2 sentences) summarizing what the workflow does — this helps users find and understand their workflows.
|
|
24
|
+
|
|
25
|
+
8. Update: Call ${constants_1.MCP_UPDATE_WORKFLOW_TOOL.toolName} with the workflow ID and validated code. Follow steps 2-6 to prepare the new code, then call update instead of create.
|
|
26
|
+
|
|
27
|
+
9. Archive: Call ${constants_1.MCP_ARCHIVE_WORKFLOW_TOOL.toolName} with the workflow ID.`;
|
|
28
|
+
return isBuilderEnabled ? `${INTRO}\n\n${BUILDER_INSTRUCTIONS}` : INTRO;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=mcp-instructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-instructions.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/tools/workflow-builder/mcp-instructions.ts"],"names":[],"mappings":";;AAmBA,gDA0BC;AArCD,2CASqB;AAErB,SAAgB,kBAAkB,CAAC,gBAAyB;IAC3D,MAAM,KAAK,GAAG,0EAA0E,CAAC;IAEzF,MAAM,oBAAoB,GAAG;;;;kCAII,sCAA0B,CAAC,QAAQ;;0BAE3C,0CAA8B,CAAC,QAAQ;;sCAE3B,iDAAqC,CAAC,QAAQ;;gCAEpD,4CAAgC,CAAC,QAAQ;;mOAE0J,sCAA0B,CAAC,QAAQ;;oBAElP,sCAA0B,CAAC,QAAQ;;kBAErC,8CAAkC,CAAC,QAAQ;;kBAE3C,oCAAwB,CAAC,QAAQ;;mBAEhC,qCAAyB,CAAC,QAAQ,wBAAwB,CAAC;IAE7E,OAAO,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,oBAAoB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACzE,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSdkReferenceContent = getSdkReferenceContent;
|
|
4
|
+
const ai_workflow_builder_1 = require("@n8n/ai-workflow-builder");
|
|
5
|
+
const CODING_GUIDELINES = `Rules:
|
|
6
|
+
- Use exact parameter names and structures from the type definitions.
|
|
7
|
+
- Use unique variable names — never reuse builder function names (e.g. \`node\`, \`trigger\`) as variable names
|
|
8
|
+
- Use descriptive node names (Good: "Fetch Weather Data", "Check Temperature"; Bad: "HTTP Request", "Set", "If")
|
|
9
|
+
- Credentials: \`credentials: { slackApi: newCredential('Slack Bot') }\` — type must match what the node expects
|
|
10
|
+
- Expressions: use \`expr()\` for any \`{{ }}\` syntax — always use single or double quotes, NOT backtick template literals
|
|
11
|
+
- e.g. \`expr('Hello {{ $json.name }}')\` or \`expr("{{ $('Node').item.json.field }}")\`
|
|
12
|
+
- For multiline expressions, use string concatenation: \`expr('Line 1\\n' + 'Line 2 {{ $json.value }}')\`
|
|
13
|
+
- WRONG: \`expr('Daily Digest - ' + $now.toFormat('MMMM d') + '\\n' + $json.output)\` — $now and $json are outside {{ }}
|
|
14
|
+
- CORRECT: \`expr('Daily Digest - {{ $now.toFormat("MMMM d") }}\\n{{ $json.output }}')\` — variables inside {{ }}
|
|
15
|
+
- WRONG: \`expr('{{ ' + JSON.stringify($('Node').all().map(i => i.json)) + ' }}')\` — $() used as JavaScript
|
|
16
|
+
- CORRECT: \`expr('{{ $("Node").all().map(i => i.json) }}')\` — $() inside {{ }} evaluated at runtime
|
|
17
|
+
- Placeholders: use \`placeholder('hint')\` directly as the parameter value, not inside \`expr()\`, objects, or arrays, etc.
|
|
18
|
+
- Every node MUST have an \`output\` property with sample data — following nodes depend on it for expressions
|
|
19
|
+
- String quoting: When a string value contains an apostrophe, use double quotes for that string.
|
|
20
|
+
Example: \`output: [{{ text: "I've arrived" }}]\`
|
|
21
|
+
- Do NOT add or edit comments. Comments are ignored and not shared with user. Use sticky(...) to provide guidance.`;
|
|
22
|
+
const DESIGN_GUIDANCE = `Design guidance:
|
|
23
|
+
- **Trace item counts**: For each connection A → B, if A returns N items, should B run N times or just once? If B doesn't need A's items (e.g., it fetches from an independent source), either set \`executeOnce: true\` on B or use parallel branches + Merge to combine results.
|
|
24
|
+
- **Handling convergence after branches**: When a node receives data from multiple paths (after Switch, IF, Merge): use optional chaining \`expr('{{ $json.data?.approved ?? $json.status }}')\`, reference a node that ALWAYS runs \`expr("{{ $('Webhook').item.json.field }}")\`, or normalize data before convergence with Set nodes.
|
|
25
|
+
- **Prefer dedicated integration nodes** over HTTP Request when search results show one is available.
|
|
26
|
+
- **Pay attention to @builderHint annotations** in the type definitions — they provide critical guidance on how to correctly configure node parameters.`;
|
|
27
|
+
const SDK_IMPORT_SECTION = `## SDK Import Statement\n\n\`\`\`javascript\n${ai_workflow_builder_1.SDK_IMPORT_STATEMENT}\n\`\`\``;
|
|
28
|
+
const CODING_GUIDELINES_SECTION = `## Coding Guidelines\n\n${CODING_GUIDELINES}`;
|
|
29
|
+
const DESIGN_GUIDANCE_SECTION = `## Design Guidance\n\n${DESIGN_GUIDANCE}`;
|
|
30
|
+
const SECTIONS = {
|
|
31
|
+
import: SDK_IMPORT_SECTION,
|
|
32
|
+
patterns: ai_workflow_builder_1.WORKFLOW_PATTERNS,
|
|
33
|
+
expressions: ai_workflow_builder_1.EXPRESSION_REFERENCE,
|
|
34
|
+
functions: ai_workflow_builder_1.ADDITIONAL_FUNCTIONS,
|
|
35
|
+
rules: ai_workflow_builder_1.WORKFLOW_RULES,
|
|
36
|
+
guidelines: CODING_GUIDELINES_SECTION,
|
|
37
|
+
design: DESIGN_GUIDANCE_SECTION,
|
|
38
|
+
};
|
|
39
|
+
function getSdkReferenceContent(section) {
|
|
40
|
+
if (section && section !== 'all' && section in SECTIONS) {
|
|
41
|
+
return SECTIONS[section];
|
|
42
|
+
}
|
|
43
|
+
return [
|
|
44
|
+
'# n8n Workflow SDK Reference',
|
|
45
|
+
'',
|
|
46
|
+
SECTIONS.import,
|
|
47
|
+
'',
|
|
48
|
+
SECTIONS.patterns,
|
|
49
|
+
'',
|
|
50
|
+
SECTIONS.expressions,
|
|
51
|
+
'',
|
|
52
|
+
SECTIONS.functions,
|
|
53
|
+
'',
|
|
54
|
+
SECTIONS.rules,
|
|
55
|
+
'',
|
|
56
|
+
SECTIONS.guidelines,
|
|
57
|
+
'',
|
|
58
|
+
SECTIONS.design,
|
|
59
|
+
].join('\n');
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=sdk-reference-content.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk-reference-content.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/tools/workflow-builder/sdk-reference-content.ts"],"names":[],"mappings":";;AA4EA,wDAsBC;AA1FD,kEAMkC;AAMlC,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;mHAgByF,CAAC;AAEpH,MAAM,eAAe,GAAG;;;;wJAIgI,CAAC;AAezJ,MAAM,kBAAkB,GAAG,gDAAgD,0CAAoB,UAAU,CAAC;AAE1G,MAAM,yBAAyB,GAAG,2BAA2B,iBAAiB,EAAE,CAAC;AAEjF,MAAM,uBAAuB,GAAG,yBAAyB,eAAe,EAAE,CAAC;AAE3E,MAAM,QAAQ,GAAwD;IACrE,MAAM,EAAE,kBAAkB;IAC1B,QAAQ,EAAE,uCAAiB;IAC3B,WAAW,EAAE,0CAAoB;IACjC,SAAS,EAAE,0CAAoB;IAC/B,KAAK,EAAE,oCAAc;IACrB,UAAU,EAAE,yBAAyB;IACrC,MAAM,EAAE,uBAAuB;CAC/B,CAAC;AAKF,SAAgB,sBAAsB,CAAC,OAA6B;IACnE,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QACzD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACN,8BAA8B;QAC9B,EAAE;QACF,QAAQ,CAAC,MAAM;QACf,EAAE;QACF,QAAQ,CAAC,QAAQ;QACjB,EAAE;QACF,QAAQ,CAAC,WAAW;QACpB,EAAE;QACF,QAAQ,CAAC,SAAS;QAClB,EAAE;QACF,QAAQ,CAAC,KAAK;QACd,EAAE;QACF,QAAQ,CAAC,UAAU;QACnB,EAAE;QACF,QAAQ,CAAC,MAAM;KACf,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { User } from '@n8n/db';
|
|
2
|
+
import z from 'zod';
|
|
3
|
+
import type { ToolDefinition } from '../../mcp.types';
|
|
4
|
+
import type { Telemetry } from '../../../../telemetry';
|
|
5
|
+
import type { WorkflowBuilderToolsService } from './workflow-builder-tools.service';
|
|
6
|
+
declare const inputSchema: {
|
|
7
|
+
queries: z.ZodArray<z.ZodString, "many">;
|
|
8
|
+
};
|
|
9
|
+
export declare const createSearchWorkflowNodesTool: (user: User, workflowBuilderToolsService: WorkflowBuilderToolsService, telemetry: Telemetry) => ToolDefinition<typeof inputSchema>;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.createSearchWorkflowNodesTool = void 0;
|
|
40
|
+
const zod_1 = __importDefault(require("zod"));
|
|
41
|
+
const mcp_constants_1 = require("../../mcp.constants");
|
|
42
|
+
const constants_1 = require("./constants");
|
|
43
|
+
const inputSchema = {
|
|
44
|
+
queries: zod_1.default
|
|
45
|
+
.array(zod_1.default.string())
|
|
46
|
+
.min(1)
|
|
47
|
+
.describe('Search queries for n8n nodes — service names (e.g. "gmail", "slack"), trigger types (e.g. "schedule trigger", "webhook"), or utility nodes (e.g. "set", "if", "merge", "code")'),
|
|
48
|
+
};
|
|
49
|
+
const outputSchema = {
|
|
50
|
+
results: zod_1.default
|
|
51
|
+
.string()
|
|
52
|
+
.describe('Search results with matching node IDs, discriminators, and related nodes'),
|
|
53
|
+
};
|
|
54
|
+
const createSearchWorkflowNodesTool = (user, workflowBuilderToolsService, telemetry) => ({
|
|
55
|
+
name: constants_1.CODE_BUILDER_SEARCH_NODES_TOOL.toolName,
|
|
56
|
+
config: {
|
|
57
|
+
description: 'Search for n8n nodes by service name, trigger type, or utility function. Returns node IDs, discriminators (resource/operation/mode), and related nodes needed for get_workflow_node_types.',
|
|
58
|
+
inputSchema,
|
|
59
|
+
outputSchema,
|
|
60
|
+
annotations: {
|
|
61
|
+
title: constants_1.CODE_BUILDER_SEARCH_NODES_TOOL.displayTitle,
|
|
62
|
+
readOnlyHint: true,
|
|
63
|
+
destructiveHint: false,
|
|
64
|
+
idempotentHint: true,
|
|
65
|
+
openWorldHint: false,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
handler: async ({ queries }) => {
|
|
69
|
+
const telemetryPayload = {
|
|
70
|
+
user_id: user.id,
|
|
71
|
+
tool_name: constants_1.CODE_BUILDER_SEARCH_NODES_TOOL.toolName,
|
|
72
|
+
parameters: { queries },
|
|
73
|
+
};
|
|
74
|
+
try {
|
|
75
|
+
const { createCodeBuilderSearchTool } = await Promise.resolve().then(() => __importStar(require('@n8n/ai-workflow-builder')));
|
|
76
|
+
const nodeTypeParser = workflowBuilderToolsService.getNodeTypeParser();
|
|
77
|
+
const searchTool = createCodeBuilderSearchTool(nodeTypeParser);
|
|
78
|
+
const result = await searchTool.invoke({ queries });
|
|
79
|
+
telemetryPayload.results = { success: true, data: { queryCount: queries.length } };
|
|
80
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
81
|
+
return {
|
|
82
|
+
content: [{ type: 'text', text: result }],
|
|
83
|
+
structuredContent: { results: result },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
telemetryPayload.results = {
|
|
88
|
+
success: false,
|
|
89
|
+
error: error instanceof Error ? error.message : String(error),
|
|
90
|
+
};
|
|
91
|
+
telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, telemetryPayload);
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
exports.createSearchWorkflowNodesTool = createSearchWorkflowNodesTool;
|
|
97
|
+
//# sourceMappingURL=search-workflow-nodes.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-workflow-nodes.tool.js","sourceRoot":"","sources":["../../../../../src/modules/mcp/tools/workflow-builder/search-workflow-nodes.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,8CAAoB;AAEpB,uDAAiE;AAKjE,2CAA6D;AAG7D,MAAM,WAAW,GAAG;IACnB,OAAO,EAAE,aAAC;SACR,KAAK,CAAC,aAAC,CAAC,MAAM,EAAE,CAAC;SACjB,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACR,gLAAgL,CAChL;CACsB,CAAC;AAE1B,MAAM,YAAY,GAAG;IACpB,OAAO,EAAE,aAAC;SACR,MAAM,EAAE;SACR,QAAQ,CAAC,0EAA0E,CAAC;CAC9D,CAAC;AAMnB,MAAM,6BAA6B,GAAG,CAC5C,IAAU,EACV,2BAAwD,EACxD,SAAoB,EACiB,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE,0CAA8B,CAAC,QAAQ;IAC7C,MAAM,EAAE;QACP,WAAW,EACV,4LAA4L;QAC7L,WAAW;QACX,YAAY;QACZ,WAAW,EAAE;YACZ,KAAK,EAAE,0CAA8B,CAAC,YAAY;YAClD,YAAY,EAAE,IAAI;YAClB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,KAAK;SACpB;KACD;IACD,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAyB,EAAE,EAAE;QACrD,MAAM,gBAAgB,GAAkC;YACvD,OAAO,EAAE,IAAI,CAAC,EAAE;YAChB,SAAS,EAAE,0CAA8B,CAAC,QAAQ;YAClD,UAAU,EAAE,EAAE,OAAO,EAAE;SACvB,CAAC;QAEF,IAAI,CAAC;YACJ,MAAM,EAAE,2BAA2B,EAAE,GAAG,wDAAa,0BAA0B,GAAC,CAAC;YACjF,MAAM,cAAc,GAAG,2BAA2B,CAAC,iBAAiB,EAAE,CAAC;YACvE,MAAM,UAAU,GAAG,2BAA2B,CAAC,cAAc,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAEpD,gBAAgB,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACnF,SAAS,CAAC,KAAK,CAAC,0CAA0B,EAAE,gBAAgB,CAAC,CAAC;YAE9D,OAAO;gBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACzC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;aACtC,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,gBAAgB,CAAC,OAAO,GAAG;gBAC1B,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC;YACF,SAAS,CAAC,KAAK,CAAC,0CAA0B,EAAE,gBAAgB,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;CACD,CAAC,CAAC;AAhDU,QAAA,6BAA6B,iCAgDvC"}
|