Roles and grants
A workspace role sets the baseline. Grants narrow or extend it per resource. Every one of these commands takes the same three things in the same order: the team, the resource, then the level. The command words are fixed; everything in<angle brackets> is yours to fill in.
Swap
grant for revoke to take access away, with the same three arguments. The workspace role is clear rather than revoke, and it takes no level: team access workspace clear <team-slug-or-id>.
So for a team whose slug is payments:
App levels apply to every version of that app.
App grants need the ID from
sdk list or mcp list, not a name. One app command covers both kinds, so it cannot infer which you mean from a name they might share.Check before you plan
Preflight the owning team against every dependency, so a plan does not fail halfway through on a missing grant.build-access lists what is available to both you and the team — which is the set that will actually work.
Share with the whole workspace
When the audience really is everyone, a workspace-wide grant beats maintaining a grant per team.A workspace-wide app grant does not replace the runtime token. Callers still need a valid execution token.
Flags
workspace access list
team build-access
team member add
team create
When you are denied
Stop. Keep the config and plan you had prepared, and report the exact missing permission and resource. Do not self-grant, switch credentials, or retry with broader authority — a scopedservice.manage grant does not include the workspace-level workspace.update that applying activation needs, so guessing tends to produce a second confusing failure rather than a fix.
Store credentials in a bucket
Access decides who may select a bucket. The bucket decides what credentials they get to use without seeing.