GitHub - NeelaOrg/a2a-python-aws: Official Python SDK for the Agent2Agent (A2A) Protocol

License PyPI version PyPI - Python Version PyPI - Downloads Python Unit Tests Ask DeepWiki


✨ Features

  • A2A Protocol Compliant: Build agentic applications that adhere to the Agent2Agent (A2A) Protocol.
  • Extensible: Easily add support for different communication protocols and database backends.
  • Asynchronous: Built on modern async Python for high performance.
  • Lambda-native: Ships with an AWS Lambda JSON-RPC runtime (including streaming SSE) so you can deploy agents without an HTTP framework.
  • Optional Integrations: Includes optional support for:

🚀 Getting Started

Prerequisites

  • Python 3.10+
  • uv (recommended) or pip

🔧 Installation

Install the core SDK and any desired extras using your preferred package manager.

Feature uv Command pip Command
Core SDK uv add a2a-sdk pip install a2a-sdk
All Extras uv add "a2a-sdk[all]" pip install "a2a-sdk[all]"
gRPC Support uv add "a2a-sdk[grpc]" pip install "a2a-sdk[grpc]"
OpenTelemetry Tracing uv add "a2a-sdk[telemetry]" pip install "a2a-sdk[telemetry]"
Encryption uv add "a2a-sdk[encryption]" pip install "a2a-sdk[encryption]"
Database Drivers
PostgreSQL uv add "a2a-sdk[postgresql]" pip install "a2a-sdk[postgresql]"
MySQL uv add "a2a-sdk[mysql]" pip install "a2a-sdk[mysql]"
SQLite uv add "a2a-sdk[sqlite]" pip install "a2a-sdk[sqlite]"
All SQL Drivers uv add "a2a-sdk[sql]" pip install "a2a-sdk[sql]"

AWS Lambda support is part of the core SDK—no extra installation step required.

🧱 Deploying on AWS Lambda

Use A2ALambdaApplication to run the JSON-RPC server directly inside AWS Lambda. The adapter shares the same transport-neutral processor as the rest of the SDK, so existing handlers keep working; you simply wire the Lambda event to the processor and optionally stream SSE frames via the Lambda response streaming API.

import asyncio

from a2a.server.apps.jsonrpc import A2ALambdaApplication
from my_project.handlers import AgentRequestHandler, agent_card

lambda_app = A2ALambdaApplication(agent_card=agent_card, http_handler=AgentRequestHandler())


async def _async_handler(event, context, response_stream=None):
    result = await lambda_app.handle_event(
        event, context, response_stream=response_stream
    )
    if result is not None:
        return result
    # Streaming responses return None because response_stream was used.
    return {'statusCode': 200, 'body': '', 'headers': {}, 'isBase64Encoded': False}


def handler(event, context, response_stream=None):
    return asyncio.run(
        _async_handler(event, context, response_stream=response_stream)
    )

For Server-Sent Events, enable Lambda response streaming in your function URL or API Gateway integration and pass the provided response_stream parameter to handle_event. The adapter writes text/event-stream chunks for message/stream and tasks/resubscribe so clients receive tokens as soon as they are produced.

Examples

Helloworld Example

  1. Run Remote Agent

    git clone https://github.com/a2aproject/a2a-samples.git
    cd a2a-samples/samples/python/agents/helloworld
    uv run .
  2. In another terminal, run the client

    cd a2a-samples/samples/python/agents/helloworld
    uv run test_client.py
  3. You can validate your agent using the agent inspector. Follow the instructions at the a2a-inspector repo.


🌐 More Examples

You can find a variety of more detailed examples in the a2a-samples repository:


🤝 Contributing

Contributions are welcome! Please see the CONTRIBUTING.md file for guidelines on how to get involved.


📄 License

This project is licensed under the Apache 2.0 License. See the LICENSE file for more details.