diff --git a/src/mcp/shared/session.py b/src/mcp/shared/session.py index 243eef5ae..c0c23dc9b 100644 --- a/src/mcp/shared/session.py +++ b/src/mcp/shared/session.py @@ -130,7 +130,9 @@ async def respond(self, response: SendResultT | ErrorData) -> None: """ if not self._entered: # pragma: no cover raise RuntimeError("RequestResponder must be used as a context manager") - assert not self._completed, "Request already responded to" + # Guard against race: if cancel() already set _completed, skip silently. + if self._completed: + return if not self.cancelled: # pragma: no branch self._completed = True