Skip to main content

Managed fleet

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 is the bootstrap model, which most fleets deploy. First-party and static are compared under Other policy models. Before you start, know the trade: third-party inference ends claude.ai admin-console delivery for the fleet (what that costs). If that console delivers your connectors today, keep Desktop first-party and let Anyray route the coding tools.

Set up the fleet

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 the organization policy

Export a .mobileconfig from Claude Desktop's Configure Third-Party Inference window on an unmanaged staging Mac (authoring guide). In Anyray, choose Import Claude export. JSON works too.

Comes acrossDropped
Models, connectors, plugin marketplaces and skills, workspace and tool restrictions, egress, app policyInference URL, helper path, API key, custom headers

The gateway owns everything in the second column.

2
Add connectors

In Connectors on Users, paste a 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. Edits reach managed Claude Desktop on the next relaunch, and each developer authorizes OAuth connectors with their own account.

Every row says where the connector reaches. Built-ins and local commands stay on Desktop. The gateway serves remote connectors to every managed tool.

3
Add skills and guidance

In Skills & Guidance on Users, upload each SKILL.md and write the shared Guidance. Managed Claude Desktop gets both from the gateway after a relaunch. Every other tool Connect manages gets the same files in its skills folder on the next policy pull. See Sync team content.

4
Install the two helpers

Package anyray-connect for the fleet, then write 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
5
Deploy the trust profile

Choose Download .mobileconfig, then distribute it with Jamf or another MDM. The profile pins the bootstrap URL (/connect/claude-desktop/bootstrap?os=macos) and the MDM-only bootstrapHeadersHelper path, hides the claude.ai sign-in option, and holds no API key.

6
Confirm the profile was read

Open Help → Troubleshooting → Copy Managed Configuration Report. It lists which keys the app read, and from which source. Trust the report, not the window.

What you seeWhat it means
macOS: Configure Third-Party Inference still opens editableNo recognized key reached the app, even when the MDM console reports the profile as delivered
Windows: the window is lockedAny value directly under HKLM\SOFTWARE\Policies\Claude locks it, read or not. A locked window proves nothing
The report shows the profile, but the app still signs into claude.aiThe profile predates disableDeploymentModeChooser. Redeploy the current one
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 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 carries an equivalent tested managed server definition.
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.

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).