Every agent a tool. Every protocol bridged.
Offene Registry, in der AI-Agents sich per agent.json registrieren, entdeckt und verbunden werden. Agents sprechen A2A (Google), werden zur Laufzeit als MCP-Tools exposed (Anthropic). Next.js 16, Prisma 6, Postgres, self-hosted auf Coolify.
Why this exists.
Agents aus verschiedenen Ökosystemen — Claude/MCP, Google/A2A, selbstgehostete — können aktuell nicht miteinander sprechen. Jeder Anbieter baut seinen eigenen Walled Garden. Entwickler, die Agents bauen oder konsumieren, brauchen eine neutrale Discovery-Schicht, die bestehende Marketplaces nicht liefern.
GPT Store, Claude MCP Directory — vendor-lock-in, schema-arm, keine protokollübergreifende Execution-Bridge. AgoraHub ist der Versuch, eine Registry zu bauen, in der ein A2A-Agent automatisch als MCP-Tool in Claude Desktop auftaucht, ohne dass der Agent-Builder etwas doppelt schreibt.
The box it had to fit in.
How it runs.
Four deliberate choices.
MCP-Bridge statt eigenes Protokoll.
/api/mcp/toolsPrisma + Postgres statt Vector-DB.
Next.js Proxy statt Middleware.
src/proxy.ts — CSP, HSTS, Permissions-Policy, CORS-Allowlistmiddleware.ts im Edge-Runtimemiddleware.ts deprecated, und Edge-Runtime-Constraints (kein Node-API-Zugriff) waren für IP-Validierung und HMAC-Verify ohnehin einschränkend. Der neue Proxy-Hook läuft als echter Node-Handler — eine Datei, kein Build-Target-Split, und im Docker-Image auf Coolify funktioniert er identisch wie lokal. Weniger Magic, mehr Kontrolle.SSRF-Quarantäne synchron ins AuditLog.
Things that were not obvious.
Schema-Compatibility mit konkretem Diff
schema-compatibility.ts deren JSON-Schemas strukturell — required fields, type compatibility, enum overlap. Der User bekommt nicht nur ein Ja/Nein, sondern einen konkreten Diff: "Agent B erwartet language: 'de'|'en', dein Agent sendet lang: string".Das verhindert die Hälfte aller fehlschlagenden Task-Runs. Ein binärer Check ("incompatible") hätte Developer frustriert, weil sie manuell beide JSON-Schemas öffnen und selbst vergleichen müssten. Diff-Output ist 2 Stunden Arbeit, spart jedem Nutzer 20 Minuten — eine dieser Asymmetrien, die ein Developer-Tool vom funktionalen zum angenehmen machen.
Trust-Auto-Progression mit Hysterese
Sonst würden einzelne Timeouts bei fremden Endpoints gute Agents sofort demoten — und das passiert ständig, wenn der Agent gegen flaky Third-Party-APIs läuft. MCP-Tools werden nur ab Trust-Score ≥ 10 exposed, damit Claude-User vor Müll geschützt sind, ohne dass ich manuell moderieren muss. Die Schwelle ist der einzige menschliche Touchpoint im ganzen Trust-System.
API-Keys als Hash + Prefix
newKey). In der DB liegen nur SHA-256-Hash + 8-Zeichen-Prefix. Auth-Lookup: Request kommt mit Key → Prefix extrahieren → Index-Hit auf keyPrefix → Hash-Vergleich.Keine Fulltable-Scans (der Prefix ist indiziert und selten genug, um <5 Kandidaten zu treffen), und ein DB-Leak gibt keinem Angreifer funktionierende Credentials. Klassisches GitHub-Pattern, aber überraschend viele Registries speichern Keys heute noch plaintext oder verschlüsselt-aber-dekryptierbar.
SSRF-Fallback über alle IPs
Der Scanner validiert jede IP einzeln und wählt die erste valide für den Call. DNS-Rebinding-Angriffe (die zwischen Resolve und Connect die IP wechseln) werden blockiert, weil der HTTP-Client an die validierte IP pin't, nicht an den Hostname. Ein zehnzeiliger Fix, der eine ganze Angriffsklasse schließt.
What's running.
What I learned.
Bridges schlagen Protokolle.
Ich hätte ein eigenes Agent-Protokoll definieren können, das "besser" als A2A und MCP ist. Realität: jeder Client, den Nutzer schon haben, spricht eins der beiden. Ein drittes Protokoll zu zwingen wäre eine Adoption-Mauer gewesen. Die Bridge-Strategie nimmt die Frage "welches Protokoll gewinnt" vom Tisch — beide gewinnen, AgoraHub ist der Übersetzer. Das ist langweiliger als ein eigenes Protokoll zu designen, aber es ist der Grund, warum der erste Claude-User in Minuten produktiv war.
User-submitted URLs sind ein Angriffs-Primitiv.
Jeder registrierte Agent liefert eine URL, die mein Server aufrufen soll. Das ist aus Angreifersicht exakt die Definition von SSRF. Ich habe die Sicherheitskette (DNS-Gate, IP-Validation, Port-Erzwingung, synchrone Audit-Logs) vor die erste echte Integration gesetzt — nicht nachdem der erste böswillige Agent versucht hat, AWS-Metadata abzufragen. Bei Tools, die User-URLs callen, ist Security-Engineering kein Feature, es ist das Fundament. Wer das als Feature nachrüstet, rüstet zu spät.