Install AI Tools

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

Claude

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.

Claude Desktop setup

Codex

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. This setup also works with the Codex IDE extension and the ChatGPT Work desktop app.

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.

ChatGPT online setup

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