diff --git a/src/avalan/server/routers/mcp.py b/src/avalan/server/routers/mcp.py index d64fd464..61e9f439 100644 --- a/src/avalan/server/routers/mcp.py +++ b/src/avalan/server/routers/mcp.py @@ -1054,12 +1054,14 @@ def _tool_call_event_item(event: Event) -> dict[str, JSONValue] | None: } if isinstance(event.payload, list) and event.payload: call = event.payload[0] + elif isinstance(event.payload, dict): + calls = event.payload.get("calls") + if isinstance(calls, list) and calls: + call = calls[0] + else: + call = event.payload.get("call") else: - call = ( - event.payload.get("call") - if isinstance(event.payload, dict) - else None - ) + call = None if call is None: return None return { diff --git a/tests/server/mcp_router_test.py b/tests/server/mcp_router_test.py index e03b45df..e919161d 100644 --- a/tests/server/mcp_router_test.py +++ b/tests/server/mcp_router_test.py @@ -337,6 +337,13 @@ def test_tool_call_event_item_variants(self) -> None: dict_item = mcp_router._tool_call_event_item(dict_event) self.assertEqual(dict_item["name"], "run") + dict_calls_event = Event( + type=EventType.TOOL_PROCESS, + payload={"calls": [call]}, + ) + dict_calls_item = mcp_router._tool_call_event_item(dict_calls_event) + self.assertEqual(dict_calls_item["id"], "c1") + none_event = Event(type=EventType.TOOL_PROCESS, payload=None) self.assertIsNone(mcp_router._tool_call_event_item(none_event))