You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: _posts/2025-12-02-copilot-studio-a2a-multi-agents.md
+23-22Lines changed: 23 additions & 22 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -20,13 +20,14 @@ About two weeks ago at Microsoft Ignite, Copilot Studio gained several new ways
20
20
- Connect Microsoft 365 agents via SDK
21
21
- Connect any agent that speaks the new A2A (Agent-to-Agent) protocol
22
22
23
-
In this quickstart we’ll focus on the last one: **connecting an A2A-enabled agent to Copilot Studio**.
23
+
In this quickstart we'll focus on the last one: **connecting an A2A-enabled agent to Copilot Studio**.
24
24
25
-
To keep things concrete, we’ll use as connected agent a sample that I built with the [Microsoft Agent Framework](https://learn.microsoft.com/en-us/agent-framework/overview/agent-framework-overview) that exposes A2A. Don't be scared, Agent Framework is not a prerequisite for A2A, but simply a choice that I made in order to have something that exposes A2A ready to be plugged in Copilot Studio. You can use any A2A enabled agent that you already have.
25
+
To keep things concrete, we'll use as connected agent a sample that I built with the [Microsoft Agent Framework](https://learn.microsoft.com/en-us/agent-framework/overview/agent-framework-overview) that exposes A2A. Don't be scared, Agent Framework is not a prerequisite for A2A, but simply a choice that I made in order to have something that exposes A2A ready to be plugged in Copilot Studio. You can use any A2A enabled agent that you already have.
26
26
27
-
If you don't have any A2A agent, you can clone my GitHub repo for the sample agent: [Microsoft Copilot Studio A2A Samples | GitHub](https://github.com/microsoft/CopilotStudioSamples/tree/main/A2ASamples/Simple-A2A-Sample)
27
+
If you don't have any A2A agent, you can clone my GitHub repo for the sample agent.
28
+
[Microsoft Copilot Studio A2A Samples | GitHub](https://github.com/microsoft/CopilotStudioSamples/tree/main/A2ASamples/Simple-A2A-Sample)
28
29
29
-
We’ll go end-to-end:
30
+
We'll go end-to-end:
30
31
31
32
1. Configure and run the sample A2A agent
32
33
2. Expose it via a public endpoint (Dev Tunnels or similar)
@@ -53,22 +54,22 @@ Compared to traditional HTTP connectors or tools, A2A is:
53
54
- More interoperable: different agent frameworks can participate as long as they implement A2A
54
55
- Richer in context: the payload carries extra metadata your agent can use for routing, personalization, logging, and more
55
56
56
-
In other words, instead of “calling an API”, you’re “delegating a task to another agent”.
57
+
In other words, instead of "calling an API", you're "delegating a task to another agent".
57
58
58
59
---
59
60
60
-
## What you’ll build
61
+
## What you'll build
61
62
62
-
By the end of this quickstart you’ll have:
63
+
By the end of this quickstart you'll have:
63
64
- A simple A2A agent running locally via the Microsoft Agent Framework (or you can use your already made A2A agent if you have one)
64
65
- Exposed it over HTTPS using Dev Tunnels (or any other hosting you like)
65
66
- Wired it into a Copilot Studio agent as an A2A connection
66
67
- Successfully invoked from Copilot Studio with a natural language task:
67
-
> “Which plant needs more light: a tomato plant or a strawberry plant?”
68
+
> "Which plant needs more light: a tomato plant or a strawberry plant?"
68
69
69
-
And you’ll see:
70
+
And you'll see:
70
71
- A successful A2A connection from Copilot Studio
71
-
- The agent’s activity log confirming it received and processed the task
72
+
- The agent's activity log confirming it received and processed the task
72
73
- The full A2A payload, including the extra metadata Copilot Studio sends
73
74
74
75
---
@@ -78,7 +79,7 @@ And you’ll see:
78
79
> If you already have an agent exposing A2A you can skip this section
79
80
{: .prompt-tip }
80
81
81
-
If you want to copy my A2A agent, you’ll need:
82
+
If you want to copy my A2A agent, you'll need:
82
83
- An Azure OpenAI resource with:
83
84
- An endpoint URL
84
85
- A deployed model (deployment name)
@@ -165,24 +166,24 @@ Dev Tunnels will give you a public URL, e.g.:
165
166
166
167
-`https://xyz123-9000.dev.tunnels.ms/`
167
168
168
-
This is the URL you’ll use in Copilot Studio as the A2A endpoint.
169
+
This is the URL you'll use in Copilot Studio as the A2A endpoint.
169
170
170
-
> For real-world scenarios, you’ll likely deploy this agent as a web app or container with proper auth. Dev Tunnels are great for demos and development.
171
+
> For real-world scenarios, you'll likely deploy this agent as a web app or container with proper auth. Dev Tunnels are great for demos and development.
171
172
{: .prompt-info }
172
173
173
174
---
174
175
175
176
## Step 3 – Create the A2A connection in Copilot Studio
176
177
177
-
Now that your A2A agent is reachable, let’s plug it into a Copilot Studio agent.
178
+
Now that your A2A agent is reachable, let's plug it into a Copilot Studio agent.
178
179
179
180
1. Open Copilot Studio and select the agent you want to extend.
180
181
2. Go to the Agents section, where you manage connected agents for the agent
181
182
3. Choose to add a new **A2A agent**.
182
183
4. Fill in the details:
183
184
- Name: `Simple A2A Agent` (or similar)
184
185
- Endpoint URL: the Dev Tunnel URL, e.g. `https://xyz123-5073.dev.tunnels.ms/`
185
-
- Auth: for the sample, you can typically leave it as “none” (the repo doesn’t enforce auth by default).
186
+
- Auth: for the sample, you can typically leave it as "none" (the repo doesn't enforce auth by default).
186
187
5. Save and continue
187
188
188
189
If everything is configured correctly, Copilot Studio should report a **successful connection** to the A2A agent.
@@ -210,18 +211,18 @@ On the A2A agent side, you should see logs confirming:
210
211
- The prompt contained the plant question
211
212
- The agent produced a response, which was then returned to Copilot Studio
212
213
213
-
{: .shadow w="972" h="589" }
214
-
_The sample A2A agent log showing it was invoked with the “Which plant needs more light…?” task and responded successfully._
214
+
{: .shadow w="972" h="589" }
215
+
_The sample A2A agent log showing it was invoked with the "Which plant needs more light…?" task and responded successfully._
215
216
216
-
If you see this, you’ve completed the basic loop: **Copilot Studio → A2A protocol → external agent → back to Copilot Studio**.
217
+
If you see this, you've completed the basic loop: **Copilot Studio → A2A protocol → external agent → back to Copilot Studio**.
217
218
218
219
---
219
220
220
221
## Step 5 – Inspect the A2A payload and metadata
221
222
222
223
One cool advantages of using the A2A protocol is that Copilot Studio sends a **rich payload** to your agent.
223
224
224
-
In the sample, if you inspect the request body the agent receives, you’ll see more than just the user question. You’ll typically see metadata such as the complete chat history as well as the locale used, etc.
225
+
In the sample, if you inspect the request body the agent receives, you'll see more than just the user question. You'll typically see metadata such as the complete chat history as well as the locale used, etc.
225
226
226
227
The sample log output will show the full JSON payload as it arrives at the A2A endpoint.
227
228
@@ -239,7 +240,7 @@ A2A is especially useful when you already have agents built on another framework
239
240
You would still use:
240
241
- Traditional connectors / HTTP tools for plain APIs and services
241
242
- MCP servers for tool/resource-style integrations in the MCP ecosystem
242
-
- Activity Protocol when what you’re calling is itself an agent built with Microsoft Technology (such as Microsoft 365 Agents SDK)
243
+
- Activity Protocol when what you're calling is itself an agent built with Microsoft Technology (such as Microsoft 365 Agents SDK)
243
244
244
245
All three patterns can coexist in the same Copilot Studio agent.
245
246
@@ -260,6 +261,6 @@ Once you have this basic A2A connection working, you can:
260
261
261
262
- Copilot Studio can now connect to external agents via the **A2A protocol**, alongside Fabric agents, Foundry agents and Microsoft 365 SDK agents.
262
263
- With the **Simple A2A Agent** sample, you can quickly see the full round-trip: Copilot Studio → A2A → agent → Copilot Studio.
263
-
- The A2A payload includes **rich chat history**, not just the last user’s message, which you can exploit for routing, logging, and governance.
264
+
- The A2A payload includes **rich chat history**, not just the last user's message, which you can exploit for routing, logging, and governance.
264
265
265
-
If you’re investing in agents beyond Copilot Studio, A2A gives you a clean way to bring them in and orchestrate them together.
266
+
If you're investing in agents beyond Copilot Studio, A2A gives you a clean way to bring them in and orchestrate them together.
0 commit comments