
    h                         d Z ddlmZmZ ddlZddlZdZdZdZej                  j                  dd      Zd	Zd
efdZded
efdZded
dfdZdeded
efdZded
efdZded
eeef   fdZded
efdZddeded
dfdZy)z
MCP Server Utilities
    )TupleAnyNzlitellm-mcp-serverz1.0.0zMCP Server for LiteLLMMCP_TOOL_PREFIX_SEPARATOR-z#{server_name}{separator}{tool_name}returnc                  N    	 t        j                  d       y# t        $ r Y yw xY w)zF
    Returns True if the MCP module is available, False otherwise
    mcpTF)	importlibimport_moduleImportError     h/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/proxy/_experimental/mcp_server/utils.pyis_mcp_availabler      s*    & s    	$$server_namec                 &    | j                  dd      S )zD
    Normalize server name by replacing spaces with underscores
     _)replace)r   s    r   normalize_server_namer      s     sC((r   payloadc                 V   t        | d      r#| j                  rt        | j                  d       t        | d      r#| j                  rt        | j                  d       t	        | dd      }t	        | dd      }|s|rt        |      }n|rt        |      }t        | d      r|| _        yy)a  
    Validate and normalize MCP server payload fields (server_name and alias).
    
    This function:
    1. Validates that server_name and alias don't contain the MCP_TOOL_PREFIX_SEPARATOR
    2. Normalizes alias by replacing spaces with underscores
    3. Sets default alias if not provided (using server_name as base)
    
    Args:
        payload: The payload object containing server_name and alias fields
        
    Raises:
        HTTPException: If validation fails
    r   T)raise_http_exceptionaliasN)hasattrr   validate_mcp_server_namer   getattrr   )r   r   r   s      r   )validate_and_normalize_mcp_server_payloadr       s      w&7+>+> !4!44P w W]] TJ GWd+E'=$7K[%k2	%e, w  !r   	tool_namec                 P    t        |      }t        j                  |t        |       S )z
    Add server name prefix to tool name

    Args:
        tool_name: Original tool name
        server_name: MCP server name

    Returns:
        Prefixed tool name in format: server_name::tool_name
    )r   	separatorr   )r   MCP_TOOL_PREFIX_FORMATformatr   )r   r   formatted_server_names      r   add_server_prefix_to_tool_namer%   D   s0     2+>!(()+ )  r   serverc                     t        | d      r| j                  r| j                  S t        | d      r| j                  r| j                  S t        | d      r| j                  S y)zRReturn the prefix for a server: alias if present, else server_name, else server_idr   r   	server_id )r   r   r   r(   )r&   s    r   get_server_prefixr*   W   sS    vwFLL||v}%&*<*<!!!v{#r   prefixed_tool_namec                 v    t         | v r.| j                  t         d      }t        |      dk(  r
|d   |d   fS | dfS )z
    Remove server name prefix from tool name

    Args:
        prefixed_tool_name: Tool name with server prefix

    Returns:
        Tuple of (original_tool_name, server_name)
          r   r)   )r   splitlen)r+   partss     r   get_server_name_prefix_tool_mcpr2   a   sI     !$66"(()BAFu:?8U1X%%r!!r   c                     t         | v S )z
    Check if tool name has server prefix

    Args:
        tool_name: Tool name to check

    Returns:
        True if tool name is prefixed, False otherwise
    )r   )r   s    r   is_tool_name_prefixedr4   q   s     %	11r   r   c                     | rDt         | v r;dt          d|  }|r"ddlm} ddlm}  ||j
                  d|i      t        |      yy)	a[  
    Validate that MCP server name does not contain 'MCP_TOOL_PREFIX_SEPARATOR'.
    
    Args:
        server_name: The server name to validate
        raise_http_exception: If True, raises HTTPException instead of generic Exception
        
    Raises:
        Exception or HTTPException: If server name contains 'MCP_TOOL_PREFIX_SEPARATOR'
    zServer name cannot contain 'z/'. Use an alternative character instead Found: r   )HTTPException)statuserror)status_codedetailN)r   fastapir6   	starletter7   HTTP_400_BAD_REQUEST	Exception)r   r   error_messager6   r7   s        r   r   r   }   sq     0K?67P6Q  RA  BM  AN  O-("77/ 
 M** @{r   )F)__doc__typingr   r   osr
   LITELLM_MCP_SERVER_NAMELITELLM_MCP_SERVER_VERSIONLITELLM_MCP_SERVER_DESCRIPTIONenvirongetr   r"   boolr   strr   r   r%   r*   r2   r4   r   r   r   r   <module>rJ      s     	  / $ !9 JJNN+FL > $ )s )s )"s "t "Hc   &c c " "c3h " 
2S 
2T 
2+# +T +VZ +r   