
    Gjn                        S r SSKrSSKrSSKJrJrJr  SSKJr  SSKJ	r	  SSK
Jr  SSKJrJr  SSKJr  SSKrSSKrSS	KJr  SS
KJrJr  SSKJrJrJr  SSKJr  SSKJrJ r   SSK!J"r"J#r#  SSK$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,  \RZ                  " \.5      r/\#\0-  r1\\1   r2\\#   r3\/ \4S-  4   r5Sr6Sr7Sr8Sr9Sr:Sr;Sr<Sr=Sr>\?" 5       r@ " S S\05      rA " S S\A5      rB\	 " S S5      5       rC " S S 5      rD\SS!S".S#\4S$\R                  S-  S%\FS&\\G\\#\0-     \\#   \54   S4   4S' jj5       rH\\" S(5      SS)S*S!\ S4S#\4S+\I\4\44   S-  S,\J\-  S-\J\-  S%\FS.\S/\R                  S-  S&\\G\\#\0-     \\#   \54   S4   4S0 jj5       5       rLg)1z
StreamableHTTP Client Transport Module

This module implements the StreamableHTTP transport for MCP clients,
providing support for HTTP POST requests with optional SSE streaming responses
and session management.
    N)AsyncGenerator	AwaitableCallable)asynccontextmanager)	dataclass)	timedelta)Anyoverload)warn)	TaskGroup)MemoryObjectReceiveStreamMemoryObjectSendStream)EventSourceServerSentEventaconnect_sse)
