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