ruvnet/ruflo · error
[mcp] exceeded tool-followup loops; falling back
Error message
[mcp] exceeded tool-followup loops; falling back
What it means
Log warning in runMcpFlow: the tool-call/answer loop hit its maximum follow-up iterations without a final tool-free answer, so the flow gives up on further tool round-trips and falls back to the default endpoint.
Source
Thrown at ruflo/src/ruvocal/src/lib/server/textGeneration/mcp/runMcpFlow.ts:811
continue;
}
}
if (!streamedContent && lastAssistantContent.trim().length > 0) {
yield { type: MessageUpdateType.Stream, token: lastAssistantContent };
}
yield {
type: MessageUpdateType.FinalAnswer,
text: lastAssistantContent,
interrupted: false,
};
logger.info(
{ length: lastAssistantContent.length, loop },
"[mcp] final answer emitted (no tool_calls)"
);
return "completed";
}
logger.warn({}, "[mcp] exceeded tool-followup loops; falling back");
} catch (err) {
const msg = String(err ?? "");
const isAbort =
(abortSignal && abortSignal.aborted) ||
msg.includes("AbortError") ||
msg.includes("APIUserAbortError") ||
msg.includes("Request was aborted");
if (isAbort) {
// Expected on user stop; keep logs quiet and do not treat as error
logger.debug({}, "[mcp] aborted by user");
return "aborted";
}
logger.warn({ err: msg }, "[mcp] flow failed, falling back to default endpoint");
} finally {
// ensure MCP clients are closed after the turn
await drainPool();
}
View on GitHub (pinned to fa13ee4ad6)
Solutions
- Reduce the number of tool-followup rounds the model requests (prompt/tooling issue), or raise the configured loop limit if the workflow legitimately needs more iterations.
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at ruflo/src/ruvocal/src/lib/server/textGeneration/mcp/runMcpFlow.ts:811 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of ruvnet/ruflo@fa13ee4ad6 (2026-08-18).
Data as JSON: /api/errors/24f795f647ae6fb8.
Report an issue: GitHub.