n8n 1.116.2 → 1.117.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/active-executions.d.ts +3 -1
  2. package/dist/active-executions.js +7 -8
  3. package/dist/active-executions.js.map +1 -1
  4. package/dist/build.tsbuildinfo +1 -1
  5. package/dist/commands/base-command.js +1 -5
  6. package/dist/commands/base-command.js.map +1 -1
  7. package/dist/commands/execute-batch.js +2 -3
  8. package/dist/commands/execute-batch.js.map +1 -1
  9. package/dist/commands/execute.js +2 -6
  10. package/dist/commands/execute.js.map +1 -1
  11. package/dist/commands/start.js +5 -5
  12. package/dist/commands/start.js.map +1 -1
  13. package/dist/commands/webhook.js +4 -8
  14. package/dist/commands/webhook.js.map +1 -1
  15. package/dist/commands/worker.js +5 -9
  16. package/dist/commands/worker.js.map +1 -1
  17. package/dist/concurrency/concurrency-control.service.js +1 -2
  18. package/dist/concurrency/concurrency-control.service.js.map +1 -1
  19. package/dist/config/index.d.ts +0 -3
  20. package/dist/config/schema.d.ts +0 -8
  21. package/dist/config/schema.js +0 -8
  22. package/dist/config/schema.js.map +1 -1
  23. package/dist/controllers/ai.controller.d.ts +2 -1
  24. package/dist/controllers/ai.controller.js +19 -0
  25. package/dist/controllers/ai.controller.js.map +1 -1
  26. package/dist/controllers/e2e.controller.d.ts +3 -1
  27. package/dist/controllers/e2e.controller.js +7 -5
  28. package/dist/controllers/e2e.controller.js.map +1 -1
  29. package/dist/controllers/users.controller.d.ts +1 -1
  30. package/dist/controllers/users.controller.js +1 -1
  31. package/dist/controllers/users.controller.js.map +1 -1
  32. package/dist/deprecation/deprecation.service.js +1 -5
  33. package/dist/deprecation/deprecation.service.js.map +1 -1
  34. package/dist/environments.ee/source-control/source-control-export.service.ee.d.ts +1 -1
  35. package/dist/environments.ee/source-control/source-control-export.service.ee.js +2 -2
  36. package/dist/environments.ee/source-control/source-control-export.service.ee.js.map +1 -1
  37. package/dist/environments.ee/source-control/source-control-helper.ee.d.ts +2 -0
  38. package/dist/environments.ee/source-control/source-control-helper.ee.js +11 -2
  39. package/dist/environments.ee/source-control/source-control-helper.ee.js.map +1 -1
  40. package/dist/environments.ee/source-control/source-control-import.service.ee.d.ts +6 -4
  41. package/dist/environments.ee/source-control/source-control-import.service.ee.js +63 -51
  42. package/dist/environments.ee/source-control/source-control-import.service.ee.js.map +1 -1
  43. package/dist/environments.ee/source-control/source-control-status.service.ee.js +28 -3
  44. package/dist/environments.ee/source-control/source-control-status.service.ee.js.map +1 -1
  45. package/dist/environments.ee/variables/variables.service.ee.js +6 -1
  46. package/dist/environments.ee/variables/variables.service.ee.js.map +1 -1
  47. package/dist/evaluation.ee/test-runner/test-runner.service.ee.d.ts +3 -1
  48. package/dist/evaluation.ee/test-runner/test-runner.service.ee.js +7 -5
  49. package/dist/evaluation.ee/test-runner/test-runner.service.ee.js.map +1 -1
  50. package/dist/eventbus/message-event-bus/message-event-bus.js +1 -2
  51. package/dist/eventbus/message-event-bus/message-event-bus.js.map +1 -1
  52. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-syslog.ee.js +1 -0
  53. package/dist/eventbus/message-event-bus-destination/message-event-bus-destination-syslog.ee.js.map +1 -1
  54. package/dist/events/maps/relay.event-map.d.ts +18 -1
  55. package/dist/events/relays/telemetry.event-relay.d.ts +1 -0
  56. package/dist/events/relays/telemetry.event-relay.js +12 -4
  57. package/dist/events/relays/telemetry.event-relay.js.map +1 -1
  58. package/dist/executions/execution.service.js +2 -6
  59. package/dist/executions/execution.service.js.map +1 -1
  60. package/dist/license.js +1 -5
  61. package/dist/license.js.map +1 -1
  62. package/dist/metrics/prometheus-metrics.service.js +1 -2
  63. package/dist/metrics/prometheus-metrics.service.js.map +1 -1
  64. package/dist/middlewares/list-query/dtos/workflow.select.dto.js +1 -0
  65. package/dist/middlewares/list-query/dtos/workflow.select.dto.js.map +1 -1
  66. package/dist/modules/chat-hub/chat-hub-message.entity.d.ts +28 -0
  67. package/dist/modules/chat-hub/chat-hub-message.entity.js +124 -0
  68. package/dist/modules/chat-hub/chat-hub-message.entity.js.map +1 -0
  69. package/dist/modules/chat-hub/chat-hub-session.entity.d.ts +17 -0
  70. package/dist/modules/chat-hub/chat-hub-session.entity.js +72 -0
  71. package/dist/modules/chat-hub/chat-hub-session.entity.js.map +1 -0
  72. package/dist/modules/chat-hub/chat-hub.controller.d.ts +8 -5
  73. package/dist/modules/chat-hub/chat-hub.controller.js +151 -22
  74. package/dist/modules/chat-hub/chat-hub.controller.js.map +1 -1
  75. package/dist/modules/chat-hub/chat-hub.module.d.ts +1 -0
  76. package/dist/modules/chat-hub/chat-hub.module.js +6 -1
  77. package/dist/modules/chat-hub/chat-hub.module.js.map +1 -1
  78. package/dist/modules/chat-hub/chat-hub.service.d.ts +34 -13
  79. package/dist/modules/chat-hub/chat-hub.service.js +500 -315
  80. package/dist/modules/chat-hub/chat-hub.service.js.map +1 -1
  81. package/dist/modules/chat-hub/chat-hub.types.d.ts +25 -11
  82. package/dist/modules/chat-hub/chat-message.repository.d.ts +16 -0
  83. package/dist/modules/chat-hub/chat-message.repository.js +60 -0
  84. package/dist/modules/chat-hub/chat-message.repository.js.map +1 -0
  85. package/dist/modules/chat-hub/chat-session.repository.d.ts +12 -0
  86. package/dist/modules/chat-hub/chat-session.repository.js +77 -0
  87. package/dist/modules/chat-hub/chat-session.repository.js.map +1 -0
  88. package/dist/modules/chat-hub/context-limits.d.ts +3 -0
  89. package/dist/modules/chat-hub/context-limits.js +142 -0
  90. package/dist/modules/chat-hub/context-limits.js.map +1 -0
  91. package/dist/modules/community-packages/community-node-types.controller.js +2 -2
  92. package/dist/modules/community-packages/community-node-types.controller.js.map +1 -1
  93. package/dist/modules/mcp/mcp-api-key.service.d.ts +4 -1
  94. package/dist/modules/mcp/mcp-api-key.service.js +23 -8
  95. package/dist/modules/mcp/mcp-api-key.service.js.map +1 -1
  96. package/dist/modules/mcp/mcp.constants.d.ts +5 -0
  97. package/dist/modules/mcp/mcp.constants.js +9 -0
  98. package/dist/modules/mcp/mcp.constants.js.map +1 -0
  99. package/dist/modules/mcp/mcp.controller.d.ts +4 -1
  100. package/dist/modules/mcp/mcp.controller.js +56 -4
  101. package/dist/modules/mcp/mcp.controller.js.map +1 -1
  102. package/dist/modules/mcp/mcp.event-relay.d.ts +11 -0
  103. package/dist/modules/mcp/mcp.event-relay.js +61 -0
  104. package/dist/modules/mcp/mcp.event-relay.js.map +1 -0
  105. package/dist/modules/mcp/mcp.module.js +2 -0
  106. package/dist/modules/mcp/mcp.module.js.map +1 -1
  107. package/dist/modules/mcp/mcp.settings.controller.js +1 -1
  108. package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
  109. package/dist/modules/mcp/mcp.typeguards.d.ts +3 -0
  110. package/dist/modules/mcp/mcp.typeguards.js +19 -1
  111. package/dist/modules/mcp/mcp.typeguards.js.map +1 -1
  112. package/dist/modules/mcp/mcp.types.d.ts +24 -0
  113. package/dist/modules/mcp/mcp.utils.d.ts +8 -0
  114. package/dist/modules/mcp/mcp.utils.js +37 -0
  115. package/dist/modules/mcp/mcp.utils.js.map +1 -0
  116. package/dist/modules/provisioning.ee/constants.d.ts +1 -0
  117. package/dist/modules/provisioning.ee/constants.js +5 -0
  118. package/dist/modules/provisioning.ee/constants.js.map +1 -0
  119. package/dist/modules/provisioning.ee/provisioning.controller.ee.d.ts +10 -0
  120. package/dist/modules/provisioning.ee/provisioning.controller.ee.js +41 -0
  121. package/dist/modules/provisioning.ee/provisioning.controller.ee.js.map +1 -0
  122. package/dist/modules/provisioning.ee/provisioning.module.d.ts +4 -0
  123. package/dist/modules/provisioning.ee/provisioning.module.js +53 -0
  124. package/dist/modules/provisioning.ee/provisioning.module.js.map +1 -0
  125. package/dist/modules/provisioning.ee/provisioning.service.ee.d.ts +15 -0
  126. package/dist/modules/provisioning.ee/provisioning.service.ee.js +67 -0
  127. package/dist/modules/provisioning.ee/provisioning.service.ee.js.map +1 -0
  128. package/dist/posthog/index.js +0 -4
  129. package/dist/posthog/index.js.map +1 -1
  130. package/dist/public-api/v1/handlers/workflows/workflows.handler.js +12 -0
  131. package/dist/public-api/v1/handlers/workflows/workflows.handler.js.map +1 -1
  132. package/dist/scaling/pubsub/publisher.service.d.ts +3 -1
  133. package/dist/scaling/pubsub/publisher.service.js +7 -8
  134. package/dist/scaling/pubsub/publisher.service.js.map +1 -1
  135. package/dist/scaling/pubsub/subscriber.service.d.ts +3 -1
  136. package/dist/scaling/pubsub/subscriber.service.js +6 -4
  137. package/dist/scaling/pubsub/subscriber.service.js.map +1 -1
  138. package/dist/server.js +2 -2
  139. package/dist/server.js.map +1 -1
  140. package/dist/services/ai-workflow-builder.service.d.ts +3 -0
  141. package/dist/services/ai-workflow-builder.service.js +6 -0
  142. package/dist/services/ai-workflow-builder.service.js.map +1 -1
  143. package/dist/services/cache/cache.service.js +1 -5
  144. package/dist/services/cache/cache.service.js.map +1 -1
  145. package/dist/services/frontend.service.js +12 -3
  146. package/dist/services/frontend.service.js.map +1 -1
  147. package/dist/services/role.service.js +15 -3
  148. package/dist/services/role.service.js.map +1 -1
  149. package/dist/services/user.service.d.ts +3 -1
  150. package/dist/services/user.service.js +14 -5
  151. package/dist/services/user.service.js.map +1 -1
  152. package/dist/sso.ee/oidc/oidc.service.ee.js +6 -1
  153. package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
  154. package/dist/workflow-runner.d.ts +0 -2
  155. package/dist/workflow-runner.js +4 -9
  156. package/dist/workflow-runner.js.map +1 -1
  157. package/dist/workflows/workflow-execution.service.js +1 -5
  158. package/dist/workflows/workflow-execution.service.js.map +1 -1
  159. package/dist/workflows/workflow.service.js +24 -0
  160. package/dist/workflows/workflow.service.js.map +1 -1
  161. package/package.json +16 -16
