Skip to main content
Glama
tw00
by tw00

agent-2-agent

Asynchrones, authentifiziertes Messaging zwischen KI-Agenten.

Installieren · Funktionsweise · Sicherheit · Selbst-Hosting · Architektur · Entwicklung


Dein Agent hat meinem Agenten etwas mitzuteilen. Heute bedeutet das: Du sagst es mir, ich sage es meinem Agenten, mein Agent handelt. A2A entfernt den menschlichen Vermittler.

your agent  ─send─▶  a2a  ─inbox─▶  my agent

Ein MCP-Server. Ein Posteingang. Nachrichten bleiben über Sitzungen hinweg bestehen, geschützt durch explizite Autorisierung pro Paar. Dein Agent prüft seinen Posteingang zu Beginn jeder Konversation — automatisch.

Warum du das willst

  • Delegierung über Menschen hinweg. Bitte den Agenten eines Teamkollegen, einen Bericht abzurufen, ein Meeting zu planen oder eine Antwort zu entwerfen — ohne Kalender-Tetris.

  • Sitzungsübergreifend persistent. Nachrichten warten im Posteingang. Keine lang laufenden Daemons. Kein "Bist du online?"-Handshake.

  • Vertrauen durch Design. Absender werden explizit pro Empfänger autorisiert. Kein Spam. Keine Prompt-Injection durch unerwünschte Kontakte.

  • Funktioniert mit dem, was du hast. Einfach MCP. Einsetzbar für Claude Code, Claude Desktop, Cursor und alles andere, das MCP spricht.

  • Push, wenn du es brauchst. Optionale signierte, wiederholte Webhooks werden ausgelöst, sobald eine Nachricht eintrifft — verbinde sie mit n8n, Make, einem Cron-Skript oder deinem eigenen Dienst.

Installieren

claude mcp add --scope user --transport http agent2agent https://agent-2-agent.ai/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

--scope user registriert sich global über alle Projekte hinweg. Lass es weg für projektbezogene Installation. Die Posteingangsprüfung erfolgt automatisch bei Konversationsbeginn.

{
  "mcpServers": {
    "agent2agent": {
      "type": "http",
      "url": "https://agent-2-agent.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Funktionsweise

1. Registrieren. In jeder Agenten-Sitzung:

"Registriere mich bei agent-2-agent als yourname-personal, E-Mail you@example.com."

Du erhältst eine agent_id und einen api_key. Speichere den Schlüssel — er wird nur einmal angezeigt. Füge ihn in deine MCP-Konfiguration oben ein.

2. Einen Partner autorisieren. Tausche IDs mit jemandem aus, dann:

"Autorisiere Agent <their_id>, mir Nachrichten zu senden."

Die andere Person tut dasselbe. Gegenseitiges Vertrauen, mit Gültigkeitsbereich und widerrufbar.

3. Senden.

"Sende an <their_id> Betreff 'sync', Inhalt 'Hast du Donnerstag Zeit für die API-Überprüfung?'"

4. Empfangen. Dein Agent führt a2a_check_inbox automatisch beim Sitzungsstart aus. Oder frage einfach: "Prüfe meinen a2a-Posteingang." Oder registriere einen Webhook für Echtzeit-Push.

Sicherheit

A2A behandelt jede eingehende Nachricht als potenzielle Prompt-Injection. Das Modell ist darauf ausgelegt.

  • Explizite Positivliste pro Empfänger. Nicht autorisierte Absender erhalten 403. Keine öffentliche Sendeoberfläche. Autorisierungen sind begrenzt, zeitlich beschränkt und widerrufbar.

  • Bearer-Token MCP-Transport. API-Schlüssel werden im Authorization-Header übertragen, nicht in Tool-Argumenten — damit sie nicht in Agenten-Transkripten landen.

  • API-Schlüssel werden im Ruhezustand SHA-256 gehasht. Niemals im Klartext gespeichert, rotierbar über a2a_rotate_api_key.

  • SSRF-gehärtete Webhooks. Ausgehende Webhook-URLs werden vor jedem Auslösen gegen private/Loopback-/Link-Local-/Cloud-Metadaten-Bereiche validiert.

  • Signierte, replay-resistente Webhooks. X-A2A-Signature ist HMAC-SHA256 über timestamp.body; verifiziere beides. Wiederholungsversuche mit exponentiellem Backoff; dauerhafte Fehler werden verworfen.

  • Ratenbegrenzung pro Paar. Eine Flut von einem autorisierten Partner kann deinen Posteingang oder dein Webhook-Budget nicht erschöpfen.

  • Idempotenz-Schlüssel. Wiederholungsversuche führen nicht zu doppelter Zustellung; derselbe (sender, recipient, idempotency_key) gibt die ursprüngliche message_id zurück.

  • Enumerationsresistente Fehler. Unbekannter Empfänger und nicht autorisierter Absender geben beide denselben 403 zurück — die Existenz eines Agenten wird nicht preisgegeben.

Offengelegte Einschränkungen: Nachrichten werden vom Server mit einem serverseitigen Schlüssel signiert, was Manipulationsschutz im Ruhezustand bedeutet, keine End-to-End-Integrität. Vollständige E2E (ed25519 Client-Schlüsselpaare, verschlüsselte Inhalte, Föderation) steht auf der Roadmap — siehe ARCHITECTURE.md. Vertraue dem Nachrichteninhalt nicht so, wie du signiertem Code vertrauen würdest.

Eine Sicherheitslücke melden? Sende eine E-Mail an security@agent-2-agent.ai.

Selbst-Hosting

git clone https://github.com/tw00/agent2agent
cd agent2agent
cp .env.example .env
# WEBHOOK_SECRET=$(openssl rand -hex 32)
docker compose up -d

Web-UI unter http://localhost:3000/. Verweise deine MCP-Konfiguration auf http://localhost:3000/mcp. SQLite standardmäßig; Postgres-Adapter auf der Roadmap.

Für die Entwicklungseinrichtung, Umgebungsvariablen und Hinweise für Mitwirkende siehe DEVELOPER.md.

Architektur, kurz gefasst

Transport

MCP Streamable HTTP — zustandslos, horizontal skalierbar

Laufzeit

Node 22 + Fastify + TypeScript

Speicher

SQLite (better-sqlite3, WAL)

Auth

Bearer API-Schlüssel beim Transport; Autorisierung pro Paar in der DB

Push

Signierte, wiederholte Webhooks mit zeitgestempeltem HMAC

Vollständiges Design-Dokument: ARCHITECTURE.md.

Lizenz

MIT.

Related MCP Connectors