n8n-mcp 2.13.1 → 2.14.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 (79) hide show
  1. package/README.md +45 -0
  2. package/data/nodes.db +0 -0
  3. package/dist/database/node-repository.d.ts +5 -0
  4. package/dist/database/node-repository.d.ts.map +1 -1
  5. package/dist/database/node-repository.js +90 -0
  6. package/dist/database/node-repository.js.map +1 -1
  7. package/dist/errors/validation-service-error.d.ts +10 -0
  8. package/dist/errors/validation-service-error.d.ts.map +1 -0
  9. package/dist/errors/validation-service-error.js +26 -0
  10. package/dist/errors/validation-service-error.js.map +1 -0
  11. package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
  12. package/dist/mcp/handlers-n8n-manager.js +6 -0
  13. package/dist/mcp/handlers-n8n-manager.js.map +1 -1
  14. package/dist/mcp/index.js +32 -0
  15. package/dist/mcp/index.js.map +1 -1
  16. package/dist/mcp/server.d.ts +2 -0
  17. package/dist/mcp/server.d.ts.map +1 -1
  18. package/dist/mcp/server.js +57 -19
  19. package/dist/mcp/server.js.map +1 -1
  20. package/dist/services/config-validator.d.ts +1 -0
  21. package/dist/services/config-validator.d.ts.map +1 -1
  22. package/dist/services/config-validator.js.map +1 -1
  23. package/dist/services/enhanced-config-validator.d.ts +6 -0
  24. package/dist/services/enhanced-config-validator.d.ts.map +1 -1
  25. package/dist/services/enhanced-config-validator.js +127 -0
  26. package/dist/services/enhanced-config-validator.js.map +1 -1
  27. package/dist/services/operation-similarity-service.d.ts +32 -0
  28. package/dist/services/operation-similarity-service.d.ts.map +1 -0
  29. package/dist/services/operation-similarity-service.js +341 -0
  30. package/dist/services/operation-similarity-service.js.map +1 -0
  31. package/dist/services/resource-similarity-service.d.ts +33 -0
  32. package/dist/services/resource-similarity-service.d.ts.map +1 -0
  33. package/dist/services/resource-similarity-service.js +358 -0
  34. package/dist/services/resource-similarity-service.js.map +1 -0
  35. package/dist/telemetry/batch-processor.d.ts +32 -0
  36. package/dist/telemetry/batch-processor.d.ts.map +1 -0
  37. package/dist/telemetry/batch-processor.js +266 -0
  38. package/dist/telemetry/batch-processor.js.map +1 -0
  39. package/dist/telemetry/config-manager.d.ts +28 -0
  40. package/dist/telemetry/config-manager.d.ts.map +1 -0
  41. package/dist/telemetry/config-manager.js +211 -0
  42. package/dist/telemetry/config-manager.js.map +1 -0
  43. package/dist/telemetry/event-tracker.d.ts +58 -0
  44. package/dist/telemetry/event-tracker.d.ts.map +1 -0
  45. package/dist/telemetry/event-tracker.js +295 -0
  46. package/dist/telemetry/event-tracker.js.map +1 -0
  47. package/dist/telemetry/event-validator.d.ts +78 -0
  48. package/dist/telemetry/event-validator.d.ts.map +1 -0
  49. package/dist/telemetry/event-validator.js +204 -0
  50. package/dist/telemetry/event-validator.js.map +1 -0
  51. package/dist/telemetry/index.d.ts +5 -0
  52. package/dist/telemetry/index.d.ts.map +1 -0
  53. package/dist/telemetry/index.js +11 -0
  54. package/dist/telemetry/index.js.map +1 -0
  55. package/dist/telemetry/performance-monitor.d.ts +113 -0
  56. package/dist/telemetry/performance-monitor.d.ts.map +1 -0
  57. package/dist/telemetry/performance-monitor.js +208 -0
  58. package/dist/telemetry/performance-monitor.js.map +1 -0
  59. package/dist/telemetry/rate-limiter.d.ts +30 -0
  60. package/dist/telemetry/rate-limiter.d.ts.map +1 -0
  61. package/dist/telemetry/rate-limiter.js +103 -0
  62. package/dist/telemetry/rate-limiter.js.map +1 -0
  63. package/dist/telemetry/telemetry-error.d.ts +44 -0
  64. package/dist/telemetry/telemetry-error.d.ts.map +1 -0
  65. package/dist/telemetry/telemetry-error.js +153 -0
  66. package/dist/telemetry/telemetry-error.js.map +1 -0
  67. package/dist/telemetry/telemetry-manager.d.ts +127 -0
  68. package/dist/telemetry/telemetry-manager.d.ts.map +1 -0
  69. package/dist/telemetry/telemetry-manager.js +182 -0
  70. package/dist/telemetry/telemetry-manager.js.map +1 -0
  71. package/dist/telemetry/telemetry-types.d.ts +69 -0
  72. package/dist/telemetry/telemetry-types.d.ts.map +1 -0
  73. package/dist/telemetry/telemetry-types.js +29 -0
  74. package/dist/telemetry/telemetry-types.js.map +1 -0
  75. package/dist/telemetry/workflow-sanitizer.d.ts +33 -0
  76. package/dist/telemetry/workflow-sanitizer.d.ts.map +1 -0
  77. package/dist/telemetry/workflow-sanitizer.js +190 -0
  78. package/dist/telemetry/workflow-sanitizer.js.map +1 -0
  79. package/package.json +2 -1
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TelemetryBatchProcessor = void 0;
4
+ const telemetry_types_1 = require("./telemetry-types");
5
+ const telemetry_error_1 = require("./telemetry-error");
6
+ const logger_1 = require("../utils/logger");
7
+ class TelemetryBatchProcessor {
8
+ constructor(supabase, isEnabled) {
9
+ this.supabase = supabase;
10
+ this.isEnabled = isEnabled;
11
+ this.isFlushingEvents = false;
12
+ this.isFlushingWorkflows = false;
13
+ this.metrics = {
14
+ eventsTracked: 0,
15
+ eventsDropped: 0,
16
+ eventsFailed: 0,
17
+ batchesSent: 0,
18
+ batchesFailed: 0,
19
+ averageFlushTime: 0,
20
+ rateLimitHits: 0
21
+ };
22
+ this.flushTimes = [];
23
+ this.deadLetterQueue = [];
24
+ this.maxDeadLetterSize = 100;
25
+ this.circuitBreaker = new telemetry_error_1.TelemetryCircuitBreaker();
26
+ }
27
+ start() {
28
+ if (!this.isEnabled() || !this.supabase)
29
+ return;
30
+ this.flushTimer = setInterval(() => {
31
+ this.flush();
32
+ }, telemetry_types_1.TELEMETRY_CONFIG.BATCH_FLUSH_INTERVAL);
33
+ this.flushTimer.unref();
34
+ process.on('beforeExit', () => this.flush());
35
+ process.on('SIGINT', () => {
36
+ this.flush();
37
+ process.exit(0);
38
+ });
39
+ process.on('SIGTERM', () => {
40
+ this.flush();
41
+ process.exit(0);
42
+ });
43
+ logger_1.logger.debug('Telemetry batch processor started');
44
+ }
45
+ stop() {
46
+ if (this.flushTimer) {
47
+ clearInterval(this.flushTimer);
48
+ this.flushTimer = undefined;
49
+ }
50
+ logger_1.logger.debug('Telemetry batch processor stopped');
51
+ }
52
+ async flush(events, workflows) {
53
+ if (!this.isEnabled() || !this.supabase)
54
+ return;
55
+ if (!this.circuitBreaker.shouldAllow()) {
56
+ logger_1.logger.debug('Circuit breaker open - skipping flush');
57
+ this.metrics.eventsDropped += (events?.length || 0) + (workflows?.length || 0);
58
+ return;
59
+ }
60
+ const startTime = Date.now();
61
+ let hasErrors = false;
62
+ if (events && events.length > 0) {
63
+ hasErrors = !(await this.flushEvents(events)) || hasErrors;
64
+ }
65
+ if (workflows && workflows.length > 0) {
66
+ hasErrors = !(await this.flushWorkflows(workflows)) || hasErrors;
67
+ }
68
+ const flushTime = Date.now() - startTime;
69
+ this.recordFlushTime(flushTime);
70
+ if (hasErrors) {
71
+ this.circuitBreaker.recordFailure();
72
+ }
73
+ else {
74
+ this.circuitBreaker.recordSuccess();
75
+ }
76
+ if (!hasErrors && this.deadLetterQueue.length > 0) {
77
+ await this.processDeadLetterQueue();
78
+ }
79
+ }
80
+ async flushEvents(events) {
81
+ if (this.isFlushingEvents || events.length === 0)
82
+ return true;
83
+ this.isFlushingEvents = true;
84
+ try {
85
+ const batches = this.createBatches(events, telemetry_types_1.TELEMETRY_CONFIG.MAX_BATCH_SIZE);
86
+ for (const batch of batches) {
87
+ const result = await this.executeWithRetry(async () => {
88
+ const { error } = await this.supabase
89
+ .from('telemetry_events')
90
+ .insert(batch);
91
+ if (error) {
92
+ throw error;
93
+ }
94
+ logger_1.logger.debug(`Flushed batch of ${batch.length} telemetry events`);
95
+ return true;
96
+ }, 'Flush telemetry events');
97
+ if (result) {
98
+ this.metrics.eventsTracked += batch.length;
99
+ this.metrics.batchesSent++;
100
+ }
101
+ else {
102
+ this.metrics.eventsFailed += batch.length;
103
+ this.metrics.batchesFailed++;
104
+ this.addToDeadLetterQueue(batch);
105
+ return false;
106
+ }
107
+ }
108
+ return true;
109
+ }
110
+ catch (error) {
111
+ logger_1.logger.debug('Failed to flush events:', error);
112
+ throw new telemetry_error_1.TelemetryError(telemetry_error_1.TelemetryErrorType.NETWORK_ERROR, 'Failed to flush events', { error: error instanceof Error ? error.message : String(error) }, true);
113
+ }
114
+ finally {
115
+ this.isFlushingEvents = false;
116
+ }
117
+ }
118
+ async flushWorkflows(workflows) {
119
+ if (this.isFlushingWorkflows || workflows.length === 0)
120
+ return true;
121
+ this.isFlushingWorkflows = true;
122
+ try {
123
+ const uniqueWorkflows = this.deduplicateWorkflows(workflows);
124
+ logger_1.logger.debug(`Deduplicating workflows: ${workflows.length} -> ${uniqueWorkflows.length}`);
125
+ const batches = this.createBatches(uniqueWorkflows, telemetry_types_1.TELEMETRY_CONFIG.MAX_BATCH_SIZE);
126
+ for (const batch of batches) {
127
+ const result = await this.executeWithRetry(async () => {
128
+ const { error } = await this.supabase
129
+ .from('telemetry_workflows')
130
+ .insert(batch);
131
+ if (error) {
132
+ throw error;
133
+ }
134
+ logger_1.logger.debug(`Flushed batch of ${batch.length} telemetry workflows`);
135
+ return true;
136
+ }, 'Flush telemetry workflows');
137
+ if (result) {
138
+ this.metrics.eventsTracked += batch.length;
139
+ this.metrics.batchesSent++;
140
+ }
141
+ else {
142
+ this.metrics.eventsFailed += batch.length;
143
+ this.metrics.batchesFailed++;
144
+ this.addToDeadLetterQueue(batch);
145
+ return false;
146
+ }
147
+ }
148
+ return true;
149
+ }
150
+ catch (error) {
151
+ logger_1.logger.debug('Failed to flush workflows:', error);
152
+ throw new telemetry_error_1.TelemetryError(telemetry_error_1.TelemetryErrorType.NETWORK_ERROR, 'Failed to flush workflows', { error: error instanceof Error ? error.message : String(error) }, true);
153
+ }
154
+ finally {
155
+ this.isFlushingWorkflows = false;
156
+ }
157
+ }
158
+ async executeWithRetry(operation, operationName) {
159
+ let lastError = null;
160
+ let delay = telemetry_types_1.TELEMETRY_CONFIG.RETRY_DELAY;
161
+ for (let attempt = 1; attempt <= telemetry_types_1.TELEMETRY_CONFIG.MAX_RETRIES; attempt++) {
162
+ try {
163
+ const timeoutPromise = new Promise((_, reject) => {
164
+ setTimeout(() => reject(new Error('Operation timed out')), telemetry_types_1.TELEMETRY_CONFIG.OPERATION_TIMEOUT);
165
+ });
166
+ const result = await Promise.race([operation(), timeoutPromise]);
167
+ return result;
168
+ }
169
+ catch (error) {
170
+ lastError = error;
171
+ logger_1.logger.debug(`${operationName} attempt ${attempt} failed:`, error);
172
+ if (attempt < telemetry_types_1.TELEMETRY_CONFIG.MAX_RETRIES) {
173
+ const jitter = Math.random() * 0.3 * delay;
174
+ const waitTime = delay + jitter;
175
+ await new Promise(resolve => setTimeout(resolve, waitTime));
176
+ delay *= 2;
177
+ }
178
+ }
179
+ }
180
+ logger_1.logger.debug(`${operationName} failed after ${telemetry_types_1.TELEMETRY_CONFIG.MAX_RETRIES} attempts:`, lastError);
181
+ return null;
182
+ }
183
+ createBatches(items, batchSize) {
184
+ const batches = [];
185
+ for (let i = 0; i < items.length; i += batchSize) {
186
+ batches.push(items.slice(i, i + batchSize));
187
+ }
188
+ return batches;
189
+ }
190
+ deduplicateWorkflows(workflows) {
191
+ const seen = new Set();
192
+ const unique = [];
193
+ for (const workflow of workflows) {
194
+ if (!seen.has(workflow.workflow_hash)) {
195
+ seen.add(workflow.workflow_hash);
196
+ unique.push(workflow);
197
+ }
198
+ }
199
+ return unique;
200
+ }
201
+ addToDeadLetterQueue(items) {
202
+ for (const item of items) {
203
+ this.deadLetterQueue.push(item);
204
+ if (this.deadLetterQueue.length > this.maxDeadLetterSize) {
205
+ const dropped = this.deadLetterQueue.shift();
206
+ if (dropped) {
207
+ this.metrics.eventsDropped++;
208
+ }
209
+ }
210
+ }
211
+ logger_1.logger.debug(`Added ${items.length} items to dead letter queue`);
212
+ }
213
+ async processDeadLetterQueue() {
214
+ if (this.deadLetterQueue.length === 0)
215
+ return;
216
+ logger_1.logger.debug(`Processing ${this.deadLetterQueue.length} items from dead letter queue`);
217
+ const events = [];
218
+ const workflows = [];
219
+ for (const item of this.deadLetterQueue) {
220
+ if ('workflow_hash' in item) {
221
+ workflows.push(item);
222
+ }
223
+ else {
224
+ events.push(item);
225
+ }
226
+ }
227
+ this.deadLetterQueue = [];
228
+ if (events.length > 0) {
229
+ await this.flushEvents(events);
230
+ }
231
+ if (workflows.length > 0) {
232
+ await this.flushWorkflows(workflows);
233
+ }
234
+ }
235
+ recordFlushTime(time) {
236
+ this.flushTimes.push(time);
237
+ if (this.flushTimes.length > 100) {
238
+ this.flushTimes.shift();
239
+ }
240
+ const sum = this.flushTimes.reduce((a, b) => a + b, 0);
241
+ this.metrics.averageFlushTime = Math.round(sum / this.flushTimes.length);
242
+ this.metrics.lastFlushTime = time;
243
+ }
244
+ getMetrics() {
245
+ return {
246
+ ...this.metrics,
247
+ circuitBreakerState: this.circuitBreaker.getState(),
248
+ deadLetterQueueSize: this.deadLetterQueue.length
249
+ };
250
+ }
251
+ resetMetrics() {
252
+ this.metrics = {
253
+ eventsTracked: 0,
254
+ eventsDropped: 0,
255
+ eventsFailed: 0,
256
+ batchesSent: 0,
257
+ batchesFailed: 0,
258
+ averageFlushTime: 0,
259
+ rateLimitHits: 0
260
+ };
261
+ this.flushTimes = [];
262
+ this.circuitBreaker.reset();
263
+ }
264
+ }
265
+ exports.TelemetryBatchProcessor = TelemetryBatchProcessor;
266
+ //# sourceMappingURL=batch-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor.js","sourceRoot":"","sources":["../../src/telemetry/batch-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface TelemetryConfig {
2
+ enabled: boolean;
3
+ userId: string;
4
+ firstRun?: string;
5
+ lastModified?: string;
6
+ version?: string;
7
+ }
8
+ export declare class TelemetryConfigManager {
9
+ private static instance;
10
+ private readonly configDir;
11
+ private readonly configPath;
12
+ private config;
13
+ private constructor();
14
+ static getInstance(): TelemetryConfigManager;
15
+ private generateUserId;
16
+ loadConfig(): TelemetryConfig;
17
+ private saveConfig;
18
+ isEnabled(): boolean;
19
+ private isDisabledByEnvironment;
20
+ getUserId(): string;
21
+ isFirstRun(): boolean;
22
+ enable(): void;
23
+ disable(): void;
24
+ getStatus(): string;
25
+ private showFirstRunNotice;
26
+ private getPackageVersion;
27
+ }
28
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/telemetry/config-manager.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,MAAM,CAAgC;IAE9C,OAAO;IAKP,MAAM,CAAC,WAAW,IAAI,sBAAsB;IAU5C,OAAO,CAAC,cAAc;IAQtB,UAAU,IAAI,eAAe;IAqD7B,OAAO,CAAC,UAAU;IAmBlB,SAAS,IAAI,OAAO;IAapB,OAAO,CAAC,uBAAuB;IAiC/B,SAAS,IAAI,MAAM;IAQnB,UAAU,IAAI,OAAO;IAOrB,MAAM,IAAI,IAAI;IAWd,OAAO,IAAI,IAAI;IAWf,SAAS,IAAI,MAAM;IA2BnB,OAAO,CAAC,kBAAkB;IA0C1B,OAAO,CAAC,iBAAiB;CA+B1B"}
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TelemetryConfigManager = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const os_1 = require("os");
7
+ const crypto_1 = require("crypto");
8
+ const os_2 = require("os");
9
+ class TelemetryConfigManager {
10
+ constructor() {
11
+ this.config = null;
12
+ this.configDir = (0, path_1.join)((0, os_1.homedir)(), '.n8n-mcp');
13
+ this.configPath = (0, path_1.join)(this.configDir, 'telemetry.json');
14
+ }
15
+ static getInstance() {
16
+ if (!TelemetryConfigManager.instance) {
17
+ TelemetryConfigManager.instance = new TelemetryConfigManager();
18
+ }
19
+ return TelemetryConfigManager.instance;
20
+ }
21
+ generateUserId() {
22
+ const machineId = `${(0, os_2.hostname)()}-${(0, os_2.platform)()}-${(0, os_2.arch)()}-${(0, os_1.homedir)()}`;
23
+ return (0, crypto_1.createHash)('sha256').update(machineId).digest('hex').substring(0, 16);
24
+ }
25
+ loadConfig() {
26
+ if (this.config) {
27
+ return this.config;
28
+ }
29
+ if (!(0, fs_1.existsSync)(this.configPath)) {
30
+ const version = this.getPackageVersion();
31
+ const envDisabled = this.isDisabledByEnvironment();
32
+ this.config = {
33
+ enabled: !envDisabled,
34
+ userId: this.generateUserId(),
35
+ firstRun: new Date().toISOString(),
36
+ version
37
+ };
38
+ this.saveConfig();
39
+ if (!envDisabled) {
40
+ this.showFirstRunNotice();
41
+ }
42
+ return this.config;
43
+ }
44
+ try {
45
+ const rawConfig = (0, fs_1.readFileSync)(this.configPath, 'utf-8');
46
+ this.config = JSON.parse(rawConfig);
47
+ if (!this.config.userId) {
48
+ this.config.userId = this.generateUserId();
49
+ this.saveConfig();
50
+ }
51
+ return this.config;
52
+ }
53
+ catch (error) {
54
+ console.error('Failed to load telemetry config, using defaults:', error);
55
+ this.config = {
56
+ enabled: false,
57
+ userId: this.generateUserId()
58
+ };
59
+ return this.config;
60
+ }
61
+ }
62
+ saveConfig() {
63
+ if (!this.config)
64
+ return;
65
+ try {
66
+ if (!(0, fs_1.existsSync)(this.configDir)) {
67
+ (0, fs_1.mkdirSync)(this.configDir, { recursive: true });
68
+ }
69
+ this.config.lastModified = new Date().toISOString();
70
+ (0, fs_1.writeFileSync)(this.configPath, JSON.stringify(this.config, null, 2));
71
+ }
72
+ catch (error) {
73
+ console.error('Failed to save telemetry config:', error);
74
+ }
75
+ }
76
+ isEnabled() {
77
+ if (this.isDisabledByEnvironment()) {
78
+ return false;
79
+ }
80
+ const config = this.loadConfig();
81
+ return config.enabled;
82
+ }
83
+ isDisabledByEnvironment() {
84
+ const envVars = [
85
+ 'N8N_MCP_TELEMETRY_DISABLED',
86
+ 'TELEMETRY_DISABLED',
87
+ 'DISABLE_TELEMETRY'
88
+ ];
89
+ for (const varName of envVars) {
90
+ const value = process.env[varName];
91
+ if (value !== undefined) {
92
+ const normalized = value.toLowerCase().trim();
93
+ if (!['true', 'false', '1', '0', ''].includes(normalized)) {
94
+ console.warn(`⚠️ Invalid telemetry environment variable value: ${varName}="${value}"\n` +
95
+ ` Use "true" to disable or "false" to enable telemetry.`);
96
+ }
97
+ if (normalized === 'true' || normalized === '1') {
98
+ return true;
99
+ }
100
+ }
101
+ }
102
+ return false;
103
+ }
104
+ getUserId() {
105
+ const config = this.loadConfig();
106
+ return config.userId;
107
+ }
108
+ isFirstRun() {
109
+ return !(0, fs_1.existsSync)(this.configPath);
110
+ }
111
+ enable() {
112
+ const config = this.loadConfig();
113
+ config.enabled = true;
114
+ this.config = config;
115
+ this.saveConfig();
116
+ console.log('✓ Anonymous telemetry enabled');
117
+ }
118
+ disable() {
119
+ const config = this.loadConfig();
120
+ config.enabled = false;
121
+ this.config = config;
122
+ this.saveConfig();
123
+ console.log('✓ Anonymous telemetry disabled');
124
+ }
125
+ getStatus() {
126
+ const config = this.loadConfig();
127
+ const envDisabled = this.isDisabledByEnvironment();
128
+ let status = config.enabled ? 'ENABLED' : 'DISABLED';
129
+ if (envDisabled) {
130
+ status = 'DISABLED (via environment variable)';
131
+ }
132
+ return `
133
+ Telemetry Status: ${status}
134
+ Anonymous ID: ${config.userId}
135
+ First Run: ${config.firstRun || 'Unknown'}
136
+ Config Path: ${this.configPath}
137
+
138
+ To opt-out: npx n8n-mcp telemetry disable
139
+ To opt-in: npx n8n-mcp telemetry enable
140
+
141
+ For Docker: Set N8N_MCP_TELEMETRY_DISABLED=true
142
+ `;
143
+ }
144
+ showFirstRunNotice() {
145
+ console.log(`
146
+ ╔════════════════════════════════════════════════════════════╗
147
+ ║ Anonymous Usage Statistics ║
148
+ ╠════════════════════════════════════════════════════════════╣
149
+ ║ ║
150
+ ║ n8n-mcp collects anonymous usage data to improve the ║
151
+ ║ tool and understand how it's being used. ║
152
+ ║ ║
153
+ ║ We track: ║
154
+ ║ • Which MCP tools are used (no parameters) ║
155
+ ║ • Workflow structures (sanitized, no sensitive data) ║
156
+ ║ • Error patterns (hashed, no details) ║
157
+ ║ • Performance metrics (timing, success rates) ║
158
+ ║ ║
159
+ ║ We NEVER collect: ║
160
+ ║ • URLs, API keys, or credentials ║
161
+ ║ • Workflow content or actual data ║
162
+ ║ • Personal or identifiable information ║
163
+ ║ • n8n instance details or locations ║
164
+ ║ ║
165
+ ║ Your anonymous ID: ${this.config?.userId || 'generating...'} ║
166
+ ║ ║
167
+ ║ This helps me understand usage patterns and improve ║
168
+ ║ n8n-mcp for everyone. Thank you for your support! ║
169
+ ║ ║
170
+ ║ To opt-out at any time: ║
171
+ ║ npx n8n-mcp telemetry disable ║
172
+ ║ ║
173
+ ║ Data deletion requests: ║
174
+ ║ Email romuald@n8n-mcp.com with your anonymous ID ║
175
+ ║ ║
176
+ ║ Learn more: ║
177
+ ║ https://github.com/czlonkowski/n8n-mcp/blob/main/PRIVACY.md ║
178
+ ║ ║
179
+ ╚════════════════════════════════════════════════════════════╝
180
+ `);
181
+ }
182
+ getPackageVersion() {
183
+ try {
184
+ const possiblePaths = [
185
+ (0, path_1.resolve)(__dirname, '..', '..', 'package.json'),
186
+ (0, path_1.resolve)(process.cwd(), 'package.json'),
187
+ (0, path_1.resolve)(__dirname, '..', '..', '..', 'package.json')
188
+ ];
189
+ for (const packagePath of possiblePaths) {
190
+ if ((0, fs_1.existsSync)(packagePath)) {
191
+ const packageJson = JSON.parse((0, fs_1.readFileSync)(packagePath, 'utf-8'));
192
+ if (packageJson.version) {
193
+ return packageJson.version;
194
+ }
195
+ }
196
+ }
197
+ try {
198
+ const packageJson = require('../../package.json');
199
+ return packageJson.version || 'unknown';
200
+ }
201
+ catch {
202
+ }
203
+ return 'unknown';
204
+ }
205
+ catch (error) {
206
+ return 'unknown';
207
+ }
208
+ }
209
+ }
210
+ exports.TelemetryConfigManager = TelemetryConfigManager;
211
+ //# sourceMappingURL=config-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/telemetry/config-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { TelemetryEvent, WorkflowTelemetry } from './telemetry-types';
2
+ export declare class TelemetryEventTracker {
3
+ private getUserId;
4
+ private isEnabled;
5
+ private rateLimiter;
6
+ private validator;
7
+ private eventQueue;
8
+ private workflowQueue;
9
+ private previousTool?;
10
+ private previousToolTimestamp;
11
+ private performanceMetrics;
12
+ constructor(getUserId: () => string, isEnabled: () => boolean);
13
+ trackToolUsage(toolName: string, success: boolean, duration?: number): void;
14
+ trackWorkflowCreation(workflow: any, validationPassed: boolean): Promise<void>;
15
+ trackError(errorType: string, context: string, toolName?: string): void;
16
+ trackEvent(eventName: string, properties: Record<string, any>, checkRateLimit?: boolean): void;
17
+ trackSessionStart(): void;
18
+ trackSearchQuery(query: string, resultsFound: number, searchType: string): void;
19
+ trackValidationDetails(nodeType: string, errorType: string, details: Record<string, any>): void;
20
+ trackToolSequence(previousTool: string, currentTool: string, timeDelta: number): void;
21
+ trackNodeConfiguration(nodeType: string, propertiesSet: number, usedDefaults: boolean): void;
22
+ trackPerformanceMetric(operation: string, duration: number, metadata?: Record<string, any>): void;
23
+ updateToolSequence(toolName: string): void;
24
+ getEventQueue(): TelemetryEvent[];
25
+ getWorkflowQueue(): WorkflowTelemetry[];
26
+ clearEventQueue(): void;
27
+ clearWorkflowQueue(): void;
28
+ getStats(): {
29
+ rateLimiter: {
30
+ currentEvents: number;
31
+ maxEvents: number;
32
+ windowMs: number;
33
+ droppedEvents: number;
34
+ utilizationPercent: number;
35
+ remainingCapacity: number;
36
+ arraySize: number;
37
+ maxArraySize: number;
38
+ memoryUsagePercent: number;
39
+ };
40
+ validator: {
41
+ errors: number;
42
+ successes: number;
43
+ total: number;
44
+ errorRate: number;
45
+ };
46
+ eventQueueSize: number;
47
+ workflowQueueSize: number;
48
+ performanceMetrics: Record<string, any>;
49
+ };
50
+ private recordPerformanceMetric;
51
+ private getPerformanceStats;
52
+ private categorizeError;
53
+ private categorizeConfigComplexity;
54
+ private getPackageVersion;
55
+ private sanitizeErrorType;
56
+ private sanitizeContext;
57
+ }
58
+ //# sourceMappingURL=event-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-tracker.d.ts","sourceRoot":"","sources":["../../src/telemetry/event-tracker.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAStE,qBAAa,qBAAqB;IAU9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IAVnB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,qBAAqB,CAAa;IAC1C,OAAO,CAAC,kBAAkB,CAAoC;gBAGpD,SAAS,EAAE,MAAM,MAAM,EACvB,SAAS,EAAE,MAAM,OAAO;IASlC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAkCrE,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA6DpF,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAcvE,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,cAAc,GAAE,OAAc,GAAG,IAAI;IAyBpG,iBAAiB,IAAI,IAAI;IAczB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAe/E,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAc/F,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAerF,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,IAAI;IAc5F,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAkBjG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAa1C,aAAa,IAAI,cAAc,EAAE;IAOjC,gBAAgB,IAAI,iBAAiB,EAAE;IAOvC,eAAe,IAAI,IAAI;IAOvB,kBAAkB,IAAI,IAAI;IAO1B,QAAQ;;;;;;;;;;;;;;;;;;;;;;IAaR,OAAO,CAAC,uBAAuB;IAiB/B,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,0BAA0B;IAUlC,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,eAAe;CAMxB"}