IATP (Inter-Agent Transfer Protocol) Diagrams

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