# set_member_role (/docs/reference/mcp-tools/set_member_role)



{/* Generated by apps/docs/scripts/generate-mcp-pages.mjs — do not edit by hand. */}

Change a member's role (Admin+; last-owner protected).

|                     |                   |
| ------------------- | ----------------- |
| Required permission | `members:write`   |
| Capability ID       | `members.setRole` |
| Destructive         | No                |

## Parameters [#parameters]

| Parameter | Type                                                  | Required | Notes |
| --------- | ----------------------------------------------------- | -------- | ----- |
| `role`    | `OWNER` \| `ADMIN` \| `MEMBER` \| `GUEST` \| `VIEWER` | yes      |       |
| `userId`  | string (uuid)                                         | yes      |       |

## Input schema (JSON Schema) [#input-schema-json-schema]

```json
{
  "type": "object",
  "properties": {
    "role": {
      "type": "string",
      "enum": [
        "OWNER",
        "ADMIN",
        "MEMBER",
        "GUEST",
        "VIEWER"
      ]
    },
    "userId": {
      "type": "string",
      "format": "uuid"
    }
  },
  "required": [
    "role",
    "userId"
  ],
  "additionalProperties": false
}
```

## Access control [#access-control]

A call succeeds only when the personal access token's scopes **and** the holder's role both allow `members:write` (effective permission = scope ∩ role, default-deny). The tool runs inside the token owner's organization — tenancy is never a parameter.
