Skip to content

ACP — Agent Communication Protocol

The missing link between AI Agents.

Send a URL. Get a link. Two agents talk. That's it.

Version License Python Tests


MCP standardized Agent↔Tool. ACP standardizes Agent↔Agent.
P2P · Zero server required · curl-compatible · works with any LLM framework

What is ACP?

ACP is a lightweight, open protocol for direct Agent-to-Agent communication. Unlike enterprise solutions that require OAuth, service registries, and devops teams, ACP gives you:

  • 🔗 A shareable link — paste it to any other agent to connect
  • Real-time messaging — SSE stream, sub-millisecond latency
  • 🔒 True P2P — Relay only punches holes, never stores messages
  • 🛠️ curl-compatible — any language, any framework, any LLM

60-Second Demo

# Terminal 1 — Agent A
python3 acp_relay.py --name AgentA
# ✅ Ready. Your link: acp://1.2.3.4:7801/tok_xxxxx

# Terminal 2 — Agent B: connect
curl -X POST http://localhost:7901/peers/connect \
     -d '{"link":"acp://1.2.3.4:7801/tok_xxxxx"}'
# {"ok":true,"peer_id":"peer_001"}

# Agent B: send a message
curl -X POST http://localhost:7901/message:send \
     -d '{"role":"agent","parts":[{"type":"text","content":"Hello AgentA!"}]}'
# {"ok":true,"message_id":"msg_abc123"}

# Agent A: receive via SSE stream
curl http://localhost:7901/stream
# event: acp.message
# data: {"role":"agent","parts":[{"type":"text","content":"Hello AgentA!"}]}

Why ACP?

A2A (Enterprise) ACP (Personal/Team)
Deploy Ops team required Zero server, local Skill
Connect Code + config + registry One link, paste & go
Auth OAuth 2.0 full suite Token in link, HMAC optional
Privacy Through server True P2P, relay stores nothing
Analogy Enterprise ESB WhatsApp for Agents

Key Features

Three-level NAT traversal, fully transparent to your application:

Level 1: Direct WebSocket P2P
    ↓ fails 3×
Level 2: DCUtR UDP hole punching
    ↓ fails (symmetric NAT ~25%)
Level 3: Cloudflare Worker relay (100% fallback)

Full capability declaration in one JSON response:

curl http://localhost:7901/.well-known/acp.json
{
  "name": "AgentA",
  "version": "2.8.0",
  "capabilities": {"streaming": true, "hmac_signing": true},
  "limitations": ["no_file_access"],
  "extensions": [{"uri": "acp:ext:hmac-v1"}]
}

Built-in task state machine with SSE events:

submitted → working → completed
                   → failed
                   → cancelling → canceled
                   → input_required
from acp_client import RelayClient

c = RelayClient("http://localhost:7901")
link = c.status()["link"]

# Connect and send
peer = c.connect("acp://remote:7801/tok_xxx")
c.send("Hello!", peer_id=peer)

# Receive
for msg in c.stream():
    print(msg.parts[0].content)

Getting Started

  • Quick Start


    Get two agents talking in under 60 seconds.

    Quick Start

  • Installation


    Install the relay and Python SDK.

    Installation

  • Core Concepts


    Understand links, peers, tasks, and streams.

    Concepts

  • vs. A2A


    How ACP compares to Google's A2A protocol.

    Comparison

Version

Current stable: v3.17.2POST /messages:stream WebSocket streaming inlet with public launch hardening for CI, packaging, docs, Docker publishing, CodeQL, OpenSSF Scorecard, and standard Apache-2.0 license detection; see CHANGELOG for full history. See What's New · Compatibility Matrix · Roadmap.