
    "<i                    8   d dl mZ d dlZd dlmZ d dlmZmZ d dlZd dl	Z
d dlmZmZ d dl
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mZ d dlmZ d dlm Z  erd dl!m"Z"  e e#          Z$ G d de          Z% G d deeef                   Z&dS )    )annotationsN)AsyncExitStack)TYPE_CHECKINGAny)MemoryObjectReceiveStreamMemoryObjectSendStream)McpError)LifespanResultTNotificationOptionsRequestT)Server)InitializationOptions)ServerSession)stdio_server)SessionMessage)RequestResponder)
get_logger)FastMCPc                  H     e Zd ZdZd
 fdZedd            Zd fd	Z xZS )MiddlewareServerSessionzMServerSession that routes initialization requests through FastMCP middleware.fastmcpr   c                z     t                      j        |i | t          j        |          | _        d | _        d S N)super__init__weakrefref_fastmcp_ref_subscription_task_groupselfr   argskwargs	__class__s       /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/server/low_level.pyr   z MiddlewareServerSession.__init__$   s?    $)&)))29+g2F2F@D%%%    returnc                P    |                                  }|t          d          |S zGet the FastMCP instance.Nz'FastMCP instance is no longer availabler   RuntimeErrorr!   r   s     r%   r   zMiddlewareServerSession.fastmcp*   .     ##%%?HIIIr&   	responderARequestResponder[mcp.types.ClientRequest, mcp.types.ServerResult]c                .   	
K   ddl }ddlm} t          j        j        t          j        j                  r4d	j	        
d	
fd}|_	        d	 fd}|j
        j                             j                  4 d{V 	 } |j        j        ddd|          }	  j                            ||           d{V 	 cddd          d{V  S # t          $ rh}j        s;5  	                    |j                   d{V  ddd           n# 1 swxY w Y   nt$                              d|           Y d}~nd}~ww xY wddd          d{V  n# 1 d{V swxY w Y   t)                                                     d{V S )z
        Override the _received_request method to route special requests
        through FastMCP middleware.

        Handles initialization requests and SEP-1686 task methods.
        r   N)MiddlewareContextresponsemcp.types.ServerResultr'   Nonec                .   K   |  |            d {V S r    )r2   captured_responseoriginal_responds    r%   capturing_respondzDMiddlewareServerSession._received_request.<locals>.capturing_respondM   s2       %-!--h777777777r&   ctxr1   !mcp.types.InitializeResult | Nonec                   K   t          t                                                   d {V  +t          j        t
          j        j                  rj        S d S r   )r   r   _received_request
isinstancerootmcptypesInitializeResult)r:   r$   r7   r.   r!   s    r%   call_original_handlerzHMiddlewareServerSession._received_request.<locals>.call_original_handlerV   sl       3T::LLYWWWWWWWWW$0Z%*CI,F6 60 -11tr&   )r   clientrequest
initialize)messagesourcetypemethodfastmcp_contextznReceived McpError but responder is already completed. Cannot send error response as response was already sent.)exc_info)r2   r3   r'   r4   )r:   r1   r'   r;   )fastmcp.server.context$fastmcp.server.middleware.middlewarer1   r>   rE   r?   r@   rA   InitializeRequestrespondservercontextContextr   _apply_middlewarer	   
_completederrorloggerwarningr   r=   )r!   r.   r   r1   r9   rC   fastmcp_ctx
mw_contexter7   r8   r$   s   ``       @@r%   r=   z)MiddlewareServerSession._received_request2   sL      	&%%%JJJJJJi',ci.IJJ =	 @D(08 8 8 8 8 8 8 !2I         ~-55 6          ..%-2#"'$/  
!%!?!?"$9" "                           %/ 	& = ="+"3"3AG"<"<<<<<<<<= = = = = = = = = = = = = = = W%& '   !                          > WW..y999999999sZ   E$ C
E
"	E+!DEDED  E EE

E
E),E))r   r   r'   r   )r.   r/   )	__name__
__module____qualname____doc__r   propertyr   r=   __classcell__r$   s   @r%   r   r   !   s        WWE E E E E E    XM: M: M: M: M: M: M: M: M: M:r&   r   c                  X     e Zd Zd fdZedd            Z	 	 dd fdZ	 	 dddZ xZS ) LowLevelServerr   r   r"   r   r#   c                     t                      j        |i | t          j        |          | _        t          ddd          | _        d S )NT)prompts_changedresources_changedtools_changed)r   r   r   r   r   r   notification_optionsr    s       r%   r   zLowLevelServer.__init__   sY    $)&)))29+g2F2F %8 "%
 %
 %
!!!r&   r'   c                P    |                                  }|t          d          |S r)   r*   r,   s     r%   r   zLowLevelServer.fastmcp   r-   r&   Nrj   NotificationOptions | Noneexperimental_capabilities dict[str, dict[str, Any]] | Noner   c                N    || j         } t                      j        d||d|S )N)rj   rm   r6   )rj   r   create_initialization_options)r!   rj   rm   r#   r$   s       r%   rp   z,LowLevelServer.create_initialization_options   sI      '#'#< 4uww4 
!5&?
 
 
 
 	
r&   Fread_stream5MemoryObjectReceiveStream[SessionMessage | Exception]write_stream&MemoryObjectSendStream[SessionMessage]initialization_optionsraise_exceptionsbool	statelessc           
     "  K   t                      4 d{V }|                    |                     |                      d{V }|                    t          | j        ||||                     d{V }t          j                    4 d{V }	|	|_        |j        2 3 d{V }
|		                    | j
        |
|||           &6 	 ddd          d{V  n# 1 d{V swxY w Y   ddd          d{V  dS # 1 d{V swxY w Y   dS )zN
        Overrides the run method to use the MiddlewareServerSession.
        N)rx   )r   enter_async_contextlifespanr   r   anyiocreate_task_groupr   incoming_messages
start_soon_handle_message)r!   rq   rs   ru   rv   rx   stacklifespan_contextsessiontgrG   s              r%   runzLowLevelServer.run   s|      "## 	 	 	 	 	 	 	u%*%>%>t}}T?R?R%S%SSSSSSS!55'L *'         G .00       B350%,%>       'MM,((    &?%>	                          	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sB   A:C>C C&!CC>
C$	$C>'C$	(C>>
DD)r   r   r"   r   r#   r   r\   )NN)rj   rl   rm   rn   r#   r   r'   r   )FF)
rq   rr   rs   rt   ru   r   rv   rw   rx   rw   )	r]   r^   r_   r   ra   r   rp   r   rb   rc   s   @r%   re   re      s        

 

 

 

 

 

    X <@FJ
 
 
 
 
 
 
( "'" " " " " " " " "r&   re   )'
__future__r   r   
contextlibr   typingr   r   r|   	mcp.typesr@   anyio.streams.memoryr   r   r	   mcp.server.lowlevel.serverr
   r   r   r   _Servermcp.server.modelsr   mcp.server.sessionr   mcp.server.stdior   mcp.shared.messager   mcp.shared.sessionr   fastmcp.utilities.loggingr   fastmcp.server.serverr   r]   rW   r   re   r6   r&   r%   <module>r      s   " " " " " "  % % % % % % % % % % % % % %      R R R R R R R R               
      4 3 3 3 3 3 , , , , , , 9 9 9 9 9 9 - - - - - - / / / / / / 0 0 0 0 0 0 .------	H		^: ^: ^: ^: ^:m ^: ^: ^:BF F F F FW_h67 F F F F Fr&   