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 / auth / JwtOAuthStrategy

Class: JwtOAuthStrategy ​

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:84

OAuth 2.0 JWT Bearer authentication strategy.

Implements RFC 7523 (JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants).

Key differences from client credentials flow:

  • Uses public/private key pair instead of client secret
  • Sends JWT as client_assertion in POST body (not Authorization header)
  • JWT is self-signed and short-lived (60 seconds)

Example ​

typescript
const strategy = new JwtOAuthStrategy({
  clientId: 'my-client-id',
  certPath: './cert.pem',
  keyPath: './key.pem',
  accountManagerHost: 'account.demandware.com',
});

const response = await strategy.fetch('https://api.example.com/data');

Implements ​

Constructors ​

Constructor ​

new JwtOAuthStrategy(config): JwtOAuthStrategy

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:103

Creates a new JwtOAuthStrategy instance.

Validates the provided configuration and caches the private key during construction to avoid repeated file I/O during token requests.

Parameters ​

config ​

JwtOAuthConfig

JWT OAuth configuration containing clientId, certificate/key file paths, and Account Manager host

Returns ​

JwtOAuthStrategy

Throws ​

Error if clientId, certPath, keyPath, or accountManagerHost are missing

Throws ​

Error if certificate or key files do not exist, are unreadable, or have invalid PEM format

Throws ​

Error if the private key is encrypted but no passphrase is provided, or the passphrase is incorrect

Methods ​

fetch() ​

fetch(url, init): Promise<Response>

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:219

Performs a fetch request with JWT Bearer authentication. Automatically injects the Authorization header with a fresh access token. Includes 401 retry logic and x-dw-client-id header.

Parameters ​

url ​

string

init ​

FetchInit = {}

Returns ​

Promise<Response>

Implementation of ​

AuthStrategy.fetch


getAccessTokenForCascade() ​

getAccessTokenForCascade(candidates): Promise<string>

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:281

Resolves a scope cascade. See AuthStrategy.getAccessTokenForCascade. Mirrors OAuthStrategy.getAccessTokenForCascade for the JWT bearer flow.

Parameters ​

candidates ​

string[][]

Returns ​

Promise<string>

Implementation of ​

AuthStrategy.getAccessTokenForCascade


getAuthorizationHeader() ​

getAuthorizationHeader(): Promise<string>

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:249

Returns the Authorization header value for legacy clients.

Returns ​

Promise<string>

Implementation of ​

AuthStrategy.getAuthorizationHeader


getJWT() ​

getJWT(): Promise<DecodedJWT>

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:257

Gets the decoded JWT payload.

Returns ​

Promise<DecodedJWT>


getTokenResponse() ​

getTokenResponse(signal?): Promise<AccessTokenResponse>

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:324

Gets the full token response including expiration and scopes. Useful for commands that need to display or return token metadata.

Parameters ​

signal? ​

AbortSignal

Returns ​

Promise<AccessTokenResponse>


invalidateToken() ​

invalidateToken(): void

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:344

Invalidates cached tokens, forcing re-authentication on next request.

Clears every token for this client/AM-host JWT identity — not just the base-scope key — so a 401 retry can't re-use a rejected token cached under a merged cascade-scope key.

Returns ​

void

Implementation of ​

AuthStrategy.invalidateToken


withAdditionalScopes() ​

withAdditionalScopes(additionalScopes): JwtOAuthStrategy

Defined in: packages/b2c-tooling-sdk/src/auth/oauth-jwt.ts:269

Creates a new JwtOAuthStrategy with additional scopes merged in. Used by clients that have specific scope requirements.

Parameters ​

additionalScopes ​

string[]

Scopes to add to this strategy's existing scopes

Returns ​

JwtOAuthStrategy

A new JwtOAuthStrategy instance with merged scopes

Implementation of ​

AuthStrategy.withAdditionalScopes