
    Ki                        d dl mZ d dlmZ d dlmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d dlmZmZ erd d	lmZ d d
lmZ  ee      Z G d d      Zy)    )annotations)Callable)TYPE_CHECKINGAny)	ToolError)Tool)
get_logger)LifespanContextTRequestT)IconToolAnnotations)Context)ServerSessionTc                      e Zd ZdZ	 d
dd	 	 	 ddZddZddZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZ	 	 d	 	 	 	 	 	 	 	 	 dd	Z	y)ToolManagerzManages FastMCP tools.N)toolsc                   i | _         |\|D ]W  }|r:|j                  | j                   v r"t        j                  d|j                          || j                   |j                  <   Y || _        y )NTool already exists: )_toolsnameloggerwarningwarn_on_duplicate_tools)selfr   r   tools       q/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/mcp/server/fastmcp/tools/tool_manager.py__init__zToolManager.__init__   sf     (* .*tyyDKK/GNN%:499+#FG)-DII&.
 (?$    c                8    | j                   j                  |      S )zGet tool by name.)r   getr   r   s     r   get_toolzToolManager.get_tool%   s    {{t$$r   c                H    t        | j                  j                               S )zList all registered tools.)listr   values)r   s    r   
list_toolszToolManager.list_tools)   s    DKK&&())r   c	           
         t        j                  ||||||||      }	| j                  j                  |	j                        }
|
r0| j
                  r"t        j                  d|	j                          |
S |	| j                  |	j                  <   |	S )zAdd a tool to the server.)r   titledescriptionr   iconsmetastructured_outputr   )r   from_functionr   r    r   r   r   r   )r   fnr   r(   r)   r   r*   r+   r,   r   existings              r   add_toolzToolManager.add_tool-   s     !!##/	
 ;;??499-++!6tyykBCO!%DIIr   c                V    || j                   vrt        d|       | j                   |= y)zRemove a tool by name.Unknown tool: N)r   r   r!   s     r   remove_toolzToolManager.remove_toolK   s,    t{{"nTF344KKr   c                   K   | j                  |      }|st        d|       |j                  |||       d{   S 7 w)z#Call a tool by name with arguments.r2   )contextconvert_resultN)r"   r   run)r   r   	argumentsr5   r6   r   s         r   	call_toolzToolManager.call_toolQ   sF      }}T"nTF344XXiXXXXXs   9AA A)T)r   boolr   zlist[Tool] | None)r   strreturnzTool | None)r<   z
list[Tool])NNNNNNN)r.   zCallable[..., Any]r   
str | Noner(   r=   r)   r=   r   zToolAnnotations | Noner*   zlist[Icon] | Noner+   zdict[str, Any] | Noner,   zbool | Noner<   r   )r   r;   r<   None)NF)
r   r;   r8   zdict[str, Any]r5   z:Context[ServerSessionT, LifespanContextT, RequestT] | Noner6   r:   r<   r   )
__name__
__module____qualname____doc__r   r"   r&   r0   r3   r9    r   r   r   r      s      )-? $(	?!%? !	?%*   "&.2#'&*)-  	
   , ! $ ' 
< OS$YY "Y L	Y
 Y 
Yr   r   N)
__future__r   _annotationscollections.abcr   typingr   r   mcp.server.fastmcp.exceptionsr   mcp.server.fastmcp.tools.baser   $mcp.server.fastmcp.utilities.loggingr	   mcp.shared.contextr
   r   	mcp.typesr   r   mcp.server.fastmcp.serverr   mcp.server.sessionr   r?   r   r   rC   r   r   <module>rO      s>    2 $ % 3 . ; 9 +11	H	JY JYr   