o
    i                     @  s   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rDd d	lmZ d d
lmZ eeZG dd dZdS )    )annotations)Callable)TYPE_CHECKINGAny)	ToolError)Tool)
get_logger)LifespanContextTRequestT)IconToolAnnotations)Context)ServerSessionTc                   @  sl   e Zd ZdZ	d0ddd1d	d
Zd2ddZd3ddZ							d4d5d"d#Zd6d%d&Z		'd7d8d.d/Z	dS )9ToolManagerzManages FastMCP tools.TN)toolswarn_on_duplicate_toolsboolr   list[Tool] | Nonec                C  sP   i | _ |d ur#|D ]}|r|j| j v rtd|j  || j |j< q	|| _d S )NTool already exists: )_toolsnameloggerwarningr   )selfr   r   tool r   k/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/mcp/server/fastmcp/tools/tool_manager.py__init__   s   
zToolManager.__init__r   strreturnTool | Nonec                 C  s   | j |S )zGet tool by name.)r   getr   r   r   r   r   get_tool%   s   zToolManager.get_tool
list[Tool]c                 C  s   t | j S )zList all registered tools.)listr   values)r   r   r   r   
list_tools)   s   zToolManager.list_toolsfnCallable[..., Any]
str | Nonetitledescriptionr   ToolAnnotations | Noneiconslist[Icon] | Nonemetadict[str, Any] | Nonestructured_outputbool | Noner   c	              
   C  sX   t j||||||||d}	| j|	j}
|
r$| jr"td|	j  |
S |	| j|	j< |	S )zAdd a tool to the server.)r   r+   r,   r   r.   r0   r2   r   )r   from_functionr   r!   r   r   r   r   )r   r(   r   r+   r,   r   r.   r0   r2   r   existingr   r   r   add_tool-   s"   
zToolManager.add_toolNonec                 C  s$   || j vrtd| | j |= dS )zRemove a tool by name.Unknown tool: N)r   r   r"   r   r   r   remove_toolK   s   
zToolManager.remove_toolF	argumentsdict[str, Any]context:Context[ServerSessionT, LifespanContextT, RequestT] | Noneconvert_resultr   c                   s4   |  |}|std| |j|||dI dH S )z#Call a tool by name with arguments.r8   )r<   r>   N)r#   r   run)r   r   r:   r<   r>   r   r   r   r   	call_toolQ   s
   
zToolManager.call_tool)T)r   r   r   r   )r   r   r   r    )r   r$   )NNNNNNN)r(   r)   r   r*   r+   r*   r,   r*   r   r-   r.   r/   r0   r1   r2   r3   r   r   )r   r   r   r7   )NF)
r   r   r:   r;   r<   r=   r>   r   r   r   )
__name__
__module____qualname____doc__r   r#   r'   r6   r9   r@   r   r   r   r   r      s(    



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   rA   r   r   r   r   r   r   <module>   s    