n8n-mcp 2.27.1 → 2.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +6 -3
  2. package/dist/mcp/handlers-n8n-manager.d.ts +2 -1
  3. package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
  4. package/dist/mcp/handlers-n8n-manager.js +212 -62
  5. package/dist/mcp/handlers-n8n-manager.js.map +1 -1
  6. package/dist/mcp/server.js +3 -3
  7. package/dist/mcp/server.js.map +1 -1
  8. package/dist/mcp/tool-docs/index.js +1 -1
  9. package/dist/mcp/tool-docs/index.js.map +1 -1
  10. package/dist/mcp/tool-docs/workflow_management/index.d.ts +1 -1
  11. package/dist/mcp/tool-docs/workflow_management/index.d.ts.map +1 -1
  12. package/dist/mcp/tool-docs/workflow_management/index.js +3 -3
  13. package/dist/mcp/tool-docs/workflow_management/index.js.map +1 -1
  14. package/dist/mcp/tool-docs/workflow_management/n8n-create-workflow.js +2 -2
  15. package/dist/mcp/tool-docs/workflow_management/n8n-create-workflow.js.map +1 -1
  16. package/dist/mcp/tool-docs/workflow_management/n8n-deploy-template.d.ts.map +1 -1
  17. package/dist/mcp/tool-docs/workflow_management/n8n-deploy-template.js +16 -14
  18. package/dist/mcp/tool-docs/workflow_management/n8n-deploy-template.js.map +1 -1
  19. package/dist/mcp/tool-docs/workflow_management/n8n-executions.js +1 -1
  20. package/dist/mcp/tool-docs/workflow_management/n8n-executions.js.map +1 -1
  21. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.d.ts +3 -0
  22. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.d.ts.map +1 -0
  23. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.js +140 -0
  24. package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.js.map +1 -0
  25. package/dist/mcp/tools-documentation.js +1 -1
  26. package/dist/mcp/tools-n8n-manager.d.ts.map +1 -1
  27. package/dist/mcp/tools-n8n-manager.js +32 -11
  28. package/dist/mcp/tools-n8n-manager.js.map +1 -1
  29. package/dist/services/expression-validator.js +3 -5
  30. package/dist/services/expression-validator.js.map +1 -1
  31. package/dist/triggers/handlers/base-handler.d.ts +21 -0
  32. package/dist/triggers/handlers/base-handler.d.ts.map +1 -0
  33. package/dist/triggers/handlers/base-handler.js +60 -0
  34. package/dist/triggers/handlers/base-handler.js.map +1 -0
  35. package/dist/triggers/handlers/chat-handler.d.ts +38 -0
  36. package/dist/triggers/handlers/chat-handler.d.ts.map +1 -0
  37. package/dist/triggers/handlers/chat-handler.js +129 -0
  38. package/dist/triggers/handlers/chat-handler.js.map +1 -0
  39. package/dist/triggers/handlers/form-handler.d.ts +35 -0
  40. package/dist/triggers/handlers/form-handler.d.ts.map +1 -0
  41. package/dist/triggers/handlers/form-handler.js +113 -0
  42. package/dist/triggers/handlers/form-handler.js.map +1 -0
  43. package/dist/triggers/handlers/webhook-handler.d.ts +38 -0
  44. package/dist/triggers/handlers/webhook-handler.d.ts.map +1 -0
  45. package/dist/triggers/handlers/webhook-handler.js +115 -0
  46. package/dist/triggers/handlers/webhook-handler.js.map +1 -0
  47. package/dist/triggers/index.d.ts +5 -0
  48. package/dist/triggers/index.d.ts.map +1 -0
  49. package/dist/triggers/index.js +14 -0
  50. package/dist/triggers/index.js.map +1 -0
  51. package/dist/triggers/trigger-detector.d.ts +6 -0
  52. package/dist/triggers/trigger-detector.d.ts.map +1 -0
  53. package/dist/triggers/trigger-detector.js +191 -0
  54. package/dist/triggers/trigger-detector.js.map +1 -0
  55. package/dist/triggers/trigger-registry.d.ts +18 -0
  56. package/dist/triggers/trigger-registry.d.ts.map +1 -0
  57. package/dist/triggers/trigger-registry.js +87 -0
  58. package/dist/triggers/trigger-registry.js.map +1 -0
  59. package/dist/triggers/types.d.ts +76 -0
  60. package/dist/triggers/types.d.ts.map +1 -0
  61. package/dist/triggers/types.js +3 -0
  62. package/dist/triggers/types.js.map +1 -0
  63. package/package.json +1 -1
  64. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.d.ts +0 -3
  65. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.d.ts.map +0 -1
  66. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.js +0 -120
  67. package/dist/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.js.map +0 -1
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectTriggerFromWorkflow = detectTriggerFromWorkflow;
4
+ exports.buildTriggerUrl = buildTriggerUrl;
5
+ exports.describeTrigger = describeTrigger;
6
+ const node_type_utils_1 = require("../utils/node-type-utils");
7
+ const WEBHOOK_PATTERNS = [
8
+ 'webhook',
9
+ 'webhooktrigger',
10
+ ];
11
+ const FORM_PATTERNS = [
12
+ 'formtrigger',
13
+ 'form',
14
+ ];
15
+ const CHAT_PATTERNS = [
16
+ 'chattrigger',
17
+ ];
18
+ function detectTriggerFromWorkflow(workflow) {
19
+ if (!workflow.nodes || workflow.nodes.length === 0) {
20
+ return {
21
+ detected: false,
22
+ reason: 'Workflow has no nodes',
23
+ };
24
+ }
25
+ const triggerNodes = workflow.nodes.filter(node => !node.disabled && isTriggerNodeType(node.type));
26
+ if (triggerNodes.length === 0) {
27
+ return {
28
+ detected: false,
29
+ reason: 'No trigger nodes found in workflow',
30
+ };
31
+ }
32
+ for (const node of triggerNodes) {
33
+ const webhookTrigger = detectWebhookTrigger(node);
34
+ if (webhookTrigger) {
35
+ return {
36
+ detected: true,
37
+ trigger: webhookTrigger,
38
+ };
39
+ }
40
+ }
41
+ for (const node of triggerNodes) {
42
+ const chatTrigger = detectChatTrigger(node);
43
+ if (chatTrigger) {
44
+ return {
45
+ detected: true,
46
+ trigger: chatTrigger,
47
+ };
48
+ }
49
+ }
50
+ for (const node of triggerNodes) {
51
+ const formTrigger = detectFormTrigger(node);
52
+ if (formTrigger) {
53
+ return {
54
+ detected: true,
55
+ trigger: formTrigger,
56
+ };
57
+ }
58
+ }
59
+ return {
60
+ detected: false,
61
+ reason: `Workflow has trigger nodes but none support external triggering (found: ${triggerNodes.map(n => n.type).join(', ')}). Only webhook, form, and chat triggers can be triggered via the API.`,
62
+ };
63
+ }
64
+ function isTriggerNodeType(nodeType) {
65
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(nodeType).toLowerCase();
66
+ return (normalized.includes('trigger') ||
67
+ normalized.includes('webhook') ||
68
+ normalized === 'nodes-base.start');
69
+ }
70
+ function detectWebhookTrigger(node) {
71
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(node.type).toLowerCase();
72
+ const nodeName = normalized.split('.').pop() || '';
73
+ const isWebhook = WEBHOOK_PATTERNS.some(pattern => nodeName === pattern || nodeName.includes(pattern));
74
+ if (!isWebhook) {
75
+ return null;
76
+ }
77
+ const params = node.parameters || {};
78
+ const webhookPath = extractWebhookPath(params, node.id);
79
+ const httpMethod = extractHttpMethod(params);
80
+ return {
81
+ type: 'webhook',
82
+ node,
83
+ webhookPath,
84
+ httpMethod,
85
+ };
86
+ }
87
+ function detectFormTrigger(node) {
88
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(node.type).toLowerCase();
89
+ const nodeName = normalized.split('.').pop() || '';
90
+ const isForm = FORM_PATTERNS.some(pattern => nodeName === pattern || nodeName.includes(pattern));
91
+ if (!isForm) {
92
+ return null;
93
+ }
94
+ const params = node.parameters || {};
95
+ const formFields = extractFormFields(params);
96
+ return {
97
+ type: 'form',
98
+ node,
99
+ formFields,
100
+ };
101
+ }
102
+ function detectChatTrigger(node) {
103
+ const normalized = (0, node_type_utils_1.normalizeNodeType)(node.type).toLowerCase();
104
+ const nodeName = normalized.split('.').pop() || '';
105
+ const isChat = CHAT_PATTERNS.some(pattern => nodeName === pattern || nodeName.includes(pattern));
106
+ if (!isChat) {
107
+ return null;
108
+ }
109
+ const params = node.parameters || {};
110
+ const responseMode = params.options?.responseMode || 'lastNode';
111
+ const webhookPath = extractWebhookPath(params, node.id);
112
+ return {
113
+ type: 'chat',
114
+ node,
115
+ webhookPath,
116
+ chatConfig: {
117
+ responseMode,
118
+ },
119
+ };
120
+ }
121
+ function extractWebhookPath(params, nodeId) {
122
+ if (typeof params.path === 'string' && params.path) {
123
+ return params.path;
124
+ }
125
+ if (typeof params.httpMethod === 'string') {
126
+ const methodPath = params[`path_${params.httpMethod.toLowerCase()}`];
127
+ if (typeof methodPath === 'string' && methodPath) {
128
+ return methodPath;
129
+ }
130
+ }
131
+ return nodeId;
132
+ }
133
+ function extractHttpMethod(params) {
134
+ if (typeof params.httpMethod === 'string') {
135
+ return params.httpMethod.toUpperCase();
136
+ }
137
+ return 'POST';
138
+ }
139
+ function extractFormFields(params) {
140
+ const fields = [];
141
+ if (Array.isArray(params.formFields)) {
142
+ for (const field of params.formFields) {
143
+ if (field && typeof field.fieldLabel === 'string') {
144
+ fields.push(field.fieldLabel);
145
+ }
146
+ else if (field && typeof field.fieldName === 'string') {
147
+ fields.push(field.fieldName);
148
+ }
149
+ }
150
+ }
151
+ const options = params.options;
152
+ if (options && Array.isArray(options.formFields)) {
153
+ for (const field of options.formFields) {
154
+ if (field && typeof field.fieldLabel === 'string') {
155
+ fields.push(field.fieldLabel);
156
+ }
157
+ }
158
+ }
159
+ return fields;
160
+ }
161
+ function buildTriggerUrl(baseUrl, trigger, mode = 'production') {
162
+ const cleanBaseUrl = baseUrl.replace(/\/+$/, '');
163
+ switch (trigger.type) {
164
+ case 'webhook':
165
+ case 'chat': {
166
+ const prefix = mode === 'test' ? 'webhook-test' : 'webhook';
167
+ const path = trigger.webhookPath || trigger.node.id;
168
+ return `${cleanBaseUrl}/${prefix}/${path}`;
169
+ }
170
+ case 'form': {
171
+ const prefix = mode === 'test' ? 'form-test' : 'form';
172
+ return `${cleanBaseUrl}/${prefix}/${trigger.node.id}`;
173
+ }
174
+ default:
175
+ throw new Error(`Cannot build URL for trigger type: ${trigger.type}`);
176
+ }
177
+ }
178
+ function describeTrigger(trigger) {
179
+ switch (trigger.type) {
180
+ case 'webhook':
181
+ return `Webhook trigger (${trigger.httpMethod || 'POST'} /${trigger.webhookPath || trigger.node.id})`;
182
+ case 'form':
183
+ const fieldCount = trigger.formFields?.length || 0;
184
+ return `Form trigger (${fieldCount} fields)`;
185
+ case 'chat':
186
+ return `Chat trigger (${trigger.chatConfig?.responseMode || 'lastNode'} mode)`;
187
+ default:
188
+ return 'Unknown trigger';
189
+ }
190
+ }
191
+ //# sourceMappingURL=trigger-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-detector.js","sourceRoot":"","sources":["../../src/triggers/trigger-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { N8nApiClient } from '../services/n8n-api-client';
2
+ import { InstanceContext } from '../types/instance-context';
3
+ import { TriggerType } from './types';
4
+ import { BaseTriggerHandler, TriggerHandlerConstructor } from './handlers/base-handler';
5
+ export declare class TriggerRegistry {
6
+ private static handlers;
7
+ private static initialized;
8
+ static register(type: TriggerType, HandlerClass: TriggerHandlerConstructor): void;
9
+ static getHandler(type: TriggerType, client: N8nApiClient, context?: InstanceContext): BaseTriggerHandler | undefined;
10
+ static hasHandler(type: TriggerType): boolean;
11
+ static getRegisteredTypes(): TriggerType[];
12
+ static clear(): void;
13
+ static isInitialized(): boolean;
14
+ static markInitialized(): void;
15
+ }
16
+ export declare function initializeTriggerRegistry(): Promise<void>;
17
+ export declare function ensureRegistryInitialized(): Promise<void>;
18
+ //# sourceMappingURL=trigger-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-registry.d.ts","sourceRoot":"","sources":["../../src/triggers/trigger-registry.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAKxF,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA0D;IACjF,OAAO,CAAC,MAAM,CAAC,WAAW,CAAS;IAQnC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,yBAAyB,GAAG,IAAI;IAYjF,MAAM,CAAC,UAAU,CACf,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,eAAe,GACxB,kBAAkB,GAAG,SAAS;IAWjC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAO7C,MAAM,CAAC,kBAAkB,IAAI,WAAW,EAAE;IAO1C,MAAM,CAAC,KAAK,IAAI,IAAI;IAQpB,MAAM,CAAC,aAAa,IAAI,OAAO;IAO/B,MAAM,CAAC,eAAe,IAAI,IAAI;CAG/B;AAMD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgB/D;AAKD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI/D"}
@@ -0,0 +1,87 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.TriggerRegistry = void 0;
37
+ exports.initializeTriggerRegistry = initializeTriggerRegistry;
38
+ exports.ensureRegistryInitialized = ensureRegistryInitialized;
39
+ class TriggerRegistry {
40
+ static register(type, HandlerClass) {
41
+ this.handlers.set(type, HandlerClass);
42
+ }
43
+ static getHandler(type, client, context) {
44
+ const HandlerClass = this.handlers.get(type);
45
+ if (!HandlerClass) {
46
+ return undefined;
47
+ }
48
+ return new HandlerClass(client, context);
49
+ }
50
+ static hasHandler(type) {
51
+ return this.handlers.has(type);
52
+ }
53
+ static getRegisteredTypes() {
54
+ return Array.from(this.handlers.keys());
55
+ }
56
+ static clear() {
57
+ this.handlers.clear();
58
+ this.initialized = false;
59
+ }
60
+ static isInitialized() {
61
+ return this.initialized;
62
+ }
63
+ static markInitialized() {
64
+ this.initialized = true;
65
+ }
66
+ }
67
+ exports.TriggerRegistry = TriggerRegistry;
68
+ TriggerRegistry.handlers = new Map();
69
+ TriggerRegistry.initialized = false;
70
+ async function initializeTriggerRegistry() {
71
+ if (TriggerRegistry.isInitialized()) {
72
+ return;
73
+ }
74
+ const { WebhookHandler } = await Promise.resolve().then(() => __importStar(require('./handlers/webhook-handler')));
75
+ const { FormHandler } = await Promise.resolve().then(() => __importStar(require('./handlers/form-handler')));
76
+ const { ChatHandler } = await Promise.resolve().then(() => __importStar(require('./handlers/chat-handler')));
77
+ TriggerRegistry.register('webhook', WebhookHandler);
78
+ TriggerRegistry.register('form', FormHandler);
79
+ TriggerRegistry.register('chat', ChatHandler);
80
+ TriggerRegistry.markInitialized();
81
+ }
82
+ async function ensureRegistryInitialized() {
83
+ if (!TriggerRegistry.isInitialized()) {
84
+ await initializeTriggerRegistry();
85
+ }
86
+ }
87
+ //# sourceMappingURL=trigger-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-registry.js","sourceRoot":"","sources":["../../src/triggers/trigger-registry.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4FA,8DAgBC;AAKD,8DAIC;AApGD,MAAa,eAAe;IAU1B,MAAM,CAAC,QAAQ,CAAC,IAAiB,EAAE,YAAuC;QACxE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAUD,MAAM,CAAC,UAAU,CACf,IAAiB,EACjB,MAAoB,EACpB,OAAyB;QAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAKD,MAAM,CAAC,UAAU,CAAC,IAAiB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAKD,MAAM,CAAC,kBAAkB;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAKD,MAAM,CAAC,KAAK;QACV,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAKD,MAAM,CAAC,aAAa;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAKD,MAAM,CAAC,eAAe;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;;AApEH,0CAqEC;AApEgB,wBAAQ,GAAgD,IAAI,GAAG,EAAE,CAAC;AAClE,2BAAW,GAAG,KAAK,CAAC;AAyE9B,KAAK,UAAU,yBAAyB;IAC7C,IAAI,eAAe,CAAC,aAAa,EAAE,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAGD,MAAM,EAAE,cAAc,EAAE,GAAG,wDAAa,4BAA4B,GAAC,CAAC;IACtE,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,yBAAyB,GAAC,CAAC;IAChE,MAAM,EAAE,WAAW,EAAE,GAAG,wDAAa,yBAAyB,GAAC,CAAC;IAGhE,eAAe,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACpD,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC9C,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAE9C,eAAe,CAAC,eAAe,EAAE,CAAC;AACpC,CAAC;AAKM,KAAK,UAAU,yBAAyB;IAC7C,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,EAAE,CAAC;QACrC,MAAM,yBAAyB,EAAE,CAAC;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { WorkflowNode } from '../types/n8n-api';
2
+ export type TriggerType = 'webhook' | 'form' | 'chat';
3
+ export interface BaseTriggerInput {
4
+ workflowId: string;
5
+ triggerType?: TriggerType;
6
+ data?: Record<string, unknown>;
7
+ headers?: Record<string, string>;
8
+ timeout?: number;
9
+ waitForResponse?: boolean;
10
+ }
11
+ export interface WebhookTriggerInput extends BaseTriggerInput {
12
+ triggerType: 'webhook';
13
+ httpMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE';
14
+ webhookPath?: string;
15
+ }
16
+ export interface FormTriggerInput extends BaseTriggerInput {
17
+ triggerType: 'form';
18
+ formData?: Record<string, unknown>;
19
+ }
20
+ export interface ChatTriggerInput extends BaseTriggerInput {
21
+ triggerType: 'chat';
22
+ message: string;
23
+ sessionId?: string;
24
+ }
25
+ export type TriggerInput = WebhookTriggerInput | FormTriggerInput | ChatTriggerInput;
26
+ export interface TriggerResponse {
27
+ success: boolean;
28
+ triggerType: TriggerType;
29
+ workflowId: string;
30
+ executionId?: string;
31
+ status?: number;
32
+ statusText?: string;
33
+ data?: unknown;
34
+ error?: string;
35
+ code?: string;
36
+ details?: Record<string, unknown>;
37
+ metadata: {
38
+ duration: number;
39
+ webhookPath?: string;
40
+ sessionId?: string;
41
+ httpMethod?: string;
42
+ };
43
+ }
44
+ export interface TriggerHandlerCapabilities {
45
+ requiresActiveWorkflow: boolean;
46
+ supportedMethods?: string[];
47
+ canPassInputData: boolean;
48
+ }
49
+ export interface DetectedTrigger {
50
+ type: TriggerType;
51
+ node: WorkflowNode;
52
+ webhookPath?: string;
53
+ httpMethod?: string;
54
+ formFields?: string[];
55
+ chatConfig?: {
56
+ responseMode?: string;
57
+ };
58
+ }
59
+ export interface TriggerDetectionResult {
60
+ detected: boolean;
61
+ trigger?: DetectedTrigger;
62
+ reason?: string;
63
+ }
64
+ export interface TestWorkflowInput {
65
+ workflowId: string;
66
+ triggerType?: TriggerType;
67
+ httpMethod?: 'GET' | 'POST' | 'PUT' | 'DELETE';
68
+ webhookPath?: string;
69
+ message?: string;
70
+ sessionId?: string;
71
+ data?: Record<string, unknown>;
72
+ headers?: Record<string, string>;
73
+ timeout?: number;
74
+ waitForResponse?: boolean;
75
+ }
76
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/triggers/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-mcp",
3
- "version": "2.27.1",
3
+ "version": "2.28.0",
4
4
  "description": "Integration between n8n workflow automation and Model Context Protocol (MCP)",
