Standard Request-Response Flow
sequenceDiagram
participant CrewAI as CrewAI Agent
participant Client as A2A Client
participant Server as A2A Server
participant MCP as MCP Server
CrewAI->>Client: Execute request
Client->>Client: Ensure HTTP/2 connection
Client->>Server: Send message (JSON-RPC)
Server->>Server: Process request
Server->>MCP: Execute MCP tools
MCP-->>Server: Return results
Server-->>Client: Send response/task
alt Task-based response
loop Poll for completion
Client->>Server: Get task status
Server-->>Client: Task state
end
Client->>Server: Get final result
Server-->>Client: Task messages/artifacts
else Direct response
Note over Client: Extract message content
end
Client-->>CrewAI: Return formatted result
SSE Streaming Flow
sequenceDiagram
participant CrewAI as CrewAI Agent
participant Client as A2A Client
participant Server as A2A Server (HTTP/2)
participant MCP as MCP Server
CrewAI->>Client: Stream request
Client->>Client: Check streaming support
Client->>Server: POST /a2a/stream (SSE)
Server->>Server: Initialize SSE stream
Server->>Client: stream_start event
loop Streaming chunks
Server->>MCP: Get data chunk
MCP-->>Server: Data
Server->>Client: stream_chunk event
Client->>CrewAI: Yield chunk
end
Server->>Client: stream_complete event
Client->>Client: Close stream
Client-->>CrewAI: Complete
Client Decision Flow
graph TD
subgraph "CrewAI Agent Request"
A[Agent calls tool._run
with request]
end
subgraph "A2ATool Decision Logic"
B{Check context}
C[_execute_with_retry]
D{streaming=True
AND
supports_streaming?}
end
subgraph "Standard Mode"
E[_execute_standard]
F[Send JSON-RPC message]
G{Response type?}
H[Direct Message
Extract text parts]
I[Task Response
Poll with _wait_for_task_completion]
J[_get_task_status
Loop until complete]
end
subgraph "Streaming Mode"
K[_execute_streaming]
L[Open SSE connection
via _stream_sse]
M[Collect all chunks]
N[Return combined result]
end
subgraph "Async Iterator Mode"
O[stream method called]
P[Force streaming=True]
Q[_stream_sse context manager]
R[Yield chunks individually]
end
A --> B
B --> C
C --> D
D -->|No| E
D -->|Yes| K
E --> F
F --> G
G -->|Message| H
G -->|Task| I
I --> J
J -->|Loop| I
K --> L
L --> M
M --> N
O --> P
P --> Q
Q --> R
H --> S[Return result]
J --> S
N --> S
R --> T[Async iteration]
style A fill:#e1f5fe
style S fill:#c8e6c9
style T fill:#c8e6c9
style D fill:#fff3cd
style G fill:#fff3cd