Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/marvin/agents/team.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import pydantic_ai
from pydantic_ai.agent import AgentRunResult
from pydantic_ai.mcp import MCPServer

from marvin.agents.actor import Actor
from marvin.agents.names import TEAM_NAMES
Expand Down Expand Up @@ -74,10 +75,12 @@ async def get_agentlet(
self,
tools: list[Callable[..., Any]],
end_turn_tools: list["EndTurn"],
active_mcp_servers: list[MCPServer] | None = None,
) -> pydantic_ai.Agent[Any, Any]:
return await self.active_member.get_agentlet(
tools=self.get_tools() + tools,
end_turn_tools=self.get_end_turn_tools() + end_turn_tools,
active_mcp_servers=active_mcp_servers,
)

def friendly_name(self, verbose: bool = True) -> str:
Expand Down
44 changes: 44 additions & 0 deletions tests/agents/test_team_mcp_forward.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from unittest.mock import AsyncMock, MagicMock

import pytest
from pydantic_ai.mcp import MCPServer

from marvin.agents.agent import Agent
from marvin.agents.team import Team


class DummyAgent(Agent):
from typing import Callable, Any

from marvin.agents.agent import Agent
from marvin.agents.team import Team


class DummyAgent(Agent):
async def get_agentlet(
self,
tools: list[Callable[..., Any]],
end_turn_tools: list["EndTurn"],
active_mcp_servers: list[MCPServer] | None = None,
):
# Assert that the forwarded arg is passed through
self._seen_active_mcp_servers = active_mcp_servers
# Return a minimal stub that satisfies Orchestrator usage patterns if needed
stub = MagicMock()
stub.iter = AsyncMock()
return stub


@pytest.mark.asyncio
async def test_team_forwards_active_mcp_servers():
mock_server = MagicMock(spec=MCPServer)

a1 = DummyAgent(name="A1")
a2 = DummyAgent(name="A2")
team = Team(members=[a1, a2])

await team.get_agentlet(tools=[], end_turn_tools=[], active_mcp_servers=[mock_server])

assert getattr(team.active_member, "_seen_active_mcp_servers", None) == [mock_server]