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.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tw00/agent2agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server