content: """Test icon and metadata support (SEP-973)."""
  
  import pytest
  
  from mcp.server.fastmcp import FastMCP
  from mcp.types import Icon
  
  pytestmark = pytest.mark.anyio
  
  
  async def test_icons_and_website_url():
      """Test that icons and websiteUrl are properly returned in API calls."""
  
      # Create test icon
      test_icon = Icon(
          src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
          mimeType="image/png",
          sizes=["1x1"],
      )
  
      # Create server with website URL and icon
      mcp = FastMCP("TestServer", website_url="https://example.com", icons=[test_icon])
  
      # Create tool with icon
      @mcp.tool(icons=[test_icon])
      def test_tool(message: str) -> str:  # pragma: no cover
          """A test tool with an icon."""
          return message
  
      # Create resource with icon
      @mcp.resource("test://resource", icons=[test_icon])
      def test_resource() -> str:  # pragma: no cover
          """A test resource with an icon."""
          return "test content"
  
      # Create prompt with icon
      @mcp.prompt("test_prompt", icons=[test_icon])
      def test_prompt(text: str) -> str:  # pragma: no cover
          """A test prompt with an icon."""
          return text
  
      # Create resource template with icon
      @mcp.resource("test://weather/{city}", icons=[test_icon])
      def test_resource_template(city: str) -> str:  # pragma: no cover
          """Get weather for a city."""
          return f"Weather for {city}"
  
      # Test server metadata includes websiteUrl and icons
      assert mcp.name == "TestServer"
      assert mcp.website_url == "https://example.com"
      assert mcp.icons is not None
      assert len(mcp.icons) == 1
      assert mcp.icons[0].src == test_icon.src
      assert mcp.icons[0].mimeType == test_icon.mimeType
      assert mcp.icons[0].sizes == test_icon.sizes
  
      # Test tool includes icon
      tools = await mcp.list_tools()
      assert len(tools) == 1
      tool = tools[0]
      assert tool.name == "test_tool"
      assert tool.icons is not None
      assert len(tool.icons) == 1
      assert tool.icons[0].src == test_icon.src
  
      # Test resource includes icon
      resources = await mcp.list_resources()
      assert len(resources) == 1
      resource = resources[0]
      assert str(resource.uri) == "test://resource"
      assert resource.icons is not None
      assert len(resource.icons) == 1
      assert resource.icons[0].src == test_icon.src
  
      # Test prompt includes icon
      prompts = await mcp.list_prompts()
      assert len(prompts) == 1
      prompt = prompts[0]
      assert prompt.name == "test_prompt"
      assert prompt.icons is not None
      assert len(prompt.icons) == 1
      assert prompt.icons[0].src == test_icon.src
  
      # Test resource template includes icon
      templates = await mcp.list_resource_templates()
      assert len(templates) == 1
      template = templates[0]
      assert template.name == "test_resource_template"
      assert template.uriTemplate == "test://weather/{city}"
      assert template.icons is not None
      assert len(template.icons) == 1
      assert template.icons[0].src == test_icon.src
  
  
  async def test_multiple_icons():
      """Test that multiple icons can be added to tools, resources, and prompts."""
  
      # Create multiple test icons
      icon1 = Icon(src="data:image/png;base64,icon1", mimeType="image/png", sizes=["16x16"])
      icon2 = Icon(src="data:image/png;base64,icon2", mimeType="image/png", sizes=["32x32"])
      icon3 = Icon(src="data:image/png;base64,icon3", mimeType="image/png", sizes=["64x64"])
  
      mcp = FastMCP("MultiIconServer")
  
      # Create tool with multiple icons
      @mcp.tool(icons=[icon1, icon2, icon3])
      def multi_icon_tool() -> str:  # pragma: no cover
          """A tool with multiple icons."""
          return "success"
  
      # Test tool has all icons
      tools = await mcp.list_tools()
      assert len(tools) == 1
      tool = tools[0]
      assert tool.icons is not None
      assert len(tool.icons) == 3
      assert tool.icons[0].sizes == ["16x16"]
      assert tool.icons[1].sizes == ["32x32"]
      assert tool.icons[2].sizes == ["64x64"]
  
  
  async def test_no_icons_or_website():
      """Test that server works without icons or websiteUrl."""
  
      mcp = FastMCP("BasicServer")
  
      @mcp.tool()
      def basic_tool() -> str:  # pragma: no cover
          """A basic tool without icons."""
          return "success"
  
      # Test server metadata has no websiteUrl or icons
      assert mcp.name == "BasicServer"
      assert mcp.website_url is None
      assert mcp.icons is None
  
      # Test tool has no icons
      tools = await mcp.list_tools()
      assert len(tools) == 1
      tool = tools[0]
      assert tool.name == "basic_tool"
      assert tool.icons is None
  