Ë
    ïñþiø·  ã                   óö  — d Z ddlZddlZddlZddlmZmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ ddlmZ ddlZdd	lmZmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6  ejn                  e8«      Z9dZ:dZ;dZ<dZ=dZ>dZ? ej€                  d«      ZAeBZCeBZDe G d„ d«      «       ZEe
eEge	d   f   ZF G d„ de«      ZG G d„ d«      ZHy) zø
StreamableHTTP Server Transport Module

This module implements an HTTP transport layer with Streamable HTTP.

The transport handles bidirectional communication using HTTP requests and
responses, with streaming support for long-running operations.
é    N)ÚABCÚabstractmethod)ÚAsyncGeneratorÚ	AwaitableÚCallable)Úasynccontextmanager)Ú	dataclass)Ú
HTTPStatus)ÚAny)ÚMemoryObjectReceiveStreamÚMemoryObjectSendStream)ÚValidationError)ÚEventSourceResponse)ÚRequest)ÚResponse)ÚReceiveÚScopeÚSend)ÚTransportSecurityMiddlewareÚTransportSecuritySettings)ÚServerMessageMetadataÚSessionMessage)ÚSUPPORTED_PROTOCOL_VERSIONS)ÚDEFAULT_NEGOTIATED_VERSIONÚINTERNAL_ERRORÚINVALID_PARAMSÚINVALID_REQUESTÚPARSE_ERRORÚ	ErrorDataÚJSONRPCErrorÚJSONRPCMessageÚJSONRPCRequestÚJSONRPCResponseÚ	RequestIdzmcp-session-idzmcp-protocol-versionzlast-event-idzapplication/jsonztext/event-streamÚ_GET_streamz^[\x21-\x7E]+$c                   ó0   — e Zd ZU dZeed<   dZedz  ed<   y)ÚEventMessagezM
    A JSONRPCMessage with an optional event ID for stream resumability.
    ÚmessageNÚevent_id)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   Ú__annotations__r)   Ústr© ó    úZ/root/aria/mcps/aria-brain/venv/lib/python3.12/site-packages/mcp/server/streamable_http.pyr'   r'   H   s   … ñð ÓØ€Hˆc�D‰jÔr1   r'   c                   óX   — e Zd ZdZedededz  defd„«       Zedede	dedz  fd	„«       Z
y)
Ú
EventStorez?
    Interface for resumability support via event storage.
    Ú	stream_idr(   NÚreturnc              ƒ   ó   K  — y­w)a  
        Stores an event for later retrieval.

        Args:
            stream_id: ID of the stream the event belongs to
            message: The JSON-RPC message to store, or None for priming events

        Returns:
            The generated event ID for the stored event
        Nr0   )Úselfr5   r(   s      r2   Ústore_eventzEventStore.store_eventZ   s   è ø€ ð 	ùó   ‚Úlast_event_idÚsend_callbackc              ƒ   ó   K  — y­w)a2  
        Replays events that occurred after the specified event ID.

        Args:
            last_event_id: The ID of the last event the client received
            send_callback: A callback function to send events to the client

        Returns:
            The stream ID of the replayed events
        Nr0   )r8   r;   r<   s      r2   Úreplay_events_afterzEventStore.replay_events_afterh   s   è ø€ ð  	ùr:   )r*   r+   r,   r-   r   ÚStreamIdr!   ÚEventIdr9   ÚEventCallbackr>   r0   r1   r2   r4   r4   U   sj   „ ñð ð¨8ð ¸nÈtÑ>Sð ÐX_ò ó ðð ðàðð %ðð 
�D‰ò	ó ñr1   r4   c                   óH  — e Zd ZU dZdZeeez     dz  ed<   dZ	e
eez     dz  ed<   dZee   dz  ed<   dZe
e   dz  ed<   eed<   	 	 	 	 d6dedz  d	ed
edz  dedz  dedz  ddfd„Zedefd„«       Zdeddfd„Zd7d„Zdededededef
d„Zdedeeeef      deddfd„Zedfdede dedeeef   dz  de!f
d„Z"e jF                  dfdedz  de deeef   dz  de!fd„Z$dededz  fd „Z%d!e&deeef   fd"„Z'deddfd#„Z(d$e)d%e*d&e+ddfd'„Z,dede-eef   fd(„Z.dedefd)„Z/ded$e)d&e+defd*„Z0d$e)ded%e*d&e+ddf
d+„Z1ded&e+ddfd,„Z2ded&e+ddfd-„Z3d7d.„Z4ded&e+ddfd/„Z5ded&e+defd0„Z6ded&e+defd1„Z7ded&e+defd2„Z8d3eded&e+ddfd4„Z9e:de;e-e
eez     ee   f   df   fd5„«       Z<y)8ÚStreamableHTTPServerTransportzË
    HTTP server transport with event streaming support for MCP.

    Handles JSON-RPC messages in HTTP POST requests with SSE streaming.
    Supports optional JSON responses and session management.
    NÚ_read_stream_writerÚ_read_streamÚ_write_streamÚ_write_stream_readerÚ	_securityÚmcp_session_idÚis_json_response_enabledÚevent_storeÚsecurity_settingsÚretry_intervalr6   c                 óØ   — |� t         j                  |«      st        d«      ‚|| _        || _        || _        t        |«      | _        || _        i | _	        i | _
        d| _        d| _        y)am  
        Initialize a new StreamableHTTP server transport.

        Args:
            mcp_session_id: Optional session identifier for this connection.
                            Must contain only visible ASCII characters (0x21-0x7E).
            is_json_response_enabled: If True, return JSON responses for requests
                                    instead of SSE streams. Default is False.
            event_store: Event store for resumability support. If provided,
                        resumability will be enabled, allowing clients to
                        reconnect and resume messages.
            security_settings: Optional security settings for DNS rebinding protection.
            retry_interval: Retry interval in milliseconds to suggest to clients in SSE
                           retry field. When set, the server will send a retry field in
                           SSE priming events to control client reconnection timing for
                           polling behavior. Only used when event_store is provided.

        Raises:
            ValueError: If the session ID contains invalid characters.
        NzASession ID must only contain visible ASCII characters (0x21-0x7E)F)ÚSESSION_ID_PATTERNÚ	fullmatchÚ
