UNPKG

n8n-nodes-explorium

Version:
94 lines 3.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.convertJsonSchemaToZod = exports.connectMcpClient = exports.mcpToolToDynamicTool = exports.createCallTool = exports.getErrorDescriptionFromToolCall = exports.getAllTools = void 0; const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js"); const sse_js_1 = require("@modelcontextprotocol/sdk/client/sse.js"); const types_js_1 = require("@modelcontextprotocol/sdk/types.js"); const json_schema_to_zod_1 = require("@n8n/json-schema-to-zod"); const tools_1 = require("@langchain/core/tools"); const n8n_workflow_1 = require("n8n-workflow"); async function getAllTools(client, cursor) { const { tools, nextCursor } = await client.listTools({ cursor }); if (nextCursor) { return tools.concat(await getAllTools(client, nextCursor)); } return tools; } exports.getAllTools = getAllTools; const getErrorDescriptionFromToolCall = (result) => { var _a; if (result && typeof result === 'object') { const typedResult = result; if ('content' in typedResult && Array.isArray(typedResult.content)) { const errorMessage = (_a = typedResult.content.find((content) => content && typeof content === 'object' && typeof content.text === 'string')) === null || _a === void 0 ? void 0 : _a.text; return errorMessage; } else if ('toolResult' in typedResult && typeof typedResult.toolResult === 'string') { return typedResult.toolResult; } if ('message' in typedResult && typeof typedResult.message === 'string') { return typedResult.message; } } return undefined; }; exports.getErrorDescriptionFromToolCall = getErrorDescriptionFromToolCall; const createCallTool = (name, client, onError) => async (args) => { try { const result = await client.callTool({ name, arguments: args }, types_js_1.CompatibilityCallToolResultSchema); if (result.isError) { return onError((0, exports.getErrorDescriptionFromToolCall)(result)); } if (result.toolResult !== undefined) { return result.toolResult; } if (result.content !== undefined) { return result.content; } return result; } catch (error) { return onError((0, exports.getErrorDescriptionFromToolCall)(error)); } }; exports.createCallTool = createCallTool; function mcpToolToDynamicTool(tool, onCallTool) { var _a; return new tools_1.DynamicStructuredTool({ name: tool.name, description: (_a = tool.description) !== null && _a !== void 0 ? _a : '', schema: convertJsonSchemaToZod(tool.inputSchema), func: onCallTool, metadata: { isFromToolkit: true }, }); } exports.mcpToolToDynamicTool = mcpToolToDynamicTool; async function connectMcpClient({ headers, sseEndpoint, name, version, }) { try { const endpoint = new URL(sseEndpoint); const transport = new sse_js_1.SSEClientTransport(endpoint, { eventSourceInit: { fetch: async (url, init) => await fetch(url, { ...init, headers: { ...headers, Accept: 'text/event-stream', }, }), }, requestInit: { headers }, }); const client = new index_js_1.Client({ name, version: version.toString() }, { capabilities: { tools: {} } }); await client.connect(transport); return (0, n8n_workflow_1.createResultOk)(client); } catch (error) { return (0, n8n_workflow_1.createResultError)({ type: 'connection', error }); } } exports.connectMcpClient = connectMcpClient; function convertJsonSchemaToZod(schema) { return (0, json_schema_to_zod_1.jsonSchemaToZod)(schema); } exports.convertJsonSchemaToZod = convertJsonSchemaToZod; //# sourceMappingURL=utils.js.map