fix(binjovi-mcp): grant the Claude client repository.create #120
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/claude-client-repository-scope"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
create_repositoryover MCP is refused withforbidden, even though the controlplane's
BINJOVI_MCP_POLICYbinding holdsbinjovi.repository.createand thelive Deployment carries it.
Why the binding was not enough
MCP authorization is the intersection of the policy binding and the token's
own
scopeclaim (Binjovi.Api.MCP.Access.read/4filters binding permissions byidentity.claims["scope"]). This client never carried the scope, so the bindingcould grant nothing.
get_permissionsshowed 20 grants withbinjovi.repository.createabsent, which is the same filter reporting the samegap.
Two writers, one scope apart
sean/seanfarmalso registersbinjovi-claude-code, with the scope present:repository.createsean/seanfarmclaude-code-oauth.yamlLast sync won, and the live client was diffed to confirm it: exactly one scope
missing, every other value identical.
Binjovi names this repo the owner — "Ory GitOps owns these public clients and
fixes their sole audience to MCP" (
Binjovi.MCPOAuth.Protocol,@managed_clients).So the scope is added here, and the duplicate registrar is removed from
sean/seanfarmin a companion PR.binjovi.repository.createis a declared MCP scope:Binjovi.Domain.MCPPermissionsmapscreate_repositoryto it, andProtocol.@scopesadvertises it in the OAuth metadata.Guard
tests/binjovi-mcp-claude-client.shmoveslength == 23to24and now namesthe scope, so dropping it again is a red test rather than a
forbiddentool callwith no explanation. Confirmed red before the manifest change, green after.
tests/check.shpasses.After this deploys
The client changes, not the token. Anyone already connected must reconnect the
MCP server to be issued a token carrying the new scope — a refresh does not pick
up scopes added after the grant.
https://claude.ai/code/session_01JGe4pyhQ36AhgDfPJry4d3