Skip to main content

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.

Check first: does claude.ai deliver your connectors today?

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.

1
Import or author the organization policy

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.

2
Manage connectors

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.

3
Add Skills and Guidance

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.

4
Download and deploy the trust profile

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 policy is readable without credentials

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.
Confirm the profile was actually read

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

ModelWhat MDM carriesHow configuration changes
Bootstrap (this page)A stable HTTPS URL, the bootstrap-headers helper path, and optional OIDC parametersUpdate the bootstrap response, then relaunch Claude
First-partyDevice policy only, and no inference* keyDesktop stays on claude.ai, and Anyray covers the coding tools
StaticThe complete policy exported from Claude Desktop, including the fleet credential-helper pathEdit 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).