Catalog PyPI
Back to packageRELEASE DETAILS

1.2.3

PyPI

a2a-sdk

A2A Python SDK

2a2aagentagent2agentprotocolsdk
Published19 Oct 2026
Direct dependencies20
Transitive dependenciesNot calculated

README

Version 1.2.3 documentation

A2A Python SDK

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

Ask Code Wiki
Agent2Agent Protocol Logo

A Python library for running agentic applications as A2A Servers, following the Agent2Agent (A2A) Protocol.


[!IMPORTANT] Upgrading the SDK from 0.3 to 1.0? See the v0.3 → v1.0 migration guide. For supported A2A spec versions, see Compatibility.

✨ 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.
  • Optional Integrations: Includes optional support for:

🧩 Compatibility

This SDK implements the A2A Protocol Specification 1.0, with compatibility mode for 0.3. See #742 for details on the compatibility scope.

Spec VersionTransportClientServer
1.0JSON-RPC✅✅
1.0HTTP+JSON/REST✅✅
1.0gRPC✅✅
0.3 (compat)JSON-RPC✅✅
0.3 (compat)HTTP+JSON/REST✅✅
0.3 (compat)gRPC✅✅

🚀 Getting Started

Prerequisites

  • Python 3.10+
  • uv (recommended) or pip

🔧 Installation

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

Featureuv Commandpip Command
Core SDKuv add a2a-sdkpip install a2a-sdk
All Extrasuv add "a2a-sdk[all]"pip install "a2a-sdk[all]"
HTTP Serveruv add "a2a-sdk[http-server]"pip install "a2a-sdk[http-server]"
FastAPI Integrationuv add "a2a-sdk[fastapi]"pip install "a2a-sdk[fastapi]"
gRPC Supportuv add "a2a-sdk[grpc]"pip install "a2a-sdk[grpc]"
OpenTelemetry Tracinguv add "a2a-sdk[telemetry]"pip install "a2a-sdk[telemetry]"
Encryptionuv add "a2a-sdk[encryption]"pip install "a2a-sdk[encryption]"
Database Drivers
PostgreSQLuv add "a2a-sdk[postgresql]"pip install "a2a-sdk[postgresql]"
MySQLuv add "a2a-sdk[mysql]"pip install "a2a-sdk[mysql]"
SQLiteuv add "a2a-sdk[sqlite]"pip install "a2a-sdk[sqlite]"
All SQL Driversuv add "a2a-sdk[sql]"pip install "a2a-sdk[sql]"

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.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 41

