
    ~h'                    ~   d dl mZ d dlmZmZmZ d dlmZ d dlZ	d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZmZ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( d dl)m*Z* erd dl+m$Z$  e*e,      Z- G d de(      Z. G d de!      Z/ G d de"      Z0 G d de      Z1 G d de&      Z2y)    )annotations)TYPE_CHECKINGAnycast)quoteN)ReadResourceContents)McpError)METHOD_NOT_FOUNDBlobResourceContentsEmbeddedResourceGetPromptResultImageContentTextContentTextResourceContents)AnyUrl)Client)NotFoundErrorResourceError	ToolError)PromptPromptMessage)ResourceResourceTemplate)Context)FastMCP)Tool)
get_loggerc                  H     e Zd Zd fdZedd       Z	 d	 	 	 	 	 ddZ xZS )	ProxyToolc                2    t        |   di | || _        y N super__init___clientselfclientkwargs	__class__s      P/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/fastmcp/server/proxy.pyr%   zProxyTool.__init__$       "6"    c                ^   K    | ||j                   |j                  |j                        S w)N)r)   namedescription
parameters)r0   r1   inputSchema)clsr)   tools      r,   from_clientzProxyTool.from_client(   s/     ((''	
 	
s   +-c                  K   | j                   4 d {    | j                   j                  | j                  |       d {   }d d d       d {    j                  rDt	        t        t        j                  j                  |j                  d         j                        |j                  S 7 7 r7 d# 1 d {  7  sw Y   txY ww)N)r0   	argumentsr   )r&   call_tool_mcpr0   isErrorr   r   mcptypesr   contenttext)r(   r8   contextresults       r,   runzProxyTool.run1   s      << 	 	<<55YY# 6  F	 	
 >>D!6!6q8IJOOPP~~		 	 	 	sW   CB3C+B9B5B9CB7A!C5B97C9C?C CCr)   r   )r)   r   r5   zmcp.types.Toolreturnr   N)r8   dict[str, Any]r?   Context | NonerC   3list[TextContent | ImageContent | EmbeddedResource])__name__
__module____qualname__r%   classmethodr6   rA   __classcell__r+   s   @r,   r   r   #   sB     
 
 #'!   
=	r.   r   c                  f     e Zd ZU ded<   dZded<   ddd
 fdZe	 	 	 	 	 	 dd       Zdd	Z xZ	S )ProxyResourcer   r&   Nstr | bytes | None_value)rQ   c               @    t        |   di | || _        || _        y r!   )r$   r%   r&   rQ   )r(   r)   rQ   r*   r+   s       r,   r%   zProxyResource.__init__F   s!    "6"r.   c                t   K    | ||j                   |j                  |j                  |j                        S w)N)r)   urir0   r1   	mime_type)rT   r0   r1   mimeType)r4   r)   resources      r,   r6   zProxyResource.from_clientK   s8       ,,''
 	
s   68c                  K   | j                   | j                   S | j                  4 d {    | j                  j                  | j                         d {   }d d d       d {    t	        d   t
              r|d   j                  S t	        |d   t              r|d   j                  S t        dt        |d                7 7 t7 f# 1 d {  7  sw Y   vxY ww)Nr   Unsupported content type: )rQ   r&   read_resourcerT   
isinstancer   r>   r   blobr   type)r(   r@   s     r,   readzProxyResource.readW   s     ;;";;<< 	@ 	@<<55dhh??F	@ 	@fQi!56!9>>!q	#78!9>>!"<T&)_<M NOO	@?	@ 	@ 	@ 	@sW   )C&CC&)CCCC&(C)A#C&CC&C#CC#C&)r)   r   rQ   rP   )r)   r   rW   zmcp.types.ResourcerC   rO   )rC   zstr | bytes)
rH   rI   rJ   __annotations__rQ   r%   rK   r6   r^   rL   rM   s   @r,   rO   rO   B   sM    O!%F%GK 
 	
	
'9	
		
 	
Pr.   rO   c                  X     e Zd Zd fdZe	 	 	 	 	 	 dd       Z	 d	 	 	 	 	 	 	 ddZ xZS )ProxyTemplatec                2    t        |   di | || _        y r!   r#   r'   s      r,   r%   zProxyTemplate.__init__f   r-   r.   c                `   K    | ||j                   |j                  |j                  i       S w)N)r)   uri_templater0   r1   r2   )uriTemplater0   r1   )r4   r)   templates      r,   r6   zProxyTemplate.from_clientj   s4      !-- ,,
 	
