From 5086f64c6acb01a7a77a2133a5158292e834277b Mon Sep 17 00:00:00 2001 From: Techsynx <180408159+Techsynx@users.noreply.github.com> Date: Tue, 3 Nov 2026 12:32:17 +0500 Subject: [PATCH] fix(snippets): encode thumbnail as PNG in images example (#3805) --- examples/snippets/servers/images.py | 6 ++++- tests/server/mcpserver/test_integration.py | 27 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/examples/snippets/servers/images.py b/examples/snippets/servers/images.py index b30c9a8f78..8e7ba9e8b2 100644 --- a/examples/snippets/servers/images.py +++ b/examples/snippets/servers/images.py @@ -1,5 +1,7 @@ """Example showing image handling with MCPServer.""" +import io + from PIL import Image as PILImage from mcp.server.mcpserver import Image, MCPServer @@ -12,4 +14,6 @@ def create_thumbnail(image_path: str) -> Image: """Create a thumbnail from an image""" img = PILImage.open(image_path) img.thumbnail((100, 100)) - return Image(data=img.tobytes(), format="png") + buffer = io.BytesIO() + img.save(buffer, format="PNG") + return Image(data=buffer.getvalue(), format="png") diff --git a/tests/server/mcpserver/test_integration.py b/tests/server/mcpserver/test_integration.py index 2c57aab086..09ea975a34 100644 --- a/tests/server/mcpserver/test_integration.py +++ b/tests/server/mcpserver/test_integration.py @@ -10,6 +10,7 @@ # pyright: reportUnknownArgumentType=false import json +from pathlib import Path import pytest from inline_snapshot import snapshot @@ -19,6 +20,7 @@ ElicitRequestParams, ElicitResult, GetPromptResult, + ImageContent, LoggingMessageNotification, LoggingMessageNotificationParams, NotificationParams, @@ -40,6 +42,7 @@ basic_tool, completion, elicitation, + images, mcpserver_quickstart, notifications, sampling, @@ -342,3 +345,27 @@ async def test_structured_output() -> None: assert "sunny" in result_text # condition assert "45" in result_text # humidity assert "5.2" in result_text # wind_speed + + +async def test_images_thumbnail(tmp_path: Path) -> None: + """Test image thumbnail creation with valid PNG encoding.""" + import base64 + import io + + from PIL import Image as PILImage + + img_file = tmp_path / "test.png" + PILImage.new("RGB", (200, 200), (255, 0, 0)).save(img_file, format="PNG") + + async with Client(images.mcp) as client: + result = await client.call_tool("create_thumbnail", {"image_path": str(img_file)}) + assert len(result.content) == 1 + content = result.content[0] + assert isinstance(content, ImageContent) + assert content.mime_type == "image/png" + + # Verify decoded bytes form a valid PIL image + decoded = base64.b64decode(content.data) + with PILImage.open(io.BytesIO(decoded)) as decoded_img: + assert decoded_img.format == "PNG" + assert decoded_img.size == (100, 100)