@@ -0,0 +1,5 @@
1
+ export declare const USER_CONNECTED_TO_MCP_EVENT = "User connected to MCP server";
2
+ export declare const USER_CALLED_MCP_TOOL_EVENT = "User called mcp tool";
3
+ export declare const UNAUTHORIZED_ERROR_MESSAGE = "Unauthorized";
4
+ export declare const INTERNAL_SERVER_ERROR_MESSAGE = "Internal server error";
5
+ export declare const MCP_ACCESS_DISABLED_ERROR_MESSAGE = "MCP access is disabled";
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MCP_ACCESS_DISABLED_ERROR_MESSAGE = exports.INTERNAL_SERVER_ERROR_MESSAGE = exports.UNAUTHORIZED_ERROR_MESSAGE = exports.USER_CALLED_MCP_TOOL_EVENT = exports.USER_CONNECTED_TO_MCP_EVENT = void 0;
4
+ exports.USER_CONNECTED_TO_MCP_EVENT = 'User connected to MCP server';
5
+ exports.USER_CALLED_MCP_TOOL_EVENT = 'User called mcp tool';
6
+ exports.UNAUTHORIZED_ERROR_MESSAGE = 'Unauthorized';
7
+ exports.INTERNAL_SERVER_ERROR_MESSAGE = 'Internal server error';
8
+ exports.MCP_ACCESS_DISABLED_ERROR_MESSAGE = 'MCP access is disabled';
9
+ //# sourceMappingURL=mcp.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.constants.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG,8BAA8B,CAAC;AAC7D,QAAA,0BAA0B,GAAG,sBAAsB,CAAC;AAEpD,QAAA,0BAA0B,GAAG,cAAc,CAAC;AAC5C,QAAA,6BAA6B,GAAG,uBAAuB,CAAC;AACxD,QAAA,iCAAiC,GAAG,wBAAwB,CAAC"}
@@ -3,6 +3,7 @@ import type { Response } from 'express';
3
3
  import { ErrorReporter } from 'n8n-core';
