====== Agent Communication Protocol ======
The **Agent Communication Protocol (ACP)** is an open standard developed by [[https://research.ibm.com/projects/agent-communication-protocol|IBM Research]] for enabling seamless, interoperable communication between AI agents across frameworks, languages, and organizations via a unified RESTful HTTP interface.((IBM Research. "Agent Communication Protocol." [[https://research.ibm.com/projects/agent-communication-protocol|research.ibm.com]])) Introduced through the BeeAI platform, ACP addresses ecosystem fragmentation by standardizing agent discovery, task delegation, and messaging without dictating internal agent implementations.
===== Overview =====
ACP operates on a client-server model where clients (agents, humans, or services) send HTTP requests to server endpoints wrapping AI agents. Unlike JSON-RPC-based protocols, ACP uses standard REST conventions with JSON payloads, making it accessible via curl, Postman, or any HTTP client without requiring specialized SDKs.((ACP Official Documentation. [[https://agentcommunicationprotocol.dev/introduction/welcome|agentcommunicationprotocol.dev]]))
The protocol defines structured message envelopes containing task IDs, metadata, content payloads, and optional streaming channels. Agents publish lightweight **manifests** describing their capabilities, schemas, and status for both online and offline discovery, supporting scale-to-zero deployments in cloud-native environments.((IBM Think. "Agent Communication Protocol." [[https://www.ibm.com/think/topics/agent-communication-protocol|ibm.com/think]]))
===== Core Architecture =====
ACP's architecture centers on several key mechanisms:
* **HTTP-Based Messaging** — Standard REST endpoints (POST for messages) with JSON payloads for routing and task resumption
* **Asynchronous Support** — Default async mode via fire-and-forget POSTs with task IDs; clients poll or subscribe via SSE/WebSockets for progress deltas or completion
* **Synchronous Support** — Simple HTTP POST/JSON responses for low-latency use cases
* **Agent Discovery** — Manifest-based capability advertisement for runtime and offline lookup
* **Lifecycle Management** — Defined agent states (INITIALIZING, ACTIVE, RETIRED) with session IDs for stateful interactions
* **Multimodal Content** — Native support for text, images, audio, video, and binary data via MIME types
===== Comparison with MCP and A2A =====
ACP exists alongside two other major agent protocols: [[anthropic|Anthropic]]'s [[anthropic_context_protocol|Model Context Protocol (MCP)]] and Google's [[agent2agent_protocol|Agent-to-Agent (A2A)]] protocol. Each addresses different communication layers:((Akka Blog. "MCP, A2A, ACP: What Does It All Mean?" [[https://akka.io/blog/mcp-a2a-acp-what-does-it-all-mean|akka.io]]))
^ Aspect ^ IBM ACP ^ [[anthropic|Anthropic]] MCP ^ [[google|Google]] A2A ^
| Core Protocol | REST/HTTP | JSON-RPC 2.0 | JSON-RPC |
| Primary Focus | Agent-to-agent ops | Tool and data access | Agent collaboration |
| Async/Streaming | Default async + SSE/WebSockets | Task state polling | Collaborative tasks |
| Multimodal | Full MIME support | Primarily tools/data | Metadata-focused |
| Discovery | Online/offline manifests | Framework-tied | Standardized metadata |
| SDK Required | Optional | Often required | Varies |
ACP is intentionally complementary: MCP connects agents to tools and data sources, A2A handles multi-agent collaboration patterns, and ACP provides the lightweight HTTP transport layer for agent-to-agent messaging.
===== Code Example =====
Sending a message to an ACP-compliant agent:
import requests
ACP_ENDPOINT = "https://agent-server.example.com/api/v1/messages"
AGENT_ID = "weather-agent-01"
payload = {
"task_id": "task-abc-123",
"agent_id": AGENT_ID,
"content": {
"type": "text/plain",
"body": "What is the weather forecast for Tokyo?"
},
"metadata": {
"session_id": "session-xyz",
"priority": "normal"
}
}
response = requests.post(ACP_ENDPOINT, json=payload)
result = response.json()
print(f"Status: {result['status']}, Response: {result['content']['body']}")
Discovering available agents via manifest:
import requests
DISCOVERY_URL = "https://agent-server.example.com/api/v1/agents"
agents = requests.get(DISCOVERY_URL).json()
for agent in agents["agents"]:
print(f"Agent: {agent['name']}, Capabilities: {agent['capabilities']}")
print(f" Status: {agent['lifecycle_state']}")
===== Security =====
ACP incorporates several security mechanisms:
* **Capability Tokens** — Signed, unforgeable tokens with expiry for authorization
* **OTLP Observability** — OpenTelemetry integration for monitoring and tracing
* **Kubernetes RBAC** — Native integration with container orchestration access control
* **Transport Security** — Standard HTTPS/TLS for all communications
===== See Also =====
* [[agent_network_protocol|Agent Network Protocol]]
* [[agent_protocol|Agent Protocol]]
* [[a2a_vs_mcp_vs_agui|A2A vs MCP vs AG-UI]]
* [[protocols_interop|Protocols & Interoperability]]
* [[ag_ui_protocol|AG-UI Protocol]]
===== References =====