1717import anyio
1818import httpx
1919
20- from mcp .client .streamable_http import MCP_PROTOCOL_VERSION
2120from mcp .shared .auth import (
2221 OAuthClientInformationFull ,
2322 OAuthClientMetadata ,
@@ -90,9 +89,7 @@ async def _discover_oauth_metadata(server_url: str) -> OAuthMetadata | None:
9089 return None
9190 response .raise_for_status ()
9291 metadata_json = response .json ()
93- logger .debug (
94- f"OAuth metadata discovered (no MCP header): { metadata_json } "
95- )
92+ logger .debug (f"OAuth metadata discovered (no MCP header): { metadata_json } " )
9693 return OAuthMetadata .model_validate (metadata_json )
9794 except Exception :
9895 logger .exception ("Failed to discover OAuth metadata" )
@@ -513,16 +510,10 @@ async def _register_oauth_client(
513510 auth_base_url = _get_authorization_base_url (server_url )
514511 registration_url = urljoin (auth_base_url , "/register" )
515512
516- if (
517- client_metadata .scope is None
518- and metadata
519- and metadata .scopes_supported is not None
520- ):
513+ if client_metadata .scope is None and metadata and metadata .scopes_supported is not None :
521514 client_metadata .scope = " " .join (metadata .scopes_supported )
522515
523- registration_data = client_metadata .model_dump (
524- by_alias = True , mode = "json" , exclude_none = True
525- )
516+ registration_data = client_metadata .model_dump (by_alias = True , mode = "json" , exclude_none = True )
526517
527518 async with httpx .AsyncClient () as client :
528519 response = await client .post (
@@ -558,9 +549,7 @@ async def _validate_token_scopes(self, token_response: OAuthToken) -> None:
558549 returned_scopes = set (token_response .scope .split ())
559550 unauthorized_scopes = returned_scopes - requested_scopes
560551 if unauthorized_scopes :
561- raise Exception (
562- f"Server granted unauthorized scopes: { unauthorized_scopes } ."
563- )
552+ raise Exception (f"Server granted unauthorized scopes: { unauthorized_scopes } ." )
564553 else :
565554 granted = set (token_response .scope .split ())
566555 logger .debug (
@@ -574,9 +563,7 @@ async def initialize(self) -> None:
574563
575564 async def _get_or_register_client (self ) -> OAuthClientInformationFull :
576565 if not self ._client_info :
577- self ._client_info = await self ._register_oauth_client (
578- self .server_url , self .client_metadata , self ._metadata
579- )
566+ self ._client_info = await self ._register_oauth_client (self .server_url , self .client_metadata , self ._metadata )
580567 await self .storage .set_client_info (self ._client_info )
581568 return self ._client_info
582569
@@ -612,9 +599,7 @@ async def _request_token(self) -> None:
612599 )
613600
614601 if response .status_code != 200 :
615- raise Exception (
616- f"Token request failed: { response .status_code } { response .text } "
617- )
602+ raise Exception (f"Token request failed: { response .status_code } { response .text } " )
618603
619604 token_response = OAuthToken .model_validate (response .json ())
620605 await self ._validate_token_scopes (token_response )
@@ -633,17 +618,13 @@ async def ensure_token(self) -> None:
633618 return
634619 await self ._request_token ()
635620
636- async def async_auth_flow (
637- self , request : httpx .Request
638- ) -> AsyncGenerator [httpx .Request , httpx .Response ]:
621+ async def async_auth_flow (self , request : httpx .Request ) -> AsyncGenerator [httpx .Request , httpx .Response ]:
639622 if not self ._has_valid_token ():
640623 await self .initialize ()
641624 await self .ensure_token ()
642625
643626 if self ._current_tokens and self ._current_tokens .access_token :
644- request .headers ["Authorization" ] = (
645- f"Bearer { self ._current_tokens .access_token } "
646- )
627+ request .headers ["Authorization" ] = f"Bearer { self ._current_tokens .access_token } "
647628
648629 response = yield request
649630
@@ -688,12 +669,10 @@ async def _request_token(self) -> None:
688669 token_url = urljoin (auth_base_url , "/token" )
689670
690671 subject_token = await self .subject_token_supplier ()
691- actor_token = (
692- await self .actor_token_supplier () if self .actor_token_supplier else None
693- )
672+ actor_token = await self .actor_token_supplier () if self .actor_token_supplier else None
694673
695674 token_data = {
696- "grant_type" : "token-exchange " ,
675+ "grant_type" : "token_exchange " ,
697676 "client_id" : client_info .client_id ,
698677 "subject_token" : subject_token ,
699678 "subject_token_type" : self .subject_token_type ,
@@ -722,9 +701,7 @@ async def _request_token(self) -> None:
722701 )
723702
724703 if response .status_code != 200 :
725- raise Exception (
726- f"Token request failed: { response .status_code } { response .text } "
727- )
704+ raise Exception (f"Token request failed: { response .status_code } { response .text } " )
728705
729706 token_response = OAuthToken .model_validate (response .json ())
730707 await self ._validate_token_scopes (token_response )
0 commit comments