Skip to content

sf agent mcp asset replace --assets null throws raw TypeError instead of InvalidShape #3625

Description

@konkonrong-lgtm

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:

448 passing

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)"
  ]
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:afdxCLI issue within plugin-agent or agents librarybugIssue or pull request that identifies or fixes a buginvestigatingWe're actively investigating this issueowned by another teamThe Salesforce CLI team does not own this work but will pass on the information to the correct team.validatedVersion information for this issue has been validated

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions