Skip to main content

CLI Reference

The mpdev executable has a small, predictable command surface.

mpdev [command] [args] [options]

Run mpdev help (or mpdev /?, -?, /h, -h, --help) for built-in help.


Commands​

CommandPurpose
activateActivates an MPDEV license. Run this once per user (or per machine).
buildBuilds an MSI / MSIX from a package JSON file.
version (or --version)Prints the installed MPDEV version.
help, /?, -?, /h, -h, --helpPrints help.

mpdev activate​

mpdev activate <license-key> [--all-users]
ArgumentRequiredDescription
license-keyyesThe license key string.
OptionRequiredDescription
--all-usersnoStores the license file next to mpdev.exe (writeable to that location, usually requires admin). All users on the machine inherit the license. Useful for CI / build agents.

Example​

mpdev activate "<your-license-key>" --all-users

mpdev build​

mpdev build <path-to-package-json> [--working-dir <DIR>] [--properties <$.name=value …>]
ArgumentRequiredDescription
path-to-package-jsonyesPath to the MPDEV package JSON file. Relative or absolute.
OptionRequiredDescription
--working-dir <DIR>noOverride the working directory used to resolve relative source paths. By default this is the directory where mpdev is invoked.
--properties <$.name=value …>noInject or override JSON properties. Each pair is $.path=value, separated by whitespace. Quote values that contain spaces.

--properties semantics​

  • Each property name must start with $. (the JSON-pointer root).
  • Multiple $.name=value pairs are separated by whitespace.
  • A value containing whitespace must be enclosed in double quotes.
  • A property that already exists in the JSON is overridden.
  • A property that does not exist is created as if it were defined in the JSON. Useful for parameterizing builds: define a placeholder value in the JSON and override per build.

Examples​

Simple build from current directory​

mpdev build package.json

Build with overridden version and platform​

mpdev build package.json --properties $.version=1.2.3 $.platform=x64

Build from a different working directory (CI scenario)​

mpdev build C:\repo\installer\package.json --working-dir C:\repo\bin\Release

CI/CD example with env-driven version, output, and digital signature​

set AZURE_TENANT_ID=...
set AZURE_CLIENT_ID=...
set AZURE_CLIENT_SECRET=...
set BUILD_NUMBER=42

mpdev build package.json ^
--properties $.version=1.0.%BUILD_NUMBER% $.outputDirectory="C:\artifacts\out"

The JSON can reference any of these values:

"version": "%BUILD_VERSION%",
"outputFileName": "%PRODUCT%_%BUILD_NUMBER%_$.platform"

Global options​

These work with every command.

OptionDefaultDescription
--verboseoffVerbose logging. Useful when diagnosing builds.
--use-msbuild-message-format <true|false>true for activate and buildOutput validation/error messages in MSBuild diagnostic format so Visual Studio's Error List / GitHub Actions / Azure Pipelines parse them. See Microsoft's MSBuild diagnostic format for tasks.
mpdev build package.json --verbose
mpdev build package.json --use-msbuild-message-format false

Environment variables consumed by MPDEV​

These are read before mpdev is invoked – set them in your shell, CI environment, or .env file.

VariableUsed byPurpose
AZURE_TENANT_IDdigitalSignature (Azure Trusted Signing)Azure tenant for EnvironmentCredential.
AZURE_CLIENT_IDsameApp registration / service principal client ID.
AZURE_CLIENT_SECRETsameApp registration / service principal secret.
Any custom env varThe whole package JSONExpanded as %MY_VAR% anywhere in string values.

For Trusted Signing, other Azure credential methods consume their own env vars (e.g., federated tokens for WorkloadIdentityCredential). See Microsoft's DefaultAzureCredential docs.


MSI install-time properties (set on msiexec, not mpdev)​

The MSI engine accepts properties on the install command line. These are used by features documented in MSI features and Digital signature.

Property on msiexecEffect
MP_SKIPDEPCHECK=1Skip the packageDependencies check (useful in offline environments).
UPDATE_SCHEDULING_ENABLED=0|1Override the auto-updater's scheduling.enabled value.
UPDATE_SCHEDULING_STARTUP_DELAY=<ms>Override scheduling.initialDelay.
UPDATE_SCHEDULING_INTERVAL=<ms>Override scheduling.interval.
UPDATE_SCHEDULING_RETRY_INTERVAL=<ms>Override scheduling.retryInterval.
UPDATE_NOTIFICATIONS_ENABLED=0|1Override notifications.enabled.
UPDATE_LOGGING_INSTALLER_LOGS_RETENTION_DAYS=<int>Override logging.installerLogsRetentionDays.
Any property declared in msi.propertiesOverrides the JSON value.

Example silent install with property overrides​

msiexec /i My Application.msi /qn ^
TELEMETRY_ENABLED=0 ^
UPDATE_NOTIFICATIONS_ENABLED=0 ^
MP_SKIPDEPCHECK=1

Common workflows​

Local dev loop​

mpdev build package.json

CI pipeline (GitHub Actions)​

- name: Activate MPDEV (one-time setup step)
run: mpdev activate "${{ secrets.MPDEV_LICENSE }}" --all-users

- name: Build installer
env:
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
run: |
mpdev build installer/package.json `
--properties $.version=${{ github.run_number }} `
--use-msbuild-message-format true

Visual Studio integration​

When MPDEV runs from a Visual Studio post-build event with the default message format, validation messages show up in the Error List panel – click them to open the JSON file at the offending line.