
Hello all,
I’m working on a multi-agent setup with two standalone agents (Agent A and Agent B). I’ve successfully enabled the "Inputs" section in the Agent-to-Agent connection, but I'm struggling to get the data to actually "land" in Agent B.
My Progress So Far:
In Agent B (the receiver), I created a Global Variable and enabled "External sources can set value." This successfully "unlocked" the grayed-out Inputs section in Agent A’s overview.
In Agent A, I mapped a specific value to that input and added the "Redirect to Agent B" node in a topic.
The Issue:
Even though the connection is mapped, when Agent A calls Agent B, the value appears to be lost or empty on the receiving side. Agent B triggers, but it doesn't seem to "inherit" the variable value passed from Agent A.
My Questions:
Once a Global Variable is set via an external input, is there a specific Topic Trigger or System Variable in Agent B I should use to "grab" that incoming data?
Do I need to explicitly define this variable as a Topic Input on the specific topic being called, rather than just a Global Variable?
Is there a "Publishing" or "Sync" delay required between updating the input schema in Agent B and calling it from Agent A?
Has anyone successfully passed context between standalone agents and verified the value on the receiving side? Would love to know if I'm missing a "Receive" node or a specific Power Fx formula to initialize the handoff context.
Child agents vs. connected agents work differently
Child agents are fully owned by the main agent. Connected agents are fully independent and run standalone. They require configuration on both sides: the main agent calling the connected agent, and the connected agent itself.
Your "redirect to Agent B" node is a connected agent flow. The global variable approach alone does not cut it for this pattern.
What Agent B needs (the receiving side)
On the connected agent, you need to set up topics that handle input and output variables. Make the variable global, tick "External source can set the value" for inputs, and tick "External source can receive the value" for outputs. The connected agent typically has two relevant topics: one with an OnRecognizedIntent trigger for standalone use, and one with an OnRedirect trigger that fires when the agent is called by another agent.
That OnRedirect trigger is what you're missing. Agent B needs a dedicated topic with that trigger to receive and act on the incoming value. Without it, the value arrives but nothing is listening.
What Agent A needs (the calling side)
In the main agent, the connected agent is represented as a TaskDialog. The inputType and outputType properties must be defined inside the action section, not at the root level. This is different from child agents, where they sit at the root level.
This is a structural YAML issue that the UI does not expose clearly. If your mapping looks correct in the UI but the value is still lost, check the underlying YAML in the code editor. The inputType block needs to sit inside the action section of the TaskDialog node.
To answer your three questions :
A working pattern to verify against
In Agent B: create a topic, set the trigger to OnRedirect, and add a SetVariable or Message node that reads Global.YourVariableName. This confirms the value landed.
In Agent A: open the code editor on the redirect node and confirm the YAML places inputType inside action, like this:
action:
kind: InvokeConnectedAgentTaskAction
inputType:
properties:
YourVariableName:
displayName: YourVariableName
isRequired: true
type: String
Each output for the agent automatically has a topic variable created where the values from outputs are placed. So once the input lands correctly, Agent B topics reading that global variable should reflect it within the same session.
The Microsoft CAT team's detailed post on this is worth reading in full: https://microsoft.github.io/mcscatblog/posts/copilot-studio-child-connected-agents-inputs-outputs/