n8n
Version:
n8n Workflow Automation Tool
78 lines • 3.14 kB
JavaScript
;
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