ValueErrorrI   rJ   Ú_event_storer   rH   Ú_retry_intervalÚ_request_streamsÚ_sse_stream_writersÚ_terminatedÚ
idle_scope)r8   rI   rJ   rK   rL   rM   s         r2   Ú__init__z&StreamableHTTPServerTransport.__init__Š   sy   € ð8 Ð%Ô.@×.JÑ.JÈ>Ô.ZÜÐ`ÓaÐaà,ˆÔØ(@ˆÔ%Ø'ˆÔÜ4Ð5FÓGˆŒØ-ˆÔð ð 	Ôð ]_ˆÔ Ø ˆÔà48ˆ�r1   c                 ó   — | j                   S )z7Check if this transport has been explicitly terminated.)rV   ©r8   s    r2   Úis_terminatedz+StreamableHTTPServerTransport.is_terminatedº   s   € ð ×ÑÐr1   Ú
request_idc                 óú   — | j                   j                  |d«      }|r|j                  «        || j                  v r?| j                  j                  |«      \  }}|j                  «        |j                  «        yy)a  Close SSE connection for a specific request without terminating the stream.

        This method closes the HTTP connection for the specified request, triggering
        client reconnection. Events continue to be stored in the event store and will
        be replayed when the client reconnects with Last-Event-ID.

        Use this to implement polling behavior during long-running operations -
        client will reconnect after the retry interval specified in the priming event.

        Args:
            request_id: The request ID whose SSE stream should be closed.

        Note:
            This is a no-op if there is no active stream for the request ID.
            Requires event_store to be configured for events to be stored during
            the disconnect.
        N)rU   ÚpopÚcloserT   )r8   r\   ÚwriterÚsend_streamÚreceive_streams        r2   Úclose_sse_streamz.StreamableHTTPServerTransport.close_sse_stream¿   sp   € ð$ ×)Ñ)×-Ñ-¨j¸$Ó?ˆÙØ�L‰LŒNð ˜×.Ñ.Ñ.Ø*.×*?Ñ*?×*CÑ*CÀJÓ*OÑ'ˆK˜Ø×ÑÔØ× Ñ Õ"ð /r1   c                 ó.   — | j                  t        «       y)aF  Close the standalone GET SSE stream, triggering client reconnection.

        This method closes the HTTP connection for the standalone GET stream used
        for unsolicited server-to-client notifications. The client SHOULD reconnect
        with Last-Event-ID to resume receiving notifications.

        Use this to implement polling behavior for the notification stream -
        client will reconnect after the retry interval specified in the priming event.

        Note:
            This is a no-op if there is no active standalone SSE stream.
            Requires event_store to be configured for events to be stored during
            the disconnect.
            Currently, client reconnection for standalone GET streams is NOT
            implemented - this is a known gap (see test_standalone_get_stream_reconnection).
        N)rc   ÚGET_STREAM_KEYrZ   s    r2   Úclose_standalone_sse_streamz9StreamableHTTPServerTransport.close_standalone_sse_streamÛ   s   € ð" 	×ÑœnÕ-r1   r(   ÚrequestÚprotocol_versionc                 ó’   ‡ ‡— ‰ j                   r!|dk\  rdˆˆ fd„}dˆ fd„}t        |||¬«      }nt        |¬«      }t        ||¬«      S )aJ  Create a session message with metadata including close_sse_stream callback.

        The close_sse_stream callbacks are only provided when the client supports
        resumability (protocol version >= 2025-11-25). Old clients can't resume if
        the stream is closed early because they didn't receive a priming event.
        ú
2025-11-25c               “   ó0   •K  — ‰j                  ‰ «       y ­w©N)rc   )r\   r8   s   €€r2   Úclose_stream_callbackzTStreamableHTTPServerTransport._create_session_message.<locals>.close_stream_callbackþ   s   øè ø€ Ø×%Ñ% jÕ1ùs   ƒc               “   ó.   •K  — ‰ j                  «        y ­wrl   )rf   rZ   s   €r2   Ú close_standalone_stream_callbackz_StreamableHTTPServerTransport._create_session_message.<locals>.close_standalone_stream_callback  s   øè ø€ Ø×0Ñ0Õ2ùs   ƒ)Úrequest_contextrc   rf   ©rp   ©Úmetadata©r6   N)rR   r   r   )r8   r(   rg   r\   rh   rm   ro   rs   s   `  `    r2   Ú_create_session_messagez5StreamableHTTPServerTransport._create_session_messageî   sN   ù€ ð ×ÒÐ!1°\Ò!Aö2õ3ô -Ø 'Ø!6Ø,Lô‰Hô -¸WÔEˆHä˜g°Ô9Ð9r1   Ússe_stream_writerc              ƒ   ó  K  — | j                   sy|dk  ry| j                   j                  t        |«      d«      ƒ d{  –—† }|ddœ}| j                  �| j                  |d<   |j	                  |«      ƒ d{  –—†  y7 Œ>7 Œ­w)a#  Send priming event for SSE resumability if event_store is configured.

        Only sends priming events to clients with protocol version >= 2025-11-25,
        which includes the fix for handling empty SSE data. Older clients would
        crash trying to parse empty data as JSON.
        Nrj   Ú )ÚidÚdataÚretry)rR   r9   r/   rS   Úsend)r8   r\   rv   rh   Úpriming_event_idÚpriming_events         r2   Ú_maybe_send_priming_eventz7StreamableHTTPServerTransport._maybe_send_priming_event  s�   è ø€ ð × Ò Øà˜lÒ*ØØ!%×!2Ñ!2×!>Ñ!>Ü�
‹OØó"
÷ 
Ðð 6FÈrÑ.RˆØ×ÑÐ+Ø%)×%9Ñ%9ˆM˜'Ñ"Ø×$Ñ$ ]Ó3×3Ñ3ð
øð 	4ús!   ‚<B¾A=¿8BÁ7A?Á8BÁ?BÚerror_messageÚstatus_codeÚ
error_codeÚheadersc                 óæ   — dt         i}|r|j                  |«       | j                  r| j                  |t        <   t	        ddt        ||¬«      ¬«      }t        |j                  dd¬«      ||¬«      S )	z6Create an error response with a simple string message.úContent-Typez2.0zserver-error)Úcoder(   )Újsonrpcry   ÚerrorT©Úby_aliasÚexclude_none©r�   rƒ   )ÚCONTENT_TYPE_JSONÚupdaterI   ÚMCP_SESSION_ID_HEADERr    r   r   Úmodel_dump_json)r8   r€   r�   r‚   rƒ   Úresponse_headersÚerror_responses          r2   Ú_create_error_responsez4StreamableHTTPServerTransport._create_error_response(  s„   € ð +Ô,=Ð>ÐÙØ×#Ñ# GÔ,à×ÒØ6:×6IÑ6IÐÔ2Ñ3ô &ØØÜØØ%ôô
ˆô Ø×*Ñ*°DÀtÐ*ÓLØ#Ø$ô
ð 	
r1   Úresponse_messagec                 ó¼   — dt         i}|r|j                  |«       | j                  r| j                  |t        <   t	        |r|j                  dd¬«      nd||¬«      S )z,Create a JSON response from a JSONRPCMessager…   Tr‰   NrŒ   )r�   rŽ   rI   r�   r   r�   )r8   r”   r�   rƒ   r‘   s        r2   Ú_create_json_responsez3StreamableHTTPServerTransport._create_json_responseG  sh   € ð +Ô,=Ð>ÐÙØ×#Ñ# GÔ,à×ÒØ6:×6IÑ6IÐÔ2Ñ3äÙRbÐ×,Ñ,°dÈÐ,ÔNÐhlØ#Ø$ô
ð 	
r1   c                 ó@   — |j                   j                  t        «      S )z,Extract the session ID from request headers.)rƒ   Úgetr�   )r8   rg   s     r2   Ú_get_session_idz-StreamableHTTPServerTransport._get_session_id[  s   € à�‰×"Ñ"Ô#8Ó9Ð9r1   Úevent_messagec                 ó|   — d|j                   j                  dd¬«      dœ}|j                  r|j                  |d<   |S )z2Create event data dictionary from an EventMessage.r(   Tr‰   )Úeventrz   ry   )r(   r�   r)   )r8   rš   Ú
event_datas      r2   Ú_create_event_dataz0StreamableHTTPServerTransport._create_event_data_  sI   € ð Ø!×)Ñ)×9Ñ9À4ÐVZÐ9Ó[ñ
ˆ
ð ×!Ò!Ø,×5Ñ5ˆJ�tÑàÐr1   c              ƒ   ó–  K  — || j                   v rn	 | j                   |   d   j                  «       ƒ d{  –—†  | j                   |   d   j                  «       ƒ d{  –—†  | j                   j                  |d«       yy7 ŒJ7 Œ$# t        $ r t        j	                  d«       Y ŒBw xY w# | j                   j                  |d«       w xY w­w)z/Clean up memory streams for a given request ID.r   Né   z4Error closing memory streams - may already be closed)rT   ÚacloseÚ	ExceptionÚloggerÚdebugr^   )r8   r\   s     r2   Ú_clean_up_memory_streamsz6StreamableHTTPServerTransport._clean_up_memory_streamsl  sº   è ø€ à˜×.Ñ.Ñ.ð	<à×+Ñ+¨JÑ7¸Ñ:×AÑAÓC×CÐCØ×+Ñ+¨JÑ7¸Ñ:×AÑAÓC×CÐCð ×%Ñ%×)Ñ)¨*°dÕ;ð /ð DøØCùÜò Uä—‘ÐSÖTðUûð
 ×%Ñ%×)Ñ)¨*°dÕ;üsV   ‚C	’#B µB ¶'B ÁBÁB Á"C	Â B ÂB ÂB%Â"B( Â$B%Â%B( Â(CÃC	ÚscopeÚreceiver|   c              ƒ   ó„  K  — t        ||«      }|j                  dk(  }| j                  j                  ||¬«      ƒ d{  –—† }|r ||||«      ƒ d{  –—†  y| j                  r3| j                  dt        j                  «      } ||||«      ƒ d{  –—†  y|j                  dk(  r| j                  ||||«      ƒ d{  –—†  y|j                  dk(  r| j                  ||«      ƒ d{  –—†  y|j                  dk(  r| j                  ||«      ƒ d{  –—†  y| j                  ||«      ƒ d{  –—†  y7 Œó7 Œá7 Œ¤7 Œz7 ŒR7 Œ*7 Œ­w)z6Application entry point that handles all HTTP requestsÚPOST)Úis_postNz&Not Found: Session has been terminatedÚGETÚDELETE)r   ÚmethodrH   Úvalidate_requestrV   r“   r
   Ú	NOT_FOUNDÚ_handle_post_requestÚ_handle_get_requestÚ_handle_delete_requestÚ_handle_unsupported_request)r8   r¦   r§   r|   rg   rª   r’   Úresponses           r2   Úhandle_requestz,StreamableHTTPServerTransport.handle_requestz  s6  è ø€ ä˜% Ó)ˆð —.‘. FÑ*ˆØ#Ÿ~™~×>Ñ>¸wÐPWÐ>ÓX×XˆÙÙ  ¨°Ó6×6Ð6Øà×Òà×2Ñ2Ø8Ü×$Ñ$óˆHñ ˜5 '¨4Ó0×0Ð0Øà�>‰>˜VÒ#Ø×+Ñ+¨E°7¸GÀTÓJ×JÑJØ�^‰^˜uÒ$Ø×*Ñ*¨7°DÓ9×9Ñ9Ø�^‰^˜xÒ'Ø×-Ñ-¨g°tÓ<×<Ñ<à×2Ñ2°7¸DÓA×AÑAð+ Yøà6øð 1øð Køà9øà<øàAús{   ‚<E ¾D2¿E ÁD4Á>E ÂD6Â+E Â=D8Â>)E Ã'D:Ã()E ÄD<ÄE Ä,D>Ä-E Ä4E Ä6E Ä8E Ä:E Ä<E Ä>E c                 óì   — |j                   j                  dd«      }|j                  d«      D �cg c]  }|j                  «       ‘Œ }}t	        d„ |D «       «      }t	        d„ |D «       «      }||fS c c}w )z6Check if the request accepts the required media types.Úacceptrx   ú,c              3   óF   K  — | ]  }|j                  t        «      –— Œ y ­wrl   )Ú
startswithr�   ©Ú.0Ú
media_types     r2   ú	<genexpr>zFStreamableHTTPServerTransport._check_accept_headers.<locals>.<genexpr>œ  s   è ø€ Ò_ÀJ�z×,Ñ,Ô->×?Ñ_ùó   ‚!c              3   óF   K  — | ]  }|j                  t        «      –— Œ y ­wrl   )rº   ÚCONTENT_TYPE_SSEr»   s     r2   r¾   zFStreamableHTTPServerTransport._check_accept_headers.<locals>.<genexpr>�  s   è ø€ Ò]À*�j×+Ñ+Ô,<×=Ñ]ùr¿   ©rƒ   r˜   ÚsplitÚstripÚany)r8   rg   Úaccept_headerr½   Úaccept_typesÚhas_jsonÚhas_sses          r2   Ú_check_accept_headersz3StreamableHTTPServerTransport._check_accept_headers—  ss   € àŸ™×+Ñ+¨H°bÓ9ˆØ=J×=PÑ=PÐQTÓ=UÖV¨z˜
×(Ñ(Õ*ÐVˆÐVäÑ_ÐR^Ô_Ó_ˆÜÑ]ÐP\Ô]Ó]ˆà˜Ð Ð ùò Ws   °A1c                 óä   — |j                   j                  dd«      }|j                  d«      d   j                  d«      D �cg c]  }|j                  «       ‘Œ }}t	        d„ |D «       «      S c c}w )z2Check if the request has the correct Content-Type.zcontent-typerx   ú;r   r¸   c              3   ó.   K  — | ]  }|t         k(  –— Œ y ­wrl   )r�   )r¼   Úparts     r2   r¾   zDStreamableHTTPServerTransport._check_content_type.<locals>.<genexpr>¦  s   è ø€ ÒL°�4Ô,Õ,ÑLùs   ‚rÂ   )r8   rg   Úcontent_typerÎ   Úcontent_type_partss        r2   Ú_check_content_typez1StreamableHTTPServerTransport._check_content_type¡  sf   € à—‘×*Ñ*¨>¸2Ó>ˆØ7C×7IÑ7IÈ#Ó7NÈqÑ7Q×7WÑ7WÐX[Ó7\Ö]¨t˜dŸj™j�lÐ]ÐÐ]äÑLÐ9KÔLÓLÐLùò ^s   ÁA-c              ƒ   óV  K  — | j                  |«      \  }}| j                  r@|s=| j                  dt        j                  «      } |||j
                  |«      ƒ d{  –—†  yy|r|s=| j                  dt        j                  «      } |||j
                  |«      ƒ d{  –—†  yy7 ŒH7 Œ­w)zEValidate Accept header based on response mode. Returns True if valid.z3Not Acceptable: Client must accept application/jsonNFzNNot Acceptable: Client must accept both application/json and text/event-streamT)rÊ   rJ   r“   r
   ÚNOT_ACCEPTABLEr§   )r8   rg   r¦   r|   rÈ   rÉ   r´   s          r2   Ú_validate_accept_headerz5StreamableHTTPServerTransport._validate_accept_header¨  s¯   è ø€ à ×6Ñ6°wÓ?Ñˆ�'Ø×(Ò(áØ×6Ñ6ØIÜ×-Ñ-ó�ñ ˜u g§o¡o°tÓ<×<Ð<Øð ñ ™wØ×2Ñ2Ø`Ü×)Ñ)óˆHñ ˜5 '§/¡/°4Ó8×8Ð8ØØð =øð 9ús%   ‚AB)ÁB%ÁAB)ÂB'ÂB)Â'B)c              ƒ   óÞ  ‡ ‡‡‡‡K  — ‰ j                   }|€t        d«      ‚	 ‰ j                  |||«      ƒ d{  –—† sy‰ j                  |«      s3‰ j	                  dt
        j                  «      } ||||«      ƒ d{  –—†  y|j                  «       ƒ d{  –—† }	 t        j                  |«      }	 t        j                  |«      }