4
4
  import { McpService } from './mcp.service';
5
5
  import { McpSettingsService } from './mcp.settings.service';
6
+ import { Telemetry } from '../../telemetry';
6
7
  export type FlushableResponse = Response & {
7
8
  flush: () => void;
8
9
  };
@@ -10,6 +11,8 @@ export declare class McpController {
10
11
  private readonly errorReporter;
11
12
  private readonly mcpService;
12
13
  private readonly mcpSettingsService;
13
- constructor(errorReporter: ErrorReporter, mcpService: McpService, mcpSettingsService: McpSettingsService);
14
+ private readonly telemetry;
15
+ constructor(errorReporter: ErrorReporter, mcpService: McpService, mcpSettingsService: McpSettingsService, telemetry: Telemetry);
14
16
  build(req: AuthenticatedRequest, res: FlushableResponse): Promise<void>;
17
+ private trackMCPEvent;
15
18
  }
@@ -15,19 +15,40 @@ const decorators_1 = require("@n8n/decorators");
15
15
  const di_1 = require("@n8n/di");
16
16
  const n8n_core_1 = require("n8n-core");
17
17
  const mcp_api_key_service_1 = require("./mcp-api-key.service");
18
+ const mcp_constants_1 = require("./mcp.constants");
18
19
  const mcp_service_1 = require("./mcp.service");
19
20
  const mcp_settings_service_1 = require("./mcp.settings.service");
21
+ const mcp_typeguards_1 = require("./mcp.typeguards");
22
+ const mcp_utils_1 = require("./mcp.utils");
23
+ const telemetry_1 = require("../../telemetry");
20
24
  const getAuthMiddleware = () => di_1.Container.get(mcp_api_key_service_1.McpServerApiKeyService).getAuthMiddleware();
