From 650b103dbf09570d3e9d21b5e01cdaa818cdb819 Mon Sep 17 00:00:00 2001 From: Luke <97346920+lgndluke@users.noreply.github.com> Date: Fri, 26 Dec 2025 21:41:41 +0100 Subject: [PATCH] fix: Client OAuth async_auth_flow() method causing MCP-SDK self.context.lock error. (#2644) Co-authored-by: Jeremiah Lowin <153965+jlowin@users.noreply.github.com> --- src/fastmcp/client/auth/oauth.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/src/fastmcp/client/auth/oauth.py b/src/fastmcp/client/auth/oauth.py index 2190b9a43..f638da5fd 100644 --- a/src/fastmcp/client/auth/oauth.py +++ b/src/fastmcp/client/auth/oauth.py @@ -298,13 +298,16 @@ class OAuth(OAuthClientProvider): # First attempt with potentially cached credentials gen = super().async_auth_flow(request) response = None - while True: - try: - # First iteration sends None, subsequent iterations send response - yielded_request = await gen.asend(response) # ty: ignore[invalid-argument-type] - response = yield yielded_request - except StopAsyncIteration: - break + try: + while True: + try: + # First iteration sends None, subsequent iterations send response + yielded_request = await gen.asend(response) # ty: ignore[invalid-argument-type] + response = yield yielded_request + except StopAsyncIteration: + break + finally: + await gen.aclose() except ClientNotFoundError: logger.debug( @@ -317,9 +320,12 @@ class OAuth(OAuthClientProvider): # Retry with fresh registration gen = super().async_auth_flow(request) response = None - while True: - try: - yielded_request = await gen.asend(response) # ty: ignore[invalid-argument-type] - response = yield yielded_request - except StopAsyncIteration: - break + try: + while True: + try: + yielded_request = await gen.asend(response) # ty: ignore[invalid-argument-type] + response = yield yielded_request + except StopAsyncIteration: + break + finally: + await gen.aclose()