n8n
Version:
n8n Workflow Automation Tool
57 lines • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CompositeLocalMcpServer = void 0;
exports.composeLocalMcpServers = composeLocalMcpServers;
function composeLocalMcpServers(...servers) {
const present = servers.filter((server) => server !== undefined);
if (present.length === 0) {
return undefined;
}
if (present.length === 1) {
return present[0];
}
return new CompositeLocalMcpServer(present);
}
class CompositeLocalMcpServer {
constructor(servers) {
this.servers = servers;
this.availableToolsByCategory = new Map();
this.availableTools = this.dedupe((server) => server.getAvailableTools());
}
getAvailableTools() {
return this.unwrapTools(this.availableTools);
}
getToolsByCategory(category) {
if (!this.availableToolsByCategory.has(category)) {
this.availableToolsByCategory.set(category, this.dedupe((server) => server.getToolsByCategory(category)));
}
return this.unwrapTools(this.availableToolsByCategory.get(category));
}
async callTool(req, options) {
const serverTool = this.availableTools.get(req.name);
if (!serverTool) {
return {
content: [{ type: 'text', text: `Unknown tool: ${req.name}` }],
isError: true,
};
}
return await serverTool.server.callTool(req, options);
}
unwrapTools(tools) {
return Array.from(tools.values()).map(({ tool }) => tool);
}
dedupe(getter) {
const toolsMap = new Map();
for (const server of this.servers) {
for (const tool of getter(server)) {
toolsMap.set(tool.name, {
server,
tool,
});
}
}
return toolsMap;
}
}
exports.CompositeLocalMcpServer = CompositeLocalMcpServer;
//# sourceMappingURL=composite-local-mcp-server.js.map