s   ,.c                  K    | j                   j                  di |j                         D ci c]  \  }}|t        |d       c}}}| j                  4 d {    | j                  j                  |       d {   }d d d       d {    t        d   t              r|d   j                  }n=t        |d   t              r|d   j                  }nt        dt        |d                t        | j                  || j                  | j                  |d   j                   |      S c c}}w 7 7 7 # 1 d {  7  sw Y   xY ww)N )safer   rY   )r)   rT   r0   r1   rU   rQ   r"   )rd   formatitemsr   r&   rZ   r[   r   r>   r   r\   r   r]   rO   r0   r1   rV   )	r(   rT   paramsr?   kvparameterized_urir@   values	            r,   create_resourcezProxyTemplate.create_resourcev   s:     5D--44 
06?1q%##?
 << 	I 	I<<556GHHF	I 	I fQi!561INNEq	#781INNE"<T&)_<M NOO<<!((Qi((
 	
 @	IH	I 	I 	I 	Ise   ,ED0ED6E D<?D8 D<ED:B'E8D<:E<EEE
ErB   )r)   r   rf   zmcp.types.ResourceTemplaterC   ra   rD   )rT   strrl   rE   r?   rF   rC   rO   )rH   rI   rJ   r%   rK   r6   rq   rL   rM   s   @r,   ra   ra   e   sd     	
	
'A	
		
 	
 #'	

 
  	

 

r.   ra   c                  F     e Zd ZU ded<   d fdZedd       ZddZ xZS )	ProxyPromptr   r&   c                2    t        |   di | || _        y r!   r#   r'   s      r,   r%   zProxyPrompt.__init__   r-   r.   c           
        K    | ||j                   |j                  |j                  xs g D cg c]  }|j                          c}      S c c}w w)N)r)   r0   r1   r8   )r0   r1   r8   
model_dump)r4   r)   promptas       r,   r6   zProxyPrompt.from_client   sK     **/5/?/?/E2F!q||~F	
 	
 Gs   ,AAAc                  K   | j                   4 d {    | j                   j                  | j                  |       d {   }d d d       d {    |j                  S 7 N7 "7 # 1 d {  7  sw Y   j                  S xY wwrD   )r&   
get_promptr0   messages)r(   r8   r@   s      r,   renderzProxyPrompt.render   sz     << 	I 	I<<22499iHHF	I 	I	IH	I 	I 	I 	IsV   BA"B*A(A$A(BA&B$A(&B(B.A1/B6BrB   )r)   r   rx   zmcp.types.PromptrC   rt   )r8   rE   rC   zlist[PromptMessage])	rH   rI   rJ   r_   r%   rK   r6   r}   rL   rM   s   @r,   rt   rt      s&    O 
 
r.   rt   c                       e Zd Zd	 fdZd
 fdZd fdZd fdZd fdZ	 	 	 	 	 	 d fdZd fdZ		 d	 	 	 	 	 d fdZ
 xZS )FastMCPProxyc                2    t        |   di | || _        y r!   )r$   r%   r)   r'   s      r,   r%   zFastMCPProxy.__init__   s    "6"r.   c                  K   t         |           d {   }| j                  4 d {    	 | j                  j                          d {   }|D ]H  }|j                  |vst        j                  | j                  |       d {   }|||j                  <   J d d d       d {    |S 7 7 7 g# t        $ r,}|j
                  j                  t        k(  rg }n|Y d }~d }~ww xY w7 e7 F# 1 d {  7  sw Y   |S xY wwrD   )r$   	get_toolsr)   