21
25
  let McpController = class McpController {
22
- constructor(errorReporter, mcpService, mcpSettingsService) {
26
+ constructor(errorReporter, mcpService, mcpSettingsService, telemetry) {
23
27
  this.errorReporter = errorReporter;
24
28
  this.mcpService = mcpService;
25
29
  this.mcpSettingsService = mcpSettingsService;
30
+ this.telemetry = telemetry;
26
31
  }
27
32
  async build(req, res) {
33
+ const body = req.body;
34
+ const isInitializationRequest = (0, mcp_typeguards_1.isJSONRPCRequest)(body) ? body.method === 'initialize' : false;
35
+ const isToolCallRequest = (0, mcp_typeguards_1.isJSONRPCRequest)(body) ? body.method === 'tools/call' : false;
36
+ const clientInfo = (0, mcp_utils_1.getClientInfo)(req);
37
+ const telemetryPayload = {
38
+ user_id: req.user.id,
39
+ client_name: clientInfo?.name,
40
+ client_version: clientInfo?.version,
41
+ };
28
42
  const enabled = await this.mcpSettingsService.getEnabled();
29
43
  if (!enabled) {
30
- res.status(403).json({ message: 'MCP access is disabled' });
44
+ if (isInitializationRequest) {
45
+ this.trackMCPEvent('connected', {
46
+ ...telemetryPayload,
47
+ mcp_connection_status: 'error',
48
+ error: mcp_constants_1.MCP_ACCESS_DISABLED_ERROR_MESSAGE,
49
+ });
50
+ }
51
+ res.status(403).json({ message: mcp_constants_1.MCP_ACCESS_DISABLED_ERROR_MESSAGE });
31
52
  return;
32
53
  }
33
54
  try {
@@ -41,21 +62,51 @@ let McpController = class McpController {
41
62
  });
42
63
  await server.connect(transport);
43
64
  await transport.handleRequest(req, res, req.body);
65
+ if (isInitializationRequest) {
66
+ this.trackMCPEvent('connected', {
67
+ ...telemetryPayload,
68
+ mcp_connection_status: 'success',
69
+ });
70
+ }
71
+ else if (isToolCallRequest) {
72
+ const toolName = (0, mcp_utils_1.getToolName)(body);
73
+ const parameters = (0, mcp_utils_1.getToolArguments)(body);
74
+ this.trackMCPEvent('tool_call', {
75
+ user_id: req.user.id,
76
+ tool_name: toolName,
77
+ parameters,
78
+ });
79
+ }
44
80
  }
45
81
  catch (error) {
46
82
  this.errorReporter.error(error);
83
+ if (isInitializationRequest) {
84
+ this.trackMCPEvent('connected', {
85
+ ...telemetryPayload,
86
+ mcp_connection_status: 'error',
87
+ error: error instanceof Error ? error.message : String(error),
88
+ });
89
+ }
47
90
  if (!res.headersSent) {
48
91
  res.status(500).json({
49
92
  jsonrpc: '2.0',
50
93
  error: {
51
94
  code: -32603,
52
- message: 'Internal server error',
95
+ message: mcp_constants_1.INTERNAL_SERVER_ERROR_MESSAGE,
53
96
  },
54
97
  id: null,
55
98
  });
56
99
  }
57
100
  }
58
101
  }
102
+ trackMCPEvent(type, payload) {
103
+ if (type === 'connected') {
104
+ this.telemetry.track(mcp_constants_1.USER_CONNECTED_TO_MCP_EVENT, payload);
105
+ }
106
+ else if (type === 'tool_call') {
107
+ this.telemetry.track(mcp_constants_1.USER_CALLED_MCP_TOOL_EVENT, payload);
108
+ }
109
+ }
59
110
  };
60
111
  exports.McpController = McpController;
61
112
  __decorate([
@@ -73,6 +124,7 @@ exports.McpController = McpController = __decorate([
73
124
  (0, decorators_1.RootLevelController)('/mcp-server'),
74
125
  __metadata("design:paramtypes", [n8n_core_1.ErrorReporter,
75
126
  mcp_service_1.McpService,
76
- mcp_settings_service_1.McpSettingsService])
127
+ mcp_settings_service_1.McpSettingsService,
128
+ telemetry_1.Telemetry])
77
129
  ], McpController);
78
130
  //# sourceMappingURL=mcp.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,0FAAmG;AAEnG,gDAA4D;AAC5D,gCAAoC;AAEpC,uCAAyC;AAEzC,+DAA+D;AAC/D,+CAA2C;AAC3C,iEAA4D;AAI5D,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,cAAS,CAAC,GAAG,CAAC,4CAAsB,CAAC,CAAC,iBAAiB,EAAE,CAAC;AAGnF,IAAM,aAAa,GAAnB,MAAM,aAAa;IACzB,YACkB,aAA4B,EAC5B,UAAsB,EACtB,kBAAsC;QAFtC,kBAAa,GAAb,aAAa,CAAe;QAC5B,eAAU,GAAV,UAAU,CAAY;QACtB,uBAAkB,GAAlB,kBAAkB,CAAoB;IACrD,CAAC;IAQE,AAAN,KAAK,CAAC,KAAK,CAAC,GAAyB,EAAE,GAAsB;QAE5D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,CAAC;QAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;YAC5D,OAAO;QACR,CAAC;QAID,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,SAAS,GAAkC,IAAI,iDAA6B,CAAC;gBAClF,kBAAkB,EAAE,SAAS;aAC7B,CAAC,CAAC;YACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACpB,KAAK,SAAS,CAAC,KAAK,EAAE,CAAC;gBACvB,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACtB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBACpB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;wBACN,IAAI,EAAE,CAAC,KAAK;wBACZ,OAAO,EAAE,uBAAuB;qBAChC;oBACD,EAAE,EAAE,IAAI;iBACR,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;CACD,CAAA;AAhDY,sCAAa;AAanB;IANL,IAAA,iBAAI,EAAC,OAAO,EAAE;QACd,SAAS,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;QACzB,WAAW,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAClC,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,IAAI;KACnB,CAAC;;;;0CAmCD;wBA/CW,aAAa;IADzB,IAAA,gCAAmB,EAAC,aAAa,CAAC;qCAGD,wBAAa;QAChB,wBAAU;QACF,yCAAkB;GAJ5C,aAAa,CAgDzB"}
