AgentGate
AgentGate
Una puerta de enlace gobernada para llamadas de herramientas de agentes de IA, construida sobre el ADK de Terminal 3.
Dale a un agente de LLM una clave de API y podrá llamar a cualquier cosa, gastar cualquier cosa y filtrar cualquier cosa — y te enteras después, a partir de los registros que escribió sobre sí mismo.
AgentGate coloca un enclave aislado por hardware entre el agente y el mundo exterior. El agente nombra un endpoint, no una URL. Nunca tiene una credencial. Nunca ve los datos personales del usuario. Y cada intento que hace — permitido o denegado — cae en un libro de contabilidad que no puede editar.
Se distribuye como un servidor MCP, por lo que cualquier cliente MCP (Claude Code, Claude Desktop, Cursor, un agente SDK) obtiene llamadas de herramientas gobernadas añadiendo una entrada de configuración. Sin framework, sin reescritura.
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 hostFunciona. Aquí está el recibo
npm run demo contra la testnet T3N — cada llamada siguiente la realiza el agente emitido por la organización:
🛑 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}Se entregaron correos electrónicos reales. La dirección y el nombre del destinatario se resolvieron dentro del enclave a partir del perfil del propietario de los datos — no aparecen en la entrada del agente, en el transporte MCP, en la memoria del contrato ni en el libro de contabilidad.
La última línea es la proyección de respuesta por defecto denegada: resend-notify declara sin response_fields, por lo que una llamada exitosa devuelve un código de estado y un objeto vacío. Incluso el id de mensaje del proveedor se retiene.
El libro de contabilidad después:
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=[]Se registran los nombres de los marcadores. Los valores de los marcadores nunca estuvieron disponibles para registrarse.
Related MCP server: Proofpane
Inicio rápido
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 aboveAñade a cualquier cliente MCP:
{ "mcpServers": {
"agentgate": { "command": "npx", "args": ["tsx", "/path/to/agentgate/mcp/server.ts"] } } }Añadir un endpoint
Un solo archivo. Sin Rust, sin redesplegar el contrato.
// 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
}
}Luego npm run deploy. Omite el registro del contrato cuando el wasm no ha cambiado, por lo que añadir un endpoint cuesta ~160 créditos en lugar de ~1.850.
Por qué el diseño tiene esta forma
Tres decisiones surgieron de medir la plataforma, no de leer sobre ella:
Las denegaciones devuelven
Ok, nuncaErr. Las escrituras del contrato se revierten en caso de error, por lo que devolverErren una denegación de política revertiría la entrada de auditoría que registra esa denegación — un agente podría activar la política repetidamente y no dejar rastro.Las respuestas se proyectan, no se pasan directamente.
http-with-placeholdersprotege solo la pierna saliente. La respuesta del proveedor regresa a WASM completa, por lo que un endpoint que hace eco de su solicitud devuelve la PII que los marcadores retuvieron. Demostrado endocs/BUGS.md.El contrato no establece
Content-Type. El host añade el suyo propio en lugar de reemplazar el tuyo, produciendoapplication/json,application/json, que los proveedores estrictos rechazan — silenciosamente, con un HTTP 200 y un cuerpo vacío. Verdocs/BUGS.md#1.
Estructura del repositorio
Ruta | Qué es |
| el contrato TEE — |
| servidor MCP — 3 herramientas |
| despliegue idempotente; posee el libro de contabilidad |
| comprobación de salud previa al vuelo |
| la ejecución mostrada arriba |
| cada endpoint y concesión, declarativamente (2 endpoints, políticas contrastadas) |
| libro de contabilidad confirmado de cada |
| 13 hallazgos contra la plataforma |
| por qué el límite del enclave está donde está |
| manual de operación para quien lo opere a continuación |
| diagnóstico desechable usado para mapear la superficie de marcadores — no se distribuye |
Estado
Construido y verificado de extremo a extremo contra la testnet T3N con @terminal3/t3n-sdk@5.2.0, ejecutando el flujo completo de tres identidades:
Principal | Tiene | Rol en la ejecución anterior |
Inquilino | clave eth, financiada | posee el contrato, sella la credencial, enumera la política |
Propietario de datos | su propio DID + perfil | concede al agente; los marcadores se resuelven contra su perfil |
Agente | un token portador opaco, nada más | hace cada llamada mostrada arriba |
La clave de firma del agente se acuñó dentro del TEE y nunca lo abandonó. No tiene clave de API, ni URL, ni datos personales, y no puede acceder a un contrato central para inspeccionar sus propias concesiones — sin embargo, entrega un correo electrónico personalizado a una bandeja de entrada real.
Llegar hasta ahí requirió que Terminal 3 financiara el DID del agente manualmente: un agente acuñado comienza en cero y una llamada reserva 10.000 tokens, sin recarga de autoservicio (docs/BUGS.md#10). Todo desarrollador se encontrará con eso en su primer agente.
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