
    "<i              
          U d Z ddlmZ ddlmZ ddlmZmZ ddl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mZmZ ddlmZmZ ddlmZ  ee          Zeed<    G d de          Zdede e         fdZ! ej"        e!          Z#	 d#dedee$df         dee%e$ef         dz  df         de	j&        j'        fdZ( ej"        e(          Z) G d de          Z*dede e	j&        j+                 fdZ, ej"        e,          Z-dedeee$z  df         de e         fd Z. ej"        e.          Z/ G d! d"e          Z0dS )$z=A middleware for injecting tools into the MCP server context.    )Sequence)Logger)	AnnotatedAnyN)ReadResourceContents)Prompt)AnyUrl)override)Context)CallNext
MiddlewareMiddlewareContext)Tool
ToolResult)
get_loggernameloggerc                      e Zd ZdZdee         fdZedee	j
        j                 dee	j
        j        ee         f         dee         fd            Zedee	j
        j                 dee	j
        j        ef         defd            Zd	S )
ToolInjectionMiddlewarez2A middleware for injecting tools into the context.toolsc                 6    || _         d |D             | _        dS )z)Initialize the tool injection middleware.c                     i | ]
}|j         |S  r   ).0tools     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/server/middleware/tool_injection.py
<dictcomp>z4ToolInjectionMiddleware.__init__.<locals>.<dictcomp>   s)     :
 :
 :
 $DIt:
 :
 :
    N)_tools_to_inject_tools_to_inject_by_name)selfr   s     r   __init__z ToolInjectionMiddleware.__init__   s1    05:
 :
(-:
 :
 :
%%%r   context	call_nextreturnc                 :   K   g | j          ||           d{V S )zInject tools into the response.N)r    )r"   r$   r%   s      r   on_list_toolsz%ToolInjectionMiddleware.on_list_tools   s8       C&Byy/A/A)A)A)A)A)A)ABBr   c                    K   |j         j        | j        v r?| j        |j         j                 }|                    |j         j        pi            d{V S  ||           d{V S )z'Intercept tool calls to injected tools.)	argumentsN)messager   r!   runr*   )r"   r$   r%   r   s       r   on_call_toolz$ToolInjectionMiddleware.on_call_tool(   s       ?4#@@@01EFDGO,E,KLLLLLLLLLYw'''''''''r   N)__name__
__module____qualname____doc__r   r   r#   r
   r   mcptypesListToolsRequestr   r(   CallToolRequestParamsr   r-   r   r   r   r   r      s        <<
htn 
 
 
 
 C"39#=>C CI6FGC 
$	C C C XC 
("39#BC
( CI;ZGH
( 
	
( 
( 
( X
( 
( 
(r   r   r$   r&   c                 :   K   |                                   d{V S )z%List prompts available on the server.N)list_promptsr$   s    r   r7   r7   6   s*      %%'''''''''r   )fnr   z!The name of the prompt to render.r*   z$The arguments to pass to the prompt.c                 @   K   |                      ||           d{V S )z(Render a prompt available on the server.)r   r*   N)
get_prompt)r$   r   r*   s      r   r;   r;   @   s3       ###CCCCCCCCCr   c                   $     e Zd ZdZd fdZ xZS )PromptToolMiddlewarez=A middleware for injecting prompts as tools into the context.r&   Nc                 h    t           t          g}t                                          |           d S N)r   )list_prompts_toolget_prompt_toolsuperr#   r"   r   	__class__s     r   r#   zPromptToolMiddleware.__init__S   s.    .@u%%%%%r   r&   Nr.   r/   r0   r1   r#   __classcell__rD   s   @r   r=   r=   P   sC        GG& & & & & & & & & &r   r=   c                 :   K   |                                   d{V S )z'List resources available on the server.N)list_resourcesr8   s    r   rJ   rJ   X   s*      '')))))))))r   uriz The URI of the resource to read.c                 >   K   |                      |           d{V S )z(Read a resource available on the server.)rK   N)read_resource)r$   rK   s     r   rM   rM   b   s1      
 &&3&/////////r   c                   $     e Zd ZdZd fdZ xZS )ResourceToolMiddlewarez?A middleware for injecting resources as tools into the context.r&   Nc                 h    t           t          g}t                                          |           d S r?   )list_resources_toolread_resource_toolrB   r#   rC   s     r   r#   zResourceToolMiddleware.__init__r   s/    02DEu%%%%%r   rE   rF   rH   s   @r   rO   rO   o   sC        II& & & & & & & & & &r   rO   )N)1r1   collections.abcr   loggingr   typingr   r   	mcp.typesr2    mcp.server.lowlevel.helper_typesr   r   pydanticr	   typing_extensionsr
   fastmcp.server.contextr   $fastmcp.server.middleware.middlewarer   r   r   fastmcp.tools.toolr   r   fastmcp.utilities.loggingr   r.   r   __annotations__r   listr7   from_functionr@   strdictr3   GetPromptResultr;   rA   r=   ResourcerJ   rQ   rM   rR   rO   r   r   r   <module>re      s&   C C C $ $ $ $ $ $       ! ! ! ! ! ! ! !     A A A A A A             & & & & & & * * * * * * X X X X X X X X X X / / / / / / / / 0 0 0 0 0 0*** * * *( ( ( ( (j ( ( (B( (DL ( ( ( (
 'D&    	D DD
C<<
=D S#XEED 	YD D D D %$$  
& & & & &2 & & &*' *d393E.F * * * *
 )d(   
00	6C<!CC	D0 

0 0 0 0 (T'   
& & & & &4 & & & & &r   