Native requirements
20 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
culsans
Environment
{
  "extras": "",
  "marker": "python_full_version < \"3.13\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
culsans>=0.11.0; python_full_version < "3.13"runtime
google-api-core
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
google-api-core>=1.26.0runtime
googleapis-common-protos
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
googleapis-common-protos>=1.70.0runtime
httpx
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
httpx>=0.28.1runtime
json-rpc
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
json-rpc>=1.15.0runtime
packaging
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
packaging>=24.0runtime
protobuf
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
protobuf>=5.29.5runtime
pydantic
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pydantic>=2.11.3runtime
alembic
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
alembic>=1.14.0; extra == "all"runtime
cryptography
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
cryptography>=43.0.0; extra == "all"runtime
fastapi
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
fastapi>=0.115.2; extra == "all"runtime
grpcio-reflection
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
grpcio-reflection>=1.7.0; extra == "all"runtime
grpcio-tools
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
grpcio-tools>=1.60; extra == "all"runtime
grpcio
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
grpcio>=1.60; extra == "all"runtime
opentelemetry-api
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
opentelemetry-api>=1.33.0; extra == "all"runtime
opentelemetry-sdk
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
opentelemetry-sdk>=1.33.0; extra == "all"runtime
pyjwt
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pyjwt>=2.0.0; extra == "all"runtime
sqlalchemy
Environment
{
  "extras": "aiomysql,asyncio",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[aiomysql,asyncio]>=2.0.0; extra == "all"runtime
sqlalchemy
Environment
{
  "extras": "aiosqlite,asyncio",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[aiosqlite,asyncio]>=2.0.0; extra == "all"runtime
sqlalchemy
Environment
{
  "extras": "asyncio,postgresql-asyncpg",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[asyncio,postgresql-asyncpg]>=2.0.0; extra == "all"runtime
sse-starlette
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sse-starlette; extra == "all"runtime
starlette
Environment
{
  "extras": "",
  "marker": "extra == \"all\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
starlette; extra == "all"runtime
alembic
Environment
{
  "extras": "",
  "marker": "extra == \"db-cli\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
alembic>=1.14.0; extra == "db-cli"runtime
cryptography
Environment
{
  "extras": "",
  "marker": "extra == \"encryption\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
cryptography>=43.0.0; extra == "encryption"runtime
fastapi
Environment
{
  "extras": "",
  "marker": "extra == \"fastapi\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
fastapi>=0.115.2; extra == "fastapi"runtime
sse-starlette
Environment
{
  "extras": "",
  "marker": "extra == \"fastapi\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sse-starlette; extra == "fastapi"runtime
starlette
Environment
{
  "extras": "",
  "marker": "extra == \"fastapi\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
starlette; extra == "fastapi"runtime
grpcio-reflection
Environment
{
  "extras": "",
  "marker": "extra == \"grpc\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
grpcio-reflection>=1.7.0; extra == "grpc"runtime
grpcio-tools
Environment
{
  "extras": "",
  "marker": "extra == \"grpc\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
grpcio-tools>=1.60; extra == "grpc"runtime
grpcio
Environment
{
  "extras": "",
  "marker": "extra == \"grpc\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
grpcio>=1.60; extra == "grpc"runtime
sse-starlette
Environment
{
  "extras": "",
  "marker": "extra == \"http-server\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sse-starlette; extra == "http-server"runtime
starlette
Environment
{
  "extras": "",
  "marker": "extra == \"http-server\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
starlette; extra == "http-server"runtime
sqlalchemy
Environment
{
  "extras": "aiomysql,asyncio",
  "marker": "extra == \"mysql\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[aiomysql,asyncio]>=2.0.0; extra == "mysql"runtime
sqlalchemy
Environment
{
  "extras": "asyncio,postgresql-asyncpg",
  "marker": "extra == \"postgresql\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[asyncio,postgresql-asyncpg]>=2.0.0; extra == "postgresql"runtime
pyjwt
Environment
{
  "extras": "",
  "marker": "extra == \"signing\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
pyjwt>=2.0.0; extra == "signing"runtime
sqlalchemy
Environment
{
  "extras": "aiomysql,asyncio",
  "marker": "extra == \"sql\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[aiomysql,asyncio]>=2.0.0; extra == "sql"runtime
sqlalchemy
Environment
{
  "extras": "aiosqlite,asyncio",
  "marker": "extra == \"sql\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[aiosqlite,asyncio]>=2.0.0; extra == "sql"runtime
sqlalchemy
Environment
{
  "extras": "asyncio,postgresql-asyncpg",
  "marker": "extra == \"sql\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[asyncio,postgresql-asyncpg]>=2.0.0; extra == "sql"runtime
sqlalchemy
Environment
{
  "extras": "aiosqlite,asyncio",
  "marker": "extra == \"sqlite\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
sqlalchemy[aiosqlite,asyncio]>=2.0.0; extra == "sqlite"runtime
opentelemetry-api
Environment
{
  "extras": "",
  "marker": "extra == \"telemetry\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
opentelemetry-api>=1.33.0; extra == "telemetry"runtime
opentelemetry-sdk
Environment
{
  "extras": "",
  "marker": "extra == \"telemetry\"",
  "requires_python": ">=3.10",
  "evaluation": "NOT_EVALUATED"
}
opentelemetry-sdk>=1.33.0; extra == "telemetry"runtime

Distribution files

2 collected
a2a_sdk-1.2.3-py3-none-any.whl

bdist_wheel · 271.82 KB · Python py3

Source file
a2a_sdk-1.2.3.tar.gz

sdist · 423.96 KB · Python source

Source file

Repository

PENDING
a2aproject/a2a-python

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 16:29 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:8be734bf00510ff1516d11fb1a6ceb2a7d3e2130dbac2b3fc3b4f35292bc6900

Other collected versions

View all collected versions →