n8n
Version:
n8n Workflow Automation Tool
64 lines • 2.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
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 credentialTypeName(server) {
return `${(0, change_case_1.camelCase)(server.slug)}McpOAuth2Api`;
}
function toSearchResult(server) {
const remote = pickPreferredRemote(server);
if (!remote)
return null;
const credentialType = credentialTypeName(server);
return {
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 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 searchMcpRegistryServers(servers, queries) {
const normalized = normalizeQueries(queries);
if (normalized.length === 0)
return [];
return servers.flatMap((server) => {
if (!matchesQuery(server, normalized))
return [];
const result = toSearchResult(server);
return result ? [result] : [];
});
}
//# sourceMappingURL=mcp-registry-search.js.map