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.sites ​

Site operations for B2C Commerce instances.

Mirrors src/operations/sites/index.ts. Provides functions for managing site cartridge paths on B2C Commerce instances. Operations use SCAPI first, with temporary OCAPI and site-archive fallbacks. Business Manager (Sites-Site) is supported via the import/export mechanism.

Cartridge Path Functions ​

Usage ​

python
from b2c_tooling_sdk.operations.sites import get_cartridge_path, add_cartridge, set_cartridge_path
from b2c_tooling_sdk.config import resolve_config

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

# List cartridge path
result = await get_cartridge_path(instance, "RefArch")
print(result.cartridge_list)

# Add a cartridge
await add_cartridge(instance, "RefArch", AddCartridgeOptions(name="my_cartridge", position="first"))

# Business Manager
await add_cartridge(instance, "Sites-Site", AddCartridgeOptions(name="bm_ext", position="first"))

Authentication ​

Cartridge path operations require OAuth authentication. For SCAPI direct updates, grant sfcc.sites.rw; for OCAPI grant POST/PUT/DELETE on /sites/*/cartridges. For import/export fallback, grant job execution permissions and WebDAV write access.

Classes ​

AddCartridgeOptions ​

python
class AddCartridgeOptions

Options for adding a cartridge to a site's cartridge path.

Fields

NameTypeDefault
namestr
positionCartridgePosition'first'
targetstr | NoneNone

CartridgePathResult ​

python
class CartridgePathResult

Result of a cartridge path operation.

Fields

NameType
site_idstr
cartridgesstr
cartridge_listlist[str]

CartridgeUpdateOptions ​

python
class CartridgeUpdateOptions

Options for cartridge path update operations that may run jobs.

Fields

NameTypeDefault
logCallable[[str], None] | NoneNone
wait_optionsWaitForJobOptions | NoneNone

ListSitesOptions ​

python
class ListSitesOptions

Options for listing sites.

Fields

NameTypeDefault
countint | NoneNone
startint | NoneNone

OcapiSitesBackend ​

python
class OcapiSitesBackend

OCAPI Sites backend (legacy/fallback). Reads sites and per-site detail via the OCAPI Data API /sites resource.

Fields

NameType
nameLiteral['ocapi']

ScapiSitesBackend ​

python
class ScapiSitesBackend

SCAPI Sites backend. Reads sites and manages custom cartridge paths via the site/sites/v1 Admin API.

Fields

NameType
nameLiteral['scapi']

SiteInfo ​

python
class SiteInfo

Canonical site.

CamelCase-ish fields match SCAPI; the OCAPI backend maps from snake_case. display_name is the default-locale display name (both APIs return a locale map; we surface the default for table output and keep the full object on raw).

Fields

NameTypeDefault
idstr
display_namestr | NoneNone
storefront_statusstr | NoneNone
cartridgesstr | NoneNone
rawAnyNone

SitesBackend ​

python
class SitesBackend(BackendBase, Protocol)

Backend contract for site read operations.

Cartridge-path methods model the SCAPI v1.3 custom-cartridges resource and the equivalent OCAPI Data API resource.

Functions ​

add_cartridge ​

python
async def add_cartridge(instance: B2CInstance, site_id: str, options: AddCartridgeOptions, update_options: CartridgeUpdateOptions | None = None) -> CartridgePathResult

Adds a cartridge to a site's cartridge path.

For regular sites, uses the SCAPI-first Sites backend and falls back to site archive import if neither direct backend is available. For Business Manager (Sites-Site), always uses site archive import.

create_sites_backend ​

python
def create_sites_backend(config: SitesBackendConfig) -> SitesBackend

Builds a Sites backend for site and cartridge-path operations.

In auto mode (the default) it prefers SCAPI (site/sites/v1) and falls back to the deprecated OCAPI Data API on a safe capability/auth/request rejection.

get_cartridge_path ​

python
async def get_cartridge_path(instance: B2CInstance, site_id: str) -> CartridgePathResult

Gets the cartridge path for a site.

Uses the configured Sites backend to read the cartridge path. Auto mode prefers SCAPI and temporarily falls back to OCAPI. Works for all sites including Business Manager (Sites-Site).

Parameters

NameTypeDescription
instanceB2CInstanceB2C instance to query.
site_idstrSite ID (e.g. "RefArch", "Sites-Site").

Returns: Cartridge path result.

remove_cartridge ​

python
async def remove_cartridge(instance: B2CInstance, site_id: str, cartridge_name: str, update_options: CartridgeUpdateOptions | None = None) -> CartridgePathResult

Removes a cartridge from a site's cartridge path.

For regular sites, uses the SCAPI-first Sites backend and falls back to site archive import if neither direct backend is available. For Business Manager (Sites-Site), always uses site archive import.

set_cartridge_path ​

python
async def set_cartridge_path(instance: B2CInstance, site_id: str, cartridges: str, update_options: CartridgeUpdateOptions | None = None) -> CartridgePathResult

Replaces the entire cartridge path for a site.

For regular sites, uses the SCAPI-first Sites backend and falls back to site archive import if neither direct backend is available. For Business Manager (Sites-Site), always uses site archive import.

Attributes ​

BM_SITE_ID ​

python
BM_SITE_ID = 'Sites-Site'

CartridgePosition ​

python
CartridgePosition = Literal['first', 'last', 'before', 'after']

SitesBackendConfig ​

python
SitesBackendConfig = DualBackendConfig