Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions packages/mcp-client/src/McpClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,6 @@ export class McpClient {
for (const toolCall of Object.values(finalToolCalls)) {
const toolName = toolCall.function.name ?? "unknown";
/// TODO(Fix upstream type so this is always a string)^
const toolArgs = toolCall.function.arguments === "" ? {} : JSON.parse(toolCall.function.arguments);

const toolMessage: ChatCompletionInputMessageTool = {
role: "tool",
tool_call_id: toolCall.id,
Expand All @@ -193,11 +191,26 @@ export class McpClient {
messages.push(toolMessage);
return yield toolMessage;
}
let toolArgs: Record<string, unknown> = {};
try {
toolArgs = toolCall.function.arguments === "" ? {} : JSON.parse(toolCall.function.arguments);
} catch (error) {
if (error instanceof SyntaxError) {
toolMessage.content = `Invalid JSON generated by the model: ${error.message}`;
} else {
throw error;
}
}

/// Get the appropriate session for this tool
const client = this.clients.get(toolName);
if (client) {
const result = await client.callTool({ name: toolName, arguments: toolArgs, signal: opts.abortSignal });
toolMessage.content = ResultFormatter.format(result);
try {
const result = await client.callTool({ name: toolName, arguments: toolArgs, signal: opts.abortSignal });
toolMessage.content = ResultFormatter.format(result);
} catch (error) {
toolMessage.content = `Error: MCP tool call failed with error message: ${error}`;
}
} else {
toolMessage.content = `Error: No session found for tool: ${toolName}`;
}
Expand Down