list_toolsr	   errorcoder
   r0   r   r6   )r(   toolsclient_toolser5   
tool_proxyr+   s         r,   r   zFastMCPProxy.get_tools   s     g'));; 	8 	8%)[[%;%;%== % 899E)'0'<'<T[[$'O!OJ-7E*//*	8	8 	8 ! *	8= 77<<#33#%LG ! "P	8 	8 	8 	8    D	B1D	B3D	C3B7B5B7C3&#C3	C/
C3D	*C1+D	3D	5B77	C, "C'"C3'C,,C31D	3D9C<:DD	c                :  K   t         |           d {   }| j                  4 d {    	 | j                  j                          d {   }|D ]Z  }t        |j                        |vst        j                  | j                  |       d {   }||t        |j                        <   \ d d d       d {    |S 7 7 7 y# t        $ r,}|j
                  j                  t        k(  rg }n|Y d }~d }~ww xY w7 n7 F# 1 d {  7  sw Y   |S xY wwrD   )r$   get_resourcesr)   list_resourcesr	   r   r   r
   rr   rT   rO   r6   )r(   	resourcesclient_resourcesr   rW   resource_proxyr+   s         r,   r   zFastMCPProxy.get_resources   s    '/11	;; 	H 	H)-)C)C)E#E  - Hx||$I5+8+D+DX, &N :HIc."4"456H	H 	H  % 2	H#E 77<<#33')$G %&	H 	H 	H 	H  s   DCDCDDC	CC	D/#DDD1D<D=DDC			C>"C94D9C>>DDDDDDc                  K   t         |           d {   }| j                  4 d {    	 | j                  j                          d {   }|D ]H  }|j                  |vst        j                  | j                  |       d {   }|||j                  <   J d d d       d {    |S 7 7 7 g# t        $ r,}|j
                  j                  t        k(  rg }n|Y d }~d }~ww xY w7 e7 F# 1 d {  7  sw Y   |S xY wwrD   )r$   get_resource_templatesr)   list_resource_templatesr	   r   r   r
   re   ra   r6   rd   )r(   	templatesclient_templatesr   rf   template_proxyr+   s         r,   r   z#FastMCPProxy.get_resource_templates   s    '8::	;; 	L 	L)-)L)L)N#N  - L''y8+8+D+DX, &N >LIn99:L	L 	L  % ;	L#N 77<<#33')$G %&	L 	L 	L 	L  r   c                  K   t         |           d {   }| j                  4 d {    	 | j                  j                          d {   }|D ]H  }|j                  |vst        j                  | j                  |       d {   }|||j                  <   J d d d       d {    |S 7 7 7 g# t        $ r,}|j
                  j                  t        k(  rg }n|Y d }~d }~ww xY w7 e7 F# 1 d {  7  sw Y   |S xY wwrD   )r$   get_promptsr)   list_promptsr	   r   r   r
   r0   rt   r6   )r(   promptsclient_promptsr   rx   prompt_proxyr+   s         r,   r   zFastMCPProxy.get_prompts   s     +--;; 	> 	>'+{{'?'?'A!A ) >;;g-)4)@)@f)U#UL1=GL--.	>	> 	> ! .	>!A 77<<#33%'NG # $V	> 	> 	> 	> r   c                ,  K   	 t         |   ||       d {   }|S 7 # t        $ rg | j                  4 d {  7   | j                  j	                  ||       d {  7  }d d d       d {  7   n# 1 d {  7  sw Y   nxY wcY S w xY wwrD   )r$   
_call_toolr   r)   	call_tool)r(   keyr8   r@   r+   s       r,   r   zFastMCPProxy._call_tool  s     	 7-c9==FM > 	{{ E E#{{44S)DDDE E E E EM	u   B! ! B! B=B A7A" A7%B0A31B7B		=B >B			BBBBc           	       K   	 t         |   |       d {   }|S 7 # t        $ r | j                  4 d {  7   | j                  j	                  |       d {  7  }t        |d   t              r|d   j                  }n=t        |d   t              r|d   j                  }nt        dt        |d                d d d       d {  7   n# 1 d {  7  sw Y   nxY wt        d   j                        gcY S w xY ww)Nr   rY   )r=   rU   )r$   _read_resourcer   r)   rZ   r[   r   r>   r   r\   
ValueErrorr]   r   rV   )r(   rT   r@   rW   r=   r+   s        r,   r   zFastMCPProxy._read_resource  s     	 71#66FM 7 	{{ W W!%!:!:3!???hqk+?@&qk..G-AB&qk..G$'A$xPQ{BSAT%UVVW W W W W %W@T@TU 	sv   D    D  D<DCA A%CDCDC'	CC'	#"DDDDc                ,  K   	 t         |   ||       d {   }|S 7 # t        $ rg | j                  4 d {  7   | j                  j	                  ||       d {  7  }d d d       d {  7   n# 1 d {  7  sw Y   nxY wcY S w xY wwrD   )r$   _get_promptr   r)   r{   )r(   r0   r8   r@   r+   s       r,   r   zFastMCPProxy._get_prompt  s     	 7.tY??FM @ 	{{ G G#{{55dIFFFG G G G GM	r   rB   )rC   zdict[str, Tool])rC   zdict[str, Resource])rC   zdict[str, ResourceTemplate])rC   zdict[str, Prompt])r   rr   r8   rE   rC   rG   )rT   zAnyUrl | strrC   zlist[ReadResourceContents]rD   )r0   rr   r8   zdict[str, Any] | NonerC   r   )rH   rI   rJ   r%   r   r   r   r   r   r   r   rL   rM   s   @r,   r   r      sf    &**&		#1		<	& =A		$9			 	r.   r   )3
__future__r   typingr   r   r   urllib.parser   	mcp.typesr;    mcp.server.lowlevel.helper_typesr   mcp.shared.exceptionsr	   r
   r   r   r   r   r   r   pydantic.networksr   fastmcp.clientr   fastmcp.exceptionsr   r   r   fastmcp.promptsr   r   fastmcp.resourcesr   r   fastmcp.server.contextr   fastmcp.server.serverr   fastmcp.tools.toolr   fastmcp.utilities.loggingr   fastmcp.serverrH   loggerr   rO   ra   rt   r   r"   r.   r,   <module>r      s    " + +   A *   % ! F F 1 8 * ) # 0&	H	 > PH  PF.
$ .
b& ,{7 {r.   