deprecated)McpHttpClientFactorycreate_mcp_http_client)ClientMessageMetadataSessionMessage)	ErrorDataInitializeResultJSONRPCErrorJSONRPCMessageJSONRPCNotificationJSONRPCRequestJSONRPCResponse	RequestIdzmcp-session-idzmcp-protocol-versionzlast-event-idi     zcontent-typeacceptzapplication/jsonztext/event-streamc                       \ rS rSrSrSrg)StreamableHTTPErrorC   z3Base exception for StreamableHTTP transport errors. N__name__
__module____qualname____firstlineno____doc____static_attributes__r$       \/Users/admin/workspace/tools/venv/lib/python3.13/site-packages/mcp/client/streamable_http.pyr"   r"   C   s    =r,   r"   c                       \ rS rSrSrSrg)ResumptionErrorG   z*Raised when resumption request is invalid.r$   Nr%   r$   r,   r-   r/   r/   G   s    4r,   r/   c                       \ rS rSr% Sr\R                  \S'   \S-  \S'   \	\S'   \
S-  \S'   \\S'   Sr\\\4   S-  \S	'   Sr\S-  \S
'   Srg)RequestContextK   z Context for a request operation.clientN
session_idsession_messagemetadataread_stream_writerheaderssse_read_timeoutr$   )r&   r'   r(   r)   r*   httpxAsyncClient__annotations__strr   r   StreamWriterr9   dictr:   floatr+   r$   r,   r-   r2   r2   K   sX    *d
###d**$$%)GT#s(^d")%)edl)r,   r2   c                   6   \ rS rSrSr\S\SS4S j5       r\\" S5          S2S\S\	\\4   S-  S	\
\-  S
\
\-  S\R                  S-  SS4S jj5       5       r\\\\4S\S\S	\S
\S\SS4S jjrS\	\\4   4S jrS\S\4S jrS\S\4S jrS\R*                  SS4S jrS\SS4S jr   S3S\S\S\S-  S\\/\S   4   S-  S\S\4S jjrS\R<                  S\SS4S jrS\ SS4S jr!S\ SS4S jr" S4S\R*                  S\S\SS4S  jjr# S4S\R*                  S\ S\SS4S! jjr$  S5S\ S"\S#\%S-  S$\%SS4
S% jjr&S&\S\SS4S' jr'S\S(\SS4S) jr(S\R<                  S*\)S\S+\*\+   S,\/ S4   S-\,SS4S. jr-S\R<                  SS4S/ jr.S\S-  4S0 jr/S1r0g)6StreamableHTTPTransportX   z/StreamableHTTP client transport implementation.urlreturnNc                     g Nr$   )selfrE   s     r-   __init__ StreamableHTTPTransport.__init__[   s    *-r,   zyParameters headers, timeout, sse_read_timeout, and auth are deprecated. Configure these on the httpx.AsyncClient instead.r9   timeoutr:   authc                     g rH   r$   )rI   rE   r9   rL   r:   rM   s         r-   rJ   rK   ^   s     r,   c                 R   / nU[         La  UR                  S5        U[         La  UR                  S5        U[         La  UR                  S5        U[         La  UR                  S5        U(       a"  [        SSR                  U5       S3[        SS	9  Xl        S
U l        S
U l        g
)a  Initialize the StreamableHTTP transport.

Args:
    url: The endpoint URL.
    headers: Optional headers to include in requests.
    timeout: HTTP timeout for regular operations.
    sse_read_timeout: Timeout for SSE read operations.
    auth: Optional HTTPX authentication handler.
r9   rL   r:   rM   zParameters , zV are deprecated and will be ignored. Configure these on the httpx.AsyncClient instead.r   )
stacklevelN)_UNSETappendr   joinDeprecationWarningrE   r5   protocol_version)rI   rE   r9   rL   r:   rM   deprecated_paramss          r-   rJ   rK   l   s    $ (*& $$Y/& $$Y/6)$$%78v$$V,dii(9:; <D D"	  $r,   c                     0 n[          S[         3U[        '   [         U[        '   U R                  (       a  U R                  U[
        '   U R                  (       a  U R                  U[        '   U$ )zBuild MCP-specific request headers.

These headers will be merged with the httpx.AsyncClient's default headers,
with these MCP-specific headers taking precedence.
rP   )JSONSSEACCEPTCONTENT_TYPEr5   MCP_SESSION_IDrV   MCP_PROTOCOL_VERSION)rI   r9   s     r-   _prepare_headers(StreamableHTTPTransport._prepare_headers   s[     #%!F"SE* $??&*ooGN#  ,0,A,AG()r,   messagec                 v    [        UR                  [        5      =(       a    UR                  R                  S:H  $ )z2Check if the message is an initialization request.
initialize)
isinstancerootr   methodrI   ra   s     r-   _is_initialization_request2StreamableHTTPTransport._is_initialization_request   s(    ',,7_GLL<O<OS_<__r,   c                 v    [        UR                  [        5      =(       a    UR                  R                  S:H  $ )z4Check if the message is an initialized notification.znotifications/initialized)rd   re   r   rf   rg   s     r-   _is_initialized_notification4StreamableHTTPTransport._is_initialized_notification   s)    ',,(;<sATATXsAssr,   responsec                     UR                   R                  [        5      nU(       a)  X l        [        R                  SU R                   35        gg)z3Extract and store session ID from response headers.zReceived session ID: N)r9   getr]   r5   loggerinfo)rI   rm   new_session_ids      r-   '_maybe_extract_session_id_from_response?StreamableHTTPTransport._maybe_extract_session_id_from_response   s@    
 "))--n=,OKK//@AB r,   c                     [        UR                  [        5      (       a  UR                  R                  (       ah   [        R
                  " UR                  R                  5      n[        UR                  5      U l        [        R                  SU R                   35        ggg! [         aN  n[        R                  SU 35        [        R                  SUR                  R                   35         SnAgSnAff = f)z>Extract protocol version from initialization response message.zNegotiated protocol version: z=Failed to parse initialization response as InitializeResult: zRaw result: N)rd   re   r   resultr   model_validater>   protocolVersionrV   rp   rq   	Exceptionwarning)rI   ra   init_resultexcs       r-   ,_maybe_extract_protocol_version_from_messageDStreamableHTTPTransport._maybe_extract_protocol_version_from_message   s    
 gllO449L9L	E.==gll>Q>QR(+K,G,G(H%;D<Q<Q;RST :M4  ESTWSXY gll.A.A-BCDD	Es   A&B% %
C=/AC88C=sser8   original_request_idresumption_callbackis_initializationc                   #    UR                   S:X  GaE  UR                  (       d3  UR                  (       a!  U(       a  U" UR                  5      I Sh  vN   g [        R                  " UR                  5      n[
        R                  SU 35        U(       a  U R                  U5        Ub6  [        UR                  [        [        -  5      (       a  X6R                  l        [        U5      nUR                  U5      I Sh  vN   UR                  (       a!  U(       a  U" UR                  5      I Sh  vN   [        UR                  [        [        -  5      $ [
        R!                  SUR                    35        g GN* N} NM! [         a9  n[
        R                  S5        UR                  U5      I Sh  vN     SnAgSnAff = f7f)z@Handle an SSE event, returning True if the response is complete.ra   NFzSSE message: zError parsing SSE messagezUnknown SSE event: )eventdataidr   model_validate_jsonrp   debugr}   rd   re   r   r   r   sendry   	exceptionrz   )	rI   r   r8   r   r   r   ra   r6   r|   s	            r-   _handle_sse_event)StreamableHTTPTransport._handle_sse_event   sW     99	!88661-cff555(<<SXXF}WI67 %EEgN '2z',,P_bnPn7o7o&9LLO"0"9(--o>>> 661-cff555 "',,,0NOO NN0<=? 6 ? 6    !<=(--c222sm   AG	E<G	B(F E?1F 3F4$F %G	?F F 
G)G6F97G<G	GG	r4   c                   #    SnSnSnU[         :  a   U R                  (       d  gU R                  5       nU(       a  X6[        '   [	        USU R
                  US9 ISh  vN nUR                  R                  5         [        R                  S5        UR                  5         Sh  vN nUR                  (       a  UR                  nUR                  b  UR                  nU R                  X5      I Sh  vN   MZ  g N NX N
 SnSSS5      ISh  vN    ON! , ISh  vN  (       d  f       O7= f! [         a'  n	[        R                  SU	 35        US-  n Sn	A	OSn	A	ff = fU[         :  a  [        R                  S[          S	35        gUb  UO[        n
[        R!                  S
U
 S35        ["        R$                  " U
S-  5      I Sh  vN    U[         :  a  GM  g7f)zDHandle GET stream for server-initiated messages with auto-reconnect.Nr   GETr9   zGET SSE connection establishedzGET stream error:    z&GET stream max reconnection attempts (
) exceededz)GET stream disconnected, reconnecting in zms...     @@)MAX_RECONNECTION_ATTEMPTSr5   r_   LAST_EVENT_IDr   rE   rm   raise_for_statusrp   r   	aiter_sser   retryr   ry   DEFAULT_RECONNECTION_DELAY_MSrq   anyiosleep)rI   r4   r8   last_event_idretry_interval_msattemptr9   event_sourcer   r|   delay_mss              r-   handle_get_stream)StreamableHTTPTransport.handle_get_stream   s     %)(,11 //1 -:M*'HH#	 
 " ))::<LL!AB%1%;%;%= Nc66,/FFM99003		-"44SMMM5 2N N &>  G)     ,  1#781 33EF_E``jkl ->,I(OlHKKCH:UST++h/000U 11s   G#D3 G#9D3 C> D3 #A D#D'D (D+AD6D7D=G#>D3  DDDD3 DD3 G#D0D" D0,D3 /G#0D3 3
E$=EG#E$$A+G#GG#"G#ctxc                   #    U R                  5       nUR                  (       a9  UR                  R                  (       a  UR                  R                  U[        '   O[	        S5      eSn[        UR                  R                  R                  [        5      (       a*  UR                  R                  R                  R                  n[        UR                  SU R                  US9 ISh  vN nUR                  R                  5         [         R#                  S5        UR%                  5         Sh  vN nU R'                  UUR(                  UUR                  (       a  UR                  R*                  OS5      I Sh  vN nU(       d  M_  UR                  R-                  5       I Sh  vN     SSS5      ISh  vN   g N N NE N
 N N! , ISh  vN  (       d  f       g= f7f)z/Handle a resumption request using GET with SSE.z.Resumption request requires a resumption tokenNr   r   z)Resumption GET SSE connection established)r_   r7   resumption_tokenr   r/   rd   r6   ra   re   r   r   r   r4   rE   rm   r   rp   r   r   r   r8   on_resumption_token_updateaclose)rI   r   r9   r   r   r   is_completes          r-   _handle_resumption_request2StreamableHTTPTransport._handle_resumption_request-  sv    '')<<CLL99%(\\%B%BGM"!"RSS #c))1166GG"%"5"5"="="B"B"E"EJJHH	
 

 !!224LLDE)335 	c$($:$:**'?B||CLL;;QU	%  ;&//66888%
 
 
	 9 6
 
 
 
s   C)G(+G,G(/A G/G
3G4G
7A	G G	GG+G,G1G(<G=G(G
GG
GG(G%GG%!G(c           
        #    U R                  5       nUR                  R                  nU R                  U5      nUR                  R                  SU R                  UR                  SSSS9US9 ISh  vN nUR                  S:X  a'  [        R                  S5         SSS5      ISh  vN   gUR                  S	:X  ai  [        UR                  [        5      (       a8  U R                  UR                  UR                  R                   5      I Sh  vN    SSS5      ISh  vN   gUR#                  5         U(       a  U R%                  U5        [        UR                  [        5      (       a  UR&                  R)                  [*        S
5      R-                  5       nUR/                  [0        5      (       a%  U R3                  XQR                  U5      I Sh  vN   OYUR/                  [4        5      (       a  U R7                  XQU5      I Sh  vN   O$U R9                  UUR                  5      I Sh  vN   SSS5      ISh  vN   g GN GN GN; GN- N{ NH N% N! , ISh  vN  (       d  f       g= f7f)z/Handle a POST request with response processing.POSTTjson)by_aliasmodeexclude_none)r   r9   N   zReceived 202 Acceptedi   )r_   r6   ra   rh   r4   streamrE   
model_dumpstatus_coderp   r   rd   re   r   _send_session_terminated_errorr8   r   r   rs   r9   ro   r\   lower
startswithrY   _handle_json_responserZ   _handle_sse_response_handle_unexpected_content_type)rI   r   r9   ra   r   rm   content_types          r-   _handle_post_request,StreamableHTTPTransport._handle_post_requestN  s    '')%%-- ;;GD::$$HH##TT#R	 % 
 

 ##s*45
 
 
 ##s*gllN;;==..   !
 
 
$ %%' <<XF ',,77'//33L"EKKM**40044X?U?UWhiii!,,S1133HCTUUU>>$..  ?
 
 

6 jU?
 
 
 
s   A1I43I4I47'II4)I	*I4/A"IIII4"I#I4(B.II4II$I0I1I5I4 II4	I4II4IIII4I1 I#!I1-I4c                 v  #     UR                  5       I Sh  vN n[        R                  " U5      nU(       a  U R                  U5        [	        U5      nUR                  U5      I Sh  vN   g NW N! [         a9  n[        R                  S5        UR                  U5      I Sh  vN     SnAgSnAff = f7f)z%Handle JSON response from the server.NzError parsing JSON response)	areadr   r   r}   r   r   ry   rp   r   )rI   rm   r8   r   contentra   r6   r|   s           r-   r   -StreamableHTTPTransport._handle_json_responsex  s     	/$NN,,G$88AG !AA'J,W5O$))/::: - ; 	/:;$))#...	/s]   B9A3 A/AA3 )A1*A3 .B9/A3 1A3 3
B6=)B1&B)'B1,B91B66B9c                 |  #    SnSn [        U5      nUR                  5         Sh  vN nUR                  (       a  UR                  nUR                  b  UR                  nU R	                  UUR
                  UR                  (       a  UR                  R                  OSUS9I Sh  vN nU(       d  M  UR                  5       I Sh  vN     g N N) N

 O/! [         a"  n	[        R                  SU	 35         Sn	A	OSn	A	ff = fUb1  [        R                  S5        U R                  X$U5      I Sh  vN    gg7f)z$Handle SSE response from the server.N)r   r   zSSE stream ended: (SSE stream disconnected, reconnecting...)r   r   r   r   r   r8   r7   r   r   ry   rp   r   rq   _handle_reconnection)
rI   rm   r   r   r   r   r   r   r   es
             r-   r   ,StreamableHTTPTransport._handle_sse_response  s#     %)(,	3&x0L)335 c66$'FFM 99((+		%$($:$:**TWT`T`)P)Pfj&7	 %; %  ;"//+++' ,% 6(  	3LL-aS122	3 $KKBC++C@QRRR %s   D<C CCCA=C (C)	C 6C 	C
C D<CC C C D<
D"C?:D<?D0D<4D75D<r   r   r   c                 ~  #    U[         :  a  [        R                  S[          S35        gUb  UO[        n[        R
                  " US-  5      I Sh  vN   U R                  5       nX&[        '   Sn[        UR                  R                  R                  [        5      (       a*  UR                  R                  R                  R                  n [        UR                  SU R                   US9 ISh  vN nUR"                  R%                  5         [        R'                  S5        Un	Un
UR)                  5         Sh  vN nUR                  (       a  UR                  n	UR*                  b  UR*                  n
U R-                  UUR.                  UUR0                  (       a  UR0                  R2                  OS5      I Sh  vN nU(       d  M  UR"                  R5                  5       I Sh  vN     SSS5      ISh  vN   g GN GN N NI N  N
 [        R'                  S5        U R7                  XU
S	5      I Sh  vN    SSS5      ISh  vN    g! , ISh  vN  (       d  f       g= f! [8         a@  n[        R                  S
U 35        U R7                  XX4S-   5      I Sh  vN     SnAgSnAff = f7f)zFReconnect with Last-Event-ID to resume stream after server disconnect.zMax reconnection attempts (r   Nr   r   r   zReconnected to SSE streamr   r   zReconnection failed: r   )r   rp   r   r   r   r   r_   r   rd   r6   ra   re   r   r   r   r4   rE   rm   r   rq   r   r   r   r8   r7   r   r   r   ry   )rI   r   r   r   r   r   r9   r   r   reconnect_last_event_idreconnect_retry_msr   r   r   s                 r-   r   ,StreamableHTTPTransport._handle_reconnection  sY     //LL67P6QQ[\] ):(E$Khkk(V+,,,'')!. #c))1166GG"%"5"5"="="B"B"E"E$	`#

	 
 %%66878 0='%6"!-!7!7!9 #vv25&&/yy,-0YY*(,(>(>..+CF<<??UY	) #K #{*33::<<<7   	-# =5 ":" FG//N`bcddd?     @  	`LL045++C@Q]^S^___	`s  AJ=HA;J=$I0 3H4I0 7AI;H?H
 HA?IH	II-H.I3I0 >H?I0 J=I0 
HIII0 ,I>I?II0 II0 J=I-II-)I0 ,J=-I0 0
J::0J5*J-+J50J=5J::J=r   c                    #    SU 3n[         R                  U5        UR                  [        U5      5      I Sh  vN   g N7f)z+Handle unexpected content type in response.zUnexpected content type: N)rp   errorr   
ValueError)rI   r   r8   	error_msgs       r-   r   7StreamableHTTPTransport._handle_unexpected_content_type  s8      0~>	Y %%j&;<<<s   8AA A
request_idc           	         #    [        SU[        SSS9S9n[        [        U5      5      nUR	                  U5      I Sh  vN   g N7f)z)Send a session terminated error response.z2.0iX  zSession terminated)codera   )jsonrpcr   r   N)r   r   r   r   r   )rI   r8   r   jsonrpc_errorr6   s        r-   r   6StreamableHTTPTransport._send_session_terminated_error  sG      %0DE

 ))FG %%o666s   <AAAwrite_stream_readerwrite_streamstart_get_streamtgc           
        ^ ^^#     U ISh  vN   U  Sh  vN nUR                   n[        UR                  [        5      (       a  UR                  OSn	[	        U	=(       a    U	R
                  5      m[        R                  SU 35        T R                  U5      (       a  U" 5         [        UT R                  UU	US9mUUU 4S jn
[        UR                  [        5      (       a  UR                  U
5        M  U
" 5       I Sh  vN   M   N N N

 SSS5      ISh  vN    O?! , ISh  vN  (       d  f       O(= f! [         a    [        R                  S5         Of = fUR!                  5       I Sh  vN    UR!                  5       I Sh  vN    g! UR!                  5       I Sh  vN    UR!                  5       I Sh  vN    f = f7f)z&Handle writing requests to the server.NzSending client message: )r4   r5   r6   r7   r8   c                     >#    T(       a  TR                  T 5      I S h  vN   g TR                  T 5      I S h  vN   g  N N7frH   )r   r   )r   is_resumptionrI   s   r-   handle_request_asyncAStreamableHTTPTransport.post_writer.<locals>.handle_request_async1  s:     ("&"A"A#"FFF"&";";C"@@@ G@s   A?AAAAzError in post_writer)ra   rd   r7   r   boolr   rp   r   rk   r2   r5   re   r   
start_soonry   r   r   )rI   r4   r   r8   r   r   r   r6   ra   r7   r   r   r   s   `          @@r-   post_writer#StreamableHTTPTransport.post_writer  s|    +	(**-@ #5/-55G &o&>&>@UVV (00!  %))Oh6O6O$PMLL#;G9!EF 88AA(*(%#'??(7!)+=CA "',,??&:;2444I +#5F 5G .A +*****L  	534	5 %++---%%''' %++---%%'''s   GD> DD> D$DDDC(D$DD$D> DD$D$D> D D> #F $D;*D-+D;7D> :F ;D> >E F E  F #G6E97GFGG
*F-+G
GG

Gc                   #    U R                   (       d  g U R                  5       nUR                  U R                  US9I Sh  vN nUR                  S:X  a  [
        R                  S5        gUR                  S;  a#  [
        R                  SUR                   35        gg N^! [         a"  n[
        R                  SU 35         SnAgSnAff = f7f)z2Terminate the session by sending a DELETE request.Nr   i  z)Server does not allow session termination)      zSession termination failed: )	r5   r_   deleterE   r   rp   r   rz   ry   )rI   r4   r9   rm   r|   s        r-   terminate_session)StreamableHTTPTransport.terminate_sessionC  s     		A++-G#]]488W]EEH##s*HI%%Z7!=h>R>R=STU 8	 F  	ANN9#?@@	AsL   C-B$ B")B$ -C.2B$  C"B$ $
C.CCCCc                     U R                   $ )zGet the current session ID.)r5   )rI   s    r-   get_session_id&StreamableHTTPTransport.get_session_idS  s    r,   )rV   r5   rE   )N   ,  N)NNF)F)Nr   )1r&   r'   r(   r)   r*   r
   r>   rJ   r   r@   rA   r   r;   AuthrR   r	   r_   r   r   rh   rk   Responsers   r}   r   r?   r   r   r   r   r<   r   r2   r   r   r   r   intr   r   r   StreamReaderr   r   r   r   r   r   r+   r$   r,   r-   rC   rC   X   s   9-C-D- -	< *.%'.4"& c3h$& "	
  )+ jj4 
	 
  &&%&% &% 	&%
 &% &% 
&%P$sCx. "`. `T `tN tt tC..C 
CEE 
E* 15GK"'-- )- '-	-
 &seYt_&<=D-  - 
-^41!!41 )41 
	41lN t B(n ( (\ #(	/../ )/  	/
 
/2 #(	&S..&S &S  	&S
 
&SX )-=`=` =` :	=`
 =` 
=`~== )= 
	=7(7 7 
	75(!!5( *5( )	5(
 -^<5( #2t8,5( 5( 
5(nAe.?.? AD A d
 r,   rC   Thttp_clientterminate_on_closerE   r   r   rF   c                 ^	^
^^#    [         R                  [        [        -     " S5      u  m
n[         R                  [           " S5      u  pEUSLnUm	T	c
  [	        5       m	[        U 5      m[         R                  " 5        ISh  vN m [        R                  SU  35        [        R                  " 5        ISh  vN nU(       d  UR                  T	5      I Sh  vN   SU	U
UU4S jjnTR                  TR                  T	UT
UUT5         UUTR                  47v   TR                  (       a   U(       a  TR!                  T	5      I Sh  vN   TR"                  R%                  5         SSS5      ISh  vN   T
R'                  5       I Sh  vN   UR'                  5       I Sh  vN   SSS5      ISh  vN   g GN7 GN N Nw! TR                  (       a!  U(       a  TR!                  T	5      I Sh  vN    TR"                  R%                  5         f = f N! , ISh  vN  (       d  f       N= f N N! T
R'                  5       I Sh  vN    UR'                  5       I Sh  vN    f = f N! , ISh  vN  (       d  f       g= f7f)a  
Client transport for StreamableHTTP.

Args:
    url: The MCP server endpoint URL.
    http_client: Optional pre-configured httpx.AsyncClient. If None, a default
        client with recommended MCP timeouts will be created. To configure headers,
        authentication, or other HTTP settings, create an httpx.AsyncClient and pass it here.
    terminate_on_close: If True, send a DELETE request to terminate the session
        when the context exits.

Yields:
    Tuple containing:
        - read_stream: Stream for reading messages from the server
        - write_stream: Stream for sending messages to the server
        - get_session_id_callback: Function to retrieve the current session ID

Example:
    See examples/snippets/clients/ for usage patterns.
r   Nz'Connecting to StreamableHTTP endpoint: c                  @   > TR                  TR                  T T5        g rH   )r   r   )r4   r8   r   	transports   r-   r   0streamable_http_client.<locals>.start_get_stream  s    MM)"="=vGYZr,   )rF   N)r   create_memory_object_streamr   ry   r   rC   create_task_grouprp   r   
contextlibAsyncExitStackenter_async_contextr   r   r   r5   r   cancel_scopecancelr   )rE   r   r   read_streamr   r   client_providedstackr   r4   r8   r   r   s            @@@@r-   streamable_http_clientr  X  s    D ',&G&GYbHb&cde&f#(-(I(I.(YZ[(\%L "-OF~')',I&&((B!	(LLB3%HI!0022e&33F;;;[ [ ))'& $	-#$!00  !++0B'99&AAAOO**,7 32: %++---%%'''E )(( 3 <. B !++0B'99&AAAOO**,7 3222: .' %++---%%'''E )(((s,  A>J	F;J	I/
1H6;F><H6?HG0HG,HGH*H65H6H6:I/H2I/%H4&I/*J	5I-6J	>H6HH-H2G53 HHH6H/	H!H/	+H62I/4I/6I*
I
I*#I&
$I**I/-J	/J5I86JJ	z%Use `streamable_http_client` instead.r   r   r9   rL   r:   httpx_client_factoryrM   c                  #    [        U[        5      (       a  UR                  5       OUn[        U[        5      (       a  UR                  5       OUnU" U[        R                  " XxS9US9n	U	 IS h  vN   [        U U	US9 IS h  vN n
U
7v   S S S 5      IS h  vN   S S S 5      IS h  vN   g  N> N, N! , IS h  vN  (       d  f       N.= f N%! , IS h  vN  (       d  f       g = f7f)N)read)r9   rL   rM   r   )rd   r   total_secondsr;   Timeoutr  )rE   r9   rL   r:   r   r  rM   timeout_secondssse_read_timeout_secondsr4   streamss              r-   streamablehttp_clientr    s     & 2<GY1O1Og++-U\O,67G,S,S&&(Yi 
 "oMF v)1
 
 M
 
 vv
 
 
 
 vvvs   A/C,1B02C,5CB2C	B6CB4CC,*C+C,2C4C6C	<B?=C		CC,C)CC)%C,)Mr*   r   loggingcollections.abcr   r   r   r   dataclassesr   datetimer   typingr	   r
   warningsr   r   r;   	anyio.abcr   anyio.streams.memoryr   r   	httpx_sser   r   r   typing_extensionsr   mcp.shared._httpx_utilsr   r   mcp.shared.messager   r   	mcp.typesr   r   r   r   r   r   r   r   	getLoggerr&   rp   ry   SessionMessageOrErrorr?   r   r>   GetSessionIdCallbackr]   r^   r   r   r   r\   r[   rY   rZ   objectrR   r"   r/   r2   rC   r<   r   tupler  r@   rA   r   r  r$   r,   r-   <module>r     sw     ? ? * !        R @ @ ( E	 	 	 
		8	$ '2 %&;<(8C$J/ !-  !%  	  
>) >5) 5 	* 	* 	*} }@  -1#	P(	P( ""T)P( 	P(
 	!.9"<=~.	
 	
P( P(f 34 &*!#*0#1G"$	$#s(^d"$ Y$ i'	$
 $ /$ **t
$ 	!.9"<=~.	
 	
$ 5 $r,   