
    P/i=                     T    d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	  G d d      Z
y)    N)ListOptional)StructuredTool)MultiServerMCPClient)settingsc                   R     e Zd ZdZdZdZ fdZd ZdedefdZ	de
e   fdZ xZS )		MCPClientuI   Cliente MCP para comunicación con servidores Spring AI (Java) de Agrota.Nc                     | j                   2t        t        |   |       | _         | j                   j	                          | j                   S )N)	_instancesuperr	   __new___init_client)cls	__class__s    8/opt/agrota/powerbi/client-mcp/mcp_integration/client.pyr   zMCPClient.__new__   s:    == !)S9#>CMMM&&(}}    c                     t         j                  | _        t         j                  xs d| _        t        | j                  | j                  ddi      | _        y )Nzagrota-serversse)url	transport)r   MCP_SERVER_URL
server_urlCLIENT_NAMEclient_namer   client)selfs    r   r   zMCPClient._init_client   sM    "11#//B? +",
 r   toolreturnc                 l   |j                   |j                  }dt        |t              rd|v r
d|d   v r<dn9t	        |d      rd|j
                  v rdnt	        |d      rd|j                  v rdfdt        j                  fd|j                  |j                  |j                  	      S )
zUAdapta las herramientas para el formato de 'request' que espera Java si es necesario.F
propertiesrequestTmodel_fields
__fields__c                  H   K   | }rd| vrd| i} |       d {   S 7 w)Nr!    )
input_args
final_args
needs_wraporiginal_ainvokes     r   wrapped_ainvokez-MCPClient._wrap_tool.<locals>.wrapped_ainvoke-   s1     #Jiz9'4
)*5555s   " "c                  :    t        j                   di |       S )Nr%   )asynciorun)kwargsr*   s    r   <lambda>z&MCPClient._wrap_tool.<locals>.<lambda>4   s    '++o.G.G"H r   )func	coroutinenamedescriptionargs_schema)ainvoker4   
isinstancedicthasattrr"   r#   r   from_functionr2   r3   )r   r   schemar(   r)   r*   s      @@@r   
_wrap_toolzMCPClient._wrap_tool   s    <<!! 
fd#(>F<00t*V^,f>Q>Q1QJV\*yF<M<M/MJ	6 ++H%((((
 	
r   c           	        K   | j                   | j                   S 	 | j                  j                          d{   }|rj|D cg c]  }| j                  |       c}| _         | j                   D cg c]  }|j                   }}t        dd d| dd dd       | j                   S t        d       g S 7 }c c}w c c}w # t        $ r}t        d|        g cY d}~S d}~ww xY ww)	z=Obtiene y adapta las herramientas del servidor MCP de Agrota.N
z2==================================================u   
🛠️  MCP TOOLS AGROTA: T)flushuC   ⚠️ No se encontraron herramientas en el servidor MCP de Agrota.u   ❌ Error MCP Tools en Agrota: )_tools_cacher   	get_toolsr;   r2   print	Exception)r   	raw_toolst
tool_nameses        r   get_tools_asynczMCPClient.get_tools_async;   s     ($$$	"kk3355IAJ$KAT__Q%7$K!.2.?.?@aff@
@6("?
|2fXUWX`de(((WXI 6$K@
  	3A378I	sn   C)C B7
C B9C 2B>$C )C)*C 6C)7C 9
C 	C&C!C&C)!C&&C))__name__
__module____qualname____doc__r   r?   r   r   r   r;   r   rG   __classcell__)r   s   @r   r	   r	      s>    SIL

~ 
. 
8tN'; r   r	   )r,   typingr   r   langchain_core.toolsr   langchain_mcp_adapters.clientr   config.settingsr   r	   r%   r   r   <module>rQ      s      ! / > $E Er   