Where should deterministic host-authority decisions and receipts fit in MCP? #3202
Replies: 5 comments
|
Overlap correction after reading recent Security IG context: two active SEP PRs are closer than my original post made explicit. SEP-3004 defines a tamper-evident audit-record contract and published vectors; SEP-3140 covers signed/versioned capability declarations and trust labels. That narrows the possible AUEC contribution further: a host-owned per-action authority decision could, at most, consume authenticated declarations and compose with an existing audit-record format, rather than propose either generic primitive. I have updated my private routing notes accordingly. No SEP or adoption request is being made. AI assistance disclosure: Codex assisted with this clarification; I reviewed it and remain responsible for the content. |
|
The follow-up narrowing this against SEP-3004 and SEP-3140 is the right move — most of what would otherwise sprawl here is already scoped in those two. One distinction that still looks open in both: where the decision is made and where the receipt is produced don't have to be the same component. A host can be authoritative for the decision while the record is emitted at the boundary the action actually crossed, which keeps the evidence close to the thing that happened rather than close to the policy engine. That matters for your intersection step specifically — the interesting record isn't the authority that was granted, it's the delta between what was requested and what was allowed. The other half is what the record has to carry to be worth anything outside the system. Which policy version was in force, what identity the call was made under, and what the decision inputs were, not just the verdict. "Allowed" without the basis is a log line with extra steps, because the question that arrives later is always why, not whether. If your prototype already emits the inputs, that's a concrete contribution to the SEP-3004 contract rather than a competing format. One practical note: SEP-3004 is open and still listed as needing a sponsor. If you have a working implementation and vectors it disagrees with, that route is probably more direct than a separate track. |
|
Routing feedback, since that is what you asked for, plus one pointer correction. The correction first. The opening post cites "signed access-decision receipts discussed in Discussion #2462." #2462 is "MCP Server Discovery via On routing. Your own narrowing is right, and @grabdoc's distinction sharpens it further: the decision site and the record site need not be the same component. That splits your AUEC work cleanly across the two SEPs you already identified, rather than needing a home of its own.
Which makes the interesting artifact narrower than a receipt: it is the delta between what was requested and what was allowed. A record of what executed answers "what happened"; the delta answers "what was asked for and refused", which is the part no downstream reader can reconstruct from the executed record alone. If AUEC contributes one thing to One property worth carrying into whichever home it lands in, since it is cheap to state now and expensive to retrofit: a decision record is produced by the party whose authority it describes. That is fine for debugging and insufficient the moment the record is offered to anyone with a reason to doubt the producer — which is when authority decisions actually get read. SEP-3004's thread has been working exactly that boundary this week; worth reading before you pick a shape. Disclosure: drafted with AI assistance, human-reviewed, consistent with the convention in the adjacent SEP threads. — Tersign |
|
Thanks @grabdoc and @wowlegend — this resolves the routing question much more cleanly. I have corrected the erroneous #2462 pointer in the opening post. The direction I am taking is now deliberately narrow:
The current experimental spike already keeps the decision host-owned, ignores caller-supplied audit data as authority, and maps the terminal allow/deny result to a SEP-3004-shaped record. It does not yet serialize the full requested, host-allowed and effective sets, policy revision, separate decision/emission identities, or a commitment to all decision inputs. I am updating that spike to separate the decision authority from the boundary emitter, reproduce SEP-3004's published vectors unchanged, and add negative vectors for delta inconsistency, policy/principal mismatch, action mutation and self-attested producer limits. If the current contract already carries the case cleanly, the result will be an implementation/vector contribution. I will only suggest minimal optional AI-assistance disclosure: OpenAI ChatGPT and Codex assisted with analysis, implementation planning and drafting. I reviewed this response and remain responsible for it. |
|
@grabdoc's distinction — that the decision site and the record site need not be the same component — matches what we ran into building the effect side of this, and there's a consequence worth making explicit in whatever record format wins. The decision and the effect are separated by time and a network call, and that gap is where the hard case lives. A host can authorize an action deterministically and still not know whether it happened: the call goes out, the effect lands, the response is lost. At that moment the honest record has three possible states, not two —
The third is the one that gets silently folded into the second, and that collapse is exactly how a retried timeout becomes a duplicate charge. If a decision receipt only carries the authority basis and not the disposition of the effect, then at audit time "the host authorized this" reads as "this happened", which is a stronger claim than the evidence supports. I'd argue the record should be able to say "authorized, outcome unverified" as a first-class value rather than as an absence. That also sharpens the placement question. A record emitted at the boundary the action crossed (grabdoc's framing) is the only place that can later be reconciled — it's where the provider's own handle for the effect exists. A record produced at the policy engine can attest to the decision faithfully and structurally cannot attest to the outcome. Both are useful; conflating them at read time is the risk. One narrow, concrete suggestion, offered without any claim about where it belongs in the SEP landscape: whatever the record carries, keeping authority basis and effect disposition as separate fields — rather than one status — makes the difference between "we were allowed to" and "it happened" impossible to lose. We learned that the expensive way; our own logs once reported sends as successful that had verifiably never left, because the field being read was our claim about ourselves rather than the provider's record. No position on routing or SEP overlap — deferring to your narrowing and to @wowlegend's read on that. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
I am looking for routing and overlap feedback on a narrow host-side problem,
not proposing a new transport or asking for immediate standardization.
An MCP server can describe a tool and a remote model can propose a call, but
the host still has to derive the authority actually granted for that exact
action. In the prototype I am testing, the decision intersects requested and
host-allowed operations, applies a pure authorization predicate, keeps
probabilistic
claimvalues from becoming action authority, and emits aportable decision/execution record.
The Security IG charter already includes auditability of what a tool call did
and under what authority. The Interceptors WG and open SEP-2624 provide an
obvious validator enforcement point. Tool Annotations work provides useful risk
vocabulary, but the specification treats annotations as untrusted hints unless
their source is trusted, so I do not view them as authority grants.
I also found direct adjacent work:
caller-governanceextension and its active thread on tamper-evident per-action decision records.Edit 2026-08-08: corrected the erroneous #2462 pointer after feedback from @wowlegend. #2462 concerns MCP server discovery, not decision receipts.
These overlap substantially. I am not claiming novelty for policy
intersection, interceptors, annotations, digests, consent binding, or decision
receipts in isolation.
To make the remaining question concrete, I added a reviewer-runnable command:
The command uses deterministic U0 inputs and a disposable directory. It shows
green baseline, expected-red isolated mutant, and green restoration for:
claimfrom the U0 executable result surface;admission, and action-digest-bound consent.
It performs no network access or consequential action.
Code and evidence:
The local evidence is deliberately bounded: 30 unit tests pass, 4,000
deterministic stress observations match the safety oracle, and 345 finite
model states have no counterexample. The published A2A record remains
incomplete at 79/80 applicable JSON-RPC checks and 76/78 HTTP+JSON checks.
This is not a production sandbox or an external security validation.
Which is the smallest useful MCP-shaped unit here?
I would especially value pointers to overlapping work I missed and guidance on
whether the authority decision and the receipt should be discussed together or
separately.
AI-assistance disclosure: OpenAI ChatGPT and Codex assisted with research,
drafting, implementation, testing, and artifact automation. I reviewed the
public claims and remain responsible for this post and the code.
All reactions