1
+ {"version":3,"file":"mcp.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Logger } from '@n8n/backend-common';
2
+ import { WorkflowRepository } from '@n8n/db';
3
+ import { EventService } from '../../events/event.service';
4
+ import { EventRelay } from '../../events/relays/event-relay';
5
+ export declare class McpEventRelay extends EventRelay {
6
+ private readonly workflowRepository;
7
+ private readonly logger;
8
+ constructor(eventService: EventService, workflowRepository: WorkflowRepository, logger: Logger);
9
+ init(): void;
10
+ private onWorkflowDeactivated;
11
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.McpEventRelay = void 0;
13
+ const backend_common_1 = require("@n8n/backend-common");
14
+ const db_1 = require("@n8n/db");
15
+ const di_1 = require("@n8n/di");
16
+ const event_service_1 = require("../../events/event.service");
17
+ const event_relay_1 = require("../../events/relays/event-relay");
18
+ let McpEventRelay = class McpEventRelay extends event_relay_1.EventRelay {
19
+ constructor(eventService, workflowRepository, logger) {
20
+ super(eventService);
21
+ this.workflowRepository = workflowRepository;
22
+ this.logger = logger;
23
+ }
24
+ init() {
25
+ this.setupListeners({
26
+ 'workflow-deactivated': async (event) => await this.onWorkflowDeactivated(event),
27
+ });
28
+ }
29
+ async onWorkflowDeactivated(event) {
30
+ const { workflow, workflowId } = event;
31
+ if (workflow.settings?.availableInMCP === true) {
32
+ try {
33
+ const updatedSettings = {
34
+ ...workflow.settings,
35
+ availableInMCP: false,
36
+ };
37
+ await this.workflowRepository.update(workflowId, {
38
+ settings: updatedSettings,
39
+ });
40
+ this.logger.info('Disabled MCP access for deactivated workflow', {
41
+ workflowId,
42
+ workflowName: workflow.name,
43
+ });
44
+ }
45
+ catch (error) {
46
+ this.logger.error('Failed to disable MCP access for deactivated workflow', {
47
+ workflowId,
48
+ error: error instanceof Error ? error.message : String(error),
49
+ });
50
+ }
51
+ }
52
+ }
53
+ };
54
+ exports.McpEventRelay = McpEventRelay;
55
+ exports.McpEventRelay = McpEventRelay = __decorate([
56
+ (0, di_1.Service)(),
57
+ __metadata("design:paramtypes", [event_service_1.EventService,
58
+ db_1.WorkflowRepository,
59
+ backend_common_1.Logger])
60
+ ], McpEventRelay);
61
+ //# sourceMappingURL=mcp.event-relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.event-relay.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.event-relay.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,gCAA6C;AAC7C,gCAAkC;AAElC,0DAAsD;AACtD,6DAAyD;AAOlD,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,wBAAU;IAC5C,YACC,YAA0B,EACT,kBAAsC,EACtC,MAAc;QAE/B,KAAK,CAAC,YAAY,CAAC,CAAC;QAHH,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,WAAM,GAAN,MAAM,CAAQ;IAGhC,CAAC;IAED,IAAI;QACH,IAAI,CAAC,cAAc,CAAC;YACnB,sBAAsB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;SAChF,CAAC,CAAC;IACJ,CAAC;IAMO,KAAK,CAAC,qBAAqB,CAAC,KAA4C;QAC/E,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAGvC,IAAI,QAAQ,CAAC,QAAQ,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC;gBAEJ,MAAM,eAAe,GAAG;oBACvB,GAAG,QAAQ,CAAC,QAAQ;oBACpB,cAAc,EAAE,KAAK;iBACrB,CAAC;gBAEF,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE;oBAChD,QAAQ,EAAE,eAAe;iBACzB,CAAC,CAAC;gBAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE;oBAChE,UAAU;oBACV,YAAY,EAAE,QAAQ,CAAC,IAAI;iBAC3B,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;oBAC1E,UAAU;oBACV,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC7D,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;IACF,CAAC;CACD,CAAA;AA/CY,sCAAa;wBAAb,aAAa;IADzB,IAAA,YAAO,GAAE;qCAGM,4BAAY;QACW,uBAAkB;QAC9B,uBAAM;GAJpB,aAAa,CA+CzB"}
@@ -49,6 +49,8 @@ let McpModule = class McpModule {
49
49
  async init() {
50
50
  await Promise.resolve().then(() => __importStar(require('./mcp.controller')));
51
51
  await Promise.resolve().then(() => __importStar(require('./mcp.settings.controller')));
52
+ const { McpEventRelay } = await Promise.resolve().then(() => __importStar(require('./mcp.event-relay')));
53
+ di_1.Container.get(McpEventRelay).init();
52
54
  }
53
55
  async settings() {
54
56
  const { McpSettingsService } = await Promise.resolve().then(() => __importStar(require('./mcp.settings.service')));
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAA4D;AAC5D,gCAAoC;AAQ7B,IAAM,SAAS,GAAf,MAAM,SAAS;IACrB,KAAK,CAAC,IAAI;QACT,wDAAa,kBAAkB,GAAC,CAAC;QACjC,wDAAa,2BAA2B,GAAC,CAAC;IAC3C,CAAC;IAOD,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,kBAAkB,EAAE,GAAG,wDAAa,wBAAwB,GAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,MAAM,cAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC;QAC9E,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC7B,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,KAAI,CAAC;CACnB,CAAA;AAnBY,8BAAS;AAkBf;IADL,IAAA,uBAAU,GAAE;;;;yCACM;oBAlBP,SAAS;IADrB,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GAClB,SAAS,CAmBrB"}
1
+ {"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAA4D;AAC5D,gCAAoC;AAQ7B,IAAM,SAAS,GAAf,MAAM,SAAS;IACrB,KAAK,CAAC,IAAI;QACT,wDAAa,kBAAkB,GAAC,CAAC;QACjC,wDAAa,2BAA2B,GAAC,CAAC;QAG1C,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,mBAAmB,GAAC,CAAC;QAC5D,cAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAOD,KAAK,CAAC,QAAQ;QACb,MAAM,EAAE,kBAAkB,EAAE,GAAG,wDAAa,wBAAwB,GAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,MAAM,cAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,UAAU,EAAE,CAAC;QAC9E,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC7B,CAAC;IAGK,AAAN,KAAK,CAAC,QAAQ,KAAI,CAAC;CACnB,CAAA;AAvBY,8BAAS;AAsBf;IADL,IAAA,uBAAU,GAAE;;;;yCACM;oBAtBP,SAAS;IADrB,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;GAClB,SAAS,CAuBrB"}
@@ -64,7 +64,7 @@ let McpSettingsController = class McpSettingsController {
64
64
  });
65
65
  throw new not_found_error_1.NotFoundError('Could not load the workflow - you can only access workflows available to you');
66
66
  }
67
- if (!workflow.active) {
67
+ if (!workflow.active && dto.availableInMCP) {
68
68
  throw new bad_request_error_1.BadRequestError('MCP access can only be set for active workflows');
69
69
  }
70
70
  const hasWebhooks = workflow.nodes.some((node) => node.type === n8n_workflow_1.WEBHOOK_NODE_TYPE && node.disabled !== true);
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.settings.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.settings.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp.settings.controller.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.settings.controller.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { JSONRPCRequest } from './mcp.types';
1
2
  type UnknownRecord = Record<string, unknown>;
2
3
  export type HttpHeaderAuthDecryptedData = {
3
4
  name: string;
@@ -6,6 +7,7 @@ export type HttpHeaderAuthDecryptedData = {
6
7
  export type WithDecryptedData<T> = UnknownRecord & {
7
8
  data: T;
8
9
  };
10
+ export declare function isRecord(value: unknown): value is UnknownRecord;
9
11
  export declare function hasHttpHeaderAuthDecryptedData(value: unknown): value is WithDecryptedData<HttpHeaderAuthDecryptedData>;
10
12
  export type JwtPassphraseDecryptedData = {
11
13
  keyType?: 'passphrase' | string;
@@ -18,4 +20,5 @@ export type JwtPemKeyDecryptedData = {
18
20
  };
19
21
  export declare function hasJwtSecretDecryptedData(value: unknown): value is WithDecryptedData<JwtPassphraseDecryptedData>;
20
22
  export declare function hasJwtPemKeyDecryptedData(value: unknown): value is WithDecryptedData<JwtPemKeyDecryptedData>;
23
+ export declare function isJSONRPCRequest(value: unknown): value is JSONRPCRequest;
21
24
  export {};
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRecord = isRecord;
3
4
  exports.hasHttpHeaderAuthDecryptedData = hasHttpHeaderAuthDecryptedData;
4
5
  exports.hasJwtSecretDecryptedData = hasJwtSecretDecryptedData;
5
6
  exports.hasJwtPemKeyDecryptedData = hasJwtPemKeyDecryptedData;
7
+ exports.isJSONRPCRequest = isJSONRPCRequest;
6
8
  function isRecord(value) {
7
- return typeof value === 'object' && value !== null;
9
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
8
10
  }
9
11
  function hasHttpHeaderAuthDecryptedData(value) {
10
12
  if (!isRecord(value))
@@ -38,4 +40,20 @@ function hasJwtPemKeyDecryptedData(value) {
38
40
  return true;
39
41
  return typeof data.privateKey === 'string' || typeof data.publicKey === 'string';
40
42
  }
43
+ function isJSONRPCRequest(value) {
44
+ if (!isRecord(value))
45
+ return false;
46
+ if ('jsonrpc' in value && typeof value.jsonrpc !== 'string')
47
+ return false;
48
+ if ('method' in value && typeof value.method !== 'string')
49
+ return false;
50
+ if ('params' in value && value.params !== undefined && !isRecord(value.params))
51
+ return false;
52
+ if ('id' in value &&
53
+ value.id !== null &&
54
+ typeof value.id !== 'string' &&
55
+ typeof value.id !== 'number')
56
+ return false;
57
+ return true;
58
+ }
41
59
  //# sourceMappingURL=mcp.typeguards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.typeguards.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.typeguards.ts"],"names":[],"mappings":";;AAqBA,wEASC;AAcD,8DASC;AAED,8DAUC;AA5DD,SAAS,QAAQ,CAAC,KAAc;IAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACpD,CAAC;AAcD,SAAgB,8BAA8B,CAC7C,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AACtC,CAAC;AAcD,SAAgB,yBAAyB,CACxC,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AACxC,CAAC;AAED,SAAgB,yBAAyB,CACxC,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"mcp.typeguards.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.typeguards.ts"],"names":[],"mappings":";;AAcA,4BAEC;AAOD,wEASC;AAcD,8DASC;AAED,8DAUC;AAQD,4CAkBC;AA/ED,SAAgB,QAAQ,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAOD,SAAgB,8BAA8B,CAC7C,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AACtC,CAAC;AAcD,SAAgB,yBAAyB,CACxC,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC;AACxC,CAAC;AAED,SAAgB,yBAAyB,CACxC,KAAc;IAEd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,GAAG,GAAG,KAAK,CAAC;IAClB,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC3B,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC;AAClF,CAAC;AAQD,SAAgB,gBAAgB,CAAC,KAAc;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEnC,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE1E,IAAI,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAExE,IAAI,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IAE7F,IACC,IAAI,IAAI,KAAK;QACb,KAAK,CAAC,EAAE,KAAK,IAAI;QACjB,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5B,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAE5B,OAAO,KAAK,CAAC;IAEd,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -35,3 +35,27 @@ export type SearchWorkflowsResult = {
35
35
  export type WorkflowDetailsResult = z.infer<WorkflowDetailsOutputSchema>;
36
36
  export type WorkflowDetailsWorkflow = WorkflowDetailsResult['workflow'];
37
37
  export type WorkflowDetailsNode = WorkflowDetailsWorkflow['nodes'][number];
38
+ export type JSONRPCRequest = {
39
+ jsonrpc?: string;
40
+ method?: string;
41
+ params?: {
42
+ clientInfo?: {
43
+ name?: string;
44
+ version?: string;
45
+ };
46
+ [key: string]: unknown;
47
+ };
48
+ id?: string | number | null;
49
+ };
50
+ export type UserConnectedToMCPEventPayload = {
51
+ user_id?: string;
52
+ client_name?: string;
53
+ client_version?: string;
54
+ mcp_connection_status: 'success' | 'error';
55
+ error?: string;
56
+ };
57
+ export type UserCalledMCPToolEventPayload = {
58
+ user_id?: string;
59
+ tool_name: string;
60
+ parameters?: Record<string, unknown>;
61
+ };
@@ -0,0 +1,8 @@
1
+ import type { AuthenticatedRequest } from '@n8n/db';
2
+ import type { Request } from 'express';
3
+ export declare const getClientInfo: (req: Request | AuthenticatedRequest) => {
4
+ name?: string;
5
+ version?: string;
6
+ } | undefined;
7
+ export declare const getToolName: (body: unknown) => string;
8
+ export declare const getToolArguments: (body: unknown) => Record<string, unknown>;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getToolArguments = exports.getToolName = exports.getClientInfo = void 0;
4
+ const mcp_typeguards_1 = require("./mcp.typeguards");
5
+ const getClientInfo = (req) => {
6
+ let clientInfo;
7
+ if ((0, mcp_typeguards_1.isJSONRPCRequest)(req.body) && req.body.params?.clientInfo) {
8
+ clientInfo = req.body.params.clientInfo;
9
+ }
10
+ return clientInfo;
11
+ };
12
+ exports.getClientInfo = getClientInfo;
13
+ const getToolName = (body) => {
14
+ if (!(0, mcp_typeguards_1.isJSONRPCRequest)(body))
15
+ return 'unknown';
16
+ if (!body.params)
17
+ return 'unknown';
18
+ const { name } = body.params;
19
+ if (typeof name === 'string') {
20
+ return name;
21
+ }
22
+ return 'unknown';
23
+ };
24
+ exports.getToolName = getToolName;
25
+ const getToolArguments = (body) => {
26
+ if (!(0, mcp_typeguards_1.isJSONRPCRequest)(body))
27
+ return {};
28
+ if (!body.params)
29
+ return {};
30
+ const { arguments: args } = body.params;
31
+ if ((0, mcp_typeguards_1.isRecord)(args)) {
32
+ return args;
33
+ }
34
+ return {};
35
+ };
36
+ exports.getToolArguments = getToolArguments;
37
+ //# sourceMappingURL=mcp.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.utils.js","sourceRoot":"","sources":["../../../src/modules/mcp/mcp.utils.ts"],"names":[],"mappings":";;;AAGA,qDAA8D;AAEvD,MAAM,aAAa,GAAG,CAAC,GAAmC,EAAE,EAAE;IACpE,IAAI,UAA2D,CAAC;IAChE,IAAI,IAAA,iCAAgB,EAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;QAC/D,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IACzC,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AANW,QAAA,aAAa,iBAMxB;AAOK,MAAM,WAAW,GAAG,CAAC,IAAa,EAAU,EAAE;IACpD,IAAI,CAAC,IAAA,iCAAgB,EAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAEnC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC,CAAC;AAVW,QAAA,WAAW,eAUtB;AAOK,MAAM,gBAAgB,GAAG,CAAC,IAAa,EAA2B,EAAE;IAC1E,IAAI,CAAC,IAAA,iCAAgB,EAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAE5B,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;IACxC,IAAI,IAAA,yBAAQ,EAAC,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,EAAE,CAAC;AACX,CAAC,CAAC;AAVW,QAAA,gBAAgB,oBAU3B"}
@@ -0,0 +1 @@
1
+ export declare const PROVISIONING_PREFERENCES_DB_KEY = "features.provisioning";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROVISIONING_PREFERENCES_DB_KEY = void 0;
4
+ exports.PROVISIONING_PREFERENCES_DB_KEY = 'features.provisioning';
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/modules/provisioning.ee/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,+BAA+B,GAAG,uBAAuB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AuthenticatedRequest } from '@n8n/db';
2
+ import { LicenseState } from '@n8n/backend-common';
3
+ import { ProvisioningService } from './provisioning.service.ee';
4
+ import { Response } from 'express';
5
+ export declare class ProvisioningController {
6
+ private readonly provisioningService;
7
+ private readonly licenseState;
8
+ constructor(provisioningService: ProvisioningService, licenseState: LicenseState);
9
+ getConfig(_req: AuthenticatedRequest, res: Response): Promise<Response<any, Record<string, any>> | import("@n8n/api-types").ProvisioningConfigDto>;
10
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ProvisioningController = void 0;
13
+ const decorators_1 = require("@n8n/decorators");
14
+ const backend_common_1 = require("@n8n/backend-common");
15
+ const provisioning_service_ee_1 = require("./provisioning.service.ee");
16
+ let ProvisioningController = class ProvisioningController {
17
+ constructor(provisioningService, licenseState) {
18
+ this.provisioningService = provisioningService;
19
+ this.licenseState = licenseState;
20
+ }
21
+ async getConfig(_req, res) {
22
+ if (!this.licenseState.isProvisioningLicensed()) {
23
+ return res.status(403).json({ message: 'Provisioning is not licensed' });
24
+ }
25
+ return await this.provisioningService.getConfig();
26
+ }
27
+ };
28
+ exports.ProvisioningController = ProvisioningController;
29
+ __decorate([
30
+ (0, decorators_1.Get)('/config'),
31
+ (0, decorators_1.GlobalScope)('provisioning:manage'),
32
+ __metadata("design:type", Function),
33
+ __metadata("design:paramtypes", [Object, Object]),
34
+ __metadata("design:returntype", Promise)
35
+ ], ProvisioningController.prototype, "getConfig", null);
36
+ exports.ProvisioningController = ProvisioningController = __decorate([
37
+ (0, decorators_1.RestController)('/sso/provisioning'),
38
+ __metadata("design:paramtypes", [provisioning_service_ee_1.ProvisioningService,
39
+ backend_common_1.LicenseState])
40
+ ], ProvisioningController);
41
+ //# sourceMappingURL=provisioning.controller.ee.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioning.controller.ee.js","sourceRoot":"","sources":["../../../src/modules/provisioning.ee/provisioning.controller.ee.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,gDAAmE;AACnE,wDAAmD;AACnD,uEAAgE;AAIzD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAClC,YACkB,mBAAwC,EACxC,YAA0B;QAD1B,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,iBAAY,GAAZ,YAAY,CAAc;IACzC,CAAC;IAIE,AAAN,KAAK,CAAC,SAAS,CAAC,IAA0B,EAAE,GAAa;QACxD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,EAAE,CAAC;YACjD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAC;IACnD,CAAC;CACD,CAAA;AAfY,wDAAsB;AAQ5B;IAFL,IAAA,gBAAG,EAAC,SAAS,CAAC;IACd,IAAA,wBAAW,EAAC,qBAAqB,CAAC;;;;uDAOlC;iCAdW,sBAAsB;IADlC,IAAA,2BAAc,EAAC,mBAAmB,CAAC;qCAGI,6CAAmB;QAC1B,6BAAY;GAHhC,sBAAsB,CAelC"}
@@ -0,0 +1,4 @@
1
+ import type { ModuleInterface } from '@n8n/decorators';
2
+ export declare class ProvisioningModule implements ModuleInterface {
3
+ init(): Promise<void>;
4
+ }
@@ -0,0 +1,53 @@
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.ProvisioningModule = void 0;
43
+ const decorators_1 = require("@n8n/decorators");
44
+ let ProvisioningModule = class ProvisioningModule {
45
+ async init() {
46
+ await Promise.resolve().then(() => __importStar(require('./provisioning.controller.ee')));
47
+ }
48
+ };
49
+ exports.ProvisioningModule = ProvisioningModule;
50
+ exports.ProvisioningModule = ProvisioningModule = __decorate([
51
+ (0, decorators_1.BackendModule)({ name: 'provisioning', licenseFlag: ['feat:oidc', 'feat:saml', 'feat:ldap'] })
52
+ ], ProvisioningModule);
53
+ //# sourceMappingURL=provisioning.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provisioning.module.js","sourceRoot":"","sources":["../../../src/modules/provisioning.ee/provisioning.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAgD;AAGzC,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC9B,KAAK,CAAC,IAAI;QACT,wDAAa,8BAA8B,GAAC,CAAC;IAC9C,CAAC;CACD,CAAA;AAJY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,0BAAa,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC;GACjF,kBAAkB,CAI9B"}
@@ -0,0 +1,15 @@
1
+ import { ProvisioningConfigDto } from '@n8n/api-types';
2
+ import { Logger } from '@n8n/backend-common';
3
+ import { GlobalConfig } from '@n8n/config';
4
+ import { SettingsRepository } from '@n8n/db';
5
+ export declare class ProvisioningService {
6
+ private readonly globalConfig;
7
+ private readonly settingsRepository;
8
+ private readonly logger;
9
+ private provisioningConfig;
10
+ constructor(globalConfig: GlobalConfig, settingsRepository: SettingsRepository, logger: Logger);
11
+ init(): Promise<void>;
12
+ getConfig(): Promise<ProvisioningConfigDto>;
13
+ loadConfigurationFromDatabase(): Promise<ProvisioningConfigDto | undefined>;
14
+ loadConfig(): Promise<ProvisioningConfigDto>;
15
+ }