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

@salesforce/b2c-tooling-sdk / clients / ScopeTierManager

Class: ScopeTierManager<C> ​

Defined in: packages/b2c-tooling-sdk/src/clients/scapi-scope-tier.ts:49

Lazy-initialized manager for clients at different scope tiers.

  • First read or write call builds the rw client and caches it.
  • If the caller detects an invalid_scope error on a read attempt, it calls downgradeToReadOnly() and the next read uses the read-only client.
  • Once downgraded, write requests throw — the API client lacks rw scope.

The same rw client serves both read and write while the rw scope is valid; we only build a separate read-only client after a downgrade.

Type Parameters ​

C ​

C

Constructors ​

Constructor ​

new ScopeTierManager<C>(opts): ScopeTierManager<C>

Defined in: packages/b2c-tooling-sdk/src/clients/scapi-scope-tier.ts:54

Parameters ​

opts ​

ScopeTierManagerOptions<C>

Returns ​

ScopeTierManager<C>

Accessors ​

resolvedTier ​

Get Signature ​

get resolvedTier(): ScopeTier | undefined

Defined in: packages/b2c-tooling-sdk/src/clients/scapi-scope-tier.ts:57

The currently-resolved tier, or undefined before first use.

Returns ​

ScopeTier | undefined

Methods ​

downgradeToReadOnly() ​

downgradeToReadOnly(): void

Defined in: packages/b2c-tooling-sdk/src/clients/scapi-scope-tier.ts:105

Marks the rw scope as unavailable and builds a read-only client. Subsequent getClientForWrite() calls will throw; reads use the read-only client.

Returns ​

void


getClientForRead() ​

getClientForRead(): C

Defined in: packages/b2c-tooling-sdk/src/clients/scapi-scope-tier.ts:88

Returns a client suitable for read operations. Prefers the rw client if it's already been used successfully (rw scope grants read too).

Returns ​

C


getClientForWrite() ​

getClientForWrite(): C

Defined in: packages/b2c-tooling-sdk/src/clients/scapi-scope-tier.ts:70

Returns a client suitable for write operations. Throws if we've already downgraded to read-only — the API client doesn't have the rw scope.

Throws ScapiCapabilityUnsupportedError so the SCAPI/OCAPI fallback wrapper recognizes this as a capability gap and routes the write through OCAPI in auto mode (instead of pinning to SCAPI after a successful read and then failing the write).

Returns ​

C


tryRead() ​

tryRead<R>(fn): Promise<R>

Defined in: packages/b2c-tooling-sdk/src/clients/scapi-scope-tier.ts:119

Runs a read operation, downgrading to the read-only client and retrying once if the rw attempt fails with invalid_scope. Backends should wrap their reads with this so an API client provisioned with only the read-only scope (e.g. sfcc.scripts) can still read through SCAPI.

Writes do not go through this helper — they always require rw, and getClientForWrite() already throws after a downgrade.

Type Parameters ​

R ​

R

Parameters ​

fn ​

(client) => Promise<R>

Returns ​

Promise<R>