1414 ImageContent ,
1515 AudioContent ,
1616 DataContent ,
17+ McpCall ,
18+ McpCallOutput ,
1719 FunctionCall ,
1820 FunctionCallOutput ,
1921 MessageType ,
@@ -78,8 +80,6 @@ async def adapt_agentscope_message_stream(
7880 # Note: Tool use content only happens in the last of messages
7981 tool_start = False
8082
81- tool_use_messages_dict = {}
82-
8383 # Cache msg id
8484 msg_id = msg .id
8585
@@ -251,6 +251,17 @@ async def adapt_agentscope_message_stream(
251251 elif element .get ("type" ) == "tool_use" : # Tool use
252252 call_id = element .get ("id" )
253253
254+ if element .get ("tool_type" , "plugin" ) == "mcp" :
255+ msg_type = MessageType .MCP_TOOL_CALL
256+ fc_cls = McpCall
257+ fc_kwargs = {
258+ "server_label" : element .get ("server_label" ),
259+ }
260+ else :
261+ msg_type = MessageType .PLUGIN_CALL
262+ fc_cls = FunctionCall
263+ fc_kwargs = {}
264+
254265 if last :
255266 plugin_call_message = tool_use_messages_dict .get (
256267 call_id ,
@@ -260,16 +271,17 @@ async def adapt_agentscope_message_stream(
260271 # Only one tool use message yields, we fake
261272 # Build a new tool call message
262273 plugin_call_message = Message (
263- type = MessageType . PLUGIN_CALL ,
274+ type = msg_type ,
264275 role = "assistant" ,
265276 )
266277
267278 data_delta_content = DataContent (
268279 index = index ,
269- data = FunctionCall (
280+ data = fc_cls (
270281 call_id = element .get ("id" ),
271282 name = element .get ("name" ),
272283 arguments = "" ,
284+ ** fc_kwargs ,
273285 ).model_dump (),
274286 delta = True ,
275287 )
@@ -290,10 +302,11 @@ async def adapt_agentscope_message_stream(
290302 json_str = json .dumps (element .get ("input" ))
291303 data_delta_content = DataContent (
292304 index = index ,
293- data = FunctionCall (
305+ data = fc_cls (
294306 call_id = element .get ("id" ),
295307 name = element .get ("name" ),
296308 arguments = json_str ,
309+ ** fc_kwargs ,
297310 ).model_dump (),
298311 delta = True ,
299312 )
@@ -316,16 +329,17 @@ async def adapt_agentscope_message_stream(
316329 else :
317330 # Build a new tool call message
318331 plugin_call_message = Message (
319- type = MessageType . PLUGIN_CALL ,
332+ type = msg_type ,
320333 role = "assistant" ,
321334 )
322335
323336 data_delta_content = DataContent (
324337 index = index ,
325- data = FunctionCall (
338+ data = fc_cls (
326339 call_id = element .get ("id" ),
327340 name = element .get ("name" ),
328341 arguments = "" ,
342+ ** fc_kwargs ,
329343 ).model_dump (),
330344 delta = True ,
331345 )
@@ -348,20 +362,39 @@ async def adapt_agentscope_message_stream(
348362 ] = plugin_call_message
349363
350364 elif element .get ("type" ) == "tool_result" : # Tool result
365+ call_id = element .get ("id" )
366+
367+ plugin_call_message = tool_use_messages_dict .get (
368+ call_id ,
369+ )
370+ # Determine the output message type and class to use
371+ # for the tool result message based on the type of
372+ # the original tool call message.
373+ msg_type = MessageType .PLUGIN_CALL_OUTPUT
374+ fc_cls = FunctionCallOutput
375+
376+ if plugin_call_message :
377+ if (
378+ plugin_call_message .type
379+ == MessageType .MCP_TOOL_CALL
380+ ):
381+ msg_type = MessageType .MCP_TOOL_CALL_OUTPUT
382+ fc_cls = McpCallOutput
383+
351384 json_str = json .dumps (
352385 element .get ("output" ),
353386 ensure_ascii = False ,
354387 )
355388 data_delta_content = DataContent (
356389 index = index ,
357- data = FunctionCallOutput (
390+ data = fc_cls (
358391 call_id = element .get ("id" ),
359392 name = element .get ("name" ),
360393 output = json_str ,
361394 ).model_dump (),
362395 )
363396 plugin_output_message = Message (
364- type = MessageType . PLUGIN_CALL_OUTPUT ,
397+ type = msg_type ,
365398 role = "tool" ,
366399 content = [data_delta_content ],
367400 )
0 commit comments