t%        |
j&                  t(        «      xr |
j&                  j*                  dk(  }|ra‰ j,                  rp‰ j/                  |«      }|r]|‰ j,                  k7  rN‰ j	                  dt
        j0                  «      } ||||«      ƒ d{  –—†  y‰ j3                  ||«      ƒ d{  –—† syt%        |
j&                  t(        «      se‰ j5                  dt
        j6                  «      } ||||«      ƒ d{  –—†  t9        |¬«      }t;        |
|¬	«      }|j=                  |«      ƒ d{  –—†  y|rI|
j&                  j>                  r3t        |
j&                  j>                  jA                  d
tB        «      «      n#|jD                  jA                  tF        tB        «      Št        |
j&                  jH                  «      ŠtK        jL                  tN           d«      ‰ jP                  ‰<   ‰ jP                  ‰   d   Š‰ jR                  �r7t9        |¬«      }t;        |
|¬	«      }|j=                  |«      ƒ d{  –—†  	 d}‰2 3 d{  –—† }t%        |jT                  j&                  tV        tX        z  «      r|jT                  } n7tZ        j]                  d|jT                  j&                  j*                  › �«       Œy|r$‰ j5                  |«      } ||||«      ƒ d{  –—†  nGtZ        j_                  d«       ‰ j	                  dt
        j`                  «      } ||||«      ƒ d{  –—†  ‰ ji                  ‰«      ƒ d{  –—†  ytK        jL                  tj        t        t        f      d«      \  Š}‰‰ jl                  ‰<   ˆˆˆˆ ˆfd„}ddtn        dœ‰ j,                  rtp        ‰ j,                  ini ¥}ts        |||¬«      }	 tK        jt                  «       4 ƒd{  –—† }|jw                  ||||«       ‰ jy                  |
|‰‰«      }|j=                  |«      ƒ d{  –—†  ddd«      ƒd{  –—†  yy7 �Œº7 �Œy7 �Œc# t        j                  $ rN}	‰ j	                  dt        |	«      › �t
        j                  t        «      } ||||«      ƒ d{  –—†7   Y d}	~	yd}	~	ww xY w# t         $ rN}	‰ j	                  dt        |	«      › �t
        j                  t"        «      } ||||«      ƒ d{  –—†7   Y d}	~	yd}	~	ww xY w7 �Œa7 �ŒI7 �Œÿ7 �ŒÐ7 �ŒÊ7 �Œ¿6 �ŒP7 �Œ07 �Œë# tb        $ rQ tZ        je                  d«       ‰ j	                  dt
        j`                  tf        «      } ||||«      ƒ d{  –—†7   Y �ŒBw xY w7 �Œ2# ‰ ji                  ‰«      ƒ d{  –—†7   w xY w7 �Œ¹7 �Œ{7 �Œn# 1 ƒd{  –—†7  sw Y   �Œ~xY w# tb        $ rd tZ        je                  d«       ‰j{                  «       ƒ d{  –—†7   |j{                  «       ƒ d{  –—†7   ‰ ji                  ‰«      ƒ d{  –—†7   Y yw xY w# tb        $ r}tZ        je                  d«       ‰ j	                  d|› �t
        j`                  tf        «      } ||||«      ƒ d{  –—†7   |r#|j=                  tc        |«      «      ƒ d{  –—†7   Y d}~yd}~ww xY w­w)z2Handle POST requests containing JSON-RPC messages.NúBNo read stream writer available. Ensure connect() is called first.z=Unsupported Media Type: Content-Type must be application/jsonzParse error: zValidation error: Ú
initializeú(Not Found: Invalid or expired session IDrq   rr   ÚprotocolVersionr   r    z
received: z1No response message received before stream closedz.Error processing request: No response receivedzError processing JSON responsezError processing requestc               “   ó¼  •K  — 	 ‰4 ƒd {  –—†  ‰4 ƒd {  –—†  ‰j                  ‰‰‰«      ƒ d {  –—†  ‰2 3 d {  –—† } ‰j                  | «      }‰j                  |«      ƒ d {  –—†  t        | j                  j
                  t        t        z  «      sŒ_ d d d «      ƒd {  –—†  d d d «      ƒd {  –—†  t        j                  d«       ‰j                  j                  ‰d «       ‰j!                  ‰«      ƒ d {  –—†  y 7 Œ÷7 Œî7 ŒÕ7 ŒÌ7 Œ¤6 Œw7 Œk# 1 ƒd {  –—†7  sw Y   Œ{xY w7 Œr# 1 ƒd {  –—†7  sw Y   Œ‚xY w# t        j                  $ r t        j                  d«       Y Œ¯t        $ r t        j                  d«       Y ŒÎw xY w7 ŒŒ# t        j                  d«       ‰j                  j                  ‰d «       ‰j!                  ‰«      ƒ d {  –—†7   w xY w­w)Nz'SSE stream closed by close_sse_stream()zError in SSE writerzClosing SSE writer)r   rž   r|   Ú
isinstancer(   Úrootr#   r    ÚanyioÚClosedResourceErrorr£   r¤   r¢   Ú	exceptionrU   r^   r¥   )rš   r�   rh   r\   Úrequest_stream_readerr8   rv   s     €€€€€r2   Ú
sse_writerzFStreamableHTTPServerTransport._handle_post_request.<locals>.sse_writerM  s·  øè ø€ ðHØ#4÷ *ñ *Ð6K÷ *ñ *à"&×"@Ñ"@ÀÐM^Ð`pÓ"q×qÐqð 8M÷ 
*ð 
* mà-1×-DÑ-DÀ]Ó-S 
Ø&7×&<Ñ&<¸ZÓ&H× HÐ Hô $.Ø$1×$9Ñ$9×$>Ñ$>Ü$3´lÑ$Bõ$"ð %*÷*÷ *÷ *÷ *ô, Ÿ™Ð%9Ô:Ø×0Ñ0×4Ñ4°ZÀÔFØ"×;Ñ;¸JÓG×GÑGð1*øð *øàqøð
*øð !Iøð 8Møð*ø÷ *÷ *ñ *úð *ø÷ *÷ *ñ *ûô  !×4Ñ4ò PäŸ™Ð%NÖOÜ$ò @Ü×(Ñ(Ð)>Ö?ð@úð
 Hùô Ÿ™Ð%9Ô:Ø×0Ñ0×4Ñ4°ZÀÔFØ"×;Ñ;¸JÓG×GÒGüs3  ƒG…D= ‹DŒD= �D(–D—D(šD±D²D¸D¼D	
½DÁ &DÁ&D
Á'/DÂDÂD(Â#DÂ$D(Â(D= Â3D&Â4D= Â8AGÃ=F
Ã>GÄD= ÄD(ÄDÄ	DÄDÄDÄD(ÄD#	ÄDÄD#	ÄD(Ä&D= Ä(D:Ä.D1Ä/D:Ä6D= Ä=(FÅ%F Å'FÆF ÆFÆF Æ
GÆAGÇGÇGÇGúno-cache, no-transformú
keep-alive©zCache-ControlÚ
Connectionr…   ©ÚcontentÚdata_sender_callablerƒ   zSSE response errorzError handling POST requestzError handling POST request: )>rD   rQ   rÔ   rÑ   r“   r
   ÚUNSUPPORTED_MEDIA_TYPEÚbodyÚjsonÚloadsÚJSONDecodeErrorr/   ÚBAD_REQUESTr   r!   Úmodel_validater   r   rÛ   rÜ   r"   r­   rI   r™   r¯   Ú_validate_request_headersr–   ÚACCEPTEDr   r   r|   Úparamsr˜   r   rƒ   ÚMCP_PROTOCOL_VERSION_HEADERry   rÝ   Úcreate_memory_object_streamr'   rT   rJ   r(   r#   r    r£   r¤   rˆ   ÚINTERNAL_SERVER_ERRORr¢   rß   r   r¥   ÚdictrU   rÁ   r�   r   Úcreate_task_groupÚ
start_soonru   r¡   )r8   r¦   rg   r§   r|   r`   r´   rê   Úraw_messageÚer(   Úis_initialization_requestÚrequest_session_idrs   Úsession_messager”   rš   Ússe_stream_readerrá   rƒ   ÚtgÚerrrh   r\   rà   rv   s   `                     @@@@r2   r°   z2StreamableHTTPServerTransport._handle_post_request¾  sÚ  üè ø€ à×)Ñ)ˆØˆ>ÜÐaÓbÐbðN	à×5Ñ5°g¸uÀdÓK×KÐKØð ×+Ñ+¨GÔ4Ø×6Ñ6ØSÜ×5Ñ5ó�ñ ˜u g¨tÓ4×4Ð4Øð !Ÿ™›×'ˆDðÜ"Ÿj™j¨Ó.�ð	Ü(×7Ñ7¸ÓD�ô ˜7Ÿ<™<¬Ó8Ò`¸W¿\¹\×=PÑ=PÐT`Ñ=`ð &ñ )à×&Ò&à)-×)=Ñ)=¸gÓ)FÐ&ñ *Ð.@ÀD×DWÑDWÒ.WØ#'×#>Ñ#>ØFÜ&×0Ñ0ó$˜ñ ' u¨g°tÓ<×<Ð<ØØ×9Ñ9¸'À4ÓH×HÐHØô ˜gŸl™l¬NÔ;à×5Ñ5ØÜ×'Ñ'ó�ñ ˜u g¨tÓ4×4Ð4ô 1ÀÔI�Ü"0°À8Ô"L�Ø—k‘k /Ó2×2Ð2àñ -°·±×1DÒ1Dô �G—L‘L×'Ñ'×+Ñ+Ð,=Ô?YÓZÔ[à—_‘_×(Ñ(Ô)DÔF`Óað ô ˜WŸ\™\Ÿ_™_Ó-ˆJä05×0QÑ0QÔR^Ñ0_Ð`aÓ0bˆD×!Ñ! *Ñ-Ø$(×$9Ñ$9¸*Ñ$EÀaÑ$HÐ!à×,Ó,ä0ÀÔI�Ü"0°À8Ô"L�Ø—k‘k /Ó2×2Ð2ð%Dð (,Ð$ð 0E÷ [ð [˜mä% m×&;Ñ&;×&@Ñ&@Ä/ÔT`ÑB`ÔaØ/<×/DÑ/DÐ,Ù!ô #ŸL™L¨:°m×6KÑ6K×6PÑ6P×6WÑ6WÐ5XÐ)YÕZñ (à#'×#=Ñ#=Ð>NÓ#O˜Ù& u¨g°tÓ<×<Ñ<ô Ÿ™Ð%XÔYØ#'×#>Ñ#>ØLÜ&×<Ñ<ó$˜ñ ' u¨g°tÓ<×<Ð<ð ×7Ñ7¸
ÓC×CÑCô 8=×7XÑ7XÔY]Ô^aÔcfÐ^fÑYgÑ7hÐijÓ7kÑ4Ð!Ð#4ð 8I�×(Ñ(¨Ñ4÷Hð HðB &>Ø".Ü$4ñð HL×GZÒGZÔ-¨t×/BÑ/BÑCÐ`bð	�ô /Ø-Ø)3Ø#ô�ðDä$×6Ñ6Ó8÷ ;ð ;¸BØŸ™ h°°wÀÔEà*.×*FÑ*FÀwÐPWÐYcÐeuÓ*v˜Ø$Ÿk™k¨/Ó:×:Ð:÷	;÷ ;ñ ;ðo Lùð 5ùð (úô ×'Ñ'ò Ø×6Ñ6¸ÄsÈ1ÃvÀhÐ7OÔQ[×QgÑQgÔitÓu�Ù˜u g¨tÓ4×4Ñ4Üûðûô #ò Ø×6Ñ6Ø(¬¨Q«¨Ð1Ü×*Ñ*Ü"ó�ñ
 ˜u g¨tÓ4×4Ñ4Üûðúð4 =ùàHùð 5ùð
 3ùð. 3ùð[ùÐ/Dùð =ùð =úÜ ò 9Ü×$Ñ$Ð%EÔFØ#×:Ñ:Ø2Ü"×8Ñ8Ü&ó �Hñ
 # 5¨'°4Ó8×8Ô8ð9úð Dú˜$×7Ñ7¸
ÓC×CÒCúðn;ùð ;ùð	;ù÷ ;÷ ;ò ;ûô
 !ò DÜ×$Ñ$Ð%9Ô:Ø+×2Ñ2Ó4×4Ñ4Ø+×2Ñ2Ó4×4Ñ4Ø×7Ñ7¸
ÓC×CÓCð	Dûô ò 
	Ü×ÑÐ:Ô;Ø×2Ñ2Ø/°¨uÐ5Ü×0Ñ0ÜóˆHñ
 ˜5 '¨4Ó0×0Ñ0ÙØ—k‘k¤)¨C£.Ó1×1Ñ1Üûð
	üsÒ  ‡]-¢[" ¸S2¹[" ½]-¾>[" Á<S5Á=[" Â]-Â[" ÂS8Â[" ÂS; Â1U ÃB[" ÅV9Å[" Å]-Å[" Å3V<Å4[" Å8]-Å9A[" Ç V?Ç1[" Ç2WÇ3[" Ç7]-Ç8D[" Ë;WË<[" ÌW ÌWÌ	WÌ
WÌBW ÎWÎAW Ï&WÏ'W Ï+[" Ï?X1Ð [" Ð]-ÐA<[" ÒY2 ÒYÒY2 Ò=YÓYÓYÓ Y2 Ó+YÓ,Y2 Ó0]-Ó2[" Ó5[" Ó8[" Ó;UÔ>UÕUÕUÕ[" Õ]-ÕUÕ[" Õ	V6Õ(>V1Ö&V)Ö'V1Ö,[" Ö0]-Ö1V6Ö6[" Ö<[" Ö?[" ×[" ×[" ×W×W ×W ×W ×AX.Ø$X'Ø%X.Ø*X4 Ø-X.Ø.X4 Ø1[" Ø4YÙ	YÙ
YÙ[" ÙY2 ÙYÙY2 ÙY/Ù"Y%Ù#Y/Ù*Y2 Ù21[Ú#Z&Ú$[Ú<Z?Ú=[Û[Û[Û[" Û]-Û[Û[" Û"	]*Û+A
]%Ü5\8Ü6$]%Ý]Ý]%Ý ]-Ý%]*Ý*]-c              ƒ   ó~  ‡ ‡K  — ‰ j                   }|€t        d«      ‚‰ j                  |«      \  }}|sG‰ j                  dt        j
                  «      } ||j                  |j                  |«      ƒ d{  –—†  y‰ j                  ||«      ƒ d{  –—† sy|j                  j                  t        «      x}r‰ j                  |||«      ƒ d{  –—†  yddt        dœ}‰ j                  r‰ j                  |t        <   t         ‰ j"                  v rG‰ j                  dt        j$                  «      } ||j                  |j                  |«      ƒ d{  –—†  yt'        j(                  t*        t,        t,        f      d«      \  Š}	ˆ ˆfd	„}
t/        |	|
|¬
«      }	  ||j                  |j                  |«      ƒ d{  –—†  y7 �ŒH7 �Œ07 Œõ7 Œu7 Œ# t0        $ rh t2        j5                  d«       ‰j7                  «       ƒ d{  –—†7   |	j7                  «       ƒ d{  –—†7   ‰ j9                  t         «      ƒ d{  –—†7   Y yw xY w­w)a   
        Handle GET request to establish SSE.

        This allows the server to communicate to the client without the client
        first sending data via HTTP POST. The server can send JSON-RPC requests
        and notifications on this stream.
        NrÖ   z4Not Acceptable: Client must accept text/event-streamrâ   rã   rä   z4Conflict: Only one SSE stream is allowed per sessionr   c               “   óü  •K  — 	 t        j                  t           d«      ‰j                  t        <   ‰j                  t           d   } ‰4 ƒd {  –—†  | 4 ƒd {  –—†  | 2 3 d {  –—† }‰j                  |«      }‰j                  |«      ƒ d {  –—†  Œ47 ŒE7 Œ<7 Œ37 Œ6 d d d «      ƒd {  –—†7   n# 1 ƒd {  –—†7  sw Y   nxY wd d d «      ƒd {  –—†7   n# 1 ƒd {  –—†7  sw Y   nxY wn$# t        $ r t        j                  d«       Y nw xY wt        j                  d«       ‰j                  t        «      ƒ d {  –—†7   y # t        j                  d«       ‰j                  t        «      ƒ d {  –—†7   w xY w­w)Nr   r    zError in standalone SSE writerzClosing standalone SSE writer)rÝ   rô   r'   rT   re   rž   r|   r¢   r£   rß   r¤   r¥   )Ústandalone_stream_readerrš   r�   r8   rv   s      €€r2   Ústandalone_sse_writerzPStreamableHTTPServerTransport._handle_get_request.<locals>.standalone_sse_writerÇ  se  øè ø€ ðDô 9>×8YÑ8YÔZfÑ8gÐhiÓ8j�×%Ñ%¤nÑ5Ø+/×+@Ñ+@ÄÑ+PÐQRÑ+SÐ(à,÷ 
Añ 
AÐ.F÷ 
Añ 
Aà/G÷ Að A˜mð &*×%<Ñ%<¸]Ó%K˜
Ø/×4Ñ4°ZÓ@×@Ñ@ð
Aøð 
AøðAøð Aøð 0H÷
A÷ 
A÷ 
A÷ 
Aó 
Aú÷ 
A÷ 
A÷ 
A÷ 
Aó 
Aüô ò CÜ× Ñ Ð!AÖBðCúô —‘Ð<Ô=Ø×3Ñ3´NÓC×CÒCøô —‘Ð<Ô=Ø×3Ñ3´NÓC×CÒCüs  ƒE<…A	C, ÁBÁC, ÁCÁBÁCÁB/Á BÁ$B
Á%BÁ(&B/ÂB
ÂB/ÂC, ÂCÂBÂB/ÂB/ÂCÂ(B+Â)CÂ/C	Â5B8Â6C	Â=CÃC, ÃCÃC, ÃC(ÃCÃC(Ã$C, Ã+E Ã,DÄ
E ÄDÄE Ä-E<Ä=E Ä>E<Å.E9Å2E5Å3E9Å9E<ræ   z Error in standalone SSE response)rD   rQ   rÊ   r“   r
   rÓ   r¦   r§   rð   rƒ   r˜   ÚLAST_EVENT_ID_HEADERÚ_replay_eventsrÁ   rI   r�   re   rT   ÚCONFLICTrÝ   rô   rö   r/   r   r¢   r£   rß   r¡   r¥   )r8   rg   r|   r`   Ú_rÉ   r´   r;   rƒ   rþ   r  rv   s   `          @r2   r±   z1StreamableHTTPServerTransport._handle_get_request“  s%  ùè ø€ ð ×)Ñ)ˆØˆ>ÜÐaÓbÐbð ×/Ñ/°Ó8‰
ˆˆ7áØ×2Ñ2ØFÜ×)Ñ)óˆHñ ˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ð@Øà×3Ñ3°G¸TÓB×BÐBØð $ŸO™O×/Ñ/Ô0DÓEÐEˆ=ÐEØ×%Ñ% m°W¸dÓC×CÐCØð 6Ø&Ü,ñ
ˆð ×ÒØ-1×-@Ñ-@ˆGÔ)Ñ*ô ˜T×2Ñ2Ñ2Ø×2Ñ2ØFÜ×#Ñ#óˆHñ ˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ð@Øô 05×/PÑ/PÔQUÔVYÔ[^ÐV^ÑQ_Ñ/`ÐabÓ/cÑ,ÐÐ,õ	Dô2 'Ø%Ø!6Øô
ˆð	@á˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ñ@ðC Aùð Cùð
 Døð$ AøðN AùÜò 	@Ü×ÑÐ?Ô@Ø#×*Ñ*Ó,×,Ñ,Ø#×*Ñ*Ó,×,Ñ,Ø×/Ñ/´Ó?×?Ó?ð		@üs¤   „A1H=Á5F=Á6H=ÂG Â<H=ÃGÃBH=ÅGÅAH=Æ!G	 Æ7GÆ8G	 Æ<H=Ç H=ÇH=ÇH=ÇG	 Ç	1H:Ç:G=Ç;H:ÈHÈH:È1H4È2H:È7H=È9H:È:H=c              ƒ   ó´  K  — | j                   sG| j                  dt        j                  «      } ||j                  |j
                  |«      ƒ d{  –—†  y| j                  ||«      ƒ d{  –—† sy| j                  «       ƒ d{  –—†  | j                  dt        j                  «      } ||j                  |j
                  |«      ƒ d{  –—†  y7 Œ7 Œf7 ŒO7 Œ­w)z8Handle DELETE requests for explicit session termination.z5Method Not Allowed: Session termination not supportedN)
rI   r“   r
   ÚMETHOD_NOT_ALLOWEDr¦   r§   rð   Ú	terminater–   ÚOK)r8   rg   r|   r´   s       r2   r²   z4StreamableHTTPServerTransport._handle_delete_requestï  sÄ   è ø€ ð ×"Ò"à×2Ñ2ØGÜ×-Ñ-óˆHñ ˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ð@Øà×3Ñ3°G¸TÓB×BÐBØà�n‰nÓ×Ðà×-Ñ-ØÜ�M‰Mó
