====== 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 =====