Install AI Tools

B2C Commerce tools, documentation, and skills for your assistant.

Claude

Using Claude Desktop? See Claude Desktop (Cowork) setup.

Install the plugin Recommended

bash
claude plugin marketplace add SalesforceCommerceCloud/b2c-developer-tooling
claude plugin install b2c-dx-mcp@b2c-developer-tooling

Start a new Claude Code session. To install for the current project only, run it from your project directory with --scope project.

Manual MCP setup
bash
claude mcp add --transport stdio --scope user b2c-dx-mcp -- npx -y @salesforce/b2c-dx-mcp@latest

Start a new session. To configure the current project only, run it from your project directory with --scope project. See Claude Code MCP setup.

Codex/ChatGPT

Using the ChatGPT desktop app (ChatGPT Work)? See ChatGPT Work setup.

Install the plugin Recommended

bash
codex plugin marketplace add SalesforceCommerceCloud/b2c-developer-tooling
codex plugin add b2c-dx-mcp@b2c-developer-tooling

Start a new Codex session in your project. Codex plugins also work in ChatGPT Work.

Manual MCP setup
bash
codex mcp add b2c-dx-mcp -- npx -y @salesforce/b2c-dx-mcp@latest

Or add this to ~/.codex/config.toml (or $CODEX_HOME/config.toml if customized):

toml
[mcp_servers.b2c-dx-mcp]
command = "npx"
args = ["-y", "@salesforce/b2c-dx-mcp@latest"]

Start a new session. See Codex MCP configuration.

VS Code

Install the plugin Recommended

  1. Open the Command Palette (Cmd/Ctrl+Shift+P) and run Chat: Install Plugin from Source.
  2. Enter SalesforceCommerceCloud/b2c-developer-tooling.
  3. Select b2c-dx-mcp and follow the installation prompts.
  4. Start a new chat in GitHub Copilot.
Manual MCP setup

Add this to .vscode/mcp.json in your workspace:

json
{
  "servers": {
    "b2c-dx-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@salesforce/b2c-dx-mcp@latest"]
    }
  }
}

See VS Code MCP setup.

Copilot CLI setup

Cursor

Reload the MCP server in Cursor after installation.

Manual MCP setup

Add this to .cursor/mcp.json in your project:

json
{
  "mcpServers": {
    "b2c-dx-mcp": {
      "command": "npx",
      "args": ["-y", "@salesforce/b2c-dx-mcp@latest"]
    }
  }
}

For all projects, use ~/.cursor/mcp.json instead.

See Cursor's MCP documentation.

OpenCode

Add this to opencode.json in your project:

json
{
  "mcp": {
    "b2c-dx-mcp": {
      "type": "local",
      "command": ["npx", "-y", "@salesforce/b2c-dx-mcp@latest"],
      "enabled": true
    }
  }
}

Restart OpenCode. For all projects, use ~/.config/opencode/opencode.json. See OpenCode MCP setup.

Gemini

Run:

bash
gemini mcp add --scope user b2c-dx-mcp -- npx -y @salesforce/b2c-dx-mcp@latest

Start a new Gemini CLI session. To configure the current project only, run it from your project directory with --scope project. See Gemini CLI MCP setup.

No separate skills plugins needed.

Other clients and manual setup →
Skip to content
View as Markdown
View as Markdown

b2c_tooling_sdk.operations.bm_roles ​

Business Manager role operations for B2C Commerce instances.

Mirrors src/operations/bm-roles/index.ts. This module provides functions for managing instance-level access roles on B2C Commerce instances via the OCAPI Data API. These are distinct from Account Manager roles managed via b2c_tooling_sdk.operations.roles.

Core Role Functions ​

User Assignment ​

Permissions ​

Usage ​

python
from b2c_tooling_sdk.operations.bm_roles import list_bm_roles, grant_bm_role, get_bm_role_permissions
from b2c_tooling_sdk.config import resolve_config

config = resolve_config()
instance = config.create_b2c_instance()

# List all roles
roles = await list_bm_roles(instance)

# Grant a role to a user
await grant_bm_role(instance, "Administrator", "user@example.com")

# Get permissions for a role
permissions = await get_bm_role_permissions(instance, "Administrator")

Authentication ​

BM role operations require OAuth authentication with appropriate OCAPI permissions for the /roles resource.

SCAPI/OCAPI dual backend ​

create_roles_backend resolves a RolesBackend (SCAPI-backed by default, with OCAPI fallback) for callers that want a single interface instead of the module-level OCAPI-only functions above.

Classes ​

CreateRoleInput ​

python
class CreateRoleInput

Options for RolesBackend.create_role.

Fields

NameTypeDefault
descriptionstr | NoneNone

GetBmRoleOptions ​

python
class GetBmRoleOptions

Options for getting a BM role.

Fields

NameTypeDefault
expandSequence[str] | NoneNone

ListBmRolesOptions ​

python
class ListBmRolesOptions

Options for listing BM roles.

Fields

NameTypeDefault
startint | NoneNone
countint | NoneNone

ListRolesOptions ​

python
class ListRolesOptions

Options for RolesBackend.list_roles.

Fields

NameTypeDefault
startint | NoneNone
countint | NoneNone
expandlist[RoleExpand] | NoneNone

