
    !<i                        d dl mZ d dl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mZmZ 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mZ e	rd dlmZ d dlmZ d dlmZm Z   G d de          Z!ddZ"dS )    )annotationsN)Callable)cached_property)TYPE_CHECKINGAny)	BaseModelField)	ToolError)find_context_parameter)FuncMetadatafunc_metadata)validate_and_warn_tool_name)IconToolAnnotations)Context)ServerSessionT)LifespanContextTRequestTc                     e Zd ZU dZ ed          Zded<    ed          Zded	<    ed
d          Zded<    ed          Z	ded<    ed          Z
ded<    ed          Zded<    ed          Zded<    ed
d          Zded<    ed
d          Zded<    ed
d          Zd ed!<    ed
d"          Zd#ed$<   ed1d&            Ze	 	 	 	 	 	 	 	 d2d3d)            Z	 	 d4d5d0Zd
S )6Toolz Internal tool registration info.T)excludeCallable[..., Any]fnzName of the tool)descriptionstrnameNz Human-readable title of the tool
str | Nonetitlez!Description of what the tool doesr   zJSON schema for tool parametersdict[str, Any]
parameterszIMetadata about the function including a pydantic model for tool argumentsr   fn_metadatazWhether the tool is asyncboolis_asyncz-Name of the kwarg that should receive contextcontext_kwargz!Optional annotations for the toolToolAnnotations | Noner   z$Optional list of icons for this tool)defaultr   list[Icon] | NoneiconszOptional metadata for this tooldict[str, Any] | Nonemetareturnc                    | j         j        S )N)r!   output_schema)selfs    /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/mcp/server/fastmcp/tools/base.pyr-   zTool.output_schema(   s    --    structured_outputbool | Nonec
                B   |p|j         }
t          |
           |
dk    rt          d          |p|j        pd}t	          |          }|t          |          }t          |||gng |	          }|j                            d          } | ||
|||||||||          S )	zCreate a Tool from a function.z<lambda>z,You must provide a name for lambda functions N)
skip_namesr1   T)by_alias)r   r   r   r   r    r!   r#   r$   r   r(   r*   )	__name__r   
ValueError__doc___is_async_callabler   r   	arg_modelmodel_json_schema)clsr   r   r   r   r$   r   r(   r*   r1   	func_namefunc_docr#   func_arg_metadatar    s                  r/   from_functionzTool.from_function,   s     'BK	#I...
""KLLL2"*2%b)) 2266M)*7*C/
 
 

 '0BBDBQQ
s !)'#
 
 
 	
r0   F	argumentscontext:Context[ServerSessionT, LifespanContextT, RequestT] | Noneconvert_resultr   c                  K   	 | j                             | j        | j        || j        	| j        |ind           d{V }|r| j                             |          }|S # t          $ r }t          d| j         d|           |d}~ww xY w)zRun the tool with arguments.NzError executing tool z: )	r!   call_fn_with_arg_validationr   r#   r$   rE   	Exceptionr
   r   )r.   rB   rC   rE   resultes         r/   runzTool.run\   s      	M+GG151C1O#W--UY	       F  A)88@@M 	M 	M 	MDDIDDDDEE1L	Ms   AA 
B	)BB	)r+   r)   )NNNNNNNN)r   r   r   r   r   r   r   r   r$   r   r   r%   r(   r'   r*   r)   r1   r2   r+   r   )NF)rB   r   rC   rD   rE   r"   r+   r   )r7   
__module____qualname__r9   r	   r   __annotations__r   r   r   r    r!   r#   r$   r   r(   r*   r   r-   classmethodrA   rK    r0   r/   r   r      s        **"U4000B0000"4555D5555d0RSSSESSSSu)LMMMKMMMM!&3T!U!U!UJUUUU %_! ! !K     U'BCCCHCCCC %d8g h h hMhhhh*/%Be*f*f*fKffff$uT?efffEffff"'%Bc"d"d"dDdddd. . . _.    "&$(.2#'&*)--
 -
 -
 -
 [-
d OS$	M M M M M M Mr0   r   objr   r+   r"   c                   t          | t          j                  r!| j        } t          | t          j                  !t	          j        |           p1t          |           o"t	          j        t          | dd                     S )N__call__)
isinstance	functoolspartialfuncinspectiscoroutinefunctioncallablegetattr)rQ   s    r/   r:   r:   s   st    
S)+
,
, h S)+
,
,  &s++ U'5gc:t6T6TUUr0   )rQ   r   r+   r"   )#
__future__r   _annotationsrU   rX   collections.abcr   r   typingr   r   pydanticr   r	   mcp.server.fastmcp.exceptionsr
   .mcp.server.fastmcp.utilities.context_injectionr   *mcp.server.fastmcp.utilities.func_metadatar   r   mcp.shared.tool_name_validationr   	mcp.typesr   r   mcp.server.fastmcp.serverr   mcp.server.sessionr   mcp.shared.contextr   r   r   r:   rP   r0   r/   <module>ri      s   2 2 2 2 2 2      $ $ $ $ $ $ % % % % % % % % % % % % % % % % % % % % % % 3 3 3 3 3 3 Q Q Q Q Q Q R R R R R R R R G G G G G G + + + + + + + + >111111111111========YM YM YM YM YM9 YM YM YMx     r0   