You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Optional "Receipt Required" guard for destructive tools (delete_repo, permissions) #2761
This server exposes irreversible tools (delete_repository, visibility/permission changes). I maintain EMILIA's open Receipt Required rail (Apache-2.0): a small, opt-in gate so an irreversible tool refuses to run unless a named human signed an authorization receipt for that exact action.
The four-step behavior (CI-verified):
missing receipt → 428 Receipt Required
valid, action-bound receipt → runs
same receipt replayed → refused (one-time consumption)
forged receipt → refused
It's disabled by default, no protocol lock-in — purely additive. There's a runnable github-admin example mirroring delete_repo, plus a 10-minute guide. Would you be open to a PR adding this behind an opt-in flag? Happy to author it.
Status update from the current main history: the basic repository-deletion confirmation boundary has already landed in merged PR #3076 (8ec6249, merged 2026-08-18).
The current implementation now:
requires the client to elicit the exact owner/repo name before deletion (pkg/github/repositories.go:749-840);
binds the requested owner, repo, repository ID, and a 10-minute expiry into encrypted multi-round-trip request state (:742-747, :808-839);
hides delete_repository from self-hosted HTTP inventory when GITHUB_MCP_SERVER_MRTR_STATE_KEY is absent, and refuses malformed keys at startup (pkg/http/server.go:281-291, documented in docs/streamable-http.md:35-51).
That substantially addresses a “do not delete without an explicit exact-target confirmation” requirement, but it is not equivalent to the EMILIA receipt model described here: the current MCP elicitation does not authenticate a named human signer, verify a signature/trust root, or provide one-time receipt consumption/audit identity. Also, the current repository exposes no visibility/permission write tool corresponding to the other half of the issue title; collaborator listing is read-only.
I suggest retargeting this issue rather than treating the two mechanisms as interchangeable:
close or split the already-addressed delete-repository part if exact interactive confirmation is sufficient; or
keep a narrower follow-up for an identity-bound, protocol-independent receipt rail, with explicit requirements for trust-root/key rotation, canonical action binding, replay storage and atomic consumption, transport/actor binding, error semantics, and direct-call bypass tests.
In particular, an accepted ElicitResult alone should not be described as proof that a named human signed an authorization receipt.
Thank you, this is a very helpful correction.
I checked merged PR #3076 at 8ec6249. I agree that the current delete flow
now covers exact-target interactive confirmation, and I would not describe
an accepted ElicitResult as a signed authorization from a named human.
I also agree that the permission half of my original title is stale because
this server exposes no permission write tool today.
I would like to keep the issue open only if maintainers see value in the
narrower gap: an opt-in, protocol-independent receipt rail that
authenticates a named signer and consumes an exact-action receipt once,
across direct and transport-mediated calls. I can retitle and rewrite the
issue around the requirements you listed, then bring a concrete PR with
atomic-consumption and direct-call bypass tests, without changing default
behavior.
Would that narrower contribution be useful here, or would you prefer that I
close this and return only once the PR is ready?
Thank you again,
Iman
Activity
CAOShurong commentedon Aug 23, 2026
Status update from the current
mainhistory: the basic repository-deletion confirmation boundary has already landed in merged PR #3076 (8ec6249, merged 2026-08-18).The current implementation now:
owner/reponame before deletion (pkg/github/repositories.go:749-840);:742-747,:808-839);:843-884);delete_repositoryfrom self-hosted HTTP inventory whenGITHUB_MCP_SERVER_MRTR_STATE_KEYis absent, and refuses malformed keys at startup (pkg/http/server.go:281-291, documented indocs/streamable-http.md:35-51).That substantially addresses a “do not delete without an explicit exact-target confirmation” requirement, but it is not equivalent to the EMILIA receipt model described here: the current MCP elicitation does not authenticate a named human signer, verify a signature/trust root, or provide one-time receipt consumption/audit identity. Also, the current repository exposes no visibility/permission write tool corresponding to the other half of the issue title; collaborator listing is read-only.
I suggest retargeting this issue rather than treating the two mechanisms as interchangeable:
In particular, an accepted
ElicitResultalone should not be described as proof that a named human signed an authorization receipt.FutureEnterprises commentedon Aug 23, 2026