Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/mcp-ga-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@salesforce/b2c-dx-mcp': major
'@salesforce/b2c-dx-docs': patch
---

Document MCP server GA availability updates. CARTRIDGES, MRT, SCAPI, and PWAV3 tools are generally available and no longer require `--allow-non-ga-tools`; STOREFRONTNEXT tools remain in preview.
6 changes: 3 additions & 3 deletions docs/guide/storefront-next.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ description: Set up Storefront Next development environments using the B2C CLI t

# Storefront Next

::: warning Pilot Preview
Storefront Next is currently in pilot. Access to Storefront Next is limited to pilot customers. Features and configuration may change.
::: warning Important
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the change requested from @knhage

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you

Storefront Next is currently in a closed pilot. Access to Storefront Next is limited to pilot customers. Features and configuration may change.
:::

This guide walks through setting up the infrastructure for a Storefront Next project using the B2C CLI. The steps cover creating a sandbox, configuring SLAS authentication, setting up an MRT environment, configuring environment variables, and deploying. Not all steps are required — skip any that are already complete for your project.
Set up Storefront Next development environments using the B2C CLI to create sandboxes, SLAS clients, MRT environments, and deploy.

## Prerequisites

Expand Down
2 changes: 1 addition & 1 deletion docs/mcp/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: MCP Server for Salesforce B2C Commerce - AI-assisted development to

The B2C DX MCP Server enables AI assistants (like Claude Code, Cursor, GitHub Copilot, and others) to help with B2C Commerce development tasks. It provides toolsets for **SCAPI**, **CARTRIDGES**, **MRT**, **PWAV3**, and **STOREFRONTNEXT** development.

> ⚠️ **Preview Release**: This package is in preview. Tools are functional but require `--allow-non-ga-tools` to enable. Additional tools will be added in future releases.
> **Note:** 🚧 The STOREFRONTNEXT MCP tool is for Storefront Next. Storefront Next is part of a closed pilot and isn't available for general use.

## Quick Start

Expand Down
13 changes: 7 additions & 6 deletions docs/mcp/toolsets.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ description: Available toolsets and tools in the B2C DX MCP Server for SCAPI, CA

The B2C DX MCP Server provides five toolsets with specialized tools for different B2C Commerce development workflows.

> **Note:** Tools require `--allow-non-ga-tools` to enable (preview release).

## Overview

Expand All @@ -25,7 +24,7 @@ Toolsets are collections of related tools that work together to support specific

Cartridge development, deployment, and code version management.

**Status:** 🚧 Early Access
**Status:** ✅ Generally Available

**Auto-enabled for:** Cartridge projects (detected by `.project` file)

Expand All @@ -39,7 +38,7 @@ Cartridge development, deployment, and code version management.

Managed Runtime operations for PWA Kit and Storefront Next deployments.

**Status:** 🚧 Early Access
**Status:** ✅ Generally Available

**Auto-enabled for:** PWA Kit v3 and Storefront Next projects

Expand All @@ -53,7 +52,7 @@ Managed Runtime operations for PWA Kit and Storefront Next deployments.

PWA Kit v3 development tools for building headless storefronts.

**Status:** 🚧 Early Access (PWA Kit-specific tools planned)
**Status:** ✅ Generally Available

**Auto-enabled for:** PWA Kit v3 projects (detected by `@salesforce/pwa-kit-*` dependencies, `@salesforce/retail-react-app`, or `ccExtensibility` field in package.json)

Expand All @@ -71,7 +70,7 @@ PWA Kit v3 development tools for building headless storefronts.

Salesforce Commerce API discovery and exploration.

**Status:** 🚧 Early Access
**Status:** ✅ Generally Available

**Always enabled** - Base toolset available for all projects.

Expand All @@ -87,7 +86,9 @@ Salesforce Commerce API discovery and exploration.

Storefront Next development tools for building modern storefronts.

**Status:** 🚧 Early Access. Storefront Next is part of a closed pilot and isn't available for general use.
> **Note:** 🚧 This MCP tool is for Storefront Next. Storefront Next is part of a closed pilot and isn't available for general use.

**Status:** 🚧 Preview — requires `--allow-non-ga-tools` flag.

**Auto-enabled for:** Storefront Next projects (detected by `@salesforce/storefront-next*` dependencies, package name starting with `storefront-next`, or workspace packages with these indicators)

Expand Down
6 changes: 0 additions & 6 deletions packages/b2c-dx-mcp/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@

MCP (Model Context Protocol) server for Salesforce B2C Commerce developer experience tools.

> [!NOTE]
> This project is currently in **Developer Preview**. Tools are functional but require `--allow-non-ga-tools` to enable. Additional tools will be added in future releases.

