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 / logging

logging ​

Structured logging module using pino.

This module provides a logging interface for library consumers. It does not read environment variables directly—that is the responsibility of the CLI layer or the consuming application.

Basic Usage ​

typescript
import { createLogger } from '@salesforce/b2c-tooling-sdk/logging';

const logger = createLogger({ level: 'debug' });
logger.info('Hello world');
logger.debug({ file: 'data.json' }, 'Processing file');

Configuration Options ​

OptionTypeDefaultDescription
levelLogLevel'info'Minimum log level
fdnumber2File descriptor (1=stdout, 2=stderr)
jsonbooleanfalseOutput JSON lines instead of pretty print
colorizebooleantrueEnable colors in pretty print mode
redactbooleantrueRedact sensitive fields
baseContextobject{}Context included in all log entries

Output Modes ​

Pretty print (default): Human-readable with colors

[18:31:58] INFO: Hello world

JSON lines (json: true): Machine-readable for log aggregation

json
{"level":"info","time":1764113529411,"msg":"Hello world"}

Log Levels ​

From most to least verbose: trace, debug, info, warn, error, fatal, silent

Context and Child Loggers ​

Add structured context to log entries:

typescript
// Inline context
logger.info({ operation: 'deploy', file: 'app.zip' }, 'Starting deployment');

// Child logger with bound context
const deployLogger = logger.child({ operation: 'deploy' });
deployLogger.info('Step 1 complete');  // Includes operation: 'deploy'
deployLogger.info('Step 2 complete');

Secret Redaction ​

Sensitive fields are automatically redacted:

typescript
logger.info({ username: 'admin', password: 'secret' }, 'Auth attempt');
// Output: { username: 'admin', password: '[REDACTED]' }

Redacted fields: password, secret, token, client_secret, access_token, refresh_token, api_key, authorization

Global Logger ​

For CLI applications, use the global logger pattern:

typescript
import { configureLogger, getLogger } from '@salesforce/b2c-tooling-sdk/logging';

// Configure once at startup
configureLogger({
  level: 'debug',
  json: process.env.SFCC_JSON_LOGS === 'true',
  colorize: process.stdout.isTTY,
});

// Get anywhere in your app
const logger = getLogger();
logger.info('Ready');

Library vs CLI Usage ​

Library code should accept a logger as a parameter:

typescript
import type { Logger } from '@salesforce/b2c-tooling-sdk/logging';

export function myOperation(options: { logger?: Logger }) {
  const log = options.logger ?? console;
  log.info('Starting operation');
}

CLI code reads environment variables and passes the configured logger:

typescript
const logger = createLogger({
  level: process.env.LOG_LEVEL ?? 'info',
  json: process.env.LOG_JSON === 'true',
});
myOperation({ logger });

Interfaces ​

Type Aliases ​

Functions ​