{"record":{"id":"56b831e294fb6f8d","repo":"ruvnet/ruflo","slug":"mcp-tool-call-failed","errorCode":null,"errorMessage":"[mcp] tool call failed","messagePattern":"\\[mcp\\] tool call failed","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ruflo/src/ruvocal/src/lib/server/textGeneration/mcp/toolInvocation.ts","lineNumber":310,"sourceCode":"\t\t\t});\n\t\t} catch (err) {\n\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\tconst errName = err instanceof Error ? err.name : \"\";\n\t\t\tconst isAbortError =\n\t\t\t\tabortSignal?.aborted ||\n\t\t\t\terrName === \"AbortError\" ||\n\t\t\t\terrName === \"APIUserAbortError\" ||\n\t\t\t\terrMsg === \"Request was aborted.\" ||\n\t\t\t\terrMsg === \"This operation was aborted\";\n\t\t\tconst message = isAbortError ? \"Aborted by user\" : errMsg;\n\n\t\t\tif (isAbortError) {\n\t\t\t\tlogger.debug(\n\t\t\t\t\t{ server: mappingEntry.server, tool: mappingEntry.tool },\n\t\t\t\t\t\"[mcp] tool call aborted by user\"\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t{ server: mappingEntry.server, tool: mappingEntry.tool, err: message },\n\t\t\t\t\t\"[mcp] tool call failed\"\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push({ index, error: message, uuid: p.uuid, paramsClean: p.paramsClean });\n\t\t\tupdatesQueue.push({\n\t\t\t\ttype: MessageUpdateType.Tool,\n\t\t\t\tsubtype: MessageToolUpdateType.Error,\n\t\t\t\tuuid: p.uuid,\n\t\t\t\tmessage,\n\t\t\t});\n\t\t}\n\t});\n\n\t// kick off and stream as they finish\n\tPromise.allSettled(tasks).then(() => updatesQueue.close());\n\n\tfor await (const update of updatesQueue.iterator()) {","sourceCodeStart":292,"sourceCodeEnd":328,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/ruflo/src/ruvocal/src/lib/server/textGeneration/mcp/toolInvocation.ts#L292-L328","documentation":"Log warning in executeToolCalls: an individual tool invocation failed (non-abort error); the error message is captured so the failure can be reported back to the model or caller instead of crashing the whole batch.","triggerScenarios":"Thrown at ruflo/src/ruvocal/src/lib/server/textGeneration/mcp/toolInvocation.ts:310 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Check the tool arguments against the tool's input schema and confirm the MCP server implements the tool; the server-side error detail is included in the logged cause."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}