diff --git a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts index a1a92261a7..9432aed5bd 100644 --- a/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts +++ b/packages/@n8n/nodes-langchain/nodes/mcp/McpClientTool/McpClientTool.node.test.ts @@ -57,7 +57,7 @@ describe('McpClientTool', () => { jest.resetAllMocks(); }); - it('should return a valid toolkit with usable tools', async () => { + it('should return a valid toolkit with usable tools (that returns a string)', async () => { jest.spyOn(Client.prototype, 'connect').mockResolvedValue(); jest .spyOn(Client.prototype, 'callTool') @@ -93,7 +93,7 @@ describe('McpClientTool', () => { expect(tools).toHaveLength(2); const toolCallResult = await tools[0].invoke({ input: 'foo' }); - expect(toolCallResult).toEqual([{ type: 'text', text: 'result from tool' }]); + expect(toolCallResult).toEqual(JSON.stringify([{ type: 'text', text: 'result from tool' }])); }); it('should support selecting tools to expose', async () => { diff --git a/packages/@n8n/nodes-langchain/nodes/mcp/McpTrigger/McpServer.ts b/packages/@n8n/nodes-langchain/nodes/mcp/McpTrigger/McpServer.ts index 7723cae019..4c94fb0ed6 100644 --- a/packages/@n8n/nodes-langchain/nodes/mcp/McpTrigger/McpServer.ts +++ b/packages/@n8n/nodes-langchain/nodes/mcp/McpTrigger/McpServer.ts @@ -120,7 +120,8 @@ export class McpServer { return { name: tool.name, description: tool.description, - inputSchema: zodToJsonSchema(tool.schema), + // Allow additional properties on tool call input + inputSchema: zodToJsonSchema(tool.schema, { removeAdditionalStrategy: 'strict' }), }; }), }; diff --git a/packages/@n8n/nodes-langchain/utils/logWrapper.ts b/packages/@n8n/nodes-langchain/utils/logWrapper.ts index 209929de50..17e123009b 100644 --- a/packages/@n8n/nodes-langchain/utils/logWrapper.ts +++ b/packages/@n8n/nodes-langchain/utils/logWrapper.ts @@ -395,7 +395,9 @@ export function logWrapper< logAiEvent(executeFunctions, 'ai-tool-called', { ...inputData, response }); executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); - return response; + + if (typeof response === 'string') return response; + return JSON.stringify(response); }; } }