This MCP server enables AI assistants (Cursor, Claude Code, and others) to help with B2C Commerce development tasks. It provides toolsets for **SCAPI**, **CARTRIDGES**, **MRT**, **PWAV3**, and **STOREFRONTNEXT** development.

Full documentation: [https://salesforcecommercecloud.github.io/b2c-developer-tooling/mcp/](https://salesforcecommercecloud.github.io/b2c-developer-tooling/mcp/)
Expand Down Expand Up @@ -184,6 +181,3 @@ For MCP development, testing, and local setup, see [CONTRIBUTING.md](./CONTRIBUT

This project is licensed under the Apache License 2.0. See [LICENSE.txt](../../LICENSE.txt) for full details.

## Disclaimer

This project is currently in **Developer Preview** and is provided "as-is" without warranty of any kind. It is not yet generally available (GA) and should not be used in production environments. Features, APIs, and functionality may change without notice in future releases.
2 changes: 1 addition & 1 deletion packages/b2c-dx-mcp/src/tools/cartridges/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ function createCartridgeDeployTool(
'Requires the instance to have a code version configured. ' +
"After deploy, add new cartridges to your site's cartridge path in Business Manager: Sites → Manage Sites → [site] → Settings tab → Cartridges.",
toolsets: ['CARTRIDGES'],
isGA: false,
isGA: true,
requiresInstance: true,
inputSchema: {
directory: z
Expand Down
2 changes: 1 addition & 1 deletion packages/b2c-dx-mcp/src/tools/mrt/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ function createMrtBundlePushTool(
description:
'Bundle a pre-built PWA Kit or Storefront Next project and push to Managed Runtime. Optionally deploy to a target environment.',
toolsets: ['MRT', 'PWAV3', 'STOREFRONTNEXT'],
isGA: false,
isGA: true,
// MRT operations use ApiKeyStrategy from MRT_API_KEY or ~/.mobify
requiresMrtAuth: true,
inputSchema: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ export function createDeveloperGuidelinesTool(loadServices: () => Promise<Servic
'CRITICAL INSTRUCTION: ALWAYS present ALL returned content in FULL - DO NOT SUMMARIZE, DO NOT ADD SUMMARIES, ' +
'DO NOT ADD OVERVIEWS. The returned content IS the complete answer - display it exactly as provided.',
toolsets: ['PWAV3'],
isGA: false,
isGA: true,
requiresInstance: false,
inputSchema: {
sections: z
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ export function createScaffoldCustomApiTool(
Required: apiName (kebab-case). Optional: cartridgeName (defaults to first cartridge found in project), apiType (shopper|admin) default to shopper, \
apiDescription, projectRoot, outputDir.`,
toolsets: ['PWAV3', 'SCAPI', 'STOREFRONTNEXT'],
isGA: false,
isGA: true,
requiresInstance: false,
inputSchema: {
apiName: z
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ Requires OAuth (sfcc.custom-apis scope) and instance config (shortCode, tenantId

CLI: b2c scapi custom status`,
toolsets: ['PWAV3', 'SCAPI', 'STOREFRONTNEXT'],
isGA: false,
isGA: true,
requiresInstance: false,
inputSchema: {
status: z.enum(['active', 'not_registered']).optional().describe('Filter by status. Omit for all.'),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ export function createScapiSchemasListTool(loadServices: () => Promise<Services>

**Requirements:** OAuth with sfcc.scapi-schemas scope.`,
toolsets: ['PWAV3', 'SCAPI', 'STOREFRONTNEXT'],
isGA: false,
isGA: true,
requiresInstance: false, // SCAPI uses OAuth directly, doesn't need B2CInstance (hostname)
inputSchema: {
apiFamily: z.string().optional().describe('API family (e.g., "checkout", "product", "custom").'),
Expand Down
1 change: 0 additions & 1 deletion packages/b2c-dx-mcp/src/tools/storefrontnext/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ export function createStorefrontNextTools(loadServices: () => Promise<Services>
createDeveloperGuidelinesTool(loadServices),
createPageDesignerDecoratorTool(loadServices),
createSiteThemingTool(loadServices),
createPageDesignerDecoratorTool(loadServices),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, this is the duplicate from line 47. thank you

createFigmaToComponentTool(loadServices),
createGenerateComponentTool(loadServices),
createMapTokensToThemeTool(loadServices),
Expand Down
25 changes: 18 additions & 7 deletions packages/b2c-dx-mcp/test/registry.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -327,16 +327,19 @@ describe('registry', () => {
it('should skip non-GA tools when allowNonGaTools is false', async () => {
const server = createMockServer();
const flags: StartupFlags = {
toolsets: ['CARTRIDGES'],
toolsets: ['STOREFRONTNEXT'],
allowNonGaTools: false,
};

const loadServices = createMockLoadServicesWrapper();
await registerToolsets(flags, server, loadServices);

// All current CARTRIDGES tools are non-GA (isGA: false)
// So none should be registered
expect(server.registeredTools).to.have.lengthOf(0);
// STOREFRONTNEXT-only tools are non-GA (isGA: false), so they should be skipped.
// Multi-toolset GA tools (mrt_bundle_push, scapi_*) that appear in STOREFRONTNEXT are still registered.
const sfnextOnlyTools = ['sfnext_get_guidelines', 'sfnext_add_page_designer_decorator'];
for (const toolName of sfnextOnlyTools) {
expect(server.registeredTools).to.not.include(toolName);
}
});

it('should register GA tools even when allowNonGaTools is false', async () => {
Expand All @@ -349,9 +352,17 @@ describe('registry', () => {
const loadServices = createMockLoadServicesWrapper();
await registerToolsets(flags, server, loadServices);

// Currently all tools are non-GA placeholders
// This test documents expected behavior for when GA tools exist
// When GA tools are added, this test should be updated to verify they are registered
// GA tools from CARTRIDGES, MRT, SCAPI, PWAV3 should be registered
expect(server.registeredTools).to.include('cartridge_deploy');
expect(server.registeredTools).to.include('mrt_bundle_push');
expect(server.registeredTools).to.include('scapi_schemas_list');
expect(server.registeredTools).to.include('scapi_custom_apis_get_status');
expect(server.registeredTools).to.include('scapi_custom_api_generate_scaffold');
expect(server.registeredTools).to.include('pwakit_get_guidelines');

// STOREFRONTNEXT-only tools should NOT be registered (still non-GA)
expect(server.registeredTools).to.not.include('sfnext_get_guidelines');
expect(server.registeredTools).to.not.include('sfnext_add_page_designer_decorator');
});

describe('auto-discovery', () => {
Expand Down
4 changes: 2 additions & 2 deletions packages/b2c-dx-mcp/test/tools/cartridges/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ describe('tools/cartridges', () => {
expect(tool.toolsets).to.have.lengthOf(1);
});

it('should not be GA (generally available)', () => {
expect(tool.isGA).to.be.false;
it('should be GA (generally available)', () => {
expect(tool.isGA).to.be.true;
});

it('should require instance', () => {
Expand Down
4 changes: 2 additions & 2 deletions packages/b2c-dx-mcp/test/tools/mrt/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,8 +155,8 @@ describe('tools/mrt', () => {
expect(tool.toolsets).to.have.lengthOf(3);
});

it('should not be GA (generally available)', () => {
expect(tool.isGA).to.be.false;
it('should be GA (generally available)', () => {
expect(tool.isGA).to.be.true;
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,9 @@ describe('tools/pwav3/pwa-kit-development-guidelines', () => {
expect(tool.toolsets).to.have.lengthOf(1);
});

it('should not be GA (generally available)', () => {
it('should be GA (generally available)', () => {
const tool = createDeveloperGuidelinesTool(() => services);
expect(tool.isGA).to.be.false;
expect(tool.isGA).to.be.true;
});

it('should not require B2C instance', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ describe('tools/scapi/scapi-custom-api-generate-scaffold', () => {
expect(tool.inputSchema).to.exist;
expect(tool.handler).to.be.a('function');
expect(tool.toolsets).to.deep.equal(['PWAV3', 'SCAPI', 'STOREFRONTNEXT']);
expect(tool.isGA).to.be.false;
expect(tool.isGA).to.be.true;
});

it('should have required apiName and optional cartridgeName, apiType, apiDescription, projectRoot, outputDir', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ describe('tools/scapi/scapi-custom-apis-get-status', () => {
expect(tool.inputSchema).to.exist;
expect(tool.handler).to.be.a('function');
expect(tool.toolsets).to.deep.equal(['PWAV3', 'SCAPI', 'STOREFRONTNEXT']);
expect(tool.isGA).to.be.false;
expect(tool.isGA).to.be.true;
});

it('should have optional input params: status, groupBy, columns', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ describe('tools/scapi/scapi-schemas-list', () => {
expect(tool.inputSchema).to.exist;
expect(tool.handler).to.be.a('function');
expect(tool.toolsets).to.deep.equal(['PWAV3', 'SCAPI', 'STOREFRONTNEXT']);
expect(tool.isGA).to.be.false;
expect(tool.isGA).to.be.true;
});

it('has optional input params: apiFamily, apiName, apiVersion, status, includeSchemas, expandAll', () => {
Expand Down
Loading