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

Blocking (synchronous) facade over the async b2c_tooling_sdk public API.

Every public callable in the top-level b2c_tooling_sdk.__all__ (plus the four SLAS shopper functions) has a synchronous twin here with an identical signature minus await:

python
from b2c_tooling_sdk.sync import get_guest_token, resolve_config, create_metrics_client

cfg = resolve_config()                 # blocks
tok = get_guest_token(slas_config)     # blocks
client = create_metrics_client(...)    # returns a blocking proxy

All calls run on a single persistent background event loop (see _runner), so the async SDK's token caching / single-flight semantics are preserved exactly.

This subpackage is intentionally NOT re-exported from the top-level b2c_tooling_sdk package; import it directly as b2c_tooling_sdk.sync.

Classification of the mirrored symbols Each public symbol is re-exported according to what calling it produces:

  • Coroutine functions (resolve_config, the metrics get_* functions, the operations verbs, SLAS get_guest_token / get_registered_token, ...) → wrapped with _wrap_callable (run on the loop, result syncified).
  • Synchronous factory functions that return objects with coroutine methods (create_*_client, create_*_backend, create_config_resolver, create_instance_from_config, resolve_auth_strategy) → wrapped with _wrap_sync_factory (not run on the loop, but the returned object is syncified so its methods block). See _SYNC_FACTORIES.
  • Everything else — already-synchronous helpers (to_organization_id, decode_jwt, PKCE generate_code_*, parse_metrics_bound, ...), the middleware factories (create_auth_middleware / create_extra_params_middleware — their middleware objects must stay async for httpx), and all types, dataclasses, exceptions, enums, protocols and constants → re-exported AS-IS (the same objects as the async package, so isinstance and error handling work across both surfaces).

Streaming / async-generator APIs (e.g. log tailing, cartridge watching) are not part of the top-level barrel and are therefore out of scope for this facade. watch_cartridges is a coroutine (not an async generator) and is wrapped.