The workspacemember.* family (2 verbs). Every verb enters through the one front door: it is capability-checked, permission-checked, scope-checked and audited before it runs (see Security & permissions). Each entry below lists its capability, risk class (which fixes the minimum autonomy level), the minimum caller permission, its availability tier, whether it is idempotent, and any outbound egress.
Removeworkspacemember.remove
| Property | Value |
|---|---|
| Capability | workspace.access.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Admin |
| Availability | Admin only (CLI/HTTP; never advertised over MCP) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
Delete a workspace membership. With workspaceId -> that one
(fenced to the caller’s org). Without -> ALL of the user’s memberships across the caller’s-org workspaces
(folds the “remove from every workspace” deleteMany sites). Idempotent. Returns the removed (workspaceId)
list so the caller can keep any post-delete cache invalidation correct.
Call POST /v/workspacemember.remove with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.
Setworkspacemember.set
| Property | Value |
|---|---|
| Capability | workspace.access.write |
| Risk class | Sensitive - autonomy L2 |
| Min. permission | Admin |
| Availability | Admin only (CLI/HTTP; never advertised over MCP) |
| Idempotent | Yes |
| Egress | None - in-box (pure Postgres, no outbound call) |
Upsert a workspace membership (create / role-change). Fences the
target workspace to the caller’s org. Optional permissions JSON (absent -> unchanged on update / NULL on
create). Covers the create/upsert/update(role) sites.
Call POST /v/workspacemember.set with a JSON body; returns JSON (or { error, code }). Not advertised over MCP (admin-only); reachable via the CLI and HTTP doors.