Skip to content

Commit 809d05a

Browse files
committed
support MCP tool
1 parent 2f2c49b commit 809d05a

File tree

2 files changed

+42
-7
lines changed

2 files changed

+42
-7
lines changed

src/agentscope_runtime/adapters/agentscope/stream.py

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
ImageContent,
1515
AudioContent,
1616
DataContent,
17+
McpCall,
18+
McpCallOutput,
1719
FunctionCall,
1820
FunctionCallOutput,
1921
MessageType,
@@ -251,6 +253,17 @@ async def adapt_agentscope_message_stream(
251253
elif element.get("type") == "tool_use": # Tool use
252254
call_id = element.get("id")
253255

256+
if element.get("tool_type", "plugin") == "mcp":
257+
msg_type = MessageType.MCP_TOOL_CALL
258+
fc_cls = McpCall
259+
fc_kwargs = {
260+
"server_label": element.get("server_label"),
261+
}
262+
else:
263+
msg_type = MessageType.PLUGIN_CALL
264+
fc_cls = FunctionCall
265+
fc_kwargs = {}
266+
254267
if last:
255268
plugin_call_message = tool_use_messages_dict.get(
256269
call_id,
@@ -260,16 +273,17 @@ async def adapt_agentscope_message_stream(
260273
# Only one tool use message yields, we fake
261274
# Build a new tool call message
262275
plugin_call_message = Message(
263-
type=MessageType.PLUGIN_CALL,
276+
type=msg_type,
264277
role="assistant",
265278
)
266279

267280
data_delta_content = DataContent(
268281
index=index,
269-
data=FunctionCall(
282+
data=fc_cls(
270283
call_id=element.get("id"),
271284
name=element.get("name"),
272285
arguments="",
286+
**fc_kwargs,
273287
).model_dump(),
274288
delta=True,
275289
)
@@ -290,10 +304,11 @@ async def adapt_agentscope_message_stream(
290304
json_str = json.dumps(element.get("input"))
291305
data_delta_content = DataContent(
292306
index=index,
293-
data=FunctionCall(
307+
data=fc_cls(
294308
call_id=element.get("id"),
295309
name=element.get("name"),
296310
arguments=json_str,
311+
**fc_kwargs,
297312
).model_dump(),
298313
delta=True,
299314
)
@@ -316,16 +331,17 @@ async def adapt_agentscope_message_stream(
316331
else:
317332
# Build a new tool call message
318333
plugin_call_message = Message(
319-
type=MessageType.PLUGIN_CALL,
334+
type=msg_type,
320335
role="assistant",
321336
)
322337

323338
data_delta_content = DataContent(
324339
index=index,
325-
data=FunctionCall(
340+
data=fc_cls(
326341
call_id=element.get("id"),
327342
name=element.get("name"),
328343
arguments="",
344+
**fc_kwargs,
329345
).model_dump(),
330346
delta=True,
331347
)
@@ -348,20 +364,36 @@ async def adapt_agentscope_message_stream(
348364
] = plugin_call_message
349365

350366
elif element.get("type") == "tool_result": # Tool result
367+
call_id = element.get("call_id")
368+
369+
plugin_call_message = tool_use_messages_dict.get(
370+
call_id,
371+
)
372+
# Check if the tool type
373+
msg_type = MessageType.PLUGIN_CALL_OUTPUT
374+
fc_cls = FunctionCallOutput
375+
if plugin_call_message:
376+
if (
377+
plugin_call_message.type
378+
== MessageType.MCP_TOOL_CALL
379+
):
380+
msg_type = MessageType.MCP_TOOL_CALL_OUTPUT
381+
fc_cls = McpCallOutput
382+
351383
json_str = json.dumps(
352384
element.get("output"),
353385
ensure_ascii=False,
354386
)
355387
data_delta_content = DataContent(
356388
index=index,
357-
data=FunctionCallOutput(
389+
data=fc_cls(
358390
call_id=element.get("id"),
359391
name=element.get("name"),
360392
output=json_str,
361393
).model_dump(),
362394
)
363395
plugin_output_message = Message(
364-
type=MessageType.PLUGIN_CALL_OUTPUT,
396+
type=msg_type,
365397
role="tool",
366398
content=[data_delta_content],
367399
)

src/agentscope_runtime/engine/schemas/agent_schemas.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,9 @@ class McpCallOutput(BaseModel):
178178
call_id: str
179179
"""The unique ID of the tool call."""
180180

181+
name: Optional[str] = None
182+
"""The name of the tool call."""
183+
181184
output: str
182185
"""The output from the tool call."""
183186

0 commit comments

Comments
 (0)