A Python library for running agentic applications as A2A Servers, following the Agent2Agent (A2A) Protocol.
- 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)
- Python 3.10+
uv(recommended) orpip
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.
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.
-
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.
You can find a variety of more detailed examples in the a2a-samples repository:
Contributions are welcome! Please see the CONTRIBUTING.md file for guidelines on how to get involved.
This project is licensed under the Apache 2.0 License. See the LICENSE file for more details.