Prerequisites
Before deploying Ultra via MDM, ensure these are configured:- Jamf Pro with macOS device management
- Ultra Hub organization with at least one workspace
- SSO configured for your organization (setup guide)
- SCIM directory sync provisioning users from your IdP (setup guide)
- Deploy key created in Ultra Hub (setup guide)
SCIM provisioning is required for per-user identity resolution. Without it, gateways are attributed to the admin who created the deploy key. SSO ensures users can authenticate independently if needed.
Setup
Create a deploy key in Ultra Hub
Follow the Deploy Keys guide to create a key scoped to the workspace your fleet should link to. Copy the
dk_... key immediately — it is shown only once.Upload the Ultra package to Jamf
Download the latest signed and notarized To pin a specific version:In Jamf Pro, go to Settings > Packages and click New to upload the
.pkg:.pkg.Create the Configuration Profile
Download the sample Configuration Profile:In Jamf Pro, go to Configuration Profiles > New and upload the
Optional keys:
.mobileconfig file. You can use either upload method:- Application & Custom Settings — select the payload type and upload the file
- Upload (raw mobileconfig) — upload the
.mobileconfigdirectly without selecting a payload type
| Key | Value | Description |
|---|---|---|
AutoSetup | true | Enables zero-touch setup |
DeployKey | dk_... (your key) | Headless Hub authentication |
UserEmail | $EMAIL | Per-device user identity from Jamf inventory |
The
$EMAIL variable is a Jamf payload variable that auto-populates with the device owner’s email from Jamf inventory. This requires user-device affinity to be configured (e.g., via SSO login during enrollment).| Key | Value | Description |
|---|---|---|
HubURL | URL | Hub URL override (default: https://hub.ultra.security) |
DisableAutoUpdate | true | Disable self-updates to manage versions via Jamf |
UserExternalID | string | IdP external ID as secondary identity signal |
Create a deployment policy
In Jamf Pro, go to Policies > New:
- Add the Ultra package under Packages
- Scope to your target Smart Group or computers
- Set trigger to Enrollment Complete (recommended) or Recurring Check-in
- Ensure the Configuration Profile is scoped to the same targets
How It Works
- User Logged In
- DEP Enrollment (No User)
When a user is logged in at install time:When the user next opens an MCP client (Claude Desktop, Cursor, VS Code, etc.), Ultra starts and:
Identity Resolution
Ultra uses SCIM directory sync to attribute each gateway to the correct employee. The resolution chain:- Jamf populates
UserEmailwith the device owner’s email via the$EMAILpayload variable - Ultra sends this email to Hub during gateway link and on every heartbeat
- Hub matches the email against the SCIM-provisioned user directory
- If matched, the gateway is attributed to that user for audit, policy, and RBAC
Unresolved Identity
If the email doesn’t match a SCIM user (e.g., the user hasn’t been provisioned yet, or the Jamf inventory is incomplete):- The gateway still links and works normally
- It is flagged as Unresolved Identity in the Hub dashboard
- On subsequent heartbeats, Ultra re-sends the device identity
- When the match succeeds (e.g., after the user is provisioned in SCIM), the gateway auto-resolves without any manual intervention
A small number of devices may have missing Jamf inventory data if users don’t complete the enrollment setup script. These gateways will show as “Unresolved Identity” until the inventory is corrected or the user is provisioned.
Managing Updates
By default, Ultra checks for updates every 24 hours and self-updates. For environments where you control rollout timing:- Set
DisableAutoUpdatetotruein the Configuration Profile - Use Jamf Patch Management or a Smart Group (e.g., “Ultra version < X.Y.Z”) to deploy new
.pkgversions on your schedule
.pkg at https://get.ultra.security/latest/Ultra-macOS.pkg always points to the current stable release.
Configuration Profile Reference
All keys use thecom.ultra-security.ultra preference domain.
| Key | Type | Default | Description |
|---|---|---|---|
AutoSetup | Boolean | false | Zero-touch setup (auto-install clients + migrate servers) |
DeployKey | String | - | Deploy key for headless Hub authentication |
UserEmail | String | - | Device user’s email for SCIM identity resolution |
UserExternalID | String | - | IdP external ID (secondary identity signal) |
HubURL | String | https://hub.ultra.security | Hub URL override |
DisableAutoUpdate | Boolean | false | Disable self-updates |
Verifying Deployment
On a managed machine:- Navigate to Gateways to see deployed devices
- Each gateway should show the assigned employee (from SCIM)
- Gateways with missing identity data show an Unresolved Identity badge
Troubleshooting
Ultra not in client configs after install:- Check
/tmp/ultra-postinstall.logfor errors - Verify the Configuration Profile is installed:
profiles show -type configuration - Run
ultra install --allmanually to configure clients
- Verify the user is provisioned in your IdP and synced via SCIM
- Check that Jamf has the correct email in the device inventory (User & Location)
- The gateway will auto-resolve on the next heartbeat once the email matches a SCIM user
- Check if plist exists:
ls /Library/LaunchAgents/com.ultra-security.ultra-setup.plist - Check agent log:
cat /tmp/ultra-setup-agent.log - Run manually:
ultra install --all && ultra migrate --all --yes
- Verify the key hasn’t been revoked in Hub dashboard (Settings > Security)
- Check the key hasn’t expired
- Ensure
DeployKeyis set correctly in the Configuration Profile:defaults read com.ultra-security.ultra DeployKey
- Verify the profile is deployed:
defaults read com.ultra-security.ultra - If
defaults readreturns nothing but the profile is installed, check the plist file directly: - Ultra reads managed preferences at startup. Restart the MCP client to pick up changes.
- Ultra supports multiple Jamf profile structures automatically, including raw mobileconfig uploads where keys are nested under
PayloadContent.