
    Ki                        d Z ddlmZ ddlZddlZddlmZmZ  ej                  e	      Z
 ej                  d      ZdZe G d d             Zdd	Zdd
ZddZy)a  Tool name validation utilities according to SEP-986.

Tool names SHOULD be between 1 and 128 characters in length (inclusive).
Tool names are case-sensitive.
Allowed characters: uppercase and lowercase ASCII letters (A-Z, a-z),
digits (0-9), underscore (_), dash (-), and dot (.).
Tool names SHOULD NOT contain spaces, commas, or other special characters.

See: https://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool-names
    )annotationsN)	dataclassfieldz^[A-Za-z0-9._-]{1,128}$zPhttps://modelcontextprotocol.io/specification/2025-11-25/server/tools#tool-namesc                  :    e Zd ZU dZded<    ed       Zded<   y)	ToolNameValidationResultzResult of tool name validation.

    Attributes:
        is_valid: Whether the tool name conforms to SEP-986 requirements.
        warnings: List of warning messages for non-conforming aspects.
    boolis_validc                     g S N r       k/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/mcp/shared/tool_name_validation.py<lambda>z!ToolNameValidationResult.<lambda>%   s     r   )default_factory	list[str]warningsN)__name__
__module____qualname____doc____annotations__r   r   r   r   r   r   r      s     N
;Hi;r   r   c                   g }| st        ddg      S t        |       dkD  rt        ddt        |        dg      S d| v r|j                  d       d	| v r|j                  d
       | j                  d      s| j	                  d      r|j                  d       | j                  d      s| j	                  d      r|j                  d       t
        j                  |       sg }t               }| D ]@  }t        j                  d|      r||vs|j                  |       |j                  |       B |j                  ddj                  d |D                      |j                  d       t        d|      S t        d|      S )zValidate a tool name according to the SEP-986 specification.

    Args:
        name: The tool name to validate.

    Returns:
        ToolNameValidationResult containing validation status and any warnings.
    FzTool name cannot be empty)r	   r      z=Tool name exceeds maximum length of 128 characters (current: ) z9Tool name contains spaces, which may cause parsing issues,z9Tool name contains commas, which may cause parsing issues-zUTool name starts or ends with a dash, which may cause parsing issues in some contexts.zTTool name starts or ends with a dot, which may cause parsing issues in some contextsz[A-Za-z0-9._-]z'Tool name contains invalid characters: z, c              3  2   K   | ]  }t        |        y wr   )repr).0cs     r   	<genexpr>z%validate_tool_name.<locals>.<genexpr>Y   s     KkXYDQRGKks   zLAllowed characters are: A-Z, a-z, 0-9, underscore (_), dash (-), and dot (.)T)r   lenappend
startswithendswithTOOL_NAME_REGEXmatchsetreaddjoin)namer   invalid_charsseenchars        r   validate_tool_namer2   (   su    H '12
 	
 4y3'UVYZ^V_U``abc
 	
 d{ST
d{ST st}}S1opst}}S1no   &#% 	D88-t4T9I$$T*	
 	A$))Kk]jKkBkAlmnfg'JJ#THEEr   c                   |syt         j                  d|  d       |D ]  }t         j                  d|         t         j                  d       t         j                  d       t         j                  dt         d       y)	zLog warnings for non-conforming tool names.

    Args:
        name: The tool name that triggered the warnings.
        warnings: List of warning messages to log.
    Nz"Tool name validation warning for "z":z  - zHTool registration will proceed, but this may cause compatibility issues.zKConsider updating the tool name to conform to the MCP tool naming standard.zSee SEP-986 (z) for more details.)loggerwarningSEP_986_URL)r.   r   r5   s      r   issue_tool_name_warningr7   a   sr     
NN7vR@A )gY'()
NN]^
NN`a
NN];-/BCDr   c                \    t        |       }t        | |j                         |j                  S )aC  Validate a tool name and issue warnings for non-conforming names.

    This is the primary entry point for tool name validation. It validates
    the name and logs any warnings via the logging module.

    Args:
        name: The tool name to validate.

    Returns:
        True if the name is valid, False otherwise.
    )r2   r7   r   r	   )r.   results     r   validate_and_warn_tool_namer:   s   s&      %FD&//2??r   )r.   strreturnr   )r.   r;   r   r   r<   None)r.   r;   r<   r   )r   
__future__r   loggingr+   dataclassesr   r   	getLoggerr   r4   compiler(   r6   r   r2   r7   r:   r   r   r   <module>rC      sp   	 #  	 (			8	$ "**78 a 	< 	< 	<6FrE$r   