Developer surfaces
Gateway, MCP, OTel i n8n
Główne SDK Attesto obejmują bezpośrednią integrację aplikacji. Gateway, MCP, OpenTelemetry i n8n obejmują systemy wokół aplikacji: proxy dla modeli, narzędzia agentów, trace observability i automatyzację workflow. Każda powierzchnia musi emitować realne Proofstream evidence, respektować source timestamps i trzymać secrets poza payloads, receipts, bundles, logami oraz kodem przeglądarkowym.
Scope
Ta strona jest dla developerów i technicznych operatorów, którzy integrują Attesto z AI gateways, agent hosts, telemetry pipelines i narzędziami automatyzacji. Nie dokumentuje wewnętrznych operacji staff i nie zastępuje podręczników SDK, API, connectors ani Local Vault. Użyj jej, aby dobrać właściwą powierzchnię i zrozumieć, jaką evidence tworzy każda z nich.
Kiedy użyć której powierzchni
| Powierzchnia | Użyj, gdy | Tworzy | Główny właściciel |
|---|---|---|---|
| Inference Gateway | Chcesz przechwytywać wywołania modeli zgodne z OpenAI bez zmiany każdej aplikacji. | Request/response commitments, policy metadata, model routing evidence i receipts. | Zespół platformowy lub AI engineering. |
| MCP server | Agent hosts potrzebują deterministycznych tools do logowania events, weryfikacji receipts lub budowania bundles. | Tool-call evidence, stream events i wyniki weryfikacji receipts. | Zespół agent platform lub developer tooling. |
| OpenTelemetry bridge | Emitujesz już spans i chcesz zamienić wybrane traces na Attesto evidence. | Span commitments, trace/span source references i service metadata receipts. | Zespół observability lub platformy. |
| n8n node | Automatyzacja workflow potrzebuje weryfikowalnych step receipts i weryfikacji podpisanych webhooków. | Workflow-step events, source references, receipt IDs i wyniki weryfikacji. | Zespół automation lub operations. |
Inference Gateway
Attesto Inference Gateway to server-side proxy dla wywołań modeli zgodnych z OpenAI. Aplikacje wysyłają requests do gateway; gateway przekazuje je do skonfigurowanego upstream provider i zapisuje Attesto evidence przed zwróceniem odpowiedzi providera. Użyj go, gdy zespoły nie mogą dodać SDK calls do każdej aplikacji albo gdy potrzebna jest centralna polityka i 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: commituj metadane request i response, nie raw secrets ani provider credentials.
- Dozwolone tryby:
commitmentsinonesą jedynymi capture modes; raw prompt/response capture celowo nie istnieje. - Ścieżki zgodne z OpenAI:
/v1/chat/completions,/v1/completions,/v1/embeddingsi/v1/responsestworzą eventyattesto.model_decision. Inne ścieżki są proxied bez zmian i atestowane jako generyczne commitment eventshttp_call. - Streaming: response SSE przechodzą byte-for-byte z natychmiastowym flush; gateway składa stream dopiero po zakończeniu wyłącznie po to, aby obliczyć commitments.
- Source time: zachowaj timestamp callera, jeśli jest dostarczony; w przeciwnym razie zapisz gateway receive time z timezone.
- Idempotency: używaj request id lub source reference, aby retries nie tworzyły sprzecznej historii.
- Delivery: eventy używają ograniczonej queue i background batches. Awarie Attesto lub queue overflow trafiają do fsynced NDJSON dead-letter spool, odtwarzanego automatycznie albo przez
attesto-gateway replay-spool.--spool-max-bytesto jedyny punkt drop i jest głośno liczony oraz logowany. - Header redaction:
Authorization,Proxy-Authorization,Cookie,Set-Cookie,api-key,x-api-keyoraz headers pasujące dotoken|secret|keynigdy nie pojawiają się w eventach, logach, spool entries ani komunikatach błędów. - Fail behavior: gateway domyślnie jest fail-open z ostrzeżeniami i fsynced spool; dodaj
--strict, gdy polityka wymaga utworzenia receipt przed kontynuacją upstream work. - Routing i TLS: zostaw włączoną weryfikację upstream TLS i używaj jawnych wpisów
--routedla wdrożeń multi-upstream. - Operations: monitoruj
/healthzi/metricsna--admin-listen, i używajattesto-gateway replay-spoolpo awariach.
MCP server
Attesto MCP server udostępnia MCP-compatible agent hosts wąski zestaw
deterministycznych narzędzi Attesto. Aktualna tool surface to
log_action, get_receipt,
verify_receipt, get_stream_head i
verify_completeness. Serwer loguje actions, pobiera
receipts, weryfikuje receipts offline, sprawdza stream heads i
dowodzi, że sequence range jest gap-free bez przekazywania agentowi
szerokich backend credentials. MCP server powinien działać server-side
w środowisku runtime agenta. Nie zawiera modelu AI, importów AI
vendor ani ukrytej logiki decyzyjnej; to deterministyczny wrapper
narzędziowy nad 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
- Przechowuj MCP credentials w secret store środowiska runtime agenta.
- Nie przekazuj tenant API keys, provider API keys ani raw customer secrets przez MCP tool arguments.
- Lokalna weryfikacja:
verify_receiptiverify_completenessdziałają lokalnie; trust anchor to przypięty witness public key, nie odpowiedź backendu Attesto. - Leak guard: payloads są odrzucane, gdy zawierają wartość environment variable kończącej się na
_KEY,_TOKEN,_SECRETlub_PASSWORD. - Utrzymuj tool outputs deterministyczne i receipt-oriented, aby agent logs można było później zweryfikować.
- Package default base URL jest celowo overrideable; ustaw jawnie
ATTESTO_BASE_URL=https://verify.attesto.eudla publicznej usługi Attesto. - Ogranicz dostępne tools według roli agenta; nie każdy agent potrzebuje bundle export lub stream creation.
OpenTelemetry bridge
OpenTelemetry bridge zamienia wybrane spans na Attesto events. Jest przydatny, gdy źródłem prawdy jest już trace pipeline: spans model gateway, policy evaluation, connector sync albo incident handling. Bridge musi filtrować agresywnie; nie wysyłaj domyślnie każdego span.
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: każdy zakończony span staje się jednym commitment event
attesto.otel_span. - Source reference: spans używają deterministycznych source references
otel:{trace_id}:{span_id}, więc ponowne wysłanie tego samego span jest idempotentne. - Payload discipline: redaguj attributes, które mogą zawierać secrets lub dane osobowe, zanim zobaczy je processor; Python używa
attribute_allowlist, a TypeScript używaattributeAllowlist. - Commitment-only attributes: tylko allowlisted attributes są commitowane jako
attributes_commitmentplusattribute_keys; wartości spoza allowlist nie są zapisywane w Attesto. Wyłącz attribute commitments całkowicie przezcommit_attributes=FalselubcommitAttributes: false. - Host safety: processor failures domyślnie nie przerywają host app; użyj
strict=Truelubstrict: true, gdy evidence capture failure ma przerwać request, orazon_error/onErrordla observability. - Sampling: dopasuj OTel sampling do evidence policy; spans odrzucone przez sampling nie mogą później stać się evidence.
- Verification: receipt IDs powinny być zapisywane z powrotem do logów lub trace attributes, gdy to możliwe.
n8n node
Attesto n8n node jest dla automatyzacji workflow, która potrzebuje weryfikowalnego step evidence. Użyj go dla approval workflows, connector handoffs, incident triage, policy checks i automatyzacji dla klientów, gdzie auditor musi później zobaczyć, co i kiedy się stało.
npm install n8n-nodes-attesto
- Przechowuj Attesto credentials w n8n credentials, nie w workflow JSON.
- Użyj action node dla Log Event, Log Typed Compliance Event, Get Receipt i Verify Receipt (Offline).
- Offline receipt verification: Verify Receipt lokalnie przelicza canonical hash i podpis Ed25519 względem witness key przypiętego w credential n8n; serwery Attesto nie są pytane.
- Webhook trigger: używaj trigger node tylko dla signature-verified Attesto webhooks. Weryfikuje HMAC nad
timestamp.bodyz constant-time comparison i tolerancją clock-skew 300 s; stale lub forged deliveries dostają 401 i nie uruchamiają workflows. - Ustaw source object id i source timestamp jawnie dla systemów zewnętrznych.
- Nie publikuj workflows z osadzonymi tenant keys, provider tokens ani raw regulated payloads.
Evidence model
Wszystkie cztery powierzchnie powinny emitować evidence zgodnie z tą samą semantyką Proofstream co SDKs. Gateway request, MCP tool call, OTel span lub n8n workflow step nie są wyjątkowe: to source event z source reference, timestamp, normalized commitment, receipt i opcjonalną późniejszą inclusion w windows, checkpoints, witnesses i anchors.
| Pole | Wymagane zachowanie |
|---|---|
| source_system_id | Identyfikuje gateway, agent host, telemetry service lub instancję n8n. |
| source_ref | Stabilny idempotency key, taki jak request id, tool call id, trace/span id lub workflow execution id. |
| source_time | Oryginalny source timestamp z timezone lub offset. |
| payload_commitment | Commituje normalized payload metadata bez przechowywania provider secrets. |
| receipt | Zwraca lub zapisuje receipt id, aby event można było później zweryfikować. |
Security boundaries
- Uruchamiaj Gateway i MCP tylko server-side; nigdy nie umieszczaj Attesto API keys w browser bundles.
- Trzymaj upstream provider secrets w secret store runtime, który jest ich właścicielem.
- Preferuj Local Vault, gdy connector lub edge credentials muszą pozostać po stronie klienta.
- Maskuj prompts, responses, trace attributes i workflow variables, gdy zawierają dane osobowe lub secrets.
- Używaj tenant-scoped API keys i revokuj je, gdy gateway, agent host, telemetry collector lub workflow zostaje wycofany.
Operations
Traktuj te powierzchnie jako integracje produkcyjne. Potrzebują health checks, retry policy, rate-limit handling, idempotency, walidacji source-time i obserwowalnych failure states. Powierzchnia może być zainstalowana z package registry, ale nie jest production-ready dla tenanta, dopóki nie ma realnego Attesto API key, realnego stream i udanego receipt/verify canary.
| Check | Oczekiwany wynik |
|---|---|
| Install smoke | Package instaluje się z oficjalnego registry bez source maps lub source leaks. |
| Receipt canary | Jedno realne event zostaje zalogowane, a receipt przechodzi weryfikację. |
| Retry canary | Powtórzone source_ref daje replay/idempotent behavior, nie zduplikowaną historię. |
| Secret scan | Żaden tenant key, provider key, prompt secret, trace secret ani workflow credential nie pojawia się w logach lub bundles. |
Failure modes
| Failure | Znaczenie | Reakcja |
|---|---|---|
| Attesto unavailable | Powierzchnia nie może uzyskać receipt. | Fail closed, gdy polityka wymaga evidence; w innym wypadku oznacz run jako missing evidence. |
| Provider unavailable | Upstream model/tool/workflow service zawiódł. | Zaloguj bezpieczne failure metadata, jeśli polityka pozwala; nie twórz fikcyjnego success event. |
| Invalid source time | Source timestamp jest brakujący lub malformed. | Reject albo normalize według tenant policy i zapisz receive time oddzielnie. |
| Secret detected | Payload lub attribute wydaje się zawierać secret material. | Zablokuj emission, zredaguj u źródła i zrotuj, jeśli wyciek jest potwierdzony. |
Rollout checklist
- Wybierz jedną powierzchnię i jeden production stream; nie włączaj wszystkich powierzchni naraz.
- Przechowuj credentials tylko w server-side secret stores lub n8n credentials.
- Uruchom realny event → receipt → verify canary przed zaproszeniem użytkowników.
- Udokumentuj source timestamps, source references i retention policy.
- Dodaj dashboards lub alerts dla receipt failures, retry conflicts i secret-scan rejections.
- Aktualizuj tenant docs i changelog, gdy włączasz nową powierzchnię.
