n8n-mcp 2.75.1 → 2.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -5
- package/dist/http-server-single-session.d.ts.map +1 -1
- package/dist/http-server-single-session.js.map +1 -1
- package/dist/mcp/agents-action-map.d.ts +1 -0
- package/dist/mcp/agents-action-map.d.ts.map +1 -1
- package/dist/mcp/agents-action-map.js +2 -1
- package/dist/mcp/agents-action-map.js.map +1 -1
- package/dist/mcp/handlers-n8n-manager.d.ts +3 -0
- package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
- package/dist/mcp/handlers-n8n-manager.js +564 -103
- package/dist/mcp/handlers-n8n-manager.js.map +1 -1
- package/dist/mcp/handlers-official-tools.d.ts +17 -0
- package/dist/mcp/handlers-official-tools.d.ts.map +1 -1
- package/dist/mcp/handlers-official-tools.js +78 -34
- package/dist/mcp/handlers-official-tools.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +10 -76
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-manage-datatable.d.ts.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-manage-datatable.js +31 -9
- package/dist/mcp/tool-docs/workflow_management/n8n-manage-datatable.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.d.ts.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.js +92 -19
- package/dist/mcp/tool-docs/workflow_management/n8n-test-workflow.js.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-workflow-versions.d.ts.map +1 -1
- package/dist/mcp/tool-docs/workflow_management/n8n-workflow-versions.js +129 -28
- package/dist/mcp/tool-docs/workflow_management/n8n-workflow-versions.js.map +1 -1
- package/dist/mcp/tool-policy.d.ts +9 -0
- package/dist/mcp/tool-policy.d.ts.map +1 -0
- package/dist/mcp/tool-policy.js +138 -0
- package/dist/mcp/tool-policy.js.map +1 -0
- package/dist/mcp/tools-documentation.js +3 -3
- package/dist/mcp/tools-n8n-manager.d.ts +1 -0
- package/dist/mcp/tools-n8n-manager.d.ts.map +1 -1
- package/dist/mcp/tools-n8n-manager.js +103 -21
- package/dist/mcp/tools-n8n-manager.js.map +1 -1
- package/dist/services/mcp-exposure.d.ts +21 -0
- package/dist/services/mcp-exposure.d.ts.map +1 -0
- package/dist/services/mcp-exposure.js +131 -0
- package/dist/services/mcp-exposure.js.map +1 -0
- package/dist/services/n8n-official-mcp-client.d.ts.map +1 -1
- package/dist/services/n8n-official-mcp-client.js +25 -3
- package/dist/services/n8n-official-mcp-client.js.map +1 -1
- package/dist/services/workflow-versioning-service.d.ts +2 -1
- package/dist/services/workflow-versioning-service.d.ts.map +1 -1
- package/dist/services/workflow-versioning-service.js +8 -2
- package/dist/services/workflow-versioning-service.js.map +1 -1
- package/dist/triggers/index.d.ts +1 -1
- package/dist/triggers/index.d.ts.map +1 -1
- package/dist/triggers/index.js +2 -1
- package/dist/triggers/index.js.map +1 -1
- package/dist/triggers/trigger-detector.d.ts +3 -2
- package/dist/triggers/trigger-detector.d.ts.map +1 -1
- package/dist/triggers/trigger-detector.js +12 -0
- package/dist/triggers/trigger-detector.js.map +1 -1
- package/dist/types/n8n-api.d.ts +6 -0
- package/dist/types/n8n-api.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OFFICIAL_TOOL_MIN_VERSION = void 0;
|
|
3
4
|
exports.callOfficialTool = callOfficialTool;
|
|
4
5
|
exports.handleExploreNodeResources = handleExploreNodeResources;
|
|
5
6
|
exports.handleListCatalog = handleListCatalog;
|
|
7
|
+
exports.resolveProjectChoices = resolveProjectChoices;
|
|
6
8
|
const zod_1 = require("zod");
|
|
7
9
|
const official_mcp_access_1 = require("./official-mcp-access");
|
|
8
10
|
const n8n_official_mcp_client_1 = require("../services/n8n-official-mcp-client");
|
|
9
11
|
const agents_action_map_1 = require("./agents-action-map");
|
|
10
12
|
const logger_1 = require("../utils/logger");
|
|
11
13
|
const handlers_n8n_manager_1 = require("./handlers-n8n-manager");
|
|
14
|
+
const mcp_exposure_1 = require("../services/mcp-exposure");
|
|
12
15
|
const n8n_errors_1 = require("../utils/n8n-errors");
|
|
13
16
|
const exploreSchema = zod_1.z.object({
|
|
14
17
|
nodeType: zod_1.z.string().min(1),
|
|
@@ -23,6 +26,21 @@ const exploreSchema = zod_1.z.object({
|
|
|
23
26
|
timeoutMs: zod_1.z.number().int().min(agents_action_map_1.MIN_TIMEOUT_MS).max(agents_action_map_1.MAX_TIMEOUT_MS).optional(),
|
|
24
27
|
}).strict();
|
|
25
28
|
const EXPLORE_TOOLS = ['explore_node_resources'];
|
|
29
|
+
exports.OFFICIAL_TOOL_MIN_VERSION = {
|
|
30
|
+
get_workflow_versions_diff: '2.36',
|
|
31
|
+
get_workflow_history: '2.34',
|
|
32
|
+
get_workflow_version: '2.34',
|
|
33
|
+
restore_workflow_version: '2.34',
|
|
34
|
+
prepare_workflow_pin_data: '2.34',
|
|
35
|
+
test_workflow: '2.34',
|
|
36
|
+
execute_workflow: '2.34',
|
|
37
|
+
add_data_table_column: '2.34',
|
|
38
|
+
delete_data_table_column: '2.34',
|
|
39
|
+
rename_data_table_column: '2.34',
|
|
40
|
+
explore_node_resources: '2.34',
|
|
41
|
+
search_projects: '2.34',
|
|
42
|
+
};
|
|
43
|
+
const DEFAULT_MIN_VERSION = '2.34';
|
|
26
44
|
async function callOfficialTool(context, toolAliases, args, timeoutMs, label, idempotent) {
|
|
27
45
|
const client = (0, official_mcp_access_1.getOfficialMcpClient)(context);
|
|
28
46
|
if (!client)
|
|
@@ -32,14 +50,26 @@ async function callOfficialTool(context, toolAliases, args, timeoutMs, label, id
|
|
|
32
50
|
if (!caps.reachable)
|
|
33
51
|
return (0, official_mcp_access_1.officialFailure)(new n8n_official_mcp_client_1.OfficialMcpError(caps.error ?? 'OFFICIAL_MCP_TRANSPORT_ERROR', 'n8n MCP server is not reachable'), label);
|
|
34
52
|
const tool = toolAliases.find(t => caps.toolNames.includes(t));
|
|
35
|
-
if (!tool)
|
|
36
|
-
|
|
53
|
+
if (!tool) {
|
|
54
|
+
const minVersion = exports.OFFICIAL_TOOL_MIN_VERSION[toolAliases[0]] ?? DEFAULT_MIN_VERSION;
|
|
55
|
+
return (0, official_mcp_access_1.officialFailure)(new n8n_official_mcp_client_1.OfficialMcpError('OFFICIAL_MCP_TOOL_UNAVAILABLE', `This instance does not expose ${toolAliases.join(' / ')} (needs n8n >= ${minVersion})`), label);
|
|
56
|
+
}
|
|
37
57
|
const result = await client.callTool(tool, args, { timeoutMs, idempotent });
|
|
38
58
|
const data = result.json ?? result.text;
|
|
39
59
|
if (result.text.startsWith('Input validation error'))
|
|
40
60
|
return { success: false, action: label, code: 'INVALID_ARGS', error: result.text.slice(0, 2000) };
|
|
41
|
-
|
|
42
|
-
|
|
61
|
+
const root = data;
|
|
62
|
+
const executeDispatchFailed = tool === 'execute_workflow' && root?.status === 'error';
|
|
63
|
+
const isFailure = result.isError ||
|
|
64
|
+
root?.ok === false ||
|
|
65
|
+
root?.success === false ||
|
|
66
|
+
executeDispatchFailed;
|
|
67
|
+
if (isFailure) {
|
|
68
|
+
const hasText = typeof root?.message === 'string' || typeof root?.error === 'string';
|
|
69
|
+
const error = executeDispatchFailed && !hasText
|
|
70
|
+
? 'execute_workflow reported status "error" without an error message'
|
|
71
|
+
: (0, official_mcp_access_1.officialErrorText)(data, undefined);
|
|
72
|
+
return { success: false, action: label, officialTool: tool, code: 'OFFICIAL_MCP_ERROR', error, officialError: data };
|
|
43
73
|
}
|
|
44
74
|
return { success: true, action: label, officialTool: tool, data, ...(result.truncated ? { truncated: true } : {}) };
|
|
45
75
|
}
|
|
@@ -86,55 +116,69 @@ async function handleListCatalog(args, context) {
|
|
|
86
116
|
return { success: false, kind, code: 'API_ERROR', error: err instanceof Error ? err.message : String(err) };
|
|
87
117
|
}
|
|
88
118
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
119
|
+
const resolved = await resolveProjectChoices(context);
|
|
120
|
+
if ('failure' in resolved)
|
|
121
|
+
return { ...resolved.failure, kind };
|
|
122
|
+
const { backend, teamProjectsEnabled, items } = resolved.choices;
|
|
123
|
+
return {
|
|
124
|
+
success: true,
|
|
125
|
+
kind,
|
|
126
|
+
backend,
|
|
127
|
+
data: { teamProjectsEnabled, items: filterItems(items, query, limit) },
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
async function resolveProjectChoices(context) {
|
|
131
|
+
const contextMatches = (0, mcp_exposure_1.publicApiMatchesContext)(context);
|
|
132
|
+
const api = contextMatches ? (0, handlers_n8n_manager_1.getN8nApiClient)(context) : null;
|
|
133
|
+
if (contextMatches) {
|
|
134
|
+
if (!api) {
|
|
135
|
+
return { failure: { success: false, code: 'NOT_CONFIGURED', error: 'n8n API not configured. Set N8N_API_URL and N8N_API_KEY.' } };
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
const projects = (await api.listProjects()).map(p => ({ id: p.id, name: p.name, type: p.type, personal: p.type === 'personal' }));
|
|
139
|
+
return { choices: { backend: 'public-api', teamProjectsEnabled: true, items: projects } };
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
const status = err instanceof n8n_errors_1.N8nApiError ? err.statusCode : undefined;
|
|
143
|
+
if (status !== 403 && status !== 404) {
|
|
144
|
+
return { failure: { success: false, code: 'API_ERROR', error: err instanceof Error ? err.message : String(err) } };
|
|
145
|
+
}
|
|
102
146
|
}
|
|
103
147
|
}
|
|
104
148
|
if ((0, official_mcp_access_1.getOfficialMcpClient)(context)) {
|
|
105
149
|
const official = await callOfficialTool(context, CATALOG_TOOLS, {}, agents_action_map_1.DEFAULT_TIMEOUT_MS, 'list_catalog', true);
|
|
106
150
|
if (!official.success)
|
|
107
|
-
return { ...official,
|
|
151
|
+
return { failure: { ...official, backend: 'official-mcp' } };
|
|
108
152
|
const officialData = official.data;
|
|
109
153
|
const raw = (officialData?.data ?? []);
|
|
110
154
|
const items = raw.map(p => ({ id: String(p.id), name: String(p.name), type: p.type, personal: p.type === 'personal' }));
|
|
111
155
|
const teamProjectsEnabled = typeof officialData?.teamProjectsEnabled === 'boolean'
|
|
112
156
|
? officialData.teamProjectsEnabled
|
|
113
157
|
: items.some(p => !p.personal);
|
|
114
|
-
return {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
data: { teamProjectsEnabled, items: filterItems(items, query, limit) },
|
|
119
|
-
};
|
|
158
|
+
return { choices: { backend: 'official-mcp', teamProjectsEnabled, items } };
|
|
159
|
+
}
|
|
160
|
+
if (!api) {
|
|
161
|
+
return { failure: { success: false, code: 'NOT_CONFIGURED', backend: 'official-mcp', error: mcp_exposure_1.PUBLIC_API_CONTEXT_HINT } };
|
|
120
162
|
}
|
|
121
163
|
try {
|
|
122
164
|
const personalId = await api.resolvePersonalProjectId();
|
|
123
165
|
return {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
166
|
+
choices: {
|
|
167
|
+
backend: 'public-api',
|
|
168
|
+
teamProjectsEnabled: false,
|
|
169
|
+
items: [{ id: personalId, name: 'Personal', type: 'personal', personal: true }],
|
|
170
|
+
},
|
|
128
171
|
};
|
|
129
172
|
}
|
|
130
173
|
catch (err) {
|
|
131
174
|
return {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
175
|
+
failure: {
|
|
176
|
+
success: false,
|
|
177
|
+
backend: 'public-api',
|
|
178
|
+
code: 'API_ERROR',
|
|
179
|
+
error: err instanceof Error ? err.message : String(err),
|
|
180
|
+
hint: 'Team projects are not available through the Public API on this instance and the personal project could not be resolved. Pass projectId explicitly, or configure N8N_MCP_ACCESS_TOKEN so projects can be listed through n8n\'s MCP server.',
|
|
181
|
+
},
|
|
138
182
|
};
|
|
139
183
|
}
|
|
140
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers-official-tools.js","sourceRoot":"","sources":["../../src/mcp/handlers-official-tools.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handlers-official-tools.js","sourceRoot":"","sources":["../../src/mcp/handlers-official-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.js
CHANGED
|
@@ -46,6 +46,7 @@ const tools_1 = require("./tools");
|
|
|
46
46
|
const ui_1 = require("./ui");
|
|
47
47
|
const skills_1 = require("./skills");
|
|
48
48
|
const tools_n8n_manager_1 = require("./tools-n8n-manager");
|
|
49
|
+
const tool_policy_1 = require("./tool-policy");
|
|
49
50
|
const tools_n8n_friendly_1 = require("./tools-n8n-friendly");
|
|
50
51
|
const workflow_examples_1 = require("./workflow-examples");
|
|
51
52
|
const logger_1 = require("../utils/logger");
|
|
@@ -374,84 +375,14 @@ class N8NDocumentationMCPServer {
|
|
|
374
375
|
if (this.disabledToolsCache !== null) {
|
|
375
376
|
return this.disabledToolsCache;
|
|
376
377
|
}
|
|
377
|
-
|
|
378
|
-
if (!disabledToolsEnv) {
|
|
379
|
-
this.disabledToolsCache = new Set();
|
|
380
|
-
return this.disabledToolsCache;
|
|
381
|
-
}
|
|
382
|
-
if (disabledToolsEnv.length > 10000) {
|
|
383
|
-
logger_1.logger.warn(`DISABLED_TOOLS environment variable too long (${disabledToolsEnv.length} chars), truncating to 10000`);
|
|
384
|
-
disabledToolsEnv = disabledToolsEnv.substring(0, 10000);
|
|
385
|
-
}
|
|
386
|
-
let tools = disabledToolsEnv
|
|
387
|
-
.split(',')
|
|
388
|
-
.map(t => t.trim())
|
|
389
|
-
.filter(Boolean);
|
|
390
|
-
if (tools.length > 200) {
|
|
391
|
-
logger_1.logger.warn(`DISABLED_TOOLS contains ${tools.length} tools, limiting to first 200`);
|
|
392
|
-
tools = tools.slice(0, 200);
|
|
393
|
-
}
|
|
394
|
-
if (tools.length > 0) {
|
|
395
|
-
logger_1.logger.info(`Disabled tools configured: ${tools.join(', ')}`);
|
|
396
|
-
}
|
|
397
|
-
this.disabledToolsCache = new Set(tools);
|
|
378
|
+
this.disabledToolsCache = (0, tool_policy_1.getDisabledTools)();
|
|
398
379
|
return this.disabledToolsCache;
|
|
399
380
|
}
|
|
400
381
|
getDisabledToolOperations() {
|
|
401
382
|
if (this.disabledToolOperationsCache !== null) {
|
|
402
383
|
return this.disabledToolOperationsCache;
|
|
403
384
|
}
|
|
404
|
-
const result =
|
|
405
|
-
let envVal = process.env.DISABLED_TOOL_OPERATIONS || '';
|
|
406
|
-
if (!envVal) {
|
|
407
|
-
this.disabledToolOperationsCache = result;
|
|
408
|
-
this.filteredToolDefinitionsCache = new Map();
|
|
409
|
-
return result;
|
|
410
|
-
}
|
|
411
|
-
if (envVal.length > 10000) {
|
|
412
|
-
logger_1.logger.warn(`DISABLED_TOOL_OPERATIONS environment variable too long (${envVal.length} chars), truncating to 10000`);
|
|
413
|
-
envVal = envVal.substring(0, 10000);
|
|
414
|
-
}
|
|
415
|
-
let entries = envVal.split(';').map(e => e.trim()).filter(Boolean);
|
|
416
|
-
if (entries.length > 50) {
|
|
417
|
-
logger_1.logger.warn(`DISABLED_TOOL_OPERATIONS contains ${entries.length} entries, limiting to first 50`);
|
|
418
|
-
entries = entries.slice(0, 50);
|
|
419
|
-
}
|
|
420
|
-
for (const entry of entries) {
|
|
421
|
-
const colonIdx = entry.indexOf(':');
|
|
422
|
-
if (colonIdx === -1)
|
|
423
|
-
continue;
|
|
424
|
-
const toolName = entry.substring(0, colonIdx).trim();
|
|
425
|
-
const opsStr = entry.substring(colonIdx + 1).trim();
|
|
426
|
-
if (!toolName || !opsStr)
|
|
427
|
-
continue;
|
|
428
|
-
const ops = opsStr.split(',').map(o => o.trim().toLowerCase()).filter(Boolean);
|
|
429
|
-
if (ops.length === 0)
|
|
430
|
-
continue;
|
|
431
|
-
const existing = result.get(toolName) ?? new Set();
|
|
432
|
-
ops.forEach(op => existing.add(op));
|
|
433
|
-
result.set(toolName, existing);
|
|
434
|
-
}
|
|
435
|
-
for (const [toolName, ops] of result) {
|
|
436
|
-
const paramName = tools_n8n_manager_1.TOOL_OPERATION_PARAM[toolName];
|
|
437
|
-
if (!paramName) {
|
|
438
|
-
logger_1.logger.warn(`DISABLED_TOOL_OPERATIONS: unknown tool '${toolName}' — no per-operation filtering applied. Eligible tools: ${Object.keys(tools_n8n_manager_1.TOOL_OPERATION_PARAM).join(', ')}`);
|
|
439
|
-
continue;
|
|
440
|
-
}
|
|
441
|
-
const tool = tools_n8n_manager_1.n8nManagementTools.find(t => t.name === toolName);
|
|
442
|
-
const enumValues = tool?.inputSchema?.properties?.[paramName]?.enum ?? [];
|
|
443
|
-
for (const op of ops) {
|
|
444
|
-
if (enumValues.length > 0 && !enumValues.includes(op)) {
|
|
445
|
-
logger_1.logger.warn(`DISABLED_TOOL_OPERATIONS: '${op}' is not a valid ${paramName} for '${toolName}' (valid: ${enumValues.join(', ')}); it will have no effect.`);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
if (result.size > 0) {
|
|
450
|
-
const summary = [...result.entries()]
|
|
451
|
-
.map(([t, ops]) => `${t}: [${[...ops].join(', ')}]`)
|
|
452
|
-
.join('; ');
|
|
453
|
-
logger_1.logger.info(`Disabled tool operations configured: ${summary}`);
|
|
454
|
-
}
|
|
385
|
+
const result = (0, tool_policy_1.getDisabledToolOperations)();
|
|
455
386
|
this.disabledToolOperationsCache = result;
|
|
456
387
|
this.filteredToolDefinitionsCache = this.buildFilteredToolDefinitions(result);
|
|
457
388
|
return result;
|
|
@@ -466,6 +397,7 @@ class N8NDocumentationMCPServer {
|
|
|
466
397
|
if (!original)
|
|
467
398
|
continue;
|
|
468
399
|
const cloned = JSON.parse(JSON.stringify(original));
|
|
400
|
+
const remaining = [...(0, tool_policy_1.getValidOperations)(toolName)].filter(v => !ops.has(v));
|
|
469
401
|
const param = cloned.inputSchema?.properties?.[paramName];
|
|
470
402
|
if (param?.enum) {
|
|
471
403
|
param.enum = param.enum.filter(v => !ops.has(v.toLowerCase()));
|
|
@@ -483,7 +415,6 @@ class N8NDocumentationMCPServer {
|
|
|
483
415
|
cloned.description = `${cloned.description}\n\n> Operations disabled by server policy: ${disabledList}`;
|
|
484
416
|
const destructive = tools_n8n_manager_1.DESTRUCTIVE_TOOL_OPERATIONS[toolName];
|
|
485
417
|
if (destructive && cloned.annotations) {
|
|
486
|
-
const remaining = param?.enum ?? [];
|
|
487
418
|
const stillDestructive = remaining.some(v => destructive.has(String(v).toLowerCase()));
|
|
488
419
|
if (!stillDestructive) {
|
|
489
420
|
cloned.annotations = { ...cloned.annotations, readOnlyHint: true, destructiveHint: false };
|
|
@@ -656,7 +587,7 @@ class N8NDocumentationMCPServer {
|
|
|
656
587
|
if (disabledOpsForTool && disabledOpsForTool.size > 0) {
|
|
657
588
|
const paramName = tools_n8n_manager_1.TOOL_OPERATION_PARAM[name];
|
|
658
589
|
if (paramName) {
|
|
659
|
-
const requestedOp = processedArgs
|
|
590
|
+
const requestedOp = (0, tool_policy_1.resolveRequestedOperation)(name, processedArgs);
|
|
660
591
|
if (requestedOp && disabledOpsForTool.has(String(requestedOp).toLowerCase())) {
|
|
661
592
|
logger_1.logger.warn(`Attempted to call disabled operation: ${name}.${requestedOp}`);
|
|
662
593
|
return {
|
|
@@ -1163,7 +1094,7 @@ class N8NDocumentationMCPServer {
|
|
|
1163
1094
|
if (disabledOpsForTool && disabledOpsForTool.size > 0) {
|
|
1164
1095
|
const paramName = tools_n8n_manager_1.TOOL_OPERATION_PARAM[name];
|
|
1165
1096
|
if (paramName) {
|
|
1166
|
-
const requestedOp = args
|
|
1097
|
+
const requestedOp = (0, tool_policy_1.resolveRequestedOperation)(name, args);
|
|
1167
1098
|
if (requestedOp && disabledOpsForTool.has(String(requestedOp).toLowerCase())) {
|
|
1168
1099
|
throw new Error(`Operation '${requestedOp}' on tool '${name}' is disabled by server policy`);
|
|
1169
1100
|
}
|
|
@@ -1417,8 +1348,11 @@ class N8NDocumentationMCPServer {
|
|
|
1417
1348
|
case 'updateRows': return n8nHandlers.handleUpdateRows(args, this.instanceContext);
|
|
1418
1349
|
case 'upsertRows': return n8nHandlers.handleUpsertRows(args, this.instanceContext);
|
|
1419
1350
|
case 'deleteRows': return n8nHandlers.handleDeleteRows(args, this.instanceContext);
|
|
1351
|
+
case 'addColumn': return n8nHandlers.handleAddColumn(args, this.instanceContext);
|
|
1352
|
+
case 'deleteColumn': return n8nHandlers.handleDeleteColumn(args, this.instanceContext);
|
|
1353
|
+
case 'renameColumn': return n8nHandlers.handleRenameColumn(args, this.instanceContext);
|
|
1420
1354
|
default:
|
|
1421
|
-
throw new Error(`Unknown action: ${dtAction}. Valid actions: createTable, listTables, getTable, updateTable, deleteTable, getRows, insertRows, updateRows, upsertRows, deleteRows`);
|
|
1355
|
+
throw new Error(`Unknown action: ${dtAction}. Valid actions: createTable, listTables, getTable, updateTable, deleteTable, getRows, insertRows, updateRows, upsertRows, deleteRows, addColumn, deleteColumn, renameColumn`);
|
|
1422
1356
|
}
|
|
1423
1357
|
}
|
|
1424
1358
|
case 'n8n_manage_folders': {
|