Files
agent-framework/python/samples/04-hosting/a2a/README.md
Giles Odigwe 5affc9c333 Python: Reorganize A2A samples and use package A2AExecutor (#6165)
* Reorganize A2A samples: client demos in 02-agents, use package A2AExecutor

- Move client samples (agent_with_a2a, a2a_agent_as_function_tools) to samples/02-agents/a2a/
- Add new concept samples: polling, stream reconnection, protocol selection
- Replace sample agent_executor.py with package-level A2AExecutor (stream=True)
- Update 04-hosting/a2a to focus on server-side, point to 02-agents for clients
- Add README.md for the new 02-agents/a2a/ sample collection

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix streaming artifact coalescing and address PR review feedback

A2AExecutor fix:
- Generate a stable artifact_id per stream in _run_stream so all streaming
  chunks share the same ID, enabling proper append=True coalescing per the
  A2A spec (TaskArtifactUpdateEvent with same artifactId).
- Previously, item.message_id was None for OpenAI/Foundry streaming updates,
  causing the SDK to generate a new random UUID per token (100+ separate
  artifacts instead of 1 appended artifact).

Sample improvements:
- Replace join workaround with response.text now that coalescing works
- Add background=True to stream reconnection resume call (required for
  continuation token emission on in-progress tasks)
- Fix type ignore specificity in polling sample

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-01 07:09:11 +00:00

2.5 KiB

A2A Server Hosting Examples

This sample demonstrates how to host Agent Framework agents as A2A-compliant servers using the A2A (Agent2Agent) protocol.

Looking for client samples? See samples/02-agents/a2a/ for consuming remote A2A agents.

Server Samples

Run this file To...
a2a_server.py Host an Agent Framework agent as an A2A-compliant server (multi-agent).
agent_framework_to_a2a.py Minimal example: expose a single agent as an A2A server.

Supporting Modules

File Description
agent_definitions.py Agent and AgentCard factory definitions for invoice, policy, and logistics agents.
invoice_data.py Mock invoice data and tool functions for the invoice agent.
a2a_server.http REST Client requests for testing the server directly from VS Code.

Environment Variables

Required (Server)

  • FOUNDRY_PROJECT_ENDPOINT — Your Azure AI Foundry project endpoint
  • FOUNDRY_MODEL — Model deployment name (e.g. gpt-4o)

Quick Start

All commands below should be run from this directory:

cd python/samples/04-hosting/a2a

0. Install Dependencies

Copy .env.example to .env and fill in your values:

copy .env.example .env

Option A — pip (standard):

python -m venv .venv
.venv\Scripts\Activate.ps1      # Windows
# source .venv/bin/activate     # macOS / Linux
pip install -r requirements.txt

Option B — uv:

uv run python a2a_server.py --agent-type policy

1. Start the A2A Server

Note (Option A — pip users): Replace uv run python with python in all uv run commands below. uv is not required once the virtual environment is activated.

Pick an agent type and start the server (each in its own terminal):

uv run python a2a_server.py --agent-type invoice --port 5000
uv run python a2a_server.py --agent-type policy --port 5001
uv run python a2a_server.py --agent-type logistics --port 5002

You can run one agent or all three — each listens on its own port.

2. Run a Client

Once a server is running, use any of the client samples in samples/02-agents/a2a/:

cd python/samples/02-agents/a2a
$env:A2A_AGENT_HOST = "http://localhost:5001/"
uv run python agent_with_a2a.py