
    k7i /                    8   % S SK Jr  S SKJrJrJr  S SK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  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 J!r!J"r"  S SK#J$r$J%r%J&r&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-  \(       a  S SK.J/r/  \-" \05      r1 " S S5      r2\
" SSS9r3S\4S'    " S S\5      r5\S$S j5       r6 " S S 5      r7  S%         S&S! jjr8    S'               S(S" jjr9       S)                   S*S# jjr:g)+    )annotations)AsyncGeneratorCallable	Generator)asynccontextmanagercontextmanager)
ContextVar)TYPE_CHECKING)build_resource_metadata_url)LifespanResultT)SseServerTransport)
EventStore)StreamableHTTPSessionManager)	Starlette)
Middleware)Request)Response)	BaseRouteMountRoute)LifespanReceiveScopeSend)AuthProvider)RequireAuthMiddleware)
get_logger)FastMCPc                  (    \ rS rSrSrS rSS jrSrg)StreamableHTTPASGIApp    z>ASGI application wrapper for Streamable HTTP server transport.c                    Xl         g Nsession_manager)selfr%   s     M/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/server/http.py__init__StreamableHTTPASGIApp.__init__#   s    .    c                   #     U R                   R                  XU5      I S h  vN   g  N! [         a?  n[        U5      S:X  a*  [        R                  SU 3SS9  Sn[        U SU 35      Uee S nAff = f7f)Nz6Task group is not initialized. Make sure to use run().z(Original RuntimeError from mcp library: T)exc_infoa  FastMCP's StreamableHTTPSessionManager task group was not initialized. This commonly occurs when the FastMCP application's lifespan is not passed to the parent ASGI application (e.g., FastAPI or Starlette). Please ensure you are setting `lifespan=mcp_app.lifespan` in your parent app's constructor, where `mcp_app` is the application instance returned by `fastmcp_instance.http_app()`. \nFor more details, see the FastMCP ASGI integration documentation: https://gofastmcp.com/deployment/asgiz\nOriginal error: )r%   handle_requestRuntimeErrorstrloggererror)r&   scopereceivesendenew_error_messages         r'   __call__StreamableHTTPASGIApp.__call__&   s     	&&55edKKK 	1vQQ>qcBT  < " #&7%88KA3#OPVWW )	s0   A7+ )+ A7+ 
A4:A//A44A7r$   N)r2   r   r3   r   r4   r   returnNone__name__
__module____qualname____firstlineno____doc__r(   r7   __static_attributes__ r*   r'   r    r        s    H/r*   r    http_requestN)defaultzContextVar[Request | None]_current_http_requestc                  (    \ rS rSr\SS j5       rSrg)StarletteWithLifespanF   c                .    U R                   R                  $ r#   )routerlifespan_context)r&   s    r'   lifespanStarletteWithLifespan.lifespanG   s    {{+++r*   rB   N)r9   zLifespan[Starlette])r<   r=   r>   r?   propertyrL   rA   rB   r*   r'   rG   rG   F   s    , ,r*   rG   c              #     #    [         R                  U 5      n U v   [         R                  U5        g ! [         R                  U5        f = f7fr#   )rE   setreset)requesttokens     r'   set_http_requestrT   L   s<     !%%g.E+##E*##E*s   A3 AA

Ac                  $    \ rS rSrSrS rS rSrg)RequestContextMiddlewareU   z5
Middleware that stores each request in a ContextVar
c                    Xl         g r#   app)r&   rZ   s     r'   r(   !RequestContextMiddleware.__init__Z   s    r*   c                   #    US   S:X  a8  [        [        U5      5         U R                  XU5      I S h  vN   S S S 5        g U R                  XU5      I S h  vN   g  N(! , (       d  f       g = f N7f)Ntypehttp)rT   r   rZ   )r&   r2   r3   r4   s       r'   r7   !RequestContextMiddleware.__call__]   sb     =F"!'%.1hhut444 21 ((54000 5 21 1s7   A4A!AA!A4A2A4A!!
A/+A4rY   Nr;   rB   r*   r'   rV   rV   U   s    1r*   rV   c                X    UR                  S[        [        5      5        [        U UUUS9$ )a2  Create a base Starlette app with common middleware and routes.

Args:
    routes: List of routes to include in the app
    middleware: List of middleware to include in the app
    debug: Whether to enable debug mode
    lifespan: Optional lifespan manager for the app

Returns:
    A Starlette application
