diff --git a/packages/mcp-client/package.json b/packages/mcp-client/package.json index 0a3cc15c28..60345eec90 100644 --- a/packages/mcp-client/package.json +++ b/packages/mcp-client/package.json @@ -34,7 +34,7 @@ "prepare": "pnpm run build", "test": "vitest run", "check": "tsc", - "agent": "tsx cli.ts" + "cli": "tsx cli.ts" }, "files": [ "src", diff --git a/packages/mcp-client/src/McpClient.ts b/packages/mcp-client/src/McpClient.ts index a3d45479ed..04fe2b86e0 100644 --- a/packages/mcp-client/src/McpClient.ts +++ b/packages/mcp-client/src/McpClient.ts @@ -160,13 +160,18 @@ export class McpClient { for (const toolCall of delta.tool_calls ?? []) { // aggregating chunks into an encoded arguments JSON object if (!finalToolCalls[toolCall.index]) { + /// first chunk of the tool call finalToolCalls[toolCall.index] = toolCall; - } - if (finalToolCalls[toolCall.index].function.arguments === undefined) { - finalToolCalls[toolCall.index].function.arguments = ""; - } - if (toolCall.function.arguments) { - finalToolCalls[toolCall.index].function.arguments += toolCall.function.arguments; + + /// ensure .function.arguments is always a string + if (finalToolCalls[toolCall.index].function.arguments === undefined) { + finalToolCalls[toolCall.index].function.arguments = ""; + } + } else { + /// any subsequent chunk to the same tool call + if (toolCall.function.arguments) { + finalToolCalls[toolCall.index].function.arguments += toolCall.function.arguments; + } } } if (opts.exitIfFirstChunkNoTool && numOfChunks <= 2 && Object.keys(finalToolCalls).length === 0) {