Managed desktop fleets
MDM carries one stable trust profile, and the gateway serves the policy. A policy edit then needs a Claude relaunch, not a profile redeployment.
This page walks the bootstrap model, which most fleets deploy. The first-party and static models are compared under Other policy models.
Third-party inference ends claude.ai admin-console delivery for the fleet (the trade). If the admin console currently delivers your connectors and plugins, keeping Desktop first-party preserves that, and Anyray still routes every coding tool.
Manage the third-party policy in Anyray
Set ANYRAY_GATEWAY_PUBLIC_URL to the deployment's public HTTPS gateway origin. Then open Users,
choose Invite users, and open Claude Desktop policy in the macOS steps.
Export a .mobileconfig from Claude Desktop's Configure Third-Party Inference window on an
unmanaged staging Mac
(authoring guide), then
choose Import Claude export in Anyray. JSON is accepted too.
Models, connectors, plugin marketplaces and skills, workspace and tool restrictions, egress, and app policy come across. The exported inference URL, helper path, API key, and custom headers are discarded, because the gateway owns those.
In Connectors on Users, paste the claude.ai connector page or add one from the catalog. Anyray asks the server what it is and lists its tools before you add it. Changes roll out to managed Claude Desktop automatically, and each developer authorizes OAuth connectors with their own account.
Every row says where it reaches. Built-ins and local commands stay on Desktop. Remote ones also reach every managed tool once the deployment runs the org MCP hub.
In Skills & Guidance on Users, upload each SKILL.md and write the shared Guidance.
Managed Claude Desktop receives both from the gateway after relaunch. Every other tool Connect
manages receives the same files in its skills folder on the next policy pull. See
Sync team content.
Choose Download .mobileconfig. First package anyray-connect and install both wrappers, the
credential helper at /usr/local/bin/anyray-credential-helper and the bootstrap-headers helper
at /usr/local/bin/anyray-bootstrap-headers-helper:
sudo anyray-connect desktop helper --write --platform posix \
--bin /usr/local/bin/anyray-connect
Then distribute the profile with Jamf or another MDM. It pins the bootstrap URL
(/connect/claude-desktop/bootstrap?os=macos) and the MDM-only bootstrapHeadersHelper path,
hides the claude.ai sign-in option, and contains no API key.
The bootstrap and Skills & Guidance URLs answer unauthenticated fetches, so anyone who knows a URL can read its content. Anyray enforces that no credential goes in either, and you should treat internal connector URLs, instructions, and restrictions as discoverable. Use the static model when that is unacceptable.
Three limits to plan around:
- Connector OAuth grants, cookies, account sessions, and "Made by Anthropic" connectors cannot be imported. Rebuild supported connectors in the staging configuration, then have each developer authorize them with their own account.
- Anyray prepares the artifact; your MDM installs it. The endpoint-control agent is not a general-purpose MDM and does not install arbitrary macOS profiles.
- Fleet artifacts do not install the Anyray retrieval MCP through
managedMcpServers, so treat retrieval coverage as partial unless the exported policy carries an equivalent tested managed server definition.
Help → Troubleshooting → Copy Managed Configuration Report lists which keys the app read, and from which source. Trust the report, not the window.
On macOS, a Configure Third-Party Inference window that still opens editable means no recognized
key reached the app, even when the MDM console reports the profile as delivered. On Windows, any
value directly under HKLM\SOFTWARE\Policies\Claude locks the window whether or not the app could
read it. If the report shows the profile but the app still signs into claude.ai, the profile predates
disableDeploymentModeChooser, so redeploy the current one.
How the bootstrap fetch authenticates
Claude Desktop 1.34493.1 and later sends the bootstrap fetch with the headers the
bootstrapHeadersHelper prints. Anyray's wrapper prints Authorization: Bearer <client key> for
the enrolled user, and the gateway answers 401 when it is not a valid client key.
Every Anyray-generated third-party profile (console download, desktop fleet bootstrap, and
desktop fleet static) sets disableDeploymentModeChooser, which hides the claude.ai sign-in
option on managed machines. Without it, a user already signed into claude.ai stays first-party
and the bootstrap is never fetched.
Three limits to plan around
- Connector OAuth grants, cookies, account sessions, and "Made by Anthropic" connectors cannot be imported. Rebuild supported connectors in the staging configuration and have each user authorize them after deployment.
- Anyray prepares the artifact and your MDM installs it. The endpoint-control agent is not a general-purpose MDM and does not install arbitrary macOS profiles.
- Fleet artifacts do not install the Anyray retrieval MCP through
managedMcpServers. Treat retrieval coverage as partial unless the exported policy contains an equivalent tested managed server definition.
Local one-off test
Quit Claude, set deploymentMode to "3p" in
~/Library/Application Support/Claude-3p/claude_desktop_config.json, and relaunch. This is a
local test only, never a fleet mechanism.
Other policy models
| Model | What MDM carries | How configuration changes |
|---|---|---|
| Bootstrap (this page) | A stable HTTPS URL, the bootstrap-headers helper path, and optional OIDC parameters | Update the bootstrap response, then relaunch Claude |
| First-party | Device policy only, and no inference* key | Desktop stays on claude.ai, and Anyray covers the coding tools |
| Static | The complete policy exported from Claude Desktop, including the fleet credential-helper path | Edit and test in Claude Desktop, then export and redeploy the profile |
Prefer static over bootstrap when the bootstrap policy's unauthenticated readability is unacceptable (full comparison). Already running your own bootstrap or OIDC service? Connect emits its trust anchor instead: Centrally refreshed configuration.
A fleet that switched to third-party by accident recovers cleanly: Recover a fleet that already switched. The one managed Mac, no MDM case is there too.
For Claude Code and the other coding surfaces, continue with Bulk enrollment (MDM).