content: """Utility functions for working with metadata in MCP types.
  
  These utilities are primarily intended for client-side usage to properly display
  human-readable names in user interfaces in a spec compliant way.
  """
  
  from mcp.types import Implementation, Prompt, Resource, ResourceTemplate, Tool
  
  
  def get_display_name(obj: Tool | Resource | Prompt | ResourceTemplate | Implementation) -> str:
      """
      Get the display name for an MCP object with proper precedence.
  
      This is a client-side utility function designed to help MCP clients display
      human-readable names in their user interfaces. When servers provide a 'title'
      field, it should be preferred over the programmatic 'name' field for display.
  
      For tools: title > annotations.title > name
      For other objects: title > name
  
      Example:
          # In a client displaying available tools
          tools = await session.list_tools()
          for tool in tools.tools:
              display_name = get_display_name(tool)
              print(f"Available tool: {display_name}")
  
      Args:
          obj: An MCP object with name and optional title fields
  
      Returns:
          The display name to use for UI presentation
      """
      if isinstance(obj, Tool):
          # Tools have special precedence: title > annotations.title > name
          if hasattr(obj, "title") and obj.title is not None:
              return obj.title
          if obj.annotations and hasattr(obj.annotations, "title") and obj.annotations.title is not None:
              return obj.annotations.title
          return obj.name
      else:
          # All other objects: title > name
          if hasattr(obj, "title") and obj.title is not None:
              return obj.title
          return obj.name
  