Deployment Guide
This page describes the production deployment path for a reviewed WPF DevTools MCP release package. Maintainer release qualification and sandbox automation belong in RELEASING.md.
Deployment inputs
For a production review, keep the following files together:
| File | Production meaning | Requirement |
|---|---|---|
release_<version>_win-<arch>.zip |
Versioned release package | Required |
SHA256SUMS.txt |
Archive checksum verification | Required |
release-assets.json |
Canonical release asset metadata | Required |
release-sbom.spdx.json |
Release asset/archive inventory | Required for release governance |
package-sbom.spdx.json |
Package, dependency, script, assembly, and payload SBOM | Required for full production review |
release-sbom.spdx.json and package-sbom.spdx.json are different artifacts. Sidecars prove provenance and review scope. Signed packages still require payload signature verification with WPFDEVTOOLS_RELEASE_SIGNER_THUMBPRINT; beta prerelease packages may use ReleaseChecksumOnly only when the archive is verified through SHA256 release metadata.
ReleaseChecksumOnly protects raw injection only while exact payload bytes can still be compared with the original reviewed archive. An installed manifest alone is not a trust root. For unsigned raw injection, keep the original archive and SHA256SUMS.txt outside the installed payload and set WPFDEVTOOLS_TRUSTED_RELEASE_METADATA_DIRECTORY in the MCP client process; otherwise use Signed installed payloads.
Install paths
Install the latest stable release:
irm https://installer.wpf-mcptools.evanlau1798.com | iex
ARM64 archives may be published as preview assets, but they are not guaranteed stable because practical Windows-on-ARM runtime validation hardware is not currently available.
Reviewed local package command:
pwsh -NoProfile -File .\scripts\online-installer.ps1 `
-PackageArchivePath .\release\release_<version>_win-<arch>.zip `
-TrustedReleaseMetadataDirectory .\release `
-Client other `
-NonInteractive -Force -OutputJson
Package-local fallback after sidecar verification:
.\run.bat
Use -Client other when you want artifact-only registration output. Use a concrete client id only when the user approves writing to that client configuration.
Trust and signer policy
- Verify the archive hash with
SHA256SUMS.txt. - Verify the asset entry and sidecar hashes in
release-assets.json. - Review
release-sbom.spdx.jsonfor release assets. - Review
package-sbom.spdx.jsonfor package contents and dependencies. - For
Signedpackages, pin the expected Authenticode signer withWPFDEVTOOLS_RELEASE_SIGNER_THUMBPRINT. - For
ReleaseChecksumOnlybeta prereleases, confirm GitHub Release notes andrelease-assets.jsonpublish SHA256 release metadata for the selected archive. - Use
WPFDEVTOOLS_RELEASE_SIGNER_SUBJECTonly as an additional subject constraint after the thumbprint is pinned.
Signed payload provenance checklist
Before trusting a package for production use:
- Verify
SHA256SUMS.txtandrelease-assets.jsonagainst the downloadedrelease_<version>_win-<arch>.zip. - Confirm
release-sbom.spdx.jsonis the release asset SBOM; it is not a full package/dependency SBOM. - Confirm
package-sbom.spdx.jsoncovers package, dependency, script, assembly, and payload contents. - Pin
WPFDEVTOOLS_RELEASE_SIGNER_THUMBPRINTbefore payload signature verification. - Run a package-local startup verification from the extracted archive before installing broadly.
- Validate the final installed path points to
wpf-devtools-<arch>.exeunder the reviewed install root.
Checksum-only prerelease checklist
Before trusting a beta prerelease package without paid signing:
- Confirm the GitHub Release is marked prerelease.
- Confirm the package manifest uses
ReleaseChecksumOnly. - Verify the archive against SHA256 release metadata in
SHA256SUMS.txtandrelease-assets.json. - Review both SBOMs before extraction.
- Run a package-local startup verification and validate the final installed path.
Install root and registration
If -InstallRoot is omitted, the installer reuses the last live install root when possible and falls back to %APPDATA%\WpfDevToolsMcp. The installed package layout is:
<InstallRoot>\<arch>\current\bin\wpf-devtools-<arch>.exe
<InstallRoot>\<arch>\client-registration\
Register MCP clients from the generated client-registration artifacts rather than hand-writing paths.
Runtime policy
Set only the gates required for the deployment profile:
WPFDEVTOOLS_MCP_ALLOWED_TARGETS=<exact target exe>is required.WPFDEVTOOLS_MCP_ALLOW_SENSITIVE_READS=trueallows sensitive UI and runtime reads.WPFDEVTOOLS_MCP_ALLOW_SCREENSHOTS=trueallows screenshot capture.WPFDEVTOOLS_MCP_ALLOW_VIEWMODEL_INSPECTION=trueallows ViewModel tools and conditional ViewModel captures.WPFDEVTOOLS_MCP_ALLOW_DESTRUCTIVE_TOOLS=trueallows approved mutation/interaction workflows.WPFDEVTOOLS_INJECTION_ALLOWED_TARGETS=<exact target exe>is required for raw injection fallback.
Prefer SDK-hosted Inspector reuse when you own the target app. SDK reuse requires matching WPFDEVTOOLS_AUTH_SECRET and the same local absolute WPFDEVTOOLS_CERT_DIR in both processes.
Server distribution boundary
The packaged MCP server is a non-AOT .NET distribution. It uses assembly discovery through WithToolsFromAssembly, WithPromptsFromAssembly, and WithResourcesFromAssembly; the current tool/resource model is not a Native AOT contract. Treat trimming as unsupported for the server package unless a dedicated release lane proves the resulting package still preserves every reflected tool, prompt, resource, and RequiresUnreferencedCode boundary.
Target application packaging has separate limits. Native AOT WPF targets are not supported. Trimmed targets can make raw injection or inspector startup unreliable; prefer SDK-hosted reuse where the target app owner can validate startup.
Dependency audit cadence
Before release promotion, run dotnet restore --locked-mode and dotnet list package --vulnerable against the locked solution. Review NuGet audit output for direct and transitive dependencies, especially ModelContextProtocol and System.Text.Json. Treat GitHub Actions dependency alerts and verified advisories as evidence to triage; do not publish speculative CVE claims without an actionable advisory or affected-version match.
Rollback and uninstall
- Re-run the installer with the previous reviewed package to roll back.
- Use
-Action uninstallwith-Client <client-id>to remove or verify only the selected registration. With-Client other, the selected registration target is the generatedother.mcpServers.jsonartifact; the installer-owned server files remain available for other clients or later reuse. - Use
-Action full-uninstallwith-InstallRoot <exact-root>to remove registrations, generated client-registration artifacts, and installer-owned server payloads only under that root. Omit-InstallRootonly when a test run or decommissioning workflow must remove every detected installer root. - Remove persisted auth secrets and certificates manually only when the deployment policy requires rotation or decommissioning.
Operational verification
After installation, verify from the final installed path:
- Start the target WPF application.
- Start the configured MCP client.
- Call
connect. - Call
get_active_processandget_ui_summary. - Confirm denied gates fail closed before enabling any higher-risk capability.