
    yi=                     \    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
dS )    N)ListOptional)StructuredTool)MultiServerMCPClient)settingsc                   X     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         Ft          t          |                               |           | _         | j                                          | j         S )N)	_instancesuperr	   __new___init_client)cls	__class__s    sc:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\mcp_integration\client.pyr   zMCPClient.__new__   sF    = !)S1199#>>CMM&&(((}    c                     t           j        | _        t           j        pd| _        t          | j        | j        ddi          | _        d S )Nzagrota-serversse)url	transport)r   MCP_SERVER_URL
server_urlCLIENT_NAMEclient_namer   client)selfs    r   r   zMCPClient._init_client   sP    "1#/B? +" ,
  r   toolreturnc                 D   |j         |j        }dt          |t                    rd|v rd|d         v rdn7t	          |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                  B   K   | }rd| vrd| i} |           d {V S )Nr!    )
input_args
final_args
needs_wraporiginal_ainvokes     r   wrapped_ainvokez-MCPClient._wrap_tool.<locals>.wrapped_ainvoke-   sK      #J 5iz99'4
))*555555555r   c                  8    t          j         di |           S )Nr%   )asynciorun)kwargsr*   s    r   <lambda>z&MCPClient._wrap_tool.<locals>.<lambda>4   s!    '+oo.G.G.G.G"H"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00t*V^,, 	f>Q1Q1QJJV\** 	yF<M/M/MJ	6 	6 	6 	6 	6 	6 +HHHH%((
 
 
 	
r   c           	      l   K    j          j         S 	  j                                         d{V }|rF fd|D              _         d  j         D             }t          dd d| dd dd            j         S t          d	           g S # t          $ r}t          d
|            g cY d}~S d}~ww xY w)z=Obtiene y adapta las herramientas del servidor MCP de Agrota.Nc                 :    g | ]}                     |          S r%   )r;   ).0tr   s     r   
<listcomp>z-MCPClient.get_tools_async.<locals>.<listcomp>D   s%    $K$K$KAT__Q%7%7$K$K$Kr   c                     g | ]	}|j         
S r%   )r2   )r>   r?   s     r   r@   z-MCPClient.get_tools_async.<locals>.<listcomp>E   s    @@@af@@@r   
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_toolsprint	Exception)r   	raw_tools
tool_nameses   `   r   get_tools_asynczMCPClient.get_tools_async;   s     ($$	"k3355555555I )$K$K$K$K$K$K$K!@@d.?@@@
X6XX
XXfXXX`deeee((WXXXI 	 	 	7A77888IIIIII	s$   A&B :B 
B3B.(B3.B3)__name__
__module____qualname____doc__r   rD   r   r   r   r;   r   rK   __classcell__)r   s   @r   r	   r	      s        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>rU      s     ! ! ! ! ! ! ! ! / / / / / / > > > > > > $ $ $ $ $ $E E E E E E E E E Er   