n8n
Version:
n8n Workflow Automation Tool
120 lines • 6.16 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
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;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.McpSettingsController = void 0;
const backend_common_1 = require("@n8n/backend-common");
const config_1 = require("@n8n/config");
const decorators_1 = require("@n8n/decorators");
const forbidden_error_1 = require("../../errors/response-errors/forbidden.error");
const middlewares_1 = require("../../middlewares");
const workflow_service_1 = require("../../workflows/workflow.service");
const update_mcp_settings_dto_1 = require("./dto/update-mcp-settings.dto");
const update_workflows_availability_dto_1 = require("./dto/update-workflows-availability.dto");
const mcp_api_key_service_1 = require("./mcp-api-key.service");
const mcp_settings_service_1 = require("./mcp.settings.service");
let McpSettingsController = class McpSettingsController {
constructor(mcpSettingsService, logger, moduleRegistry, mcpServerApiKeyService, workflowService, instanceSettingsLoaderConfig) {
this.mcpSettingsService = mcpSettingsService;
this.logger = logger;
this.moduleRegistry = moduleRegistry;
this.mcpServerApiKeyService = mcpServerApiKeyService;
this.workflowService = workflowService;
this.instanceSettingsLoaderConfig = instanceSettingsLoaderConfig;
}
async updateSettings(_req, _res, dto) {
if (this.instanceSettingsLoaderConfig.mcpManagedByEnv) {
throw new forbidden_error_1.ForbiddenError('MCP settings are managed via environment variables');
}
const enabled = dto.mcpAccessEnabled;
await this.mcpSettingsService.setEnabled(enabled);
try {
await this.moduleRegistry.refreshModuleSettings('mcp');
}
catch (error) {
this.logger.warn('Failed to sync MCP settings to module registry', {
cause: error instanceof Error ? error.message : String(error),
});
}
return { mcpAccessEnabled: enabled };
}
async getApiKeyForMcpServer(req) {
return await this.mcpServerApiKeyService.getOrCreateApiKey(req.user);
}
async rotateApiKeyForMcpServer(req) {
return await this.mcpServerApiKeyService.rotateMcpServerApiKey(req.user);
}
async getMcpEligibleWorkflows(req, res) {
const options = {
...req.listQueryOptions,
filter: {
...req.listQueryOptions?.filter,
isArchived: false,
availableInMCP: false,
},
};
const { workflows, count } = await this.workflowService.getMany(req.user, options, false, false, false, ['workflow:update']);
res.json({ count, data: workflows });
}
async toggleWorkflowsMCPAccess(req, _res, dto) {
const { changedWorkflows, ...result } = await this.mcpSettingsService.bulkSetAvailableInMCP(req.user, dto);
void this.mcpSettingsService.broadcastWorkflowMCPAvailabilityChanged(changedWorkflows);
return result;
}
};
exports.McpSettingsController = McpSettingsController;
__decorate([
(0, decorators_1.GlobalScope)('mcp:manage'),
(0, decorators_1.Patch)('/settings'),
__param(2, decorators_1.Body),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, update_mcp_settings_dto_1.UpdateMcpSettingsDto]),
__metadata("design:returntype", Promise)
], McpSettingsController.prototype, "updateSettings", null);
__decorate([
(0, decorators_1.GlobalScope)('mcpApiKey:create'),
(0, decorators_1.Get)('/api-key'),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], McpSettingsController.prototype, "getApiKeyForMcpServer", null);
__decorate([
(0, decorators_1.GlobalScope)('mcpApiKey:rotate'),
(0, decorators_1.Post)('/api-key/rotate'),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object]),
__metadata("design:returntype", Promise)
], McpSettingsController.prototype, "rotateApiKeyForMcpServer", null);
__decorate([
(0, decorators_1.Get)('/workflows', { middlewares: middlewares_1.listQueryMiddleware }),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object]),
__metadata("design:returntype", Promise)
], McpSettingsController.prototype, "getMcpEligibleWorkflows", null);
__decorate([
(0, decorators_1.Patch)('/workflows/toggle-access'),
__param(2, decorators_1.Body),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, Object, update_workflows_availability_dto_1.UpdateWorkflowsAvailabilityDto]),
__metadata("design:returntype", Promise)
], McpSettingsController.prototype, "toggleWorkflowsMCPAccess", null);
exports.McpSettingsController = McpSettingsController = __decorate([
(0, decorators_1.RestController)('/mcp'),
__metadata("design:paramtypes", [mcp_settings_service_1.McpSettingsService,
backend_common_1.Logger,
backend_common_1.ModuleRegistry,
mcp_api_key_service_1.McpServerApiKeyService,
workflow_service_1.WorkflowService,
config_1.InstanceSettingsLoaderConfig])
], McpSettingsController);
//# sourceMappingURL=mcp.settings.controller.js.map