UNPKG

n8n

Version:

n8n Workflow Automation Tool

78 lines 3.14 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.listMcpRegistryServers = listMcpRegistryServers; exports.searchMcpRegistryServers = searchMcpRegistryServers; const change_case_1 = require("change-case"); const node_description_transform_1 = require("../node-description-transform"); function pickPreferredRemote(server) { const streamable = server.remotes.find((remote) => remote.type === 'streamable-http'); if (streamable) return { type: 'streamableHttp', url: streamable.url }; const sse = server.remotes.find((remote) => remote.type === 'sse'); if (sse) return { type: 'sse', url: sse.url }; return null; } function toSearchResult(server) { const remote = pickPreferredRemote(server); if (!remote) return null; const credentialType = (0, node_description_transform_1.getMcpRegistryCredentialTypeName)(server); return { slug: server.slug, name: (0, change_case_1.camelCase)(server.slug), title: server.title, description: server.tagline, url: remote.url, transport: remote.type, authentication: credentialType, credentialType, tools: server.tools.map((tool) => ({ name: tool.name, ...(tool.title ? { title: tool.title } : {}), })), metadata: { nodeTypeName: `${node_description_transform_1.MCP_REGISTRY_PACKAGE_NAME}.${(0, change_case_1.camelCase)(server.slug)}` }, }; } function listMcpRegistryServers(servers) { return servers.flatMap((server) => { const result = toSearchResult(server); return result ? [result] : []; }); } function normalizeQueries(queries) { return queries.map((query) => query.trim().toLowerCase()).filter((query) => query.length > 0); } function matchesQuery(server, normalizedQueries) { const fields = [ server.slug, (0, change_case_1.camelCase)(server.slug), server.title, server.description, server.tagline, ] .filter((field) => typeof field === 'string') .map((field) => field.toLowerCase()); return normalizedQueries.some((query) => fields.some((field) => field.includes(query))); } function relevance(server, normalizedQueries) { const names = [server.slug, (0, change_case_1.camelCase)(server.slug), server.title] .filter((name) => typeof name === 'string') .map((name) => name.toLowerCase()); if (normalizedQueries.some((query) => names.includes(query))) return 2; if (normalizedQueries.some((query) => names.some((name) => name.includes(query)))) return 1; return 0; } function searchMcpRegistryServers(servers, queries) { const normalized = normalizeQueries(queries); if (normalized.length === 0) return []; return listMcpRegistryServers(servers .filter((server) => matchesQuery(server, normalized)) .map((server) => ({ server, score: relevance(server, normalized) })) .sort((left, right) => right.score - left.score) .map(({ server }) => server)); } //# sourceMappingURL=mcp-registry-search.js.map