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 --scope project

Start a new Claude Code session in your project. Use --scope user instead for all projects.

Manual MCP setup

From your project directory:

bash
claude mcp add --transport stdio --scope project b2c-dx-mcp -- npx -y @salesforce/b2c-dx-mcp@latest

Start a new session. Use --scope user instead for all projects. 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

From your project directory, run:

bash
gemini mcp add --scope project b2c-dx-mcp -- npx -y @salesforce/b2c-dx-mcp@latest

Start a new Gemini CLI session. Use --scope user instead for all projects. 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