ˆñ �w—}‘} g§o¡o°tÓ<×<Ñ<ð Aøð Cøð 	øð 	=úsI   ‚ACÁCÁCÁ+CÁ,CÂCÂACÃ
CÃCÃCÃCÃCc              ƒ   ó  K  — | j                   ryd| _         t        j                  d| j                  › �«       t	        | j
                  j                  «       «      }|D ]  }| j                  |«      ƒ d{  –—†  Œ | j
                  j                  «        	 | j                  �"| j                  j                  «       ƒ d{  –—†  | j                  �"| j                  j                  «       ƒ d{  –—†  | j                  �"| j                  j                  «       ƒ d{  –—†  | j                  �#| j                  j                  «       ƒ d{  –—†  yy7 ŒÛ7 Œ’7 Œf7 Œ:7 Œ# t        $ r"}t        j                  d|› �«       Y d}~yd}~ww xY w­w)zÕTerminate the current session, closing all streams.

        Once terminated, all requests with this session ID will receive 404 Not Found.
        Calling this method multiple times is safe (idempotent).
        NTzTerminating session: úError closing streams: )rV   r£   ÚinforI   ÚlistrT   Úkeysr¥   ÚclearrD   r¡   rE   rG   rF   r¢   r¤   )r8   Úrequest_stream_keysÚkeyrú   s       r2   r  z'StreamableHTTPServerTransport.terminate  sc  è ø€ ð ×ÒØàˆÔÜ�‰Ð+¨D×,?Ñ,?Ð+@ÐAÔBô # 4×#8Ñ#8×#=Ñ#=Ó#?Ó@Ðð 'ò 	5ˆCØ×/Ñ/°Ó4×4Ñ4ð	5ð 	×Ñ×#Ñ#Ô%ð	8Ø×'Ñ'Ð3Ø×.Ñ.×5Ñ5Ó7×7Ð7Ø× Ñ Ð,Ø×'Ñ'×.Ñ.Ó0×0Ð0Ø×(Ñ(Ð4Ø×/Ñ/×6Ñ6Ó8×8Ð8Ø×!Ñ!Ð-Ø×(Ñ(×/Ñ/Ó1×1Ñ1ð .ð 5øð 8øà0øà8øà1ùÜò 	8ä�L‰LÐ2°1°#Ð6×7Ñ7ûð	8üs„   ‚A3F	Á5EÁ6 F	Â)E Ã EÃ-E Ã.EÃ/-E ÄEÄ-E Å
