Tools
MCP Go SDK fixes an elicitation bypass where reused params let a destructive tool run without confirmation
Merged 2026-08-31, PR #1145 in modelcontextprotocol/go-sdk fixes `clientMultiRoundTripMiddleware` writing `InputResponses` and `RequestState` through the caller's params pointer and never clearing them. A `*CallToolParams` struct reused across calls carried the first call's answers into the next, so a server gating on `len(req.Params.InputResponses) == 0` treated a fresh call as already answered and the client's `ElicitationHandler` never fired. The retry loop now copies params into `multiRoundTripRetryRequest` instead of mutating the original, with a regression test named TestMultiRoundTrip_AutoRetryDoesNotMutateCallerParams.
Source
↳ Follow the thread