# spring-ai-community/spring-ai-a2a architecture

> Architecture diagram of the GitHub repository spring-ai-community/spring-ai-a2a, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/spring-ai-community/spring-ai-a2a
- Repository: https://github.com/spring-ai-community/spring-ai-a2a

## Overview

Spring AI A2A is a Spring Boot server integration that exposes Spring AI agents through A2A endpoints. A client discovers an agent card, submits a message, and can query or cancel the resulting task; the request handler dispatches execution to an agent executor, which bridges to ChatClient and returns a task artifact. Auto-configuration supplies controllers, task/event infrastructure, and configuration defaults. The Airbnb example documents a separate multi-agent orchestration branch. The example source was not excerpted, so its internal links are documented but unverified.

Main entry points: [`spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java) (Server Auto-Config), [`spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/HostApplication.java`](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/HostApplication.java) (Host Agent), [`spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/DefaultAgentExecutor.java`](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/DefaultAgentExecutor.java) (Default Executor), [`spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/MessageController.java`](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/MessageController.java) (Message Endpoint)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["A2A API"]
  node_controllers["A2A Controllers"]
  node_message["Message Endpoint"]
  node_card["Agent Card"]
  node_tasks["Task Endpoints"]
end

subgraph group_runtime["Agent Runtime"]
  node_sdk["A2A Request Handler"]
  node_autoconfig["Server Auto-Config"]
  node_properties["Server Properties"]
  node_config["Config Provider"]
  node_taskstore[("Task Store")]
  node_eventqueue["Event Queues"]
  node_push["Push Notifications"]
  node_executor["Default Executor"]
  node_chatbridge["Chat Handler"]
end

subgraph group_examples["Agent Examples"]
  node_host["Host Agent"]
  node_routing["Agent Routing"]
  node_connections["Remote Connections"]
  node_airbnb["Airbnb Agent"]
  node_weather["Weather Agent"]
  node_weather_tools["Weather Tools<br/>[WeatherTools.java]"]
end

node_client(("A2A Client"))
node_chatclient["Spring AI ChatClient"]
node_tools["Agent Tools"]

node_client -->|"sends message"| node_message
node_client -->|"discovers card"| node_card
node_client -->|"queries task"| node_tasks
node_message -->|"delegates request"| node_sdk
node_tasks -->|"queries or cancels"| node_sdk
node_autoconfig -->|"registers endpoints"| node_controllers
node_autoconfig -->|"creates handler"| node_sdk
node_autoconfig -->|"wires executor"| node_executor
node_autoconfig -->|"creates store"| node_taskstore
node_autoconfig -->|"creates queues"| node_eventqueue
node_autoconfig -->|"configures sender"| node_push
node_autoconfig -->|"creates provider"| node_config
node_autoconfig -->|"enables properties"| node_properties
node_sdk -.->|"dispatches task"| node_executor
node_executor -->|"invokes handler"| node_chatbridge
node_chatbridge -.->|"executes prompt"| node_chatclient
node_chatclient -.->|"invokes tools"| node_tools
node_host -.->|"exposes orchestration"| node_routing
node_routing -.->|"uses connections"| node_connections
node_host -.->|"coordinates agents"| node_airbnb
node_host -.->|"coordinates agents"| node_weather
node_weather -.->|"provides tools"| node_weather_tools

click node_controllers "https://github.com/spring-ai-community/spring-ai-a2a/tree/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller"
click node_message "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/MessageController.java"
click node_card "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/AgentCardController.java"
click node_tasks "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/TaskController.java"
click node_autoconfig "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java"
click node_properties "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerProperties.java"
click node_config "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/SpringA2AConfigProvider.java"
click node_taskstore "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java"
click node_eventqueue "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java"
click node_push "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java"
click node_executor "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/DefaultAgentExecutor.java"
click node_chatbridge "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/ChatClientExecutorHandler.java"
click node_host "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/HostApplication.java"
click node_routing "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/RoutingController.java"
click node_connections "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/RemoteAgentConnections.java"
click node_airbnb "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/airbnb-agent/src/main/java/org/springaicommunity/a2a/examples/composable/airbnb/AirbnbPlannerApplication.java"
click node_weather "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/weather-agent/src/main/java/org/springaicommunity/a2a/examples/composable/weather/WeatherAgentApplication.java"
click node_weather_tools "https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/weather-agent/src/main/java/org/springaicommunity/a2a/examples/composable/weather/WeatherTools.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_controllers,node_message,node_card,node_tasks,node_client,node_chatclient toneBlue
class node_sdk,node_autoconfig,node_properties,node_config,node_taskstore,node_eventqueue,node_push,node_executor,node_chatbridge toneAmber
class node_host,node_routing,node_connections,node_airbnb,node_weather,node_weather_tools toneMint
class node_tools toneIndigo
```

## Components

### A2A API

- [A2A Controllers](https://github.com/spring-ai-community/spring-ai-a2a/tree/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller): `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller`
- [Message Endpoint](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/MessageController.java): `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/MessageController.java`
- [Agent Card](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/AgentCardController.java): `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/AgentCardController.java`
- [Task Endpoints](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/TaskController.java): `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/TaskController.java`

### Agent Runtime

- **A2A Request Handler**
- [Server Auto-Config](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java): `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`
- [Server Properties](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerProperties.java): `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerProperties.java`
- [Config Provider](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/SpringA2AConfigProvider.java): `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/SpringA2AConfigProvider.java`
- [Task Store](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java): `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`
- [Event Queues](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java): `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`
- [Push Notifications](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java): `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`
- [Default Executor](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/DefaultAgentExecutor.java): `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/DefaultAgentExecutor.java`
- [Chat Handler](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/ChatClientExecutorHandler.java): `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/ChatClientExecutorHandler.java`

### Agent Examples

- [Host Agent](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/HostApplication.java): `spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/HostApplication.java`
- [Agent Routing](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/RoutingController.java): `spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/RoutingController.java`
- [Remote Connections](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/RemoteAgentConnections.java): `spring-ai-a2a-examples/airbnb-planner/host-agent/src/main/java/org/springaicommunity/a2a/examples/host/RemoteAgentConnections.java`
- [Airbnb Agent](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/airbnb-agent/src/main/java/org/springaicommunity/a2a/examples/composable/airbnb/AirbnbPlannerApplication.java): `spring-ai-a2a-examples/airbnb-planner/airbnb-agent/src/main/java/org/springaicommunity/a2a/examples/composable/airbnb/AirbnbPlannerApplication.java`
- [Weather Agent](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/weather-agent/src/main/java/org/springaicommunity/a2a/examples/composable/weather/WeatherAgentApplication.java): `spring-ai-a2a-examples/airbnb-planner/weather-agent/src/main/java/org/springaicommunity/a2a/examples/composable/weather/WeatherAgentApplication.java`
- [Weather Tools](https://github.com/spring-ai-community/spring-ai-a2a/blob/main/spring-ai-a2a-examples/airbnb-planner/weather-agent/src/main/java/org/springaicommunity/a2a/examples/composable/weather/WeatherTools.java): `spring-ai-a2a-examples/airbnb-planner/weather-agent/src/main/java/org/springaicommunity/a2a/examples/composable/weather/WeatherTools.java`

### Other components

- **A2A Client**
- **Spring AI ChatClient**
- **Agent Tools**

## Connections

- A2A Client → Message Endpoint: sends message (evidence: `README.md`)
- A2A Client → Agent Card: discovers card (evidence: `README.md`)
- A2A Client → Task Endpoints: queries task (evidence: `README.md`)
- Message Endpoint → A2A Request Handler: delegates request (evidence: `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/MessageController.java`)
- Task Endpoints → A2A Request Handler: queries or cancels (evidence: `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/controller/TaskController.java`)
- Server Auto-Config → A2A Controllers: registers endpoints (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- Server Auto-Config → A2A Request Handler: creates handler (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- Server Auto-Config → Default Executor: wires executor (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- Server Auto-Config → Task Store: creates store (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- Server Auto-Config → Event Queues: creates queues (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- Server Auto-Config → Push Notifications: configures sender (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- Server Auto-Config → Config Provider: creates provider (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- Server Auto-Config → Server Properties: enables properties (evidence: `spring-ai-a2a-server-autoconfigure/src/main/java/org/springaicommunity/a2a/server/autoconfigure/A2AServerAutoConfiguration.java`)
- A2A Request Handler → Default Executor: dispatches task (evidence: `README.md`)
- Default Executor → Chat Handler: invokes handler (evidence: `spring-ai-a2a-server/src/main/java/org/springaicommunity/a2a/server/executor/DefaultAgentExecutor.java`)
- Chat Handler → Spring AI ChatClient: executes prompt (evidence: `README.md`)
- Spring AI ChatClient → Agent Tools: invokes tools (evidence: `README.md`)
- Host Agent → Agent Routing: exposes orchestration
- Agent Routing → Remote Connections: uses connections
- Host Agent → Airbnb Agent: coordinates agents (evidence: `README.md`)
- Host Agent → Weather Agent: coordinates agents (evidence: `README.md`)
- Weather Agent → Weather Tools: provides tools (evidence: `README.md`)
