
    k7ir                       S SK Jr  S SKrS SKJr  S SKJrJr  S SKrS SK	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  S S	KJr  S S
KJr  S SKJr  S SKJr  S SKJr  \(       a  S SK J!r!  \" \"5      r# " S S\5      r$ " S S\\\4   5      r%g)    )annotationsN)AsyncExitStack)TYPE_CHECKINGAny)MemoryObjectReceiveStreamMemoryObjectSendStream)LifespanResultTNotificationOptionsRequestT)Server)InitializationOptions)ServerSession)stdio_server)SessionMessage)RequestResponder)
get_logger)FastMCPc                  X   ^  \ rS rSrSrSU 4S jjr\SS j5       r  S	U 4S jjrSr	U =r
$ )
MiddlewareServerSession    zMServerSession that routes initialization requests through FastMCP middleware.c                \   > [         TU ]  " U0 UD6  [        R                  " U5      U l        g N)super__init__weakrefref_fastmcp_refselffastmcpargskwargs	__class__s       R/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/server/low_level.pyr    MiddlewareServerSession.__init__#   s&    $)&)29++g2F    c                B    U R                  5       nUc  [        S5      eU$ zGet the FastMCP instance.z'FastMCP instance is no longer availabler   RuntimeErrorr   r    s     r$   r    MiddlewareServerSession.fastmcp'   (     ##%?HIIr&   c           	     <  >^ ^#    SSK nSSKJn  [        TR                  R
                  [        R                  R                  5      (       a      S
UUU 4S jjnUR                  R                  R                  T R                  S9 ISh  vN nU" TR                  R
                  SSSUS	9nT R                  R                  Xd5      I Sh  vN sSSS5      ISh  vN   $ [        TT ]=  T5      I Sh  vN $  Nm N. N ! , ISh  vN  (       d  f       g= f N$7f)z
Override the _received_request method to route initialization requests
through FastMCP middleware.

These are not handled by routes that FastMCP typically overrides and
require special handling.
r   N)MiddlewareContextc                F   >#    [         [        T]  T5      I S h  vN $  N7fr   )r   r   _received_request)ctxr#   	responderr   s    r$   call_original_handlerHMiddlewareServerSession._received_request.<locals>.call_original_handler?   s*      ##:DS   s   !!)r    clientrequest
initialize)messagesourcetypemethodfastmcp_context)r2   r/   returnNone)fastmcp.server.context$fastmcp.server.middleware.middlewarer/   
isinstancer7   rootmcptypesInitializeRequestservercontextContextr    _apply_middlewarer   r1   )r   r3   r    r/   r4   fastmcp_ctx
mw_contextr#   s   ``     r$   r1   )MiddlewareServerSession._received_request/   s     	&Ji'',,cii.I.IJJ&  ~~--55 6  .%--22#"'$/
 "\\;;     29===!     >sf   BDC:D=D C<D DC>D5D6D<D >D DD	DD)r   )r    r   r>   r   )r3   zARequestResponder[mcp.types.ClientRequest, mcp.types.ServerResult])__name__
__module____qualname____firstlineno____doc__r   propertyr    r1   __static_attributes____classcell__r#   s   @r$   r   r       s2    WG  '>T'> '>r&   r   c                     ^  \ rS rSrSU 4S jjr\SS j5       r  S	       S
U 4S jjjr  S         SS jjrSr	U =r
$ )LowLevelServerY   c                |   > [         TU ]  " U0 UD6  [        R                  " U5      U l        [        SSSS9U l        g )NT)prompts_changedresources_changedtools_changed)r   r   r   r   r   r
   notification_optionsr   s       r$   r   LowLevelServer.__init__Z   s>    $)&)29++g2F %8 "%
!r&   c                B    U R                  5       nUc  [        S5      eU$ r(   r)   r+   s     r$   r    LowLevelServer.fastmcpf   r-   r&   c                H   > Uc  U R                   n[        TU ]  " SUUS.UD6$ )N)r_   experimental_capabilities )r_   r   create_initialization_options)r   r_   rd   r"   r#   s       r$   rf   ,LowLevelServer.create_initialization_optionsn   s>      '#'#<#< w4 
!5&?
 
 	
r&   c                J  #    [        5        ISh  vN nUR                  U R                  U 5      5      I Sh  vN nUR                  [        U R                  UUUUS95      I Sh  vN n[
        R                  " 5        ISh  vN n	UR                    Sh  vN n
U	R                  U R                  U
UUU5        M*   N N N\ N@ N-
 SSS5      ISh  vN    O! , ISh  vN  (       d  f       O= fSSS5      ISh  vN    g! , ISh  vN  (       d  f       g= f7f)z>
Overrides the run method to use the MiddlewareServerSession.
N)	stateless)
r   enter_async_contextlifespanr   r    anyiocreate_task_groupincoming_messages
start_soon_handle_message)r   read_streamwrite_streaminitialization_optionsraise_exceptionsri   stacklifespan_contextsessiontgr9   s              r$   runLowLevelServer.run}   s      "##u%*%>%>t}}T?R%SS!55'LL *' G ..00B%,%>%> 'MM,,(( $S 1%> 100000 $#####s   D#C D#$D	C-D	'C(D	CD		CC
C
C
"C D#D	D	D	C

CD	CD	C4	#C&$C4	0D	7D#DD#	D DD D#)r   r_   )r    r   r!   r   r"   r   rN   )NN)r_   zNotificationOptions | Nonerd   z dict[str, dict[str, Any]] | Noner"   r   r>   r   )FF)
rq   z5MemoryObjectReceiveStream[SessionMessage | Exception]rr   z&MemoryObjectSendStream[SessionMessage]rs   r   rt   boolri   r{   )rO   rP   rQ   rR   r   rT   r    rf   ry   rU   rV   rW   s   @r$   rY   rY   Y   s    

   <@FJ
8
 $D
 	

 

 
( "'J = !6	
   r&   rY   )&
__future__r   r   
contextlibr   typingr   r   rl   	mcp.typesrD   anyio.streams.memoryr   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   rO   loggerr   rY   re   r&   r$   <module>r      sr    "  % %   R 
 4 , 9 - / 0-	H	6>m 6>rCW_h67 Cr&   