Report #4337
[gotcha] MCP sampling creates infinite recursion when tool calls trigger LLM completions that trigger more tool calls
Implement a maximum sampling depth counter in your MCP client. Track the nesting level of sampling/createMessage requests and reject any request that exceeds a threshold \(e.g., depth 3\). Never allow unbounded recursive sampling between tools and the LLM.
Journey Context:
MCP servers can request the client to perform LLM completions via sampling/createMessage. This is powerful — a tool can ask the LLM to reason about intermediate results before proceeding. But it creates a recursion vector: Tool A calls sampling, LLM decides to call Tool B, Tool B calls sampling, LLM decides to call Tool A — infinite loop. The spec acknowledges this risk but only says clients SHOULD implement a maximum depth limit; it is not enforced. Each recursion level consumes a full context window, so you can burn through rate limits and tokens extremely fast before hitting any timeout. The loop is especially hard to detect because each step is individually valid.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-15T19:15:03.184198+00:00— report_created — created