5
5
  "dependencies": {
6
6
  "@modelcontextprotocol/sdk": "1.20.1",
@@ -1,3 +0,0 @@
1
- import { ToolDocumentation } from '../types';
2
- export declare const n8nTriggerWebhookWorkflowDoc: ToolDocumentation;
3
- //# sourceMappingURL=n8n-trigger-webhook-workflow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"n8n-trigger-webhook-workflow.d.ts","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,4BAA4B,EAAE,iBAmH1C,CAAC"}
@@ -1,120 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.n8nTriggerWebhookWorkflowDoc = void 0;
4
- exports.n8nTriggerWebhookWorkflowDoc = {
5
- name: 'n8n_trigger_webhook_workflow',
6
- category: 'workflow_management',
7
- essentials: {
8
- description: 'Trigger workflow via webhook. Must be ACTIVE with Webhook node. Method must match config.',
9
- keyParameters: ['webhookUrl', 'httpMethod', 'data'],
10
- example: 'n8n_trigger_webhook_workflow({webhookUrl: "https://n8n.example.com/webhook/abc-def-ghi"})',
11
- performance: 'Immediate trigger, response time depends on workflow complexity',
12
- tips: [
13
- 'Workflow MUST be active and contain a Webhook node for triggering',
14
- 'HTTP method must match webhook node configuration (often GET)',
15
- 'Use waitForResponse:false for async execution without waiting'
16
- ]
17
- },
18
- full: {
19
- description: `Triggers a workflow execution via its webhook URL. This is the primary method for external systems to start n8n workflows. The target workflow must be active and contain a properly configured Webhook node as the trigger. The HTTP method used must match the webhook configuration.`,
20
- parameters: {
21
- webhookUrl: {
22
- type: 'string',
23
- required: true,
24
- description: 'Full webhook URL from n8n workflow (e.g., https://n8n.example.com/webhook/abc-def-ghi)'
25
- },
26
- httpMethod: {
27
- type: 'string',
28
- required: false,
29
- enum: ['GET', 'POST', 'PUT', 'DELETE'],
30
- description: 'HTTP method (must match webhook configuration, often GET). Defaults to GET if not specified'
31
- },
32
- data: {
33
- type: 'object',
34
- required: false,
35
- description: 'Data to send with the webhook request. For GET requests, becomes query parameters'
36
- },
37
- headers: {
38
- type: 'object',
39
- required: false,
40
- description: 'Additional HTTP headers to include in the request'
41
- },
42
- waitForResponse: {
43
- type: 'boolean',
44
- required: false,
45
- description: 'Wait for workflow completion and return results (default: true). Set to false for fire-and-forget'
46
- }
47
- },
48
- returns: `Webhook response data if waitForResponse is true, or immediate acknowledgment if false. Response format depends on webhook node configuration.`,
49
- examples: [
50
- 'n8n_trigger_webhook_workflow({webhookUrl: "https://n8n.example.com/webhook/order-process"}) - Trigger with GET',
51
- 'n8n_trigger_webhook_workflow({webhookUrl: "https://n8n.example.com/webhook/data-import", httpMethod: "POST", data: {name: "John", email: "john@example.com"}}) - POST with data',
52
- 'n8n_trigger_webhook_workflow({webhookUrl: "https://n8n.example.com/webhook/async-job", waitForResponse: false}) - Fire and forget',
53
- 'n8n_trigger_webhook_workflow({webhookUrl: "https://n8n.example.com/webhook/api", headers: {"API-Key": "secret"}}) - With auth headers'
54
- ],
55
- useCases: [
56
- 'Trigger data processing workflows from external applications',
57
- 'Start scheduled jobs manually via webhook',
58
- 'Integrate n8n workflows with third-party services',
59
- 'Create REST API endpoints using n8n workflows',
60
- 'Implement event-driven architectures with n8n'
61
- ],
62
- performance: `Performance varies based on workflow complexity and waitForResponse setting. Synchronous calls (waitForResponse: true) block until workflow completes. For long-running workflows, use async mode (waitForResponse: false) and monitor execution separately.`,
63
- errorHandling: `**Enhanced Error Messages with Execution Guidance**
64
-
65
- When a webhook trigger fails, the error response now includes specific guidance to help debug the issue:
66
-
67
- **Error with Execution ID** (workflow started but failed):
68
- - Format: "Workflow {workflowId} execution {executionId} failed. Use n8n_executions({action: 'get', id: '{executionId}', mode: 'preview'}) to investigate the error."
69
- - Response includes: executionId and workflowId fields for direct access
70
- - Recommended action: Use n8n_executions with action='get' and mode='preview' for fast, efficient error inspection
71
-
72
- **Error without Execution ID** (workflow didn't start):
73
- - Format: "Workflow failed to execute. Use n8n_executions({action: 'list'}) to find recent executions, then n8n_executions({action: 'get', mode: 'preview'}) to investigate."
74
- - Recommended action: Check recent executions with n8n_executions({action: 'list'})
75
-
76
- **Why mode='preview'?**
77
- - Fast: <50ms response time
78
- - Efficient: ~500 tokens (vs 50K+ for full mode)
79
- - Safe: No timeout or token limit risks
80
- - Informative: Shows structure, counts, and error details
81
- - Provides recommendations for fetching more data if needed
82
-
83
- **Example Error Responses**:
84
- \`\`\`json
85
- {
86
- "success": false,
87
- "error": "Workflow wf_123 execution exec_456 failed. Use n8n_get_execution({id: 'exec_456', mode: 'preview'}) to investigate the error.",
88
- "executionId": "exec_456",
89
- "workflowId": "wf_123",
90
- "code": "SERVER_ERROR"
91
- }
92
- \`\`\`
93
-
94
- **Investigation Workflow**:
95
- 1. Trigger returns error with execution ID
96
- 2. Call n8n_executions({action: 'get', id: executionId, mode: 'preview'}) to see structure and error
97
- 3. Based on preview recommendation, fetch more data if needed
98
- 4. Fix issues in workflow and retry`,
99
- bestPractices: [
100
- 'Always verify workflow is active before attempting webhook triggers',
101
- 'Match HTTP method exactly with webhook node configuration',
102
- 'Use async mode (waitForResponse: false) for long-running workflows',
103
- 'Include authentication headers when webhook requires them',
104
- 'Test webhook URL manually first to ensure it works',
105
- 'When errors occur, use n8n_executions with action="get" and mode="preview" first for efficient debugging',
106
- 'Store execution IDs from error responses for later investigation'
107
- ],
108
- pitfalls: [
109
- 'Workflow must be ACTIVE - inactive workflows cannot be triggered',
110
- 'HTTP method mismatch returns 404 even if URL is correct',
111
- 'Webhook node must be the trigger node in the workflow',
112
- 'Timeout errors occur with long workflows in sync mode',
113
- 'Data format must match webhook node expectations',
114
- 'Error messages always include n8n_executions guidance - follow the suggested steps for efficient debugging',
115
- 'Execution IDs in error responses are crucial for debugging - always check for and use them'
116
- ],
117
- relatedTools: ['n8n_executions', 'n8n_get_workflow', 'n8n_create_workflow']
118
- }
119
- };
120
- //# sourceMappingURL=n8n-trigger-webhook-workflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"n8n-trigger-webhook-workflow.js","sourceRoot":"","sources":["../../../../src/mcp/tool-docs/workflow_management/n8n-trigger-webhook-workflow.ts"],"names":[],"mappings":";;;AAEa,QAAA,4BAA4B,GAAsB;IAC7D,IAAI,EAAE,8BAA8B;IACpC,QAAQ,EAAE,qBAAqB;IAC/B,UAAU,EAAE;QACV,WAAW,EAAE,2FAA2F;QACxG,aAAa,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC;QACnD,OAAO,EAAE,2FAA2F;QACpG,WAAW,EAAE,iEAAiE;QAC9E,IAAI,EAAE;YACJ,mEAAmE;YACnE,+DAA+D;YAC/D,+DAA+D;SAChE;KACF;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,yRAAyR;QACtS,UAAU,EAAE;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,wFAAwF;aACtG;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC;gBACtC,WAAW,EAAE,6FAA6F;aAC3G;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,mFAAmF;aACjG;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,mDAAmD;aACjE;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,KAAK;gBACf,WAAW,EAAE,mGAAmG;aACjH;SACF;QACD,OAAO,EAAE,gJAAgJ;QACzJ,QAAQ,EAAE;YACR,gHAAgH;YAChH,iLAAiL;YACjL,mIAAmI;YACnI,uIAAuI;SACxI;QACD,QAAQ,EAAE;YACR,8DAA8D;YAC9D,2CAA2C;YAC3C,mDAAmD;YACnD,+CAA+C;YAC/C,+CAA+C;SAChD;QACD,WAAW,EAAE,8PAA8P;QAC3Q,aAAa,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAmCiB;QAChC,aAAa,EAAE;YACb,qEAAqE;YACrE,2DAA2D;YAC3D,oEAAoE;YACpE,2DAA2D;YAC3D,oDAAoD;YACpD,0GAA0G;YAC1G,kEAAkE;SACnE;QACD,QAAQ,EAAE;YACR,kEAAkE;YAClE,yDAAyD;YACzD,uDAAuD;YACvD,uDAAuD;YACvD,kDAAkD;YAClD,4GAA4G;YAC5G,4FAA4F;SAC7F;QACD,YAAY,EAAE,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,qBAAqB,CAAC;KAC5E;CACF,CAAC"}