Files
agent-framework/python/samples/04-hosting/a2a
T
Giles Odigwe a5eacbbe65 Python: Add Python A2A agent-as-function-tools sample (#4889)
* Add Python A2A agent-as-function-tools sample

Port of the .NET A2AAgent_AsFunctionTools sample to Python.
Resolves a remote A2A agent card, converts each skill to a
FunctionTool via as_tool(), and registers them with a host agent
using AzureOpenAIResponsesClient.

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

* Sanitize A2A skill names before passing to as_tool()

as_tool() only auto-sanitizes when name is omitted. Since we pass
skill.name explicitly, we need to strip special characters ourselves.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
a5eacbbe65 · 2026-03-31 20:00:40 +00:00
History
..

A2A Agent Examples

This sample demonstrates how to host and consume agents using the A2A (Agent2Agent) protocol with the agent_framework package. There are three runnable entry points:

Run this file To...
a2a_server.py Host an Agent Framework agent as an A2A-compliant server.
agent_with_a2a.py Connect to an A2A server and send requests (non-streaming and streaming).
a2a_agent_as_function_tools.py Convert A2A agent skills into function tools for a host agent.

The remaining files are supporting modules used by the server:

File Description
agent_definitions.py Agent and AgentCard factory definitions for invoice, policy, and logistics agents.
agent_executor.py Bridges the a2a-sdk AgentExecutor interface to Agent Framework 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

Make sure to set the following environment variables before running the examples:

Required (Server)

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

Required (Client)

  • A2A_AGENT_HOST — URL of the A2A server (e.g. http://localhost:5001/)

Required (Function Tools Sample)

  • A2A_AGENT_HOST — URL of the A2A server (e.g. http://localhost:5000/)
  • AZURE_AI_PROJECT_ENDPOINT — Your Azure AI Foundry project endpoint
  • AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME — Model deployment name (e.g. gpt-4o)

Quick Start

All commands below should be run from this directory:

cd python/samples/04-hosting/a2a

1. Start the A2A Server

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 the A2A Client

In a separate terminal (from the same directory), point the client at a running server:

$env:A2A_AGENT_HOST = "http://localhost:5001/"
uv run python agent_with_a2a.py

3. Run the Function Tools Sample

This sample resolves the remote agent's skills and registers each one as a function tool on a host OpenAI-powered agent. The host agent then autonomously selects the right skill to handle the user's request.

$env:A2A_AGENT_HOST = "http://localhost:5000/"
uv run python a2a_agent_as_function_tools.py