Skip to content

Members tools

MCP tools for Members: members_list, members_remove, members_update.

  • members_list: List members
  • members_remove: Remove a member
  • members_update: Change a member's role or scope

members_list

List members. Operation members.list · Organization level · permission members:read · risk tier read · since M1

Lists the organization's memberships, newest first: who (with their email address and name), which role, at which scope (the whole organization, one legal entity or one brand) and whether they have live-mode access. A person can hold several memberships, one per scope. Filter with userId.

Needs members:read (organization owners and admins, or an org management key).

Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
userIdID (usr_…)no–
limitintegerno(1–100)
starting_afterID (mem_…)no–
  • Read-only: changes nothing; idempotency_key is ignored.

Errors

Example

An owner and a brand developer

Arguments:

JSON
{}

Result output:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
      "object": "membership",
      "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
      "userId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
      "role": "developer",
      "scope": {
        "type": "brand",
        "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4"
      },
      "livemodeAccess": false,
      "invitedBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
      "user": {
        "email": "dev@acme.example",
        "name": "Dana Developer"
      },
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:00:00.000Z"
    },
    {
      "id": "mem_01m4tx5nj8emwbyf7y9vcf47x7",
      "object": "membership",
      "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
      "userId": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
      "role": "org_owner",
      "scope": {
        "type": "org"
      },
      "livemodeAccess": true,
      "invitedBy": null,
      "user": {
        "email": "owner@acme.example",
        "name": "Olivia Owner"
      },
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:00:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

members_remove

Remove a member. Operation members.remove · Organization level · permission members:admin · risk tier security · since M1

Removes one membership. The person loses the access it gave at once (their other memberships stay), and can be invited again later. Returns the removed membership. Give a reason: it goes to the audit log.

You can only remove memberships you could have granted (an admin can't remove an owner), and the organization always keeps at least one owner (last_owner). Needs members:admin; a security-tier change.

Annotations: readOnlyHint: false · destructiveHint: true · idempotentHint: false · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (mem_…)yes–
reasonstringno(1–500 characters)
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Example

Remove a developer who left the team

Arguments:

JSON
{
  "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
  "reason": "Left the company",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
  "object": "membership",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "userId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
  "role": "developer",
  "scope": {
    "type": "brand",
    "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4"
  },
  "livemodeAccess": false,
  "invitedBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
  "user": {
    "email": "dev@acme.example",
    "name": "Dana Developer"
  },
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z"
}

members_update

Change a member's role or scope. Operation members.update · Organization level · permission members:admin · risk tier security · since M1

Changes a membership's role, its scope (the whole organization, one legal entity or one brand) or its live-mode access. Owners, admins and billing admins work at organization scope; finance and tax managers at the organization or one entity; support, developers and viewers also at one brand.

You can't grant more than you have: an admin can't make anyone an owner, can't change an owner's membership, and can't grant live access without having it. The organization always keeps at least one owner (last_owner). Needs members:admin (owners and admins); a security-tier change.

Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (mem_…)yes–
roleone of org_owner, org_admin, billing_admin, finance, tax_manager, support, developer, viewerno–
scopeobject or object or objectno–
livemodeAccessbooleanno–
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Examples

Give a brand developer live-mode access

Arguments:

JSON
{
  "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
  "livemodeAccess": true,
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
  "object": "membership",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "userId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
  "role": "developer",
  "scope": {
    "type": "brand",
    "brandId": "brd_01m4tx5nj8emwbyf7y9vcf47x4"
  },
  "livemodeAccess": true,
  "invitedBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
  "user": {
    "email": "dev@acme.example",
    "name": "Dana Developer"
  },
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}

Move a developer to the whole entity

Arguments:

JSON
{
  "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
  "scope": {
    "type": "entity",
    "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2"
  },
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "mem_01m4tx5nj8emwbyf7y9vcf47x6",
  "object": "membership",
  "orgId": "org_01m4tx5nj7ekd958x53w4bntcg",
  "userId": "usr_01m4tx5nj8emwbyf7y9vcf47xb",
  "role": "developer",
  "scope": {
    "type": "entity",
    "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2"
  },
  "livemodeAccess": false,
  "invitedBy": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
  "user": {
    "email": "dev@acme.example",
    "name": "Dana Developer"
  },
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-14T09:30:00.000Z"
}