@@ -55,3 +55,63 @@ async def boom() -> str:
5555
5656 assert isinstance (result , types .CallToolResult )
5757 assert result .is_error is True
58+
59+
60+ @pytest .mark .anyio
61+ async def test_call_tool_result_create_error_with_image ():
62+ """A tool can return CallToolResult.create_error() with Image helper for non-text error content."""
63+ mcp = MCPServer (name = "srv" )
64+
65+ @mcp .tool ()
66+ async def image_error () -> types .CallToolResult :
67+ from mcp .server .mcpserver .utilities .types import Image
68+ img = Image (data = b"fake-png" , format = "png" )
69+ return types .CallToolResult .create_error (content = [img ])
70+
71+ async with Client (mcp ) as client :
72+ result = await client .call_tool ("image_error" , {})
73+
74+ assert isinstance (result , types .CallToolResult )
75+ assert result .is_error is True
76+ assert len (result .content ) == 1
77+ assert isinstance (result .content [0 ], types .ImageContent )
78+
79+
80+ @pytest .mark .anyio
81+ async def test_call_tool_result_create_error_with_audio ():
82+ """A tool can return CallToolResult.create_error() with Audio helper for non-text error content."""
83+ mcp = MCPServer (name = "srv" )
84+
85+ @mcp .tool ()
86+ async def audio_error () -> types .CallToolResult :
87+ from mcp .server .mcpserver .utilities .types import Audio
88+ aud = Audio (data = b"fake-wav" , format = "wav" )
89+ return types .CallToolResult .create_error (content = [aud ])
90+
91+ async with Client (mcp ) as client :
92+ result = await client .call_tool ("audio_error" , {})
93+
94+ assert isinstance (result , types .CallToolResult )
95+ assert result .is_error is True
96+ assert len (result .content ) == 1
97+ assert isinstance (result .content [0 ], types .AudioContent )
98+
99+
100+ @pytest .mark .anyio
101+ async def test_call_tool_result_create_error_with_structured_content ():
102+ """A tool can return CallToolResult.create_error() with structured content."""
103+ mcp = MCPServer (name = "srv" )
104+
105+ @mcp .tool ()
106+ async def structured_error () -> types .CallToolResult :
107+ return types .CallToolResult .create_error (
108+ content = [types .TextContent (type = "text" , text = "Something went wrong" )],
109+ structured_content = {"error_code" : "INVALID_INPUT" , "details" : {"field" : "email" }},
110+ )
111+
112+ async with Client (mcp ) as client :
113+ result = await client .call_tool ("structured_error" , {})
114+
115+ assert isinstance (result , types .CallToolResult )
116+ assert result .is_error is True
117+ assert result .structured_content == {"error_code" : "INVALID_INPUT" , "details" : {"field" : "email" }}
0 commit comments