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
| Command | Purpose |
|---|---|
activate | Activates an MPDEV license. Run this once per user (or per machine). |
build | Builds an MSI / MSIX from a package JSON file. |
version (or --version) | Prints the installed MPDEV version. |
help, /?, -?, /h, -h, --help | Prints help. |
mpdev activate
mpdev activate <license-key> [--all-users]
| Argument | Required | Description |
|---|---|---|
license-key | yes | The license key string. |
| Option | Required | Description |
|---|---|---|
--all-users | no | Stores 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 …>]
| Argument | Required | Description |
|---|---|---|
path-to-package-json | yes | Path to the MPDEV package JSON file. Relative or absolute. |
| Option | Required | Description |
|---|---|---|
--working-dir <DIR> | no | Override the working directory used to resolve relative source paths. By default this is the directory where mpdev is invoked. |
--properties <$.name=value …> | no | Inject 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=valuepairs 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.
| Option | Default | Description |
|---|---|---|
--verbose | off | Verbose logging. Useful when diagnosing builds. |
--use-msbuild-message-format <true|false> | true for activate and build | Output 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.
| Variable | Used by | Purpose |
|---|---|---|
AZURE_TENANT_ID | digitalSignature (Azure Trusted Signing) | Azure tenant for EnvironmentCredential. |
AZURE_CLIENT_ID | same | App registration / service principal client ID. |
AZURE_CLIENT_SECRET | same | App registration / service principal secret. |
| Any custom env var | The whole package JSON | Expanded 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 msiexec | Effect |
|---|---|
MP_SKIPDEPCHECK=1 | Skip the packageDependencies check (useful in offline environments). |
UPDATE_SCHEDULING_ENABLED=0|1 | Override 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|1 | Override notifications.enabled. |
UPDATE_LOGGING_INSTALLER_LOGS_RETENTION_DAYS=<int> | Override logging.installerLogsRetentionDays. |
Any property declared in msi.properties | Overrides 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.