@@ -276,7 +276,8 @@ async def call_tool(
276
276
"""Call a tool by name with arguments."""
277
277
context = self .get_context ()
278
278
result = await self ._tool_manager .call_tool (name , arguments , context = context )
279
- converted_result = _convert_to_content (result )
279
+ schema = self ._tool_manager .get_schema (name )
280
+ converted_result = _convert_to_content (result , schema )
280
281
return converted_result
281
282
282
283
async def list_resources (self ) -> list [MCPResource ]:
@@ -879,24 +880,28 @@ async def get_prompt(
879
880
880
881
def _convert_to_content (
881
882
result : Any ,
883
+ schema : dict [str , Any ] | None
882
884
) -> Sequence [TextContent | ImageContent | EmbeddedResource ]:
883
- """Convert a result to a sequence of content objects."""
884
- if result is None :
885
- return []
885
+ if schema is None :
886
+ """Convert a result to a sequence of content objects."""
887
+ if result is None :
888
+ return []
886
889
887
- if isinstance (result , TextContent | ImageContent | EmbeddedResource ):
888
- return [result ]
890
+ if isinstance (result , TextContent | ImageContent | EmbeddedResource ):
891
+ return [result ]
889
892
890
- if isinstance (result , Image ):
891
- return [result .to_image_content ()]
893
+ if isinstance (result , Image ):
894
+ return [result .to_image_content ()]
892
895
893
- if isinstance (result , list | tuple ):
894
- return list (chain .from_iterable (_convert_to_content (item ) for item in result )) # type: ignore[reportUnknownVariableType]
896
+ if isinstance (result , list | tuple ):
897
+ return list (chain .from_iterable (_convert_to_content (item , schema ) for item in result )) # type: ignore[reportUnknownVariableType]
895
898
896
- if not isinstance (result , str ):
897
- result = pydantic_core .to_json (result , fallback = str , indent = 2 ).decode ()
899
+ if not isinstance (result , str ):
900
+ result = pydantic_core .to_json (result , fallback = str , indent = 2 ).decode ()
898
901
899
- return [TextContent (type = "text" , text = result )]
902
+ return [TextContent (type = "text" , text = result )]
903
+ else :
904
+ return result
900
905
901
906
902
907
class Context (BaseModel , Generic [ServerSessionT , LifespanContextT ]):
0 commit comments