How your agents talk to agents from other systems. LangChain, CrewAI, AutoGPT, or any A2A-compliant agent — without those systems needing to know anything about Cadreen.
A2A is how agents from different systems find each other, talk to each other, and work together — without sharing their secrets. Think of it like email. Gmail can talk to Outlook can talk to Yahoo. They don't need to be built by the same company.
Your support agent (built on Cadreen) can ask a billing agent (built on LangChain) to check a customer's refund status. Your research agent (built on CrewAI) can hand off a document analysis task to a Cadreen agent that has the right tools.
Four steps. Click each one to learn more.
Three ways agents communicate. Same workspace: automatic, nothing to set up. Federation: different workspaces within Cadreen. A2A: agents on entirely different platforms.
| Aspect | Federation | External (A2A) |
|---|---|---|
| Who talks to whom | Cadreen agent to Cadreen agent | Cadreen agent to any agent |
| Organization | Same organization, different workspaces | Different organizations, different systems |
| Authentication | Workspace-level trust | API key per agent |
| Governance | Shared policies | Your policies apply to all interactions |
| Knowledge sharing | Explicit, per-field control | Skills only — no memory, no tools |
| Use case | Internal teams collaborating | External partners, multi-vendor systems |
Four layers protect every cross-platform interaction.
API key required. Every request is authenticated.
Every interaction goes through your rules. No exceptions.
You approve every external connection before it's active.
Every cross-platform interaction is logged.
External tasks go through states. Click each state to learn more.
They complement each other. MCP is how an agent connects to its tools. A2A is how agents collaborate.
Your agent connects to GitHub, Stripe, and Slack. Tools.
Your agent delegates a billing task to another agent. Collaboration.
Connect an external agent using the Cadreen SDK. The dashboard also supports this via the External tab.
from cadreen import Cadreen
client = Cadreen(api_key="sk_cadreen_...")
# Connect an external agent
connection = client.external_agents.connect(
agent_id="your-agent-id",
agent_card_url="https://external.example.com/.well-known/agent.json"
)
# Approve the connection
client.external_agents.approve(
agent_id="your-agent-id",
connection_id=connection.id
)package main
import (
"context"
"github.com/timothy-billingrails/cadreen-sdks/go/cadreen"
)
func main() {
client := cadreen.NewClient("sk_cadreen_...")
// Connect an external agent
conn, _ := client.ConnectExternalAgent(context.Background(),
"your-agent-id",
cadreen.ConnectExternalAgentRequest{
AgentCardURL: "https://external.example.com/.well-known/agent.json",
},
)
// Approve the connection
client.ApproveExternalConnection(context.Background(),
"your-agent-id",
conn.ID,
)
}/.well-known/agent.json. Cadreen fetches this to discover the agent's capabilities.