Developer surfaces
Gateway, MCP, OTel y n8n
Los SDK principales de Attesto cubren la integración directa en aplicaciones. Gateway, MCP, OpenTelemetry y n8n cubren los sistemas alrededor de las aplicaciones: proxy de modelos, herramientas de agentes, trazas de observabilidad y automatización de workflows. Cada superficie debe emitir evidencia Proofstream real, respetar source timestamps y mantener secretos fuera de payloads, receipts, bundles, logs y código de navegador.
Scope
Esta página es para desarrolladores y operadores técnicos que integran Attesto en AI gateways, agent hosts, telemetry pipelines y herramientas de automatización. No documenta operaciones internas de staff y no sustituye los manuales de SDK, API, conectores o Local Vault. Úsala para elegir la superficie correcta y entender qué evidencia crea cada una.
Cuándo usar cada superficie
| Superficie | Úsala cuando | Produce | Responsable principal |
|---|---|---|---|
| Inference Gateway | Quieres capturar llamadas de modelos compatibles con OpenAI sin cambiar cada aplicación. | Request/response commitments, policy metadata, evidencia de model routing y receipts. | Equipo de plataforma o AI engineering. |
| MCP server | Los agent hosts necesitan herramientas deterministas para registrar events, verificar receipts o construir bundles. | Tool-call evidence, stream events y resultados de verificación de receipts. | Equipo de agent platform o developer tooling. |
| OpenTelemetry bridge | Ya emites spans y quieres convertir trazas seleccionadas en evidencia Attesto. | Span commitments, trace/span source references y service metadata receipts. | Equipo de observabilidad o plataforma. |
| n8n node | La automatización de workflows necesita step receipts verificables y verificación de webhooks firmados. | Workflow-step events, source references, receipt IDs y resultados de verificación. | Equipo de automation u operations. |
Inference Gateway
Attesto Inference Gateway es un proxy server-side para llamadas de modelos compatibles con OpenAI. Las aplicaciones envían requests al gateway; el gateway reenvía al proveedor upstream configurado y escribe evidencia Attesto antes de devolver la respuesta del provider. Úsalo cuando los equipos no puedan añadir llamadas SDK en cada aplicación, o cuando se necesite política central y model routing.
export ATTESTO_API_KEY="$ATTESTO_SYSTEM_KEY"
export OPENAI_BASE_URL=http://127.0.0.1:8765/v1
attesto-gateway --listen 127.0.0.1:8765 \
--admin-listen 127.0.0.1:8766 \
--attesto-base-url https://verify.attesto.eu \
--upstream https://api.openai.com/v1 \
--stream-id "$ATTESTO_STREAM_ID" \
--capture commitments
curl -sS "$OPENAI_BASE_URL/chat/completions" \
-H "Authorization: Bearer ${PROVIDER_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4.1-mini","messages":[{"role":"user","content":"Summarize this policy"}]}'
- Capture mode: comprometer metadatos de request y response, no secretos raw ni credenciales del provider.
- Modos permitidos:
commitmentsynoneson los únicos capture modes; la captura raw de prompts/responses no existe deliberadamente. - Rutas compatibles con OpenAI:
/v1/chat/completions,/v1/completions,/v1/embeddingsy/v1/responsescrean eventosattesto.model_decision. Otras rutas se proxifican sin cambios y se atestiguan como eventos de commitment genéricoshttp_call. - Streaming: las responses SSE pasan byte-for-byte con flush inmediato; el gateway recompone el stream después de finalizar solo para calcular commitments.
- Source time: conservar el timestamp del caller si se entrega; si no, registrar gateway receive time con timezone.
- Idempotency: usar request id o source reference para que los retries no creen historia conflictiva.
- Delivery: los eventos usan una cola acotada y batches en segundo plano. Las caídas de Attesto o overflow de cola van a un dead-letter spool NDJSON con fsync, reproducido automáticamente o con
attesto-gateway replay-spool.--spool-max-byteses el único punto de descarte y se cuenta y registra de forma visible. - Header redaction:
Authorization,Proxy-Authorization,Cookie,Set-Cookie,api-key,x-api-keyy headers que coincidan contoken|secret|keynunca aparecen en eventos, logs, spool entries ni mensajes de error. - Fail behavior: el gateway es fail-open por defecto con advertencias y spool fsync; añade
--strictcuando la política exige que la creación del receipt funcione antes de continuar al upstream. - Routing y TLS: mantén activada la verificación TLS del upstream y usa entradas
--routeexplícitas para despliegues multi-upstream. - Operations: monitoriza
/healthzy/metricsen--admin-listen, y usaattesto-gateway replay-spooldespués de incidencias.
MCP server
El Attesto MCP server expone un conjunto estrecho de herramientas
Attesto deterministas a agent hosts compatibles con MCP. La superficie
actual de herramientas es log_action,
get_receipt, verify_receipt,
get_stream_head y verify_completeness. El
servidor registra acciones, obtiene receipts, verifica receipts
offline, inspecciona stream heads y prueba que un rango de secuencia
está gap-free sin entregar credenciales amplias del backend al agente.
El MCP server debe ejecutarse server-side en el entorno runtime del
agente. No contiene ningún modelo de AI, ningún import de proveedor
AI ni lógica de decisión oculta; es un wrapper determinista de
herramientas sobre el SDK de Attesto.
pip install attesto-mcp
{
"mcpServers": {
"attesto": {
"command": "attesto-mcp",
"args": ["--stdio"],
"env": {
"ATTESTO_BASE_URL": "https://verify.attesto.eu",
"ATTESTO_API_KEY": "${ATTESTO_API_KEY}",
"ATTESTO_STREAM_ID": "${ATTESTO_STREAM_ID}"
}
}
}
}
attesto-mcp --stdio
- Guarda las credenciales MCP en el secret store del runtime del agente.
- No pases tenant API keys, provider API keys ni secretos raw del cliente mediante MCP tool arguments.
- Verificación local:
verify_receiptyverify_completenessse ejecutan localmente; el trust anchor es la witness public key fijada, no una respuesta del backend de Attesto. - Leak guard: los payloads se rechazan cuando contienen el valor de una environment variable que termina en
_KEY,_TOKEN,_SECRETo_PASSWORD. - Mantén los outputs de herramientas deterministas y orientados a receipts para que los logs de agentes se puedan verificar después.
- La package default base URL es overrideable a propósito; define explícitamente
ATTESTO_BASE_URL=https://verify.attesto.eupara el servicio público de Attesto. - Restringe las herramientas disponibles por rol de agente; no todos los agentes necesitan bundle export o stream creation.
OpenTelemetry bridge
El OpenTelemetry bridge convierte spans seleccionados en events Attesto. Es útil cuando la fuente de verdad ya es una trace pipeline: spans de model gateway, evaluación de políticas, sync de conectores o gestión de incidentes. El bridge debe filtrar con rigor; no envíes cada span por defecto.
pip install attesto opentelemetry-sdk
import os
from attesto import AttestoClient
from attesto.otel import AttestoSpanProcessor
from opentelemetry.sdk.trace import TracerProvider
provider = TracerProvider()
provider.add_span_processor(
AttestoSpanProcessor(
client=AttestoClient(api_key=os.environ["ATTESTO_API_KEY"]),
stream_id=os.environ["ATTESTO_STREAM_ID"],
)
)
- Event type: cada span finalizado se convierte en un evento commitment
attesto.otel_span. - Source reference: los spans usan source references deterministas
otel:{trace_id}:{span_id}, así reenviar el mismo span es idempotente. - Payload discipline: redacta attributes que puedan contener secretos o datos personales antes de que el processor los vea; Python usa
attribute_allowlisty TypeScript usaattributeAllowlist. - Commitment-only attributes: solo los attributes allowlisted se comprometen, como
attributes_commitmentmásattribute_keys; los valores no allowlisted no se escriben en Attesto. Desactiva los attribute commitments por completo concommit_attributes=FalseocommitAttributes: false. - Host safety: los failures del processor no rompen la aplicación host por defecto; usa
strict=Trueostrict: truecuando un fallo de evidence capture deba fallar la request, yon_error/onErrorpara observability. - Sampling: alinea el sampling OTel con la política de evidencia; los spans descartados por sampling no pueden convertirse en evidencia después.
- Verification: los receipt IDs deben escribirse de vuelta en logs o trace attributes cuando sea posible.
n8n node
El Attesto n8n node es para automatización de workflows que necesita step evidence verificable. Úsalo para approval workflows, connector handoffs, triage de incidentes, policy checks y automatización orientada al cliente donde un auditor debe ver después qué ocurrió y cuándo.
npm install n8n-nodes-attesto
- Guarda las credenciales Attesto en n8n credentials, no en workflow JSON.
- Usa el action node para Log Event, Log Typed Compliance Event, Get Receipt y Verify Receipt (Offline).
- Offline receipt verification: Verify Receipt recalcula localmente el canonical hash y la firma Ed25519 contra la witness key fijada en la credencial n8n; los servidores de Attesto no se consultan.
- Webhook trigger: usa el trigger node solo para webhooks Attesto signature-verified. Verifica HMAC sobre
timestamp.bodycon comparación constant-time y tolerancia de clock-skew de 300 s; las deliveries stale o forged reciben 401 y no inician workflows. - Define explícitamente source object id y source timestamp para sistemas externos.
- No publiques workflows con tenant keys, provider tokens o payloads regulados raw incrustados.
Evidence model
Las cuatro superficies deben emitir evidencia con la misma semántica Proofstream que los SDKs. Un gateway request, MCP tool call, OTel span o n8n workflow step no es especial: es un source event con source reference, timestamp, normalized commitment, receipt e inclusión opcional posterior en windows, checkpoints, witnesses y anchors.
| Campo | Comportamiento requerido |
|---|---|
| source_system_id | Identificar el gateway, agent host, telemetry service o instancia n8n. |
| source_ref | Clave de idempotency estable como request id, tool call id, trace/span id o workflow execution id. |
| source_time | Timestamp source original con timezone u offset. |
| payload_commitment | Comprometer metadatos de payload normalizados sin almacenar secretos del provider. |
| receipt | Devolver o almacenar receipt id para que el event pueda verificarse después. |
Security boundaries
- Ejecuta Gateway y MCP solo server-side; nunca pongas Attesto API keys en bundles de navegador.
- Mantén los secretos del upstream provider en el secret store del runtime propietario.
- Prefiere Local Vault cuando las credenciales de connector o edge deben permanecer del lado del cliente.
- Enmascara prompts, responses, trace attributes y workflow variables cuando contengan datos personales o secretos.
- Usa API keys scoped al tenant y revócalas cuando se retire un gateway, agent host, telemetry collector o workflow.
Operations
Trata estas superficies como integraciones de producción. Necesitan health checks, retry policy, rate-limit handling, idempotency, validación de source time y estados de fallo observables. Una superficie puede instalarse desde un package registry, pero no está production-ready para un tenant hasta que tenga una Attesto API key real, un stream real y un receipt/verify canary correcto.
| Check | Resultado esperado |
|---|---|
| Install smoke | El package instala desde el registry oficial sin source maps ni source leaks. |
| Receipt canary | Se registra un event real y el receipt verifica. |
| Retry canary | Un source_ref repetido devuelve comportamiento replay/idempotent, no historia duplicada. |
| Secret scan | Ninguna tenant key, provider key, prompt secret, trace secret o credencial de workflow aparece en logs o bundles. |
Failure modes
| Failure | Significado | Respuesta |
|---|---|---|
| Attesto unavailable | La superficie no puede obtener un receipt. | Fail closed cuando la política requiere evidencia; si no, marcar la ejecución como missing evidence. |
| Provider unavailable | Falló el servicio upstream model/tool/workflow. | Registrar metadatos de fallo seguros si la política lo permite; no inventar un success event. |
| Invalid source time | El source timestamp falta o está malformed. | Rechazar o normalizar según tenant policy y registrar receive time aparte. |
| Secret detected | Un payload o attribute parece contener secret material. | Bloquear la emisión, redactar en origen y rotar si se confirma la fuga. |
Rollout checklist
- Elige una superficie y un production stream; no habilites todas las superficies a la vez.
- Guarda credenciales solo en secret stores server-side o en n8n credentials.
- Ejecuta un canary real event → receipt → verify antes de invitar usuarios.
- Documenta source timestamps, source references y retention policy.
- Añade dashboards o alertas para receipt failures, retry conflicts y secret-scan rejections.
- Actualiza tenant docs y changelog al habilitar una nueva superficie.
