UNPKG

n8n

Version:

n8n Workflow Automation Tool

133 lines 4.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MCP_BASE_OAUTH2_CREDENTIAL_NAME = exports.MCP_REGISTRY_BASE_NODE_NAME = exports.LANGCHAIN_PACKAGE_NAME = exports.MCP_REGISTRY_PACKAGE_NAME = void 0; exports.serverToCredentialDescription = serverToCredentialDescription; exports.serverToNodeDescription = serverToNodeDescription; const change_case_1 = require("change-case"); exports.MCP_REGISTRY_PACKAGE_NAME = '@n8n/mcp-registry'; exports.LANGCHAIN_PACKAGE_NAME = '@n8n/n8n-nodes-langchain'; exports.MCP_REGISTRY_BASE_NODE_NAME = 'mcpRegistryClientTool'; exports.MCP_BASE_OAUTH2_CREDENTIAL_NAME = 'mcpOAuth2Api'; function getMcpRegistryNodeTypeName(server) { return (0, change_case_1.camelCase)(server.slug); } function getMcpRegistryCredentialTypeName(server) { return `${(0, change_case_1.camelCase)(server.slug)}McpOAuth2Api`; } function serverToOAuth2CredentialDescription(server) { const remote = pickRemote(server); if (!remote) return null; return { name: getMcpRegistryCredentialTypeName(server), extends: [exports.MCP_BASE_OAUTH2_CREDENTIAL_NAME], icon: `node:${exports.MCP_REGISTRY_PACKAGE_NAME}.${getMcpRegistryNodeTypeName(server)}`, displayName: `${server.title} MCP OAuth2`, properties: [ { displayName: 'Use Dynamic Client Registration', name: 'useDynamicClientRegistration', type: 'hidden', default: true, }, { displayName: 'Server URL', name: 'serverUrl', type: 'hidden', default: remote.endpointUrl, }, { displayName: 'Allowed HTTP Request Domains', name: 'allowedHttpRequestDomains', type: 'hidden', default: 'none', }, ], }; } function getNodeDescriptionCredentials(server) { switch (server.authType) { case 'oauth2': return [{ name: getMcpRegistryCredentialTypeName(server), required: true }]; default: return []; } } function pickRemote(server) { const streamable = server.remotes.find((r) => r.type === 'streamable-http'); if (streamable) return { transport: 'httpStreamable', endpointUrl: streamable.url }; const sse = server.remotes.find((r) => r.type === 'sse'); if (sse) return { transport: 'sse', endpointUrl: sse.url }; return null; } const ICON_MIME_PREFERENCE = [ 'image/svg+xml', 'image/webp', 'image/png', 'image/jpeg', 'image/jpg', ]; function preferredIcon(icons) { for (const mimeType of ICON_MIME_PREFERENCE) { const match = icons.find((icon) => icon.mimeType === mimeType); if (match) return match; } return icons[0]; } function pickIconUrl(icons) { const light = preferredIcon(icons.filter((icon) => icon.theme === 'light')); const dark = preferredIcon(icons.filter((icon) => icon.theme === 'dark')); if (light && dark) return { light: light.src, dark: dark.src }; return preferredIcon(icons)?.src; } function withRemoteDefaults(properties, transport, endpointUrl) { return properties.map((prop) => { if (prop.name === 'endpointUrl') return { ...prop, default: endpointUrl }; if (prop.name === 'serverTransport') return { ...prop, default: transport }; return prop; }); } function serverToCredentialDescription(server) { switch (server.authType) { case 'oauth2': return serverToOAuth2CredentialDescription(server); default: return null; } } function serverToNodeDescription(server, baseDescription) { if (server.authType !== 'oauth2') return null; const remote = pickRemote(server); if (!remote) return null; const displayName = `${server.title} MCP`; const description = structuredClone(baseDescription); if (server.status === 'deprecated') { description.hidden = true; } else { delete description.hidden; } description.displayName = displayName; description.name = (0, change_case_1.camelCase)(server.slug); description.iconUrl = pickIconUrl(server.icons); description.description = server.description; description.defaults = { name: displayName }; description.credentials = getNodeDescriptionCredentials(server); if (description.codex) { description.codex.alias?.push(server.title, displayName); if (server.websiteUrl) { description.codex.resources = { primaryDocumentation: [{ url: server.websiteUrl }] }; } } description.properties = withRemoteDefaults(description.properties, remote.transport, remote.endpointUrl); return description; } //# sourceMappingURL=node-description-transform.js.map