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 / clients / WebDavClient

Class: WebDavClient

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:73

Constructors

Constructor

new WebDavClient(hostname, auth, options?): WebDavClient

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:85

Creates a new WebDAV client.

Parameters

hostname

string

WebDAV hostname (may differ from API hostname)

auth

AuthStrategy

Authentication strategy to use for requests

options?

WebDavClientOptions

Optional configuration including middleware registry and TLS dispatcher

Returns

WebDavClient

Methods

buildUrl()

buildUrl(path): string

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:101

Builds the full URL for a WebDAV path.

Parameters

path

string

Path relative to /webdav/Sites/

Returns

string

Full URL


copy()

copy(source, destination, overwrite): Promise<void>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:401

Copies a file or directory.

Parameters

source

string

Source path relative to /webdav/Sites/

destination

string

Destination path relative to /webdav/Sites/

overwrite

boolean = true

Whether to overwrite if destination exists (default: true)

Returns

Promise<void>

Example

ts
await client.copy('Cartridges/v1/cartridge', 'Cartridges/v2/cartridge');

delete()

delete(path): Promise<void>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:343

Deletes a file or directory.

Parameters

path

string

Path to delete

Returns

Promise<void>

Throws

Error if the path doesn't exist (404) or deletion fails

Example

ts
await client.delete('Cartridges/v1/old-cartridge');

exists()

exists(path): Promise<boolean>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:447

Checks if a path exists.

Parameters

path

string

Path to check

Returns

Promise<boolean>

true if exists, false otherwise


get()

get(path): Promise<ArrayBuffer>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:324

Downloads a file.

Parameters

path

string

Path to download

Returns

Promise<ArrayBuffer>

File content as ArrayBuffer

Example

ts
const content = await client.get('Cartridges/v1/app.zip');

mkcol()

mkcol(path): Promise<void>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:275

Creates a directory (collection).

Parameters

path

string

Path to create

Returns

Promise<void>

Throws

Error if creation fails (except 405 which means already exists)

Example

ts
await client.mkcol('Cartridges/v1');

move()

move(source, destination, overwrite): Promise<void>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:426

Moves (renames) a file or directory.

Parameters

source

string

Source path relative to /webdav/Sites/

destination

string

Destination path relative to /webdav/Sites/

overwrite

boolean = true

Whether to overwrite if destination exists (default: true)

Returns

Promise<void>

Example

ts
await client.move('Cartridges/v1/old-name', 'Cartridges/v1/new-name');

propfind()

propfind(path, depth): Promise<PropfindEntry[]>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:364

Lists directory contents.

Parameters

path

string

Directory path

depth

PROPFIND depth (0, 1, or 'infinity')

"0" | "1" | "infinity"

Returns

Promise<PropfindEntry[]>

Array of entries in the directory

Example

ts
const entries = await client.propfind('Cartridges');
for (const entry of entries) {
  console.log(entry.displayName, entry.isCollection);
}

put()

put(path, content, contentType?): Promise<void>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:294

Uploads a file.

Parameters

path

string

Destination path

content

File content as Buffer, Blob, or string

string | Buffer<ArrayBufferLike> | Blob

contentType?

string

Optional content type header

Returns

Promise<void>

Example

ts
await client.put('Cartridges/v1/app.zip', zipBuffer, 'application/zip');

request()

request(path, init?): Promise<Response>

Defined in: packages/b2c-tooling-sdk/src/clients/webdav.ts:120

Makes a raw WebDAV request.

Parameters

path

string

Path relative to /webdav/Sites/

init?

RequestInit

Fetch init options

Returns

Promise<Response>

Response from the server