
    kKj              
          U d Z ddl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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jL                  e%      Z'	 d$dedee(df   dee)e(ef   dz  df   de
jT                  jV                  fdZ, ejL                  e,      Z- G d de#      Z.dede$e
jT                  j^                     fdZ0 ejL                  e0      Z1dedeee(z  d f   defd!Z2 ejL                  e2      Z3 G d" d#e#      Z4y)%z=A middleware for injecting tools into the MCP server context.    N)Sequence)Logger)	AnnotatedAny)Prompt)AnyUrl)override)FastMCPDeprecationWarning)ResourceResult)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y	)
ToolInjectionMiddlewarez2A middleware for injecting tools into the context.toolsc                 \    || _         |D ci c]  }|j                  | c}| _        yc c}w )z)Initialize the tool injection middleware.N)_tools_to_injectr   _tools_to_inject_by_name)selfr   tools      y/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/server/middleware/tool_injection.py__init__z ToolInjectionMiddleware.__init__   s3    05(-:
(-DIItO:
% :
s   )context	call_nextreturnc                 J   K   g | j                    ||       d{   S 7 w)zInject tools into the response.N)r   )r   r   r    s      r   on_list_toolsz%ToolInjectionMiddleware.on_list_tools"   s*      C&&By/A)ABB)As   #!#c                    K   |j                   j                  | j                  v rU| j                  |j                   j                     }|j                  |j                   j                  xs i        d{   S  ||       d{   S 7 7 w)z'Intercept tool calls to injected tools.)	argumentsN)messager   r   runr%   )r   r   r    r   s       r   on_call_toolz$ToolInjectionMiddleware.on_call_tool+   su      ??4#@#@@001E1EFDGOO,E,E,KLLLw''' M's$   A3B5B
6BBBBN)__name__
__module____qualname____doc__r   r   r   r	   r   mcptypesListToolsRequestr   r#   CallToolRequestParamsr   r(        r   r   r      s    <
htn 
 C"399#=#=>C CII66FGC 
$	C C 
("399#B#BC
( CII;;ZGH
( 
	
( 
(r2   r   r   r!   c                 >   K   | j                          d{   S 7 w)z%List prompts available on the server.N)list_promptsr   s    r   r4   r4   9   s     %%''''   )fnr   z!The name of the prompt to render.r%   z$The arguments to pass to the prompt.c                 D   K   | j                  ||       d{   S 7 w)z(Render a prompt available on the server.)r   r%   N)
get_prompt)r   r   r%   s      r   r9   r9   C   s$      ###CCCCs     c                   $     e Zd ZdZd fdZ xZS )PromptToolMiddlewarezA middleware for injecting prompts as tools into the context.

    .. deprecated::
        Use ``fastmcp.server.transforms.PromptsAsTools`` instead.
    c                     t         j                  j                  rt        j                  dt
        d       t        t        g}t        | %  |       y )NzPromptToolMiddleware is deprecated. Use the PromptsAsTools transform instead: from fastmcp.server.transforms import PromptsAsTools   
stacklevelr   )
fastmcpsettingsdeprecation_warningswarningswarnr
   list_prompts_toolget_prompt_toolsuperr   r   r   	__class__s     r   r   zPromptToolMiddleware.__init__Z   sF    00MMG)	 /@u%r2   r!   Nr)   r*   r+   r,   r   __classcell__rJ   s   @r   r;   r;   S       	& 	&r2   r;   c                 >   K   | j                          d{   S 7 w)z'List resources available on the server.N)list_resourcesr5   s    r   rQ   rQ   f   s     ''))))r6   uriz The URI of the resource to read.c                 B   K   | j                  |       d{   S 7 w)z(Read a resource available on the server.)rR   N)read_resource)r   rR   s     r   rT   rT   p   s"     
 &&3&////s   c                   $     e Zd ZdZd fdZ xZS )ResourceToolMiddlewarezA middleware for injecting resources as tools into the context.

    .. deprecated::
        Use ``fastmcp.server.transforms.ResourcesAsTools`` instead.
    c                     t         j                  j                  rt        j                  dt
        d       t        t        g}t        | %  |       y )NzResourceToolMiddleware is deprecated. Use the ResourcesAsTools transform instead: from fastmcp.server.transforms import ResourcesAsToolsr=   r>   r@   )
rA   rB   rC   rD   rE   r
   list_resources_toolread_resource_toolrH   r   rI   s     r   r   zResourceToolMiddleware.__init__   sG    00MMI)	 12DEu%r2   rK   rL   rN   s   @r   rV   rV   }   rO   r2   rV   )N)5r,   rD   collections.abcr   loggingr   typingr   r   	mcp.typesr-   r   pydanticr   typing_extensionsr	   rA   fastmcp.exceptionsr
   fastmcp.resources.baser   fastmcp.server.contextr   $fastmcp.server.middleware.middlewarer   r   r   fastmcp.tools.baser   r   fastmcp.utilities.loggingr   r)   r   __annotations__r   listr4   from_functionrF   strdictr.   GetPromptResultr9   rG   r;   ResourcerQ   rX   rT   rY   rV   r1   r2   r   <module>rm      s   C  $  !    &  8 1 * X X / 0* *(j (B( (DL (
 'D&&  	DD
C<<
=D S#XEED 	YYD %$$$
&2 &&*' *d3993E3E.F *
 )d(( 
00	6C<!CC	D0 0 (T'' 
&4 &r2   