EÅE ÅF	ÅE ÅE ÅE ÅE Å	FÅ$FÅ<F	ÆFÆF	c              ƒ   óð   K  — t         ddœ}| j                  r| j                  |t        <   | j                  dt        j
                  |¬«      } ||j                  |j                  |«      ƒ d{  –—†  y7 Œ­w)z Handle unsupported HTTP methods.zGET, POST, DELETE)r…   ÚAllowzMethod Not Allowed)rƒ   N)r�   rI   r�   r“   r
   r
  r¦   r§   )r8   rg   r|   rƒ   r´   s        r2   r³   z9StreamableHTTPServerTransport._handle_unsupported_request)  sq   è ø€ ô .Ø(ñ
ˆð ×ÒØ-1×-@Ñ-@ˆGÔ)Ñ*à×.Ñ.Ø Ü×)Ñ)Øð /ó 
ˆñ
 �w—}‘} g§o¡o°tÓ<×<Ò<ús   ‚A,A6Á.A4Á/A6c              ƒ   ó€   K  — | j                  ||«      ƒ d {  –—† sy| j                  ||«      ƒ d {  –—† syy7 Œ!7 Œ­w)NFT)Ú_validate_sessionÚ_validate_protocol_version)r8   rg   r|   s      r2   rð   z7StreamableHTTPServerTransport._validate_request_headers9  sD   è ø€ Ø×+Ñ+¨G°TÓ:×:Ð:ØØ×4Ñ4°W¸dÓC×CÐCØØð	 ;øàCús   ‚>˜:™>³<´>¼>c              ƒ   óŽ  K  — | j                   sy| j                  |«      }|sG| j                  dt        j                  «      } ||j
                  |j                  |«      ƒ d{  –—†  y|| j                   k7  rG| j                  dt        j                  «      } ||j
                  |j                  |«      ƒ d{  –—†  yy7 Œ\7 Œ­w)z'Validate the session ID in the request.TzBad Request: Missing session IDNFrØ   )rI   r™   r“   r
   rî   r¦   r§   r¯   )r8   rg   r|   rü   r´   s        r2   r  z/StreamableHTTPServerTransport._validate_session@  sÀ   è ø€ à×"Ò"àð "×1Ñ1°'Ó:Ðñ "Ø×2Ñ2Ø1Ü×&Ñ&óˆHñ ˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ð@Øð  ×!4Ñ!4Ò4Ø×2Ñ2Ø:Ü×$Ñ$óˆHñ ˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ð@Øàð Aøð Aús%   ‚A"CÁ$CÁ%ACÂ:CÂ;CÃCc              ƒ   ó:  K  — |j                   j                  t        «      }|€t        }|t        vrfdj                  t        «      }| j                  d|› d�d|› �z   t        j                  «      } ||j                  |j                  |«      ƒ d{  –—†  yy7 Œ­w)z4Validate the protocol version header in the request.Nz, z+Bad Request: Unsupported protocol version: z. zSupported versions: FT)rƒ   r˜   ró   r   r   Újoinr“   r
   rî   r¦   r§   )r8   rg   r|   rh   Úsupported_versionsr´   s         r2   r  z8StreamableHTTPServerTransport._validate_protocol_version]  s§   è ø€ ð #Ÿ?™?×.Ñ.Ô/JÓKÐð Ð#Ü9Ðð Ô#>Ñ>Ø!%§¡Ô+FÓ!GÐØ×2Ñ2Ø=Ð>NÐ=OÈrÐRØ(Ð);Ð(<Ð=ñ>ä×&Ñ&óˆHñ
 ˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ð@Øàð Aús   ‚BBÂBÂBr;   c              ƒ   ó¦  ‡ ‡‡‡	‡
