Skip to main content

Crate a2a_protocol_server

Crate a2a_protocol_server 

Source
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

  1. Implement AgentExecutor with your agent logic.
  2. Build a RequestHandler via RequestHandlerBuilder.
  3. Wire JsonRpcDispatcher or RestDispatcher into your hyper server.

§Module overview

ModuleContents
errorServerError, ServerResult
executorAgentExecutor trait
executor_helpersboxed_future, agent_executor! macro
handlerRequestHandler, SendMessageResult, HandlerLimits
builderRequestHandlerBuilder
storeTaskStore, InMemoryTaskStore, SqliteTaskStore (sqlite feature)
streamingEvent queues, SSE response builder
pushPush config store, push sender
agent_cardStatic/dynamic agent card handlers
serveserve(), serve_with_addr, Dispatcher
dispatchJsonRpcDispatcher, RestDispatcher
interceptorServerInterceptor, ServerInterceptorChain
rate_limitRateLimitInterceptor, RateLimitConfig
request_contextRequestContext
call_contextCallContext (includes HTTP headers for auth)
metricsMetrics trait (request counts, latency, errors)
tenant_resolverTenantResolver, HeaderTenantResolver, BearerTokenTenantResolver, PathSegmentTenantResolver
tenant_configPerTenantConfig, TenantLimits
otelOtelMetrics, 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 AgentExecutor implementation from a closure-like syntax.