r   routes
middlewaredebugrL   )insertr   rV   rG   ra   s       r'   create_base_apprf   e   s3    $ a$<=> 	 r*   c           
       ^ ^^ / n/ n[        U5      mS
U U4S jjmU(       a  UR                  5       n	UR                  US9n
UR                  U
5        UR                  U	5        UR	                  U5      nU(       a  [        U5      OSnUR                  [        U[        TUR                  U5      S/S95        UR                  [        U[        TR                  UR                  U5      S95        OFSU4S jjnUR                  [        UUS/S95        UR                  [        UTR                  S95        U(       a  UR                  U5        UR                  T R                  5       5        U(       a  UR                  U5        [        SU 4S jj5       n[        UUUUS	9nT UR                  l        X/R                  l        U$ )a  Return an instance of the SSE server app.

Args:
    server: The FastMCP server instance
    message_path: Path for SSE messages
    sse_path: Path for SSE connections
    auth: Optional authentication provider (AuthProvider)
    debug: Whether to enable debug mode
    routes: Optional list of custom routes
    middleware: Optional list of middleware
Returns:
    A Starlette application with RequestContextMiddleware
c                N  >#    TR                  XU5       IS h  vN nTR                  R                  US   US   TR                  R                  5       5      I S h  vN   S S S 5      IS h  vN   [	        5       $  Na N  N! , IS h  vN  (       d  f       [	        5       $ = f7f)Nr      )connect_sse_mcp_serverruncreate_initialization_optionsr   )r2   r3   r4   streamsserversses       r'   
handle_sse"create_sse_app.<locals>.handle_sse   s     ??5488G$$((

""@@B   98 z 9 988 zsV   B%A<B%?BA>B"B%-B .B%>B B%B"B	B"B%mcp_pathNGETendpointmethodsrY   c                p   >#    T" U R                   U R                  U R                  5      I S h  vN $  N7fr#   )r2   r3   _send)rR   rq   s    r'   sse_endpoint$create_sse_app.<locals>.sse_endpoint   s'     #GMM7??GMMRRRRs   ,646c                  >#    TR                  5        IS h  vN   S 7v   S S S 5      IS h  vN   g  N N! , IS h  vN  (       d  f       g = f7fr#   )_lifespan_manager)rZ   ro   s    r'   rL    create_sse_app.<locals>.lifespan   s,     ++-- .-----s:   A3A7A5AAAA A
Ara   )r2   r   r3   r   r4   r   r9   r   )rR   r   r9   r   rZ   r   r9   zAsyncGenerator[None, None])r   get_middleware
get_routesextend_get_resource_urlr   appendr   r   required_scopesr   handle_post_message_get_additional_http_routesr   rf   statefastmcp_serverpath)ro   message_pathsse_pathauthrd   rb   rc   server_routesserver_middlewareauth_middlewareauth_routesresource_urlresource_metadata_urlr{   rL   rZ   rq   rp   s   `               @@r'   create_sse_appr      s   . &(M*, \
*C  --/ ooxo8[)  1 --h79E'54 	
 	.(()
 
	
 	)++(()		
	S 	%	
 	++	
 V$;;=>   , 
 $	C  &CIIIINJr*   c	           
       ^ ^ / n	/ n
[        T R                  UUUS9m[        T5      nU(       a  UR                  5       nUR	                  US9nU	R                  U5        U
R                  U5        UR                  U5      nU(       a  [        U5      OSnU	R                  [        U[        UUR                  U5      / SQS95        OU	R                  [        UUS95        U(       a  U	R                  U5        U	R                  T R                  5       5        U(       a  U
R                  U5        [        S	U U4S jj5       n[        U	U
UUS9nT UR                  l        UUR                  l        U$ )
a_  Return an instance of the StreamableHTTP server app.

Args:
    server: The FastMCP server instance
    streamable_http_path: Path for StreamableHTTP connections
    event_store: Optional event store for session management
    auth: Optional authentication provider (AuthProvider)
    json_response: Whether to use JSON response format
    stateless_http: Whether to use stateless mode (new transport per request)
    debug: Whether to enable debug mode
    routes: Optional list of custom routes
    middleware: Optional list of middleware

Returns:
    A Starlette application with StreamableHTTP support
)rZ   event_storejson_response	statelessrs   N)ru   POSTDELETErv   )rw   c               4  >#    TR                  5        IS h  vN   TR                  5        IS h  vN   S 7v   S S S 5      IS h  vN   S S S 5      IS h  vN   g  NC N, N! , IS h  vN  (       d  f       N.= f N%! , IS h  vN  (       d  f       g = f7fr#   )r~   rl   )rZ   ro   r%   s    r'   rL   ,create_streamable_http_app.<locals>.lifespanW  sQ     ++--/B/B/D/D 0E/D---/D/D/D/D----s   BABA>AA>A"A>A A>BA<BA> A>"A9	(A+)A9	5A><B>BBBBra   r   )r   rk   r    r   r   r   r   r   r   r   r   r   r   r   rf   r   r   r   )ro   streamable_http_pathr   r   r   stateless_httprd   rb   rc   r   r   streamable_http_appr   r   r   r   rL   rZ   r%   s   `                 @r'   create_streamable_http_appr      s~   6 &(M*, 3# 	O 0@ --/ oo/CoD[)  1 --.BC9E'54 	
 	$.'(()
 2
	
 	$,	
 V$;;=>   ,  
 $	C  &CII)CIINJr*   )rR   r   r9   zGenerator[Request, None, None])FN)
rb   zlist[BaseRoute]rc   zlist[Middleware]rd   boolrL   zCallable | Noner9   rG   )NFNN)ro   FastMCP[LifespanResultT]r   r/   r   r/   r   AuthProvider | Nonerd   r   rb   list[BaseRoute] | Nonerc   list[Middleware] | Noner9   rG   )NNFFFNN)ro   r   r   r/   r   zEventStore | Noner   r   r   r   r   r   rd   r   rb   r   rc   r   r9   rG   );
__future__r   collections.abcr   r   r   
contextlibr   r   contextvarsr	   typingr
   mcp.server.auth.routesr   mcp.server.lowlevel.serverr   mcp.server.sser   mcp.server.streamable_httpr   "mcp.server.streamable_http_managerr   starlette.applicationsr   starlette.middlewarer   starlette.requestsr   starlette.responsesr   starlette.routingr   r   r   starlette.typesr   r   r   r   fastmcp.server.authr   fastmcp.server.auth.middlewarer   fastmcp.utilities.loggingr   fastmcp.server.serverr   r<   r0   r    rE   __annotations__rG   rT   rV   rf   r   r   rB   r*   r'   <module>r      s   " ? ? : "   > 6 - L , + & ( 5 5 : : , @ 0-	H	 @ 5?5 1 ,I , + +1 1&  $	   	
 @ !%%)*.{${{ { 	{
 { #{ ({ {B &* $ %)*.i$ii #i 	i
 i i i #i (i ir*   