Expand description
A2A protocol v1.0 — server framework.
Provides RequestHandler and AgentExecutor for implementing A2A
agents over HTTP/1.1 and HTTP/2 using hyper 1.x.
§Quick start
- Implement
AgentExecutorwith your agent logic. - Build a
RequestHandlerviaRequestHandlerBuilder. - Wire
JsonRpcDispatcherorRestDispatcherinto your hyper server.
§Module overview
| Module | Contents |
|---|---|
error | ServerError, ServerResult |
executor | AgentExecutor trait |
executor_helpers | boxed_future, agent_executor! macro |
handler | RequestHandler, SendMessageResult, HandlerLimits |
builder | RequestHandlerBuilder |
store | TaskStore, InMemoryTaskStore, SqliteTaskStore (sqlite feature) |
streaming | Event queues, SSE response builder |
push | Push config store, push sender |
agent_card | Static/dynamic agent card handlers |
serve | serve(), serve_with_addr, Dispatcher |
dispatch | JsonRpcDispatcher, RestDispatcher |
interceptor | ServerInterceptor, ServerInterceptorChain |
rate_limit | RateLimitInterceptor, RateLimitConfig |
request_context | RequestContext |
call_context | CallContext (includes HTTP headers for auth) |
metrics | Metrics trait (request counts, latency, errors) |
tenant_resolver | TenantResolver, HeaderTenantResolver, BearerTokenTenantResolver, PathSegmentTenantResolver |
tenant_config | PerTenantConfig, TenantLimits |
otel | OtelMetrics, OtelMetricsBuilder, init_otlp_pipeline (otel feature) |
§Axum integration
Enable the axum feature flag to use A2aRouter for idiomatic Axum
integration. See the dispatch::axum_adapter module for details.
§gRPC transport
Enable the grpc feature flag to use GrpcDispatcher for gRPC
transport (tonic-backed). See the dispatch::grpc module for details.
§Rate limiting
Built-in rate limiting is available via RateLimitInterceptor,
a fixed-window per-caller interceptor. For advanced use cases (sliding windows,
distributed counters), use a reverse proxy (nginx, Envoy) or a custom
ServerInterceptor.
Re-exports§
pub use agent_card::AgentCardProducer;pub use agent_card::DynamicAgentCardHandler;pub use agent_card::HotReloadAgentCardHandler;pub use agent_card::StaticAgentCardHandler;pub use agent_card::CORS_ALLOW_ALL;pub use builder::RequestHandlerBuilder;pub use call_context::CallContext;pub use dispatch::axum_adapter::A2aRouter;pub use dispatch::WebSocketDispatcher;pub use dispatch::CorsConfig;pub use dispatch::DispatchConfig;pub use dispatch::JsonRpcDispatcher;pub use dispatch::RestDispatcher;pub use dispatch::GrpcConfig;pub use dispatch::GrpcDispatcher;pub use error::ServerError;pub use error::ServerResult;pub use executor::AgentExecutor;pub use executor_helpers::boxed_future;pub use executor_helpers::EventEmitter;pub use handler::HandlerLimits;pub use handler::RequestHandler;pub use handler::SendMessageResult;pub use interceptor::ServerInterceptor;pub use interceptor::ServerInterceptorChain;pub use metrics::ConnectionPoolStats;pub use metrics::Metrics;pub use otel::OtelMetrics;pub use push::HttpPushSender;pub use push::InMemoryPushConfigStore;pub use push::PushConfigStore;pub use push::PushRetryPolicy;pub use push::PushSender;pub use push::TenantAwareInMemoryPushConfigStore;pub use rate_limit::RateLimitConfig;pub use rate_limit::RateLimitInterceptor;pub use request_context::RequestContext;pub use serve::serve;pub use serve::serve_with_addr;pub use serve::Dispatcher;pub use store::InMemoryTaskStore;pub use store::TaskStore;pub use store::TaskStoreConfig;pub use store::TenantAwareInMemoryTaskStore;pub use store::TenantContext;pub use store::TenantStoreConfig;pub use push::SqlitePushConfigStore;pub use push::TenantAwareSqlitePushConfigStore;pub use store::Migration;pub use store::MigrationRunner;pub use store::SqliteTaskStore;pub use store::TenantAwareSqliteTaskStore;pub use push::PostgresPushConfigStore;pub use push::TenantAwarePostgresPushConfigStore;pub use store::PgMigration;pub use store::PgMigrationRunner;pub use store::PostgresTaskStore;pub use store::TenantAwarePostgresTaskStore;pub use streaming::EventQueueManager;pub use streaming::EventQueueReader;pub use streaming::EventQueueWriter;pub use streaming::InMemoryQueueReader;pub use streaming::InMemoryQueueWriter;pub use tenant_config::PerTenantConfig;pub use tenant_config::TenantLimits;pub use tenant_resolver::BearerTokenTenantResolver;pub use tenant_resolver::HeaderTenantResolver;pub use tenant_resolver::PathSegmentTenantResolver;pub use tenant_resolver::TenantResolver;
Modules§
- agent_
card - Agent card HTTP handlers (static, dynamic, and caching utilities).
- builder
- Builder for
RequestHandler. - call_
context - Call context for server-side interceptors.
- dispatch
- HTTP dispatch layer — JSON-RPC and REST routing.
- error
- Server-specific error types.
- executor
- Agent executor trait.
- executor_
helpers - Ergonomic helpers for implementing
AgentExecutor. - handler
- Core request handler — protocol logic layer.
- interceptor
- Server-side interceptor chain.
- metrics
- Metrics hooks for observing handler activity.
- otel
- OpenTelemetry integration for the A2A server.
- push
- Push notification configuration storage and delivery.
- rate_
limit - Token-bucket rate limiter as a
ServerInterceptor. - request_
context - Request context passed to the
AgentExecutor. - serve
- Server startup helpers.
- store
- Task storage backend.
- streaming
- Streaming infrastructure for SSE responses and event queues.
- tenant_
config - Per-tenant configuration for multi-tenant A2A servers.
- tenant_
resolver - Tenant resolution for multi-tenant A2A servers.
Macros§
- agent_
executor - Generates an
AgentExecutorimplementation from a closure-like syntax.