diff --git a/.changeset/mcp-ga-release.md b/.changeset/mcp-ga-release.md new file mode 100644 index 00000000..04107c1b --- /dev/null +++ b/.changeset/mcp-ga-release.md @@ -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. diff --git a/docs/guide/storefront-next.md b/docs/guide/storefront-next.md index d16038ac..fc8e9da8 100644 --- a/docs/guide/storefront-next.md +++ b/docs/guide/storefront-next.md @@ -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 +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 diff --git a/docs/mcp/index.md b/docs/mcp/index.md index ec32cbfd..848c92f6 100644 --- a/docs/mcp/index.md +++ b/docs/mcp/index.md @@ -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 diff --git a/docs/mcp/toolsets.md b/docs/mcp/toolsets.md index 76b301c3..8b358a09 100644 --- a/docs/mcp/toolsets.md +++ b/docs/mcp/toolsets.md @@ -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 @@ -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) @@ -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 @@ -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) @@ -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. @@ -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) diff --git a/packages/b2c-dx-mcp/README.md b/packages/b2c-dx-mcp/README.md index c57479d2..b414027d 100644 --- a/packages/b2c-dx-mcp/README.md +++ b/packages/b2c-dx-mcp/README.md @@ -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/) @@ -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. diff --git a/packages/b2c-dx-mcp/src/tools/cartridges/index.ts b/packages/b2c-dx-mcp/src/tools/cartridges/index.ts index 665249f4..1ea5dfd6 100644 --- a/packages/b2c-dx-mcp/src/tools/cartridges/index.ts +++ b/packages/b2c-dx-mcp/src/tools/cartridges/index.ts @@ -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 diff --git a/packages/b2c-dx-mcp/src/tools/mrt/index.ts b/packages/b2c-dx-mcp/src/tools/mrt/index.ts index 2c016b8d..5a04a223 100644 --- a/packages/b2c-dx-mcp/src/tools/mrt/index.ts +++ b/packages/b2c-dx-mcp/src/tools/mrt/index.ts @@ -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: { diff --git a/packages/b2c-dx-mcp/src/tools/pwav3/pwa-kit-development-guidelines.ts b/packages/b2c-dx-mcp/src/tools/pwav3/pwa-kit-development-guidelines.ts index 02bc7b8a..e7bd5a63 100644 --- a/packages/b2c-dx-mcp/src/tools/pwav3/pwa-kit-development-guidelines.ts +++ b/packages/b2c-dx-mcp/src/tools/pwav3/pwa-kit-development-guidelines.ts @@ -127,7 +127,7 @@ export function createDeveloperGuidelinesTool(loadServices: () => Promise Promise **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").'), diff --git a/packages/b2c-dx-mcp/src/tools/storefrontnext/index.ts b/packages/b2c-dx-mcp/src/tools/storefrontnext/index.ts index fe0da9c8..3ed47fd8 100644 --- a/packages/b2c-dx-mcp/src/tools/storefrontnext/index.ts +++ b/packages/b2c-dx-mcp/src/tools/storefrontnext/index.ts @@ -46,7 +46,6 @@ export function createStorefrontNextTools(loadServices: () => Promise createDeveloperGuidelinesTool(loadServices), createPageDesignerDecoratorTool(loadServices), createSiteThemingTool(loadServices), - createPageDesignerDecoratorTool(loadServices), createFigmaToComponentTool(loadServices), createGenerateComponentTool(loadServices), createMapTokensToThemeTool(loadServices), diff --git a/packages/b2c-dx-mcp/test/registry.test.ts b/packages/b2c-dx-mcp/test/registry.test.ts index ffaa5cf4..74c18147 100644 --- a/packages/b2c-dx-mcp/test/registry.test.ts +++ b/packages/b2c-dx-mcp/test/registry.test.ts @@ -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 () => { @@ -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', () => { diff --git a/packages/b2c-dx-mcp/test/tools/cartridges/index.test.ts b/packages/b2c-dx-mcp/test/tools/cartridges/index.test.ts index 51f1a83d..2364cecb 100644 --- a/packages/b2c-dx-mcp/test/tools/cartridges/index.test.ts +++ b/packages/b2c-dx-mcp/test/tools/cartridges/index.test.ts @@ -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', () => { diff --git a/packages/b2c-dx-mcp/test/tools/mrt/index.test.ts b/packages/b2c-dx-mcp/test/tools/mrt/index.test.ts index faa4c13f..71193f0f 100644 --- a/packages/b2c-dx-mcp/test/tools/mrt/index.test.ts +++ b/packages/b2c-dx-mcp/test/tools/mrt/index.test.ts @@ -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; }); }); diff --git a/packages/b2c-dx-mcp/test/tools/pwav3/pwa-kit-development-guidelines.test.ts b/packages/b2c-dx-mcp/test/tools/pwav3/pwa-kit-development-guidelines.test.ts index 40387dfc..cdc24a8b 100644 --- a/packages/b2c-dx-mcp/test/tools/pwav3/pwa-kit-development-guidelines.test.ts +++ b/packages/b2c-dx-mcp/test/tools/pwav3/pwa-kit-development-guidelines.test.ts @@ -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', () => { diff --git a/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-api-generate-scaffold.test.ts b/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-api-generate-scaffold.test.ts index 3be3624e..2171907b 100644 --- a/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-api-generate-scaffold.test.ts +++ b/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-api-generate-scaffold.test.ts @@ -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', () => { diff --git a/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-apis-get-status.test.ts b/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-apis-get-status.test.ts index 2bd1b4a7..62d78d61 100644 --- a/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-apis-get-status.test.ts +++ b/packages/b2c-dx-mcp/test/tools/scapi/scapi-custom-apis-get-status.test.ts @@ -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', () => { diff --git a/packages/b2c-dx-mcp/test/tools/scapi/scapi-schemas-list.test.ts b/packages/b2c-dx-mcp/test/tools/scapi/scapi-schemas-list.test.ts index 06ff8bc2..eaaaca98 100644 --- a/packages/b2c-dx-mcp/test/tools/scapi/scapi-schemas-list.test.ts +++ b/packages/b2c-dx-mcp/test/tools/scapi/scapi-schemas-list.test.ts @@ -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', () => {