ADR-0017: Audit operations without recording their sensitive contents

  • Status: Accepted — retrospective baseline.
  • Recorded: 2026-09-29. This is the recording date, not an invented original approval date.
  • Authority and implementation boundaries: see Evidence below and the register conventions.

Context

Shared MCP operators need integrity evidence without creating a second store of SQL, rows, credentials or provider payloads.

Decision

Use optional append-only JSONL records authenticated with an HMAC-SHA256 chain. Record bounded invocation identity, operation, time and status, not arguments, results or error messages. Configured-but-invalid audit fails closed.

Before admitting work reserve capacity for started and terminal records; do not silently drop terminal events. Protect key/log paths, support one selected secret source, and verify the chain during rotation.

Alternatives and consequences

Plain logs permit undetected editing; full request logs leak restricted data. HMAC does not resist a key holder, and a local chain cannot prove a valid suffix was removed. Stronger retention needs independently stored final-MAC/log evidence; it is not claimed by this feature.

Evidence

Sources: audit operations, safe MCP specification. Executable anchor: audit tests.

Revisit when

A stronger adversary or retention requirement needs a separate design; do not describe local HMAC as non-repudiation or human approval.