Summary
sf agent mcp asset replace throws an uncaught TypeError when --assets is valid JSON with the value null.
null is valid JSON, but it is not a valid asset input shape. The command should reject it with the existing InvalidShape error instead of exposing an internal JavaScript error:
Cannot read properties of null (reading 'assets')
The failure occurs while parsing the CLI input, before an API request is made.
Steps To Reproduce
A separate reproduction repository is not required because this can be reproduced directly with the Salesforce CLI command.
With an authenticated target org, run:
sf agent mcp asset replace --mcp-server-id <MCP_SERVER_ID> --assets "null" -o <TARGET_ORG> --json
The command returns a result similar to:
{
"name": "TypeError",
"message": "Cannot read properties of null (reading 'assets')",
"exitCode": 10,
"context": "ApiCatalogMcpServerAssetReplace"
}
Expected result
Because null is valid JSON but does not match either supported asset shape, the command should reject it with the existing InvalidShape error.
For example, invalid object shapes are already handled as InvalidShape.
Actual result
The command attempts to access .assets on null and throws a raw JavaScript TypeError:
Cannot read properties of null (reading 'assets')
Additional information
The issue appears to be in the client-side input validation for agent mcp asset replace.
The command currently distinguishes between an array and an object containing an assets property. When the parsed JSON value is null, it attempts to read .assets before the existing InvalidShape validation can run.
I reproduced this locally and also added a regression test against the current salesforcecli/plugin-agent source. Before the fix, the full unit test suite resulted in:
447 passing
1 failing
AssertionError: expected 'TypeError' to equal 'InvalidShape'
After guarding the property access, the suite passes with:
yarn build also completes successfully.
agent mcp is currently in Developer Preview.
System Information
Shell: Windows PowerShell
{
"architecture": "win32-x64",
"cliVersion": "@salesforce/cli/2.146.3",
"nodeVersion": "node-v22.23.1",
"osVersion": "Windows_NT 10.0.26200",
"rootPath": "C:\\Program Files\\sf\\client",
"shell": "cmd.exe",
"pluginVersions": [
"@oclif/plugin-autocomplete 3.2.54 (core)",
"@oclif/plugin-commands 4.1.61 (core)",
"@oclif/plugin-help 6.2.55 (core)",
"@oclif/plugin-not-found 3.2.90 (core)",
"@oclif/plugin-plugins 5.4.86 (core)",
"@oclif/plugin-search 1.2.54 (core)",
"@oclif/plugin-update 4.7.56 (core)",
"@oclif/plugin-version 2.2.52 (core)",
"@oclif/plugin-warn-if-update-available 3.1.70 (core)",
"@oclif/plugin-which 3.2.59 (core)",
"@salesforce/cli 2.146.3 (core)",
"agent 1.45.0 (core)",
"apex 3.9.40 (core)",
"api 1.3.54 (core)",
"auth 4.4.9 (core)",
"data 4.0.115 (core)",
"deploy-retrieve 3.24.61 (core)",
"info 3.4.155 (core)",
"limits 3.3.106 (core)",
"marketplace 1.3.44 (core)",
"org 5.11.26 (core)",
"packaging 2.30.6 (core)",
"schema 3.3.131 (core)",
"settings 2.4.101 (core)",
"sobject 1.4.125 (core)",
"telemetry 3.8.33 (core)",
"templates 56.20.0 (core)",
"trust 3.8.43 (core)",
"user 3.10.9 (core)"
]
}
Summary
sf agent mcp asset replacethrows an uncaughtTypeErrorwhen--assetsis valid JSON with the valuenull.nullis valid JSON, but it is not a valid asset input shape. The command should reject it with the existingInvalidShapeerror instead of exposing an internal JavaScript error:The failure occurs while parsing the CLI input, before an API request is made.
Steps To Reproduce
A separate reproduction repository is not required because this can be reproduced directly with the Salesforce CLI command.
With an authenticated target org, run:
The command returns a result similar to:
{ "name": "TypeError", "message": "Cannot read properties of null (reading 'assets')", "exitCode": 10, "context": "ApiCatalogMcpServerAssetReplace" }Expected result
Because
nullis valid JSON but does not match either supported asset shape, the command should reject it with the existingInvalidShapeerror.For example, invalid object shapes are already handled as
InvalidShape.Actual result
The command attempts to access
.assetsonnulland throws a raw JavaScriptTypeError:Additional information
The issue appears to be in the client-side input validation for
agent mcp asset replace.The command currently distinguishes between an array and an object containing an
assetsproperty. When the parsed JSON value isnull, it attempts to read.assetsbefore the existingInvalidShapevalidation can run.I reproduced this locally and also added a regression test against the current
salesforcecli/plugin-agentsource. Before the fix, the full unit test suite resulted in:After guarding the property access, the suite passes with:
yarn buildalso completes successfully.agent mcpis currently in Developer Preview.System Information
Shell: Windows PowerShell
{ "architecture": "win32-x64", "cliVersion": "@salesforce/cli/2.146.3", "nodeVersion": "node-v22.23.1", "osVersion": "Windows_NT 10.0.26200", "rootPath": "C:\\Program Files\\sf\\client", "shell": "cmd.exe", "pluginVersions": [ "@oclif/plugin-autocomplete 3.2.54 (core)", "@oclif/plugin-commands 4.1.61 (core)", "@oclif/plugin-help 6.2.55 (core)", "@oclif/plugin-not-found 3.2.90 (core)", "@oclif/plugin-plugins 5.4.86 (core)", "@oclif/plugin-search 1.2.54 (core)", "@oclif/plugin-update 4.7.56 (core)", "@oclif/plugin-version 2.2.52 (core)", "@oclif/plugin-warn-if-update-available 3.1.70 (core)", "@oclif/plugin-which 3.2.59 (core)", "@salesforce/cli 2.146.3 (core)", "agent 1.45.0 (core)", "apex 3.9.40 (core)", "api 1.3.54 (core)", "auth 4.4.9 (core)", "data 4.0.115 (core)", "deploy-retrieve 3.24.61 (core)", "info 3.4.155 (core)", "limits 3.3.106 (core)", "marketplace 1.3.44 (core)", "org 5.11.26 (core)", "packaging 2.30.6 (core)", "schema 3.3.131 (core)", "settings 2.4.101 (core)", "sobject 1.4.125 (core)", "telemetry 3.8.33 (core)", "templates 56.20.0 (core)", "trust 3.8.43 (core)", "user 3.10.9 (core)" ] }