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