✨ 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:
- gRPC
- OpenTelemetry for tracing
- SQL databases (PostgreSQL, MySQL, SQLite)
🚀 Getting Started
Prerequisites
- Python 3.10+
uv(recommended) orpip
🔧 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
-
Run Remote Agent
git clone https://github.com/a2aproject/a2a-samples.git cd a2a-samples/samples/python/agents/helloworld uv run .
-
In another terminal, run the client
cd a2a-samples/samples/python/agents/helloworld uv run test_client.py -
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.