
    k7i                        S SK Jr  S SK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Jr  S S	KJr  S S
KJrJr  S SKJrJr  S SKJr  \" \5      r " S S5      rg)    )annotationsN)CallableMapping)Any)ToolAnnotations)ValidationError)settings)NotFoundError	ToolError)DuplicateBehavior)Tool
ToolResult)ToolTransformConfigapply_transformations_to_tools)
get_loggerc                      \ rS rSrSr   S     SS jjrSS jrSS jrSS jrSS jr	      S               SS	 jjr
SS
 jr      SS jrSS jrSS jrSS jrSS jrSrg)ToolManager   zManages FastMCP tools.Nc                   0 U l         U=(       d    [        R                  U l        [        U=(       d    0 5      U l        Uc  SnU[
        R                  ;  a.  [        SU SSR                  [
        R                  5       35      eXl	        g )NwarnzInvalid duplicate_behavior: z. Must be one of: z, )
_toolsr	   mask_error_detailsdicttransformationsr   __args__
ValueErrorjoinduplicate_behavior)selfr   r   r   s       T/home/james-whalen/.local/lib/python3.13/site-packages/fastmcp/tools/tool_manager.py__init__ToolManager.__init__   s     (*=("="= 	 @D!r@

 %!'%6%?%??./A.B C##'99->-G-G#H"IK 
 #5    c                J   #    [        U R                  U R                  S9nU$ 7f)z?Return this manager's local tools with transformations applied.)toolsr   )r   r   r   )r   transformed_toolss     r    _load_toolsToolManager._load_tools4   s(     :++ 00
 ! s   !#c                F   #    U R                  5       I Sh  vN nX;   $  N7f)zCheck if a tool exists.N)	get_toolsr   keyr%   s      r    has_toolToolManager.has_tool<   s!     nn&&| 's   !	!c                p   #    U R                  5       I Sh  vN nX;   a  X!   $ [        SU< S35      e N7f)zGet tool by key.NTool 
 not found)r*   r
   r+   s      r    get_toolToolManager.get_toolA   s:     nn&&<:eC7*566 's   646c                >   #    U R                  5       I Sh  vN $  N7f)z9
Gets the complete, unfiltered inventory of local tools.
N)r'   )r   s    r    r*   ToolManager.get_toolsH   s      %%''''s   c           
         [         R                  (       a  [        R                  " S[        SS9  [
        R                  " UUUUUUUS9nU R                  U5      $ )zAdd a tool to the server.zcToolManager.add_tool_from_fn() is deprecated. Use Tool.from_function() and call add_tool() instead.   )
stacklevel)namedescriptiontagsr   exclude_args
serializer)r	   deprecation_warningswarningsr   DeprecationWarningr   from_functionadd_tool)	r   fnr9   r:   r;   r   r=   r<   tools	            r    add_tool_from_fnToolManager.add_tool_from_fnN   sZ     ((MMu"
 !!##%!
 }}T""r#   c                   U R                   R                  UR                  5      nU(       a  U R                  S:X  a<  [        R                  SUR                   35        XR                   UR                  '   U$ U R                  S:X  a  XR                   UR                  '   U$ U R                  S:X  a  [        SUR                   35      eU R                  S:X  a  U$  U$ XR                   UR                  '   U$ )z Register a tool with the server.r   zTool already exists: replaceerrorignore)r   getr,   r   loggerwarningr   )r   rD   existings      r    rB   ToolManager.add_toolk   s    ;;??488,&&&0!6txxjAB(,DHH%  ((I5(,DHH%  ((G3 #8
!CDD((H4 5  %)KK!r#   c                     X R                   U'   g)zAdd a tool transformation.Nr   )r   	tool_nametransformations      r    add_tool_transformation#ToolManager.add_tool_transformation|   s     +9Y'r#   c                8    U R                   R                  U5      $ )zGet a tool transformation.)r   rK   r   rR   s     r    get_tool_transformation#ToolManager.get_tool_transformation   s    ##''	22r#   c                >    XR                   ;   a  U R                   U	 gg)zRemove a tool transformation.NrQ   rW   s     r    remove_tool_transformation&ToolManager.remove_tool_transformation   s!    ,,,$$Y/ -r#   c                \    XR                   ;   a  U R                   U	 g[        SU< S35      e)zRemove a tool from the server.

Args:
    key: The key of the tool to remove

Raises:
    NotFoundError: If the tool is not found
r0   r1   N)r   r
   )r   r,   s     r    remove_toolToolManager.remove_tool   s.     ++C %wj 9::r#   c                  #    U R                  U5      I Sh  vN n UR                  U5      I Sh  vN $  N N! [         a#  n[        R	                  SU< SU 35        UeSnAf[
         a   n[        R	                  SU< 35        UeSnAf[         aR  n[        R	                  SU< 35        U R                  (       a  [        SU< 35      Ue[        SU< SU 35      UeSnAff = f7f)zZ
Internal API for servers: Finds and calls a tool, respecting the
filtered protocol path.
NzError validating tool z: zError calling tool )r2   runr   rL   	exceptionr   	Exceptionr   )r   r,   	argumentsrD   es        r    	call_toolToolManager.call_tool   s     
 ]]3''	K),,, (, 	5cWBqcBCG 	23':;G 	K23':;&&"5cW =>AE"5cWBqc BCJ	KsS   C,6C,: 8: C,: 
C)A""C)/B

C)AC$$C))C,)r   r   r   r   )NNN)r   zDuplicateBehavior | Noner   zbool | Noner   z(Mapping[str, ToolTransformConfig] | None)returnzdict[str, Tool])r,   strrh   bool)r,   ri   rh   r   )NNNNNN)rC   zCallable[..., Any]r9   
str | Noner:   rk   r;   zset[str] | Noner   zToolAnnotations | Noner=   zCallable[[Any], str] | Noner<   zlist[str] | Nonerh   r   )rD   r   rh   r   )rR   ri   rS   r   rh   None)rR   ri   rh   zToolTransformConfig | None)rR   ri   rh   rl   )r,   ri   rh   rl   )r,   ri   rd   zdict[str, Any]rh   r   )__name__
__module____qualname____firstlineno____doc__r!   r'   r-   r2   r*   rE   rB   rT   rX   r[   r^   rf   __static_attributes__ r#   r    r   r      s      8<*.DH	545 (5 B	54!
7(  "& $.226)-## #  	#
 # ,# 0# '# 
#:"99.A9	930
;Kr#   r   )
__future__r   r?   collections.abcr   r   typingr   	mcp.typesr   pydanticr   fastmcpr	   fastmcp.exceptionsr
   r   fastmcp.settingsr   fastmcp.tools.toolr   r   fastmcp.tools.tool_transformr   r   fastmcp.utilities.loggingr   rm   rL   r   rs   r#   r    <module>r      sE    "  -  % $  7 . / 1	H	UK UKr#   