K  — ‰ j                   Š‰sy	 ddt        dœ}‰ j                  r‰ j                  |t        <   |j                  j                  t        t        «      Š	t        j                  t        t        t        f      d«      \  Š
}ˆˆˆ	ˆ ˆ
fd„}t        |||¬«      }	  ||j                  |j                  |«      ƒ d{  –—†  ‰
j%                  «       ƒ d{  –—†  |j%                  «       ƒ d{  –—†  y7 Œ5# t        $ r t         j#                  d«       Y ŒSw xY w7 ŒC7 Œ-# ‰
j%                  «       ƒ d{  –—†7   |j%                  «       ƒ d{  –—†7   w xY w# t        $ rd t         j#                  d	«       ‰ j'                  d	t(        j*                  t,        «      } ||j                  |j                  |«      ƒ d{  –—†7   Y yw xY w­w)
zˆ
        Replays events that would have been sent after the specified event ID.
        Only used when resumability is enabled.
        Nrâ   rã   rä   r   c               “   ó4  •K  — 	 ‰	4 ƒd {  –—†  dt         dd fˆˆ	fd„} ‰j                  ‰| «      ƒ d {  –—† }|r´|‰j                  vr¦‰	‰j                  |<   ‰j	                  |‰	‰«      ƒ d {  –—†  t        j                  t            d«      ‰j                  |<   ‰j                  |   d   }|4 ƒd {  –—†  |2 3 d {  –—† }‰j                  |«      }‰	j                  |«      ƒ d {  –—†  Œ4d d d «      ƒd {  –—†  y 7 Œô7 ŒÍ7 Œ•7 ŒQ7 ŒH7 Œ 6 d d d «      ƒd {  –—†7   Œ0# 1 ƒd {  –—†7  sw Y   ŒBxY w7 Œ9# 1 ƒd {  –—†7  sw Y   y xY w# t
        j                  $ r t        j                  d«       Y y t        $ r t        j                  d«       Y y w xY w­w)Nrš   r6   c              “   óf   •K  — ‰j                  | «      }‰j                  |«      ƒ d {  –—†  y 7 Œ­wrl   )rž   r|   )rš   r�   r8   rv   s     €€r2   Ú
send_eventzWStreamableHTTPServerTransport._replay_events.<locals>.replay_sender.<locals>.send_event�  s+   øè ø€ Ø)-×)@Ñ)@ÀÓ)O˜JØ"3×"8Ñ"8¸Ó"D×DÒDús   ƒ&1©/ª1r   r    z.Replay SSE stream closed by close_sse_stream()zError in replay sender)r'   r>   rT   rU   r   rÝ   rô   rž   r|   rÞ   r£   r¤   r¢   rß   )
r!  r5   Ú
msg_readerrš   r�   rK   r;   Úreplay_protocol_versionr8   rv   s
        €€€€€r2   Úreplay_senderzCStreamableHTTPServerTransport._replay_events.<locals>.replay_senderŒ  s·  øè ø€ ð ?Ø0÷ Mñ MðE¼Lð EÈTö Eð
 +6×*IÑ*IÈ-ÐYcÓ*d×$d˜	ñ %¨¸$×:OÑ:OÑ)OàBS˜D×4Ñ4°YÑ?ð #'×"@Ñ"@ÀÐL]Ð_vÓ"w×wÐwô @E×?`Ñ?`ÔamÑ?nÐopÓ?q˜D×1Ñ1°)Ñ<Ø)-×)>Ñ)>¸yÑ)IÈ!Ñ)L˜Jð (2÷ Mñ MØ;E÷ !Mð !M¨-Ø15×1HÑ1HÈÓ1W Jà*;×*@Ñ*@ÀÓ*L×$LÑ$L÷5M÷ Mñ Møð %eøð xøðMøð!Møð %Møð <F÷M÷ M÷ M÷ Mó Múð-Mø÷ M÷ Mñ Mûô6 ×0Ñ0ò Sä—L‘LÐ!QÖRÜ ò ?Ü×$Ñ$Ð%=Ö>ð?üs   ƒF…E ‹D ŒE �%D6´Dµ9D6Á.DÁ/AD6Â4DÂ5D6Â8DÂ;DÂ?D