ListRolesResult ​

python
class ListRolesResult

Paginated result of RolesBackend.list_roles.

Fields

NameTypeDefault
totalint
startint
countint
hitslist[RoleInfo]field(default_factory=list)

OcapiRolesBackend ​

python
class OcapiRolesBackend

Business Manager roles backend implemented against the OCAPI Data API.

Fields

NameType
nameLiteral['ocapi']

RoleInfo ​

python
class RoleInfo

Normalized role summary, shared by both backends.

Fields

NameTypeDefault
idstr
descriptionstr | NoneNone
user_countint | NoneNone
user_managerbool | NoneNone
permissionsRolePermissionsInfo | NoneNone
rawAnyNone

RolesBackend ​

python
class RolesBackend(BackendBase, Protocol)

Common interface implemented by both roles backends.

list_roles method ​

python
async def list_roles(options: ListRolesOptions | None = None) -> ListRolesResult

List roles, paginated.

get_role method ​

python
async def get_role(role_id: str, *, expand: list[RoleExpand] | None = None) -> RoleInfo

Get a single role, optionally expanding users and/or permissions.

create_role method ​

python
async def create_role(role_id: str, role_input: CreateRoleInput | None = None) -> RoleInfo

Create a new role.

delete_role method ​

python
async def delete_role(role_id: str) -> None

Delete a role.

get_permissions method ​

python
async def get_permissions(role_id: str) -> RolePermissionsInfo

Get permissions assigned to a role.

set_permissions method ​

python
async def set_permissions(role_id: str, permissions: RolePermissionsInfo) -> RolePermissionsInfo

Replace all permissions assigned to a role.

grant_role method ​

python
async def grant_role(role_id: str, login: str) -> None

Assign a user to a role. OCAPI returns the user but we don't surface that.

revoke_role method ​

python
async def revoke_role(role_id: str, login: str) -> None

Unassign a user from a role.

ScapiRolesBackend ​

python
class ScapiRolesBackend

Business Manager roles backend implemented against the SCAPI Merchant Roles API.

Fields

NameType
nameLiteral['scapi']

Functions ​

create_bm_role ​

python
async def create_bm_role(instance: B2CInstance, role_id: str, *, description: str | None = None) -> BmRole

Creates a new access role on an instance.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance.
role_idstrRole ID to create.
descriptionstr | NoneRole description.

Returns: Created role.

create_roles_backend ​

python
def create_roles_backend(config: RolesBackendConfig) -> RolesBackend

Create a RolesBackend, resolving SCAPI/OCAPI per config.

delete_bm_role ​

python
async def delete_bm_role(instance: B2CInstance, role_id: str) -> None

Deletes an access role from an instance.

System roles (e.g. "Administrator", "Support") cannot be deleted.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance.
role_idstrRole ID to delete.

get_bm_role ​

python
async def get_bm_role(instance: B2CInstance, role_id: str, options: GetBmRoleOptions | None = None) -> BmRole

Gets details of a specific access role.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance to query.
role_idstrRole ID (e.g. "Administrator").
optionsGetBmRoleOptions | NoneExpand options.

Returns: Role details.

get_bm_role_permissions ​

python
async def get_bm_role_permissions(instance: B2CInstance, role_id: str) -> BmRolePermissions

Gets permissions assigned to an access role.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance.
role_idstrRole ID.

Returns: Role permissions object.

grant_bm_role ​

python
async def grant_bm_role(instance: B2CInstance, role_id: str, login: str) -> dict[str, Any]

Assigns a user to an access role on an instance.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance.
role_idstrRole ID to grant.
loginstrUser login (email).

Returns: The user object after assignment.

list_bm_roles ​

python
async def list_bm_roles(instance: B2CInstance, options: ListBmRolesOptions | None = None) -> BmRoles

Lists all access roles on a B2C Commerce instance.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance to query.
optionsListBmRolesOptions | NonePagination options.

Returns: Roles collection with pagination info.

revoke_bm_role ​

python
async def revoke_bm_role(instance: B2CInstance, role_id: str, login: str) -> None

Unassigns a user from an access role on an instance.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance.
role_idstrRole ID to revoke.
loginstrUser login (email).

set_bm_role_permissions ​

python
async def set_bm_role_permissions(instance: B2CInstance, role_id: str, permissions: BmRolePermissions) -> BmRolePermissions

Sets (replaces) all permissions for an access role.

This is a full replacement -- all existing permissions are replaced with the provided set.

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance.
role_idstrRole ID.
permissionsBmRolePermissionsComplete permissions object.

Returns: Updated permissions.

Attributes ​

BmRole ​

python
BmRole = dict[str, Any]

BmRolePermissions ​

python
BmRolePermissions = dict[str, Any]

BmRoles ​

python
BmRoles = dict[str, Any]

RoleExpand ​

python
RoleExpand = Literal['users', 'permissions']

RolePermissionsInfo ​

python
RolePermissionsInfo = dict[str, Any]

RolesBackendConfig ​

python
RolesBackendConfig = DualBackendConfig

ScapiRolesBackendConfig ​

python
ScapiRolesBackendConfig = ScapiBackendCtorConfig