Update Icon.sizes to use string array format (#1411)

This commit is contained in:
Peter Alexander 2025-09-29 14:27:32 +01:00 • committed by GitHub
commit 80c0d23d48
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 13 additions and 13 deletions

View file

@ -14,7 +14,7 @@ icon_path = Path(__file__).parent / "mcp.png"
icon_data = base64.standard_b64encode(icon_path.read_bytes()).decode() icon_data = base64.standard_b64encode(icon_path.read_bytes()).decode()
icon_data_uri = f"data:image/png;base64,{icon_data}" icon_data_uri = f"data:image/png;base64,{icon_data}"
icon_data = Icon(src=icon_data_uri, mimeType="image/png", sizes="64x64") icon_data = Icon(src=icon_data_uri, mimeType="image/png", sizes=["64x64"])
# Create server with icons in implementation # Create server with icons in implementation
mcp = FastMCP("Icons Demo Server", website_url="https://github.com/modelcontextprotocol/python-sdk", icons=[icon_data]) mcp = FastMCP("Icons Demo Server", website_url="https://github.com/modelcontextprotocol/python-sdk", icons=[icon_data])
@ -40,9 +40,9 @@ def prompt_with_icon(text: str) -> str:
@mcp.tool( @mcp.tool(
icons=[ icons=[
Icon(src=icon_data_uri, mimeType="image/png", sizes="16x16"), Icon(src=icon_data_uri, mimeType="image/png", sizes=["16x16"]),
Icon(src=icon_data_uri, mimeType="image/png", sizes="32x32"), Icon(src=icon_data_uri, mimeType="image/png", sizes=["32x32"]),
Icon(src=icon_data_uri, mimeType="image/png", sizes="64x64"), Icon(src=icon_data_uri, mimeType="image/png", sizes=["64x64"]),
] ]
) )
def multi_icon_tool(action: str) -> str: def multi_icon_tool(action: str) -> str:

View file

@ -222,8 +222,8 @@ class Icon(BaseModel):
mimeType: str | None = None mimeType: str | None = None
"""Optional MIME type for the icon.""" """Optional MIME type for the icon."""
sizes: str | None = None sizes: list[str] | None = None
"""Optional string specifying icon dimensions (e.g., "48x48 96x96").""" """Optional list of strings specifying icon dimensions (e.g., ["48x48", "96x96"])."""
model_config = ConfigDict(extra="allow") model_config = ConfigDict(extra="allow")

View file

@ -15,7 +15,7 @@ async def test_icons_and_website_url():
test_icon = Icon( test_icon = Icon(
src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==", src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==",
mimeType="image/png", mimeType="image/png",
sizes="1x1", sizes=["1x1"],
) )
# Create server with website URL and icon # Create server with website URL and icon
@ -80,9 +80,9 @@ async def test_multiple_icons():
"""Test that multiple icons can be added to tools, resources, and prompts.""" """Test that multiple icons can be added to tools, resources, and prompts."""
# Create multiple test icons # Create multiple test icons
icon1 = Icon(src="data:image/png;base64,icon1", mimeType="image/png", sizes="16x16") 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") 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") icon3 = Icon(src="data:image/png;base64,icon3", mimeType="image/png", sizes=["64x64"])
mcp = FastMCP("MultiIconServer") mcp = FastMCP("MultiIconServer")
@ -98,9 +98,9 @@ async def test_multiple_icons():
tool = tools[0] tool = tools[0]
assert tool.icons is not None assert tool.icons is not None
assert len(tool.icons) == 3 assert len(tool.icons) == 3
assert tool.icons[0].sizes == "16x16" assert tool.icons[0].sizes == ["16x16"]
assert tool.icons[1].sizes == "32x32" assert tool.icons[1].sizes == ["32x32"]
assert tool.icons[2].sizes == "64x64" assert tool.icons[2].sizes == ["64x64"]
async def test_no_icons_or_website(): async def test_no_icons_or_website():