Ã DÃ&DÃ)D

Ã*DÃ/E Ã:D4Ã;E Ã?FÄ E ÄD6ÄD6ÄD6ÄDÄ
DÄDÄD6ÄDÄD6ÄD1	Ä%D(Ä&D1	Ä-D6Ä4E Ä6EÄ<D?Ä=EÅE ÅFÅE Å(FÅ3FÅ5FÆFÆFÆFræ   zError in replay responsezError replaying events)rR   rÁ   rI   r�   rƒ   r˜   ró   r   rÝ   rô   rö   r/   r   r¦   r§   r¢   r£   rß   r¡   r“   r
   rõ   r   )r8   r;   rg   r|   rƒ   rþ   r$  r´   rK   r#  rv   s   ``      @@@r2   r  z,StreamableHTTPServerTransport._replay_eventss  s§  üè ø€ ð
 ×'Ñ'ˆÙØðI	Aà!9Ø*Ü 0ñˆGð ×"Ò"Ø15×1DÑ1D�Ô-Ñ.ð '.§o¡o×&9Ñ&9Ô:UÔWqÓ&rÐ#ô 49×3TÑ3TÔUYÔZ]Ô_bÐZbÑUcÑ3dÐefÓ3gÑ0ÐÐ0÷!?ð !?ôH +Ø)Ø%2ØôˆHð1Ù˜wŸ}™}¨g¯o©o¸tÓD×DÐDð (×.Ñ.Ó0×0Ð0Ø'×.Ñ.Ó0×0Ñ0ð EùÜò =Ü× Ñ Ð!;Ö<ð=úð 1øØ0ùð (×.Ñ.Ó0×0Ñ0Ø'×.Ñ.Ó0×0Ò0ûäò 	AÜ×ÑÐ5Ô6Ø×2Ñ2Ø(Ü×0Ñ0ÜóˆHñ
 ˜7Ÿ=™=¨'¯/©/¸4Ó@×@Ó@ð	Aüs´   ‡G˜BE! Â)!D Ã
D ÃD ÃE! Ã"D&Ã#E! Ã:D(Ã;E! Ã?GÄ D ÄD#Ä D* Ä"D#Ä#D* Ä&E! Ä(E! Ä*EÄ>EÄ?EÅEÅEÅE! Å!A$GÇGÇGÇGÇGÇGc                ón  ‡ ‡K  — t        j                  t        t        z     d«      \  }}t        j                  t           d«      \  }Š|‰ _        |‰ _        ‰‰ _        |‰ _        t        j                  «       4 ƒd{  –—† }ˆ ˆfd„}|j                  |«       	 ||f­–— t        ‰ j                  j                  «       «      D ]  }‰ j                  |«      ƒ d{  –—†  Œ ‰ j                  j                  «        	 |j                  «       ƒ d{  –—†  |j                  «       ƒ d{  –—†  ‰j                  «       ƒ d{  –—†  |j                  «       ƒ d{  –—†  ddd«      ƒd{  –—†  y7 Œð7 Œ”7 Œa7 ŒK7 Œ57 Œ# t        $ r"}t         j#                  d|› �«       Y d}~ŒCd}~ww xY w# t        ‰ j                  j                  «       «      D ]  }‰ j                  |«      ƒ d{  –—†7   Œ ‰ j                  j                  «        	 |j                  «       ƒ d{  –—†7   |j                  «       ƒ d{  –—†7   ‰j                  «       ƒ d{  –—†7   |j                  «       ƒ d{  –—†7   w # t        $ r"}t         j#                  d|› �«       Y d}~w d}~ww xY wxY w7 �Œ4# 1 ƒd{  –—†7  sw Y   yxY w­w)z±Context manager that provides read and write streams for a connection.

        Yields:
            Tuple of (read_stream, write_stream) for bidirectional communication
        r   Nc               “   óf  •K  — 	 ‰2 3 d {  –—† } | j                   }d }t        |j                  t        t        z  «      r"t        |j                  j                  «      }|}n[| j                  �Ot        | j                  t        «      r5| j                  j                  �t        | j                  j                  «      }|�|nt        }d }‰j                  r?‰j                  j                  ||«      ƒ d {  –—† }t        j                  d|› d|› �«       |‰j                  v r6	 ‰j                  |   d   j!                  t#        ||«      «      ƒ d {  –—†  �ŒPt        j                  d|› d�«       �Œk7 �Œg7 Œ�7 Œ&# t$        j&                  t$        j(                  f$ r  ‰j                  j+                  |d «       Y �Œ´w xY w6 y # t$        j(                  $ r; ‰j,                  rt        j                  d«       Y y t        j/                  d«       Y y t0        $ r t        j/                  d«       Y y w xY w­w)	NzStored z from r   zRequest stream z› not found 
                                for message. Still processing message as the client
                                might reconnect and replay.zRead stream closed by clientz3Unexpected closure of read stream in message routerzError in message router)r(   rÛ   rÜ   r#   r    r/   ry   rs   r   Úrelated_request_idre   rR   r9   r£   r¤   rT   r|   r'   rÝ   ÚBrokenResourceErrorrÞ   r^   rV   rß   r¢   )rý   r(   Útarget_request_idÚresponse_idÚrequest_stream_idr)   r8   Úwrite_stream_readers         €€r2   Úmessage_routerz=StreamableHTTPServerTransport.connect.<locals>.message_routerå  s  øè ø€ ð6@Ø1D÷ .ð .˜oà"1×"9Ñ"9˜Ø,0Ð)ä% g§l¡l´OÄlÑ4RÔSÜ*-¨g¯l©l¯o©oÓ*>˜Kð 1<Ñ-ð ,×4Ñ4Ð@Ü *Ø /× 8Ñ 8Ü 5ô!ð !0× 8Ñ 8× KÑ KÐ Wä03°O×4LÑ4L×4_Ñ4_Ó0`Ð-àARÐA^Ñ,=ÔdrÐ)ð
 $(˜Ø×,Ò,Ø-1×->Ñ->×-JÑ-JÐK\Ð^eÓ-f×'f˜HÜ"ŸL™L¨7°8°*¸FÐCTÐBUÐ)VÔWà,°×0EÑ0EÑEðSà&*×&;Ñ&;Ð<MÑ&NÈqÑ&Q×&VÑ&VÔWcÐdkÐmuÓWvÓ&w× wÒ wô #ŸL™LØ$3Ð4EÐ3Fð G<ð !?öðU.ùð8 (gøð !xùä %× 9Ñ 9Ü %× 9Ñ 9ð$ò Sð
 !%× 5Ñ 5× 9Ñ 9Ð:KÈT× RðSúñG 2Eøô^ ×0Ñ0ò `Ø×'Ò'ÜŸ™Ð%CÖDä×(Ñ(Ð)^Ö_Ü ò @Ü×$Ñ$Ð%>Ö?ð@üs£   ƒH1…G ‡F?‹E2ŒF?�C$G Ã3E5Ã4-G Ä".E9ÅE7ÅE9ÅG Å2F?Å5G Å7E9Å9?F<Æ8G Æ;F<Æ<G Ç H1Ç4H.Ç5H1Ç7H.ÈH1ÈH.È+H1È-H.È.H1r  )rÝ   rô   r   r¢   rD   rE   rG   rF   r÷   rø   r  rT   r  r¥   r  r¡   r£   r¤   )	r8   Úread_stream_writerÚread_streamÚwrite_streamrÿ   r-  r5   rú   r,  s	   `       @r2   Úconnectz%StreamableHTTPServerTransport.connectÇ  s�  ùè ø€ ô$ +0×*KÑ*KÌNÔ]fÑLfÑ*gÐhiÓ*jÑ'Ð˜KÜ,1×,MÑ,MÌnÑ,]Ð^_Ó,`Ñ)ˆÐ)ð $6ˆÔ Ø'ˆÔØ$7ˆÔ!Ø)ˆÔô ×*Ñ*Ó,÷ N	@ð N	@°õ7@ðt �M‰M˜.Ô)ð@à! <Ð/Ó/ä!% d×&;Ñ&;×&@Ñ&@Ó&BÓ!Cò C�IØ×7Ñ7¸	ÓB×BÑBðCà×%Ñ%×+Ñ+Ô-ð@Ø,×3Ñ3Ó5×5Ð5Ø%×,Ñ,Ó.×.Ð.Ø-×4Ñ4Ó6×6Ð6Ø&×-Ñ-Ó/×/Ð/÷WN	@÷ N	@ñ N	@øðF Cøð
 6øØ.øØ6øØ/ùÜ ò @ä—L‘LÐ#:¸1¸#Ð!>×?Ñ?ûð@ûô "& d×&;Ñ&;×&@Ñ&@Ó&BÓ!Cò C�IØ×7Ñ7¸	ÓB×BÒBðCà×%Ñ%×+Ñ+Ô-ð@Ø,×3Ñ3Ó5×5Ñ5Ø%×,Ñ,Ó.×.Ñ.Ø-×4Ñ4Ó6×6Ñ6Ø&×-Ñ-Ó/×/Ò/øÜ ò @ä—L‘LÐ#:¸1¸#Ð!>×?Ñ?ûð@ýðYN	@ù÷ N	@÷ N	@ñ N	@üsD  „A:J5Á>E/Á?J5ÂJ ÂF)Â":J ÃE1Ã J Ã>E;ÄE3ÄE;Ä)E5Ä*E;ÅE7ÅE;ÅE9ÅE;ÅJ5Å)JÅ*J5Å1J Å3E;Å5E;Å7E;Å9E;Å;	F&ÆF!ÆJ Æ!F&Æ&J Æ);JÇ$G'Ç%!JÈI,ÈH
