-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Description
When building an orchestrator-style ADK agent (an agent that delegates work to other ADK agents), there is currently no clear or supported way to use Frontend tools (exposed via useFrontendTool in CopilotKit) within that orchestration flow.
This makes it difficult to combine:
- Orchestrator agents (routing / delegation)
- ADK agents
- Frontend-only tools
in a single, clean architecture.
Background
From the documentation and examples, there are two common patterns:
-
ADK agents with tools
- Tools are attached on the backend (e.g.,
MCPToolset) - Works well with orchestrators
- Tools are attached on the backend (e.g.,
-
Frontend tools
- Tools registered via
useFrontendTool - Used by CopilotKit at runtime
- Backend ADK agents connected to Orchestrator ADK agent are not aware of these tools
- Tools registered via
Both patterns work individually, but they don’t compose well together.
Current Behavior
- An individual ADK agent can use Frontend tools when they are registered via
useFrontendTool. - However, when using an orchestrator-style ADK agent that delegates to other ADK agents:
- The orchestrator can call child agents
- But those child agents cannot access Frontend tools
- Because Frontend tools only exist in the CopilotKit runtime, not in the ADK agent graph
As a result:
Orchestrator → ADK agent → Frontend tools
is not possible.
Expected / Desired Behavior
It would be helpful to have a supported way to achieve one of the following:
Option A – Delegation-Friendly Frontend Tools
Provide a mechanism where:
- An orchestrator delegates to another ADK agent
- That agent can still invoke Frontend tools
- Even though the tools are registered in the frontend runtime
Option B – Clear Guidance / Recommended Pattern
If this is intentionally unsupported, clear documentation explaining:
- Why frontend tools cannot be used with agents in orchestrators
- What the recommended alternative architecture is
Why This Matters
Frontend MCP tools are useful or required when:
- MCP servers are browser-only
- Authentication or context must live in the browser
- Tools are tightly coupled to UI/runtime state
At the same time, orchestrator agents are a core pattern for:
- Routing requests
- Multi-agent reasoning
- Structured task delegation
Right now, developers must choose one or the other.
Minimal Conceptual Example
- Orchestrator ADK agent
- Delegates tasks to other ADK agents
- Those ADK agents rely on MCP tools
- MCP tools are frontend-only (registered via
useFrontendTool)
Result:
- Direct usage works
- Orchestrated usage does not
Example Scenario
Consider the following setup:
- An orchestrator-style ADK agent
- Responsible only for routing and delegation
- Multiple ADK agents
- Each agent has its own instructions and behavior
- A single MCP server
- Exposed as a Frontend MCP
- Tools are registered using
useFrontendToolin CopilotKit - Tools are only available at runtime in the frontend
Conceptually:
User
↓
Orchestrator ADK Agent
↓
ADK Agent A / ADK Agent B
↓
Frontend MCP Tools (via CopilotKit)
What works
- When an individual ADK agent is used directly:
- Frontend MCP tools are registered via
useFrontendTool - The model can successfully call MCP tools
- Frontend MCP tools are registered via
What does not work
- When the orchestrator ADK agent is used:
- The orchestrator delegates to another ADK agent
- That ADK agent cannot access Frontend MCP tools
- Because the tools only exist in the CopilotKit runtime and are not visible to the orchestrator flow
As a result:
The same ADK agent behaves differently depending on whether it is called directly or via an orchestrator.
Closing
This is not necessarily a bug, but a missing integration point that becomes apparent when building real-world, multi-agent applications that mix ADK orchestration with frontend MCP tooling.
Any guidance or recommended patterns would be greatly appreciated.
Thanks!