Skip to content

[FEATURE] Agent to Agent Communication (A2A) #24

@ryanycoleman

Description

@ryanycoleman
Member

Problem Statement

Strands builders are increasingly asking for enhanced agent interoperability capabilities that enable seamless communication between agents across different systems and deployments.

  • Standardized Agent Communication: Builders want native SDK support for agents to communicate with other agents using industry-standard protocols without custom integration work
  • Agent Discovery and Service Registry: The community needs automatic capability discovery so agents can find and connect to other agents based on their skills and availability
  • Production-Ready Inter-Agent Protocols: Developers want enterprise-grade communication protocols supporting authentication, streaming, task lifecycle management, and distributed coordination
  • Protocol-Agnostic Architecture: Requests for agents that can participate in multiple communication standards simultaneously without being locked into proprietary systems
  • Seamless Multi-Agent Integration: Standardized agents should work within existing Strands multi-agent patterns (swarms, graphs, handoffs, agents-as-tools)

Proposed Solution

In response to builder requests, we propose introducing comprehensive Agent-to-Agent (A2A) protocol integration through Google's Agent-to-Agent Protocol, enabling Strands agents to communicate with other using JSON-RPC 2.0 over HTTP and the A2A protocol.

1. A2A Agent Wrapper

The A2AAgent class adapts existing Strands agents to the A2A protocol without modifying existing agent code.

from strands import Agent
from strands.multiagent.a2a import A2AAgent

# Existing Strands agent code unchanged
strands_agent = Agent(tools=[...])

# A2A capabilities added to the agent
a2a_agent = A2AAgent(strands_agent)

# Easily serve Strands agents over the A2A protocol
a2a_agent.serve()

# Or use with any ASGI server
a2a_agent.to_asgi()

2. Agent Discovery and Agent Cards

The A2AAgent class automatically generates Agent Cards from Strands Agent metadata, providing standardized capability discovery. Agent Cards include:

  • Basic Metadata: Name, description, version, and provider information derived from Agent configuration
  • Skills Discovery: Automatically generated from available tools, enabling precise capability matching
  • Communication Capabilities: Streaming support, push notifications, and state transition tracking
  • Optional Overwrites and Augmentation: Agent builders can add to or overwrite generated agent metadata, skills, etc.
agent = Agent(
    name="research_specialist",
    system_prompt="You are an expert researcher with web access",
    tools=[http_request, memory, file_write]
)

# Agent Card automatically generated from Strands Agent with skills derived from tools
a2a_agent = A2AAgent(agent)

3. Built-in Server and ASGI Integration

The A2AAgent class includes a built-in FastAPI and uvicorn server that hosts both the Agent Card at /.well-known/agent.json and JSON-RPC 2.0 endpoints. Features include:

  • Standardized Discovery: Agent Cards accessible via HTTP GET requests
  • JSON-RPC API: Complete A2A protocol implementation with method routing
  • ASGI Compatibility: to_asgi() function for custom routes and deployment

4. Communication Patterns

The A2A implementation supports three distinct communication patterns:

Request/Response (Polling)

  • Traditional synchronous communication
  • Immediate response for quick tasks and status queries
  • Polling for longer running tasks

Streaming (Server-Sent Events)

  • Real-time updates during task execution using SSE
  • Progress monitoring and intermediate result streaming

Push Notifications (Long-Running Tasks)

  • Webhook-based notifications for longer running tasks
  • Asynchronous task management with callback mechanisms

5. Tasks, Messages, and Artifacts Integration

Complete integration with A2A's core data structures:

  • Tasks: Full lifecycle management (submitted → working → completed/failed/canceled/input-required) with state persistence
  • Messages: Rich messaging system supporting TextPart, FilePart, and DataPart for comprehensive agent communication
  • Artifacts: Structured data exchange enabling agents to share complex outputs and generated content

6. Multi-Agent Pattern Integration

A2A agents can be used directly in multi-agent patterns provided by Strands (#214):

a2a_analyzer_remote = A2AAgent(url="https://my-agent-endpoint.com/.well-known/agent.json")
a2a_analyzer_local = A2AAgent(url="http://localhost:8000/.well-known/agent.json") 
strands_analyzer = Agent(system_prompt="Perform deep analysis on the given context.")

# Agents-as-Tools
orchestrator = Agent(tools=[a2a_analyzer_remote, a2a_analyzer_local, strands_analyzer])

# Direct usage in Swarms
swarm = Swarm([a2a_analyzer_remote, a2a_analyzer_local, strands_analyzer])

# Graph workflows  
builder = GraphBuilder()
builder.add_node(a2a_analyzer_remote, "a2a_analyzer_remote")
builder.add_node(a2a_analyzer_local, "a2a_analyzer_local")
builder.add_node(strands_analyzer, "strands_analyzer")
graph = builder.build()

7. Authentication and Authorization

A2A has built-in authentication and authorization concepts. A2A clients send authentication data when communicating with agents, handled by the Strands A2AAgent server.

Additional Context

Please share your feedback and use cases to help shape A2A integration in Strands Agents.

Sub-issues

Sub-issues

7 of 7 Issues completed

Activity

mudrantar

mudrantar commented on May 19, 2025

@mudrantar
D1EE7P2U9

D1EE7P2U9 commented on May 19, 2025

@D1EE7P2U9
karan-5ingh

karan-5ingh commented on May 19, 2025

@karan-5ingh
added theissue type on May 27, 2025
self-assigned this
on May 30, 2025
awsarron

awsarron commented on Jun 10, 2025

@awsarron
Member

Providing an update here: the team is now taking a holistic look in to multi-agent orchestration, including A2A, and will have details soon.

moved this to We're Working On It in Strands Agents Roadmapon Jun 12, 2025
ryanycoleman

ryanycoleman commented on Jun 13, 2025

@ryanycoleman
MemberAuthor

Initial work to integrate A2A natively is taking shape here: #218

We also have our plans for multi-agent orchestration detailed in #214 for feedback ahead of PR

Have a look!

changed the title [-][FEATURE] Agent to Agent Communication[/-] [+][FEATURE] Agent to Agent Communication (A2A)[/+] on Jun 15, 2025
awsarron

awsarron commented on Jun 15, 2025

@awsarron
Member

Updated the description on this issue with our first proposal for Strands A2A integration.

removed their assignment
on Jun 15, 2025
moved this from We're Working On It to Coming Soon in Strands Agents Roadmapon Jul 15, 2025
moved this from Coming Soon to Just Shipped in Strands Agents Roadmapon Jul 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Projects

Status

Just Shipped

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @ryanycoleman@zastrowm@jer96@mudrantar@D1EE7P2U9

      Issue actions

        [FEATURE] Agent to Agent Communication (A2A) · Issue #24 · strands-agents/sdk-python