ÈI,È3H6
È4I,ÉI
ÉI,É%I(
É&I,É+JÉ,	J	É5J	ÊJÊJ	ÊJÊJ ÊJ5Ê J2Ê&J)Ê'J2Ê.J5)FNNNrt   )=r*   r+   r,   r-   rD   r   r   r¢   r.   rE   r   rF   rG   r   r/   Úboolr4   r   ÚintrX   Úpropertyr[   r$   rc   rf   r!   r   ru   rö   r   r   r   r
   r   r“   r  r–   r™   r'   rž   r¥   r   r   r   rµ   ÚtuplerÊ   rÑ   rÔ   r°   r±   r²   r  r³   rð   r  r  r  r   r   r1  r0   r1   r2   rC   rC   {   s&  … ñð VZÐÐ/°ÀÑ0JÑKÈdÑRÓYØQU€LÐ+¨N¸YÑ,FÑGÈ$ÑNÓUØCG€MÐ)¨.Ñ9¸DÑ@ÓGØMQÐÐ3°NÑCÀdÑJÓQØ*Ó*ð
 */Ø)-Ø>BØ%)ñ.9à˜d™
ð.9ð #'ð.9ð   $Ñ&ð	.9ð
 5°tÑ;ð.9ð ˜d™
ð.9ð 
ó.9ð` ð ˜tò  ó ð ð#¨9ð #¸ó #ó8.ð&:àð:ð ð:ð ð	:ð
 ð:ð 
ó:ð@4àð4ð 2°$°s¸C°x±.ÑAð4ð ð	4ð
 
ó4ð< *Ø)-ñ
àð
ð  ð
ð ð	
ð
 �c˜3�h‘ $Ñ&ð
ð 
ó
ðD #-§-¡-Ø)-ñ	
à(¨4Ñ/ð
ð  ð
ð �c˜3�h‘ $Ñ&ð	
ð
 
ó
ð(: wð :°3¸±:ó :ð°ð ÀÀcÈ3ÀhÁó ð<¸ð <Àtó <ðB¨%ð B¸'ð BÈð BÐRVó Bð:!¨Wð !¸¸tÀT¸zÑ9Jó !ðM¨7ð M°tó Mð°Wð ÀUð ÐRVð Ð[_ó ð,S°ð SÀð SÐRYð SÐaeð SÐjnó SðjZ@°ð Z@Àð Z@Èó Z@ðx=°Gð =À4ð =ÈDó =ó.!8ðF=¸ð =Èð =ÐQUó =ð °wð Àdð Ètó ð¨wð ¸dð Àtó ð:¸ð Àtð ÐPTó ð,RA°#ð RAÀð RAÈtð RAÐX\ó RAðh ði@à	ØØ% n°yÑ&@ÑAØ" >Ñ2ð4ñ	
ð 	ð		ñ
òi@ó ñi@r1   rC   )Ir-   rë   ÚloggingÚreÚabcr   r   Úcollections.abcr   r   r   Ú
contextlibr   Údataclassesr	   Úhttpr
   Útypingr   rÝ   Úanyio.streams.memoryr   r   Úpydanticr   Ússe_starletter   Ústarlette.requestsr   Ústarlette.responsesr   Ústarlette.typesr   r   r   Úmcp.server.transport_securityr   r   Úmcp.shared.messager   r   Úmcp.shared.versionr   Ú	mcp.typesr   r   r   r   r   r   r    r!   r"   r#   r$   Ú	getLoggerr*   r£   r�   ró   r  r�   rÁ   re   ÚcompilerO   r/   r?   r@   r'   rA   r4   rC   r0   r1   r2   ú<module>rJ     s  ðñó Û Û 	ß #ß ?Ñ ?Ý *Ý !Ý Ý ã ß RÝ $Ý -Ý &Ý (ß 0Ñ 0÷÷ EÝ :÷÷ ÷ ñ ð 
ˆ×	Ñ	˜8Ó	$€ð )Ð Ø4Ð Ø&Ð ð 'Ð Ø&Ð ð €ð  �R—Z‘ZÐ 1Ó2Ð ð €Ø
€ð ÷ ð  ó ð ð ˜,˜¨°4©Ð8Ñ9€ô#�ô #÷Lv@ò v@r1   