Developer surfaces
Gateway, MCP, OTel und n8n
Die Kern-SDKs von Attesto decken direkte Applikationsintegration ab. Gateway, MCP, OpenTelemetry und n8n decken die Systeme um Applikationen herum ab: Modell-Proxying, Agent-Tools, Observability-Traces und Workflow-Automatisierung. Jede Oberfläche muss echte Proofstream-Evidence erzeugen, Source Timestamps respektieren und Secrets aus Payloads, Receipts, Bundles, Logs und Browsercode heraushalten.
Scope
Diese Seite richtet sich an Entwickler und technische Betreiber, die Attesto in AI-Gateways, Agent Hosts, Telemetry Pipelines und Automatisierungstools integrieren. Sie dokumentiert keine internen Staff-Operationen und ersetzt nicht die SDK-, API-, Connector- oder Local-Vault-Handbücher. Nutze sie, um die passende Oberfläche zu wählen und zu verstehen, welche Evidence jede Oberfläche erzeugt.
Wann welche Oberfläche genutzt wird
| Oberfläche | Nutzen, wenn | Erzeugt | Primärer Owner |
|---|---|---|---|
| Inference Gateway | OpenAI-kompatible Modellaufrufe erfasst werden sollen, ohne jede Applikation umzubauen. | Request/Response Commitments, Policy Metadata, Model-Routing Evidence und Receipts. | Platform- oder AI-Engineering-Team. |
| MCP server | Agent Hosts deterministische Tools für Events, Receipt-Verifikation oder Bundle-Erstellung benötigen. | Tool-call Evidence, Stream Events und Receipt-Verifikationsergebnisse. | Agent-Plattform oder Developer-Tooling-Team. |
| OpenTelemetry bridge | Bereits Spans vorhanden sind und ausgewählte Traces in Attesto-Evidence umgewandelt werden sollen. | Span Commitments, Trace/Span Source References und Service-Metadata Receipts. | Observability- oder Platform-Team. |
| n8n node | Workflow-Automatisierung verifizierbare Step Receipts und Signed-Webhook-Verifikation braucht. | Workflow-step Events, Source References, Receipt IDs und Verifikationsergebnisse. | Automation- oder Operations-Team. |
Inference Gateway
Das Attesto Inference Gateway ist ein serverseitiger Proxy für OpenAI-kompatible Modellaufrufe. Applikationen senden Requests an das Gateway; das Gateway leitet an den konfigurierten Upstream Provider weiter und schreibt Attesto-Evidence, bevor die Provider Response zurückgegeben wird. Nutze es, wenn Teams nicht in jeder Applikation SDK-Aufrufe ergänzen können oder zentrale Policy und Model Routing erforderlich sind.
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: Request- und Response-Metadata committen, nicht rohe Secrets oder Provider Credentials.
- Erlaubte Modi:
commitmentsundnonesind die einzigen Capture Modes; Raw Prompt/Response Capture existiert bewusst nicht. - OpenAI-kompatible Pfade:
/v1/chat/completions,/v1/completions,/v1/embeddingsund/v1/responseserzeugenattesto.model_decisionEvents. Andere Pfade werden unverändert geproxied und als generischehttp_callCommitment Events attestiert. - Streaming: SSE Responses werden byte-for-byte mit sofortigem Flush weitergereicht; das Gateway setzt den Stream erst nach Abschluss wieder zusammen, um Commitments zu berechnen.
- Source time: den Caller Timestamp beibehalten, wenn er geliefert wird; sonst Gateway Receive Time mit Timezone erfassen.
- Idempotency: Request ID oder Source Reference nutzen, damit Retries keine widersprüchliche Historie erzeugen.
- Delivery: Events nutzen eine begrenzte Queue und Hintergrund-Batches. Attesto-Ausfälle oder Queue Overflow landen in einem gefsyncten NDJSON Dead-Letter-Spool, automatisch replayed oder mit
attesto-gateway replay-spool.--spool-max-bytesist der einzige Drop-Punkt und wird laut gezählt und geloggt. - Header redaction:
Authorization,Proxy-Authorization,Cookie,Set-Cookie,api-key,x-api-keyund Header, dietoken|secret|keymatchen, erscheinen nie in Events, Logs, Spool Entries oder Fehlermeldungen. - Fail behavior: das Gateway ist standardmäßig fail-open mit Warnungen und fsynced Spool; ergänzen Sie
--strict, wenn die Policy verlangt, dass Receipt Creation vor Upstream-Arbeit gelingt. - Routing und TLS: Upstream TLS-Verifikation eingeschaltet lassen und explizite
--routeEntries für Multi-Upstream Deployments verwenden. - Operations: überwachen Sie
/healthzund/metricsauf--admin-listen, und nutzen Sieattesto-gateway replay-spoolnach Ausfällen.
MCP server
Der Attesto MCP server stellt MCP-kompatiblen Agent Hosts eine kleine
Menge deterministischer Attesto Tools bereit. Die aktuelle Tool
Surface ist log_action, get_receipt,
verify_receipt, get_stream_head und
verify_completeness. Der Server loggt Aktionen, ruft
Receipts ab, verifiziert Receipts offline, prüft Stream Heads und
beweist, dass ein Sequence Range gap-free ist, ohne dem Agent breite
Backend Credentials zu geben. Der MCP server sollte serverseitig in
der Agent Runtime laufen. Er enthält kein AI-Modell, keine AI-Vendor
Imports und keine versteckte Entscheidungslogik; er ist ein
deterministischer Tool Wrapper über dem Attesto SDK.
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
- MCP Credentials im Secret Store der Agent Runtime speichern.
- Keine Tenant API Keys, Provider API Keys oder rohen Customer Secrets über MCP tool arguments weitergeben.
- Lokale Verifikation:
verify_receiptundverify_completenesslaufen lokal; der Trust Anchor ist der gepinnte Witness Public Key, nicht eine Attesto Backend Response. - Leak guard: Payloads werden verweigert, wenn sie den Wert einer Environment Variable enthalten, die auf
_KEY,_TOKEN,_SECREToder_PASSWORDendet. - Tool Outputs deterministisch und receipt-orientiert halten, damit Agent Logs später verifiziert werden können.
- Die package default base URL ist bewusst overrideable; setzen Sie
ATTESTO_BASE_URL=https://verify.attesto.euexplizit für den öffentlichen Attesto Service. - Verfügbare Tools pro Agent Role begrenzen; nicht jeder Agent braucht Bundle Export oder Stream Creation.
OpenTelemetry bridge
Die OpenTelemetry bridge wandelt ausgewählte Spans in Attesto Events um. Sie ist sinnvoll, wenn die Trace Pipeline bereits Source of Truth ist: Model-Gateway Spans, Policy-Evaluation Spans, Connector-Sync Spans oder Incident-Handling Spans. Die Bridge muss stark filtern; nicht jeder Span sollte standardmäßig gesendet werden.
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: jeder beendete Span wird zu einem
attesto.otel_spanCommitment Event. - Source reference: Spans verwenden deterministische
otel:{trace_id}:{span_id}Source References, sodass erneutes Senden desselben Spans idempotent ist. - Payload discipline: Attribute, die Secrets oder personenbezogene Daten enthalten können, redigieren, bevor der Processor sie sieht; Python nutzt
attribute_allowlistund TypeScript nutztattributeAllowlist. - Commitment-only attributes: nur allowlisted Attributes werden als
attributes_commitmentplusattribute_keyscommitted; nicht allowlisted Werte werden nicht an Attesto geschrieben. Attribute Commitments vollständig deaktivieren mitcommit_attributes=FalseodercommitAttributes: false. - Host safety: Processor Failures brechen die Host App standardmäßig nicht; nutzen Sie
strict=Trueoderstrict: true, wenn Evidence Capture Failure den Request fehlschlagen lassen muss, undon_error/onErrorfür Observability. - Sampling: OTel Sampling an Evidence Policy ausrichten; weggefilterte Spans können später keine Evidence werden.
- Verification: Receipt IDs sollten, wenn möglich, in Logs oder Trace Attributes zurückgeschrieben werden.
n8n node
Der Attesto n8n node ist für Workflow-Automatisierung gedacht, die verifizierbare Step Evidence benötigt. Nutze ihn für Approval Workflows, Connector Handoffs, Incident Triage, Policy Checks und kundennahe Automatisierung, bei der ein Auditor später sehen muss, was wann passiert ist.
npm install n8n-nodes-attesto
- Attesto Credentials in n8n credentials speichern, nicht in Workflow JSON.
- Den Action Node für Log Event, Log Typed Compliance Event, Get Receipt und Verify Receipt (Offline) nutzen.
- Offline Receipt Verification: Verify Receipt berechnet den canonical hash und die Ed25519 Signature lokal gegen den Witness Key neu, der im n8n Credential gepinnt ist; Attesto Server werden nicht gefragt.
- Webhook Trigger: den Trigger Node nur für signature-verified Attesto Webhooks nutzen. Er verifiziert HMAC über
timestamp.bodymit constant-time comparison und 300 s clock-skew tolerance; stale oder forged Deliveries erhalten 401 und starten keine Workflows. - Source object id und source timestamp für externe Systeme explizit setzen.
- Keine Workflows mit eingebetteten Tenant Keys, Provider Tokens oder rohen regulierten Payloads veröffentlichen.
Evidence model
Alle vier Oberflächen sollten Evidence über dieselbe Proofstream-Semantik wie die SDKs erzeugen. Ein Gateway Request, MCP Tool Call, OTel Span oder n8n Workflow Step ist nichts Besonderes: Es ist ein Source Event mit Source Reference, Timestamp, normalized Commitment, Receipt und optionaler späterer Inclusion in Windows, Checkpoints, Witnesses und Anchors.
| Feld | Erforderliches Verhalten |
|---|---|
| source_system_id | Gateway, Agent Host, Telemetry Service oder n8n Instance identifizieren. |
| source_ref | Stabiler Idempotency Key wie Request ID, Tool Call ID, Trace/Span ID oder Workflow Execution ID. |
| source_time | Originaler Source Timestamp mit Timezone oder Offset. |
| payload_commitment | Normalized Payload Metadata committen, ohne Provider Secrets zu speichern. |
| receipt | Receipt ID zurückgeben oder speichern, damit das Event später verifiziert werden kann. |
Security boundaries
- Gateway und MCP nur serverseitig betreiben; niemals Attesto API Keys in Browser Bundles platzieren.
- Upstream Provider Secrets im Secret Store der verantwortlichen Runtime halten.
- Local Vault bevorzugen, wenn Connector- oder Edge-Credentials kundenseitig bleiben müssen.
- Prompts, Responses, Trace Attributes und Workflow Variables maskieren, wenn sie personenbezogene Daten oder Secrets enthalten.
- Tenant-scoped API Keys verwenden und sie widerrufen, wenn Gateway, Agent Host, Telemetry Collector oder Workflow stillgelegt wird.
Operations
Behandle diese Oberflächen als Production Integrations. Sie benötigen Health Checks, Retry Policy, Rate-Limit Handling, Idempotency, Source-Time-Validierung und beobachtbare Failure States. Eine Oberfläche kann aus einer Package Registry installiert sein, ist aber für einen Tenant erst production-ready, wenn sie einen echten Attesto API Key, einen echten Stream und eine erfolgreiche Receipt/Verify Canary hat.
| Check | Erwartetes Ergebnis |
|---|---|
| Install smoke | Package installiert aus der offiziellen Registry ohne Source Maps oder Source Leaks. |
| Receipt canary | Ein echtes Event wird geloggt und das Receipt verifiziert. |
| Retry canary | Wiederholte source_ref liefert Replay/Idempotent-Verhalten, keine doppelte Historie. |
| Secret scan | Kein Tenant Key, Provider Key, Prompt Secret, Trace Secret oder Workflow Credential erscheint in Logs oder Bundles. |
Failure modes
| Failure | Bedeutung | Response |
|---|---|---|
| Attesto unavailable | Die Oberfläche kann kein Receipt erhalten. | Fail closed, wenn Policy Evidence verlangt; andernfalls Run als missing evidence markieren. |
| Provider unavailable | Der Upstream Model/Tool/Workflow Service ist fehlgeschlagen. | Sichere Failure Metadata loggen, wenn Policy es erlaubt; kein Success Event erfinden. |
| Invalid source time | Der Source Timestamp fehlt oder ist malformed. | Reject oder Normalize gemäß Tenant Policy und Receive Time getrennt erfassen. |
| Secret detected | Payload oder Attribute scheint Secret Material zu enthalten. | Emission blockieren, an der Quelle redigieren und rotieren, wenn Leakage bestätigt ist. |
Rollout checklist
- Eine Oberfläche und einen Production Stream wählen; nicht alle Oberflächen gleichzeitig aktivieren.
- Credentials nur in serverseitigen Secret Stores oder n8n credentials speichern.
- Eine echte Event → Receipt → Verify Canary ausführen, bevor Nutzer eingeladen werden.
- Source timestamps, source references und Retention Policy dokumentieren.
- Dashboards oder Alerts für Receipt Failures, Retry Conflicts und Secret-Scan Rejections ergänzen.
- Tenant Docs und Changelog aktualisieren, wenn eine neue Oberfläche aktiviert wird.
