AgentGate
AgentGate
Ein kontrolliertes Tool-Call-Gateway für KI-Agenten, aufgebaut auf Terminal 3's ADK.
Gib einem LLM-Agenten einen API-Schlüssel und er kann alles aufrufen, alles ausgeben und alles leaken – und du erfährst es erst hinterher, aus den Logs, die er über sich selbst geschrieben hat.
AgentGate platziert eine hardware-isolierte Enklave zwischen dem Agenten und der Außenwelt. Der Agent benennt einen Endpunkt, keine URL. Er hält nie eine Zugangsberechtigung. Er sieht nie die persönlichen Daten des Nutzers. Und jeder Versuch, den er unternimmt – erlaubt oder verweigert – landet in einem Ledger, das er nicht bearbeiten kann.
Es wird als MCP-Server ausgeliefert, sodass jeder MCP-Client (Claude Code, Claude Desktop, Cursor, ein SDK-Agent) kontrollierte Tool-Aufrufe erhält, indem er einen Konfigurationseintrag hinzufügt. Kein Framework, kein Umschreiben.
MCP client (Claude / Cursor / your agent)
│ call_endpoint { endpoint: "resend", path: "/emails",
│ body: { to: ["{{profile.verified_contacts.email.value}}"] } }
▼
AgentGate MCP server ← holds the T3N session; the model holds nothing
│
▼
┌─ z:<tid>:agentgate — TEE contract (Rust → WASM, Intel TDX) ───────────────┐
│ 1. every {{…}} marker must be profile.* AND on this endpoint's allowlist │
│ 2. path must be one the tenant enumerated — exact match, no globs │
│ 3. credential read from the sealed z:<tid>:secrets map │
│ 4. host substitutes real PII inside the enclave (contract never sees it) │
│ 5. upstream response projected to declared fields only │
│ 6. ledger entry appended — for ALLOWED and DENIED alike │
└───────────────────────────────────────────────────────────────────────────┘
▼
api.resend.com ← reached only if the data owner's grant permits this hostEs funktioniert. Hier ist der Beleg
npm run demo gegen das T3N-Testnetz – jeder Aufruf unten stammt vom org-geprägten Agenten:
🛑 DENIED profile field outside the endpoint's allowlist ({{profile.ssn}})
marker rejected: 'ssn' is not in this endpoint's allowed_placeholders
🛑 DENIED marker reaching for another namespace ({{secret.resend_api_key}})
marker rejected: 'secret.resend_api_key' is not a profile marker
🛑 DENIED path the tenant never enumerated (/domains)
path rejected: '/domains' is not in this endpoint's allowed_paths
🛑 DENIED endpoint that does not exist (stripe)
unknown endpoint
── policy is per-ENDPOINT, not per-host ──────────────────────────────
'resend' and 'resend-notify' share a host AND a credential.
The same marker is allowed on one and refused on the other.
✅ ALLOWED {{profile.first_name}} via 'resend' (allowlisted there)
{"data":{"id":"d7299ce6-668f-47f2-8e22-8f3f96c0f255"},"status":200}
🛑 DENIED {{profile.first_name}} via 'resend-notify' (allowlist is empty)
marker rejected: 'first_name' is not in this endpoint's allowed_placeholders
✅ ALLOWED no markers via 'resend-notify' (allowed, returns nothing)
{"data":{},"status":200}Echte E-Mails wurden zugestellt. Die Adresse und der Name des Empfängers wurden innerhalb der Enklave aus dem Profil des Dateneigentümers aufgelöst – sie erscheinen nirgendwo in der Eingabe des Agenten, im MCP-Transport, im Speicher des Vertrags oder im Ledger.
Die letzte Zeile ist die Deny-by-default-Antwortprojektion: resend-notify deklariert keine
response_fields, sodass ein erfolgreicher Aufruf einen Statuscode und ein leeres Objekt zurückgibt. Selbst die
Nachrichten-ID des Upstreams wird zurückgehalten.
Das Ledger danach:
denied 0 resend/emails markers=["profile.ssn", …] 'ssn' not allowed here
denied 0 resend/emails markers=["secret.resend_api_key"] not a profile marker
denied 0 resend/domains markers=[] path not enumerated
denied 0 stripe/emails markers=[] unknown endpoint
ok 200 resend/emails markers=["first_name","last_name","verified_contacts.email.value"]
denied 0 resend-notify/emails markers=["profile.first_name", …] 'first_name' not allowed here
ok 200 resend-notify/emails markers=[]Marker-Namen werden aufgezeichnet. Marker-Werte standen nie zur Aufzeichnung zur Verfügung.
Related MCP server: Proofpane
Schnellstart
npm install
cp .env.example .env # add your T3N_API_KEY from terminal3.io/claim-page
npm run test # 9 native policy tests, no network, no credits
npm run build # Rust → wasm32-wasip2
npm run deploy # idempotent — safe to re-run
npm run doctor # pre-flight a deployment you didn't just create
npm run demo # the run shown aboveFüge zu einem beliebigen MCP-Client hinzu:
{ "mcpServers": {
"agentgate": { "command": "npx", "args": ["tsx", "/path/to/agentgate/mcp/server.ts"] } } }Hinzufügen eines Endpunkts
Eine Datei. Kein Rust, kein erneutes Bereitstellen des Vertrags.
// agentgate.config.json
"endpoints": {
"stripe": {
"base": "https://api.stripe.com",
"secret_key": "stripe_api_key", // key in z:<tid>:secrets
"auth_header": "Authorization",
"auth_prefix": "Bearer ",
"allowed_paths": ["/v1/customers"], // exact match only
"allowed_placeholders": ["first_name", "verified_contacts.email.value"],
"response_fields": ["id"] // everything else is dropped
}
}Dann npm run deploy. Es überspringt die Vertragsregistrierung, wenn das Wasm unverändert ist, sodass das
Hinzufügen eines Endpunkts ~160 Credits statt ~1.850 kostet.
Warum das Design so geformt ist
Drei Entscheidungen stammen aus der Messung der Plattform, nicht aus dem Lesen darüber:
Ablehnungen geben
Okzurück, nieErr. Vertragsschreibvorgänge werden bei Fehlern zurückgerollt, sodass die Rückgabe vonErrbei einer Richtlinienablehnung den Audit-Eintrag zurückrollen würde, der diese Ablehnung aufzeichnet – ein Agent könnte die Richtlinie wiederholt auslösen und keine Spur hinterlassen.Antworten werden projiziert, nicht durchgereicht.
http-with-placeholdersschützt nur den ausgehenden Teil. Die Upstream-Antwort kehrt vollständig in WASM zurück, sodass ein Endpunkt, der seine Anfrage zurückspiegelt, die PII zurückgibt, die die Marker zurückgehalten haben. Demonstriert indocs/BUGS.md.Der Vertrag setzt keinen
Content-Type. Die Host-App fügt ihren eigenen hinzu, anstatt deinen zu ersetzen, wasapplication/json,application/jsonerzeugt, das strenge Upstreams ablehnen – still, mit einem HTTP 200 und einem leeren Body. Siehedocs/BUGS.md#1.
Repo-Struktur
Pfad | Was |
| der TEE-Vertrag – |
| MCP-Server – 3 Tools |
| idempotentes Deployment; besitzt das |
| Pre-Flight-Gesundheitscheck |
| der oben gezeigte Lauf |
| jeder Endpunkt und jede Berechtigung, deklarativ (2 Endpunkte, kontrastierende Richtlinien) |
| festgeschriebenes Ledger jeder jemals ausgegebenen |
| 13 Befunde gegen die Plattform |
| warum die Enklavengrenze dort liegt, wo sie liegt |
| Runbook für den, der das als Nächstes betreibt |
| Wegwerf-Diagnose zur Kartierung der Platzhalteroberfläche – nicht ausgeliefert |
Status
Gebaut und Ende-zu-Ende gegen das T3N-Testnetz mit @terminal3/t3n-sdk@5.2.0 verifiziert, mit dem
vollständigen Drei-Identitäten-Ablauf:
Hauptakteur | Hält | Rolle im obigen Lauf |
Tenant | eth-Schlüssel, finanziert | besitzt den Vertrag, versiegelt die Zugangsberechtigung, zählt die Richtlinie auf |
Dateneigentümer | eigene DID + Profil | gewährt dem Agenten; die Marker werden gegen ihr Profil aufgelöst |
Agent | ein undurchsichtiges Bearer-Token, sonst nichts | macht jeden oben gezeigten Aufruf |
Der Signaturschlüssel des Agenten wurde innerhalb der TEE geprägt und hat sie nie verlassen. Er hält keinen API-Schlüssel, keine URL und keine persönlichen Daten und kann keinen Kernvertrag erreichen, um seine eigenen Berechtigungen einzusehen – doch er liefert eine personalisierte E-Mail an ein echtes Postfach.
Um dorthin zu gelangen, musste Terminal 3 die Agenten-DID von Hand finanzieren: Ein geprägter Agent startet bei null
und ein Aufruf reserviert 10.000 Token, ohne Selbstbedienungs-Aufladung (docs/BUGS.md#10).
Jeder Entwickler wird beim ersten Agenten darauf stoßen.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Security gateway for AI agents: policy, approval, and audited execution, no secrets shared.
Credential broker for AI agents: scoped, revocable API access with policy enforcement and audit.
Zero-trust gateway for AI agents: score tool calls, verify agent cards, enforce policy, audit.
Zero-secret MCP gateway for AI agents: risk-scored, audited calls with human-in-the-loop approval.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceProvides a trust and governance layer for AI agents, enabling secure API access, credential vaulting, paid execution with human approval, and automatic call resume.152
- AlicenseBqualityAmaintenanceA governance proxy for AI tools — every MCP/agent tool call is policy-gated, secret-redacted, and written to a hash-chained, offline-verifiable audit trail.13MIT
- AlicenseNot gradedqualityBmaintenanceBounded egress gateway & secret proxy for AI agents and applications, enabling safe credential injection into upstream requests while keeping raw secrets out of LLM prompt contexts.6MIT

evav-gatewayofficial
AlicenseNot gradedqualityBmaintenanceGoverned MCP gateway that lets AI agents call tools with policy enforcement, prompt-injection screening, a kill-switch, and tamper-evident signed audit logs.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/Anshv784/agentgate'
If you have feedback or need assistance with the MCP directory API, please join our Discord server