n8n
Version:
n8n Workflow Automation Tool
72 lines • 3.7 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);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.McpProtectedResource = exports.SUPPORTED_SCOPES = exports.INSTANCE_MCP_RESOURCE_ID = void 0;
const api_types_1 = require("@n8n/api-types");
const config_1 = require("@n8n/config");
const di_1 = require("@n8n/di");
const mcp_scopes_1 = require("./mcp-scopes");
const mcp_config_1 = require("./mcp.config");
const mcp_settings_service_1 = require("./mcp.settings.service");
const url_service_1 = require("../../services/url.service");
exports.INSTANCE_MCP_RESOURCE_ID = 'instance-mcp';
exports.SUPPORTED_SCOPES = [...api_types_1.MCP_INSTANCE_SCOPES];
const MCP_RESOURCE_PATH = '/mcp-server/http';
const LEGACY_MCP_AUDIENCE = 'mcp-server-api';
let McpProtectedResource = class McpProtectedResource {
constructor(urlService, mcpSettingsService, mcpConfig, globalConfig) {
this.urlService = urlService;
this.mcpSettingsService = mcpSettingsService;
this.mcpConfig = mcpConfig;
this.globalConfig = globalConfig;
this.id = exports.INSTANCE_MCP_RESOURCE_ID;
this.scopes = exports.SUPPORTED_SCOPES;
this.isDefault = true;
}
getScopeTools() {
const builderEnabled = this.globalConfig.endpoints.mcpBuilderEnabled;
const tagsDisabled = this.globalConfig.tags.disabled;
return Object.fromEntries(Object.entries(mcp_scopes_1.TOOLS_BY_SCOPE).map(([scope, tools]) => [
scope,
tools.filter((tool) => (builderEnabled || !mcp_scopes_1.BUILDER_TOOLS.has(tool)) && (!tagsDisabled || tool !== 'list_tags')),
]));
}
getResourceUrl() {
if (this.mcpConfig.baseUrl) {
return `${this.mcpConfig.baseUrl}${MCP_RESOURCE_PATH}`;
}
const baseUrl = this.urlService.getInstanceBaseUrl().replace(/\/$/, '');
return `${baseUrl}${MCP_RESOURCE_PATH}`;
}
getProtectedResourceMetadataUrl() {
const url = new URL(this.getResourceUrl());
return `${url.origin}/.well-known/oauth-protected-resource${url.pathname}`;
}
getResourceUrls() {
const instanceUrl = `${this.urlService.getInstanceBaseUrl().replace(/\/$/, '')}${MCP_RESOURCE_PATH}`;
return [...new Set([this.getResourceUrl(), instanceUrl])];
}
getAudiences() {
return [...this.getResourceUrls(), LEGACY_MCP_AUDIENCE];
}
async getAllowedRedirectUris() {
return await this.mcpSettingsService.getAllowedRedirectUris();
}
async authorize(_user) {
return await this.mcpSettingsService.getEnabled();
}
};
exports.McpProtectedResource = McpProtectedResource;
exports.McpProtectedResource = McpProtectedResource = __decorate([
(0, di_1.Service)(),
__metadata("design:paramtypes", [url_service_1.UrlService, mcp_settings_service_1.McpSettingsService, mcp_config_1.McpConfig, config_1.GlobalConfig])
], McpProtectedResource);
//# sourceMappingURL=mcp-protected-resource.js.map