Guides

Claude Desktop

Last updated

Claude Desktop can send its requests to an LLM gateway instead of Anthropic. Point it at Tempr Gateway and it runs on your own provider keys, under your virtual key's allowlist, budgets and guardrails, with every request in your logs. It can also run models other than Claude, because Tempr answers Anthropic's Messages API for any model you have a key for.

  1. Create a virtual key for Claude Desktop

    In the Portal, create a Gateway virtual key just for Claude Desktop. Keys start with tvk_ and are shown once. Give it the models people may use, a budget, and any budget rules you want; a key in a device profile can be read on each machine it's installed on.

  2. Add a provider key

    Gateway is BYOK: add a key for each provider whose models you'll offer, usually Anthropic. See the supported providers.

  3. Point Claude Desktop at Tempr

    Set the inference provider to Gateway, the gateway URL to https://api.temprhq.io, and the API key to your virtual key, either in the app or in a device profile, both below.

Set it up in the app

To try it on one machine, turn on developer mode (Help → Troubleshooting → Enable Developer Mode), then open Developer → Configure Third-Party Inference:

SettingValue
Inference providerGateway
Gateway base URLhttps://api.temprhq.io, without /v1: Claude Desktop adds /v1/messages itself.
API keyYour tvk_ virtual key
Auth schemeBearer (the default). Tempr also takes the key in x-api-key.
Model discoveryOn. Claude Desktop then lists the models your key can use, from GET /v1/models.

The same window can Export what you set as a .mobileconfig, a .reg file or an ADMX template, which is the easiest way to get the profiles below right for your version of Claude Desktop.

Roll it out with device management

A managed profile wins over anything set in the app, and turns the in-app window read-only. Every value is a string, booleans included.

macOS: a configuration profile

Deploy this .mobileconfig through your MDM (Jamf, Kandji, Intune and others). Its settings land in the com.anthropic.claudefordesktop preference domain. Give each PayloadUUID a fresh value from uuidgen.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>PayloadContent</key>
  <array>
    <dict>
      <key>PayloadType</key><string>com.anthropic.claudefordesktop</string>
      <key>PayloadIdentifier</key><string>com.example.claude-desktop.tempr</string>
      <key>PayloadUUID</key><string>REPLACE-WITH-UUIDGEN</string>
      <key>PayloadVersion</key><integer>1</integer>
      <key>PayloadDisplayName</key><string>Claude Desktop through Tempr Gateway</string>
      <key>inferenceProvider</key><string>gateway</string>
      <key>inferenceGatewayBaseUrl</key><string>https://api.temprhq.io</string>
      <key>inferenceGatewayApiKey</key><string>tvk_...</string>
      <key>inferenceGatewayAuthScheme</key><string>bearer</string>
      <key>modelDiscoveryEnabled</key><string>true</string>
    </dict>
  </array>
  <key>PayloadType</key><string>Configuration</string>
  <key>PayloadIdentifier</key><string>com.example.claude-desktop</string>
  <key>PayloadUUID</key><string>REPLACE-WITH-UUIDGEN</string>
  <key>PayloadVersion</key><integer>1</integer>
  <key>PayloadDisplayName</key><string>Tempr Gateway for Claude Desktop</string>
  <key>PayloadScope</key><string>System</string>
</dict>
</plist>

Windows: registry policy

Import this .reg file, or set the same values with Group Policy or Intune. The values go straight under HKLM\SOFTWARE\Policies\Claude as REG_SZ strings, not in a subkey. Once any value is set there, Claude Desktop ignores the per-user HKCU policy entirely.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Claude]
"inferenceProvider"="gateway"
"inferenceGatewayBaseUrl"="https://api.temprhq.io"
"inferenceGatewayApiKey"="tvk_..."
"inferenceGatewayAuthScheme"="bearer"
"modelDiscoveryEnabled"="true"

Linux

Write the same settings to /etc/claude-desktop/managed-settings.json:

{
  "inferenceProvider": "gateway",
  "inferenceGatewayBaseUrl": "https://api.temprhq.io",
  "inferenceGatewayApiKey": "tvk_...",
  "inferenceGatewayAuthScheme": "bearer",
  "modelDiscoveryEnabled": "true"
}

Models

With model discovery on, Claude Desktop's model picker shows what your key can use, by Tempr's provider/model ids. To choose the list yourself, leave discovery off and set inferenceModels to those ids, for example anthropic/claude-sonnet-4-5 and openai/gpt-5. On an anthropic/… model, Tempr passes requests to Anthropic unchanged, so extended thinking and Claude's server tools work as they do directly; other models are translated, as for Claude Code. To keep everyone on one model whatever they pick, give the key a default model and tick Always use it.

One key for everyone, or a key each

A profile carries one key, so everyone it's installed for shares that key's budget, limits and request logs. To keep teams apart, give each team its own key and profile. To give each person their own key, use Claude Desktop's credential helper instead of a fixed key: set inferenceCredentialKind to helper-script and inferenceCredentialHelper to a program that prints that person's tvk_ key, from your secrets manager for example.

Don't put keys in inferenceCustomHeaders: Claude Desktop sends those headers with every request and treats them as routing information, not as a secret.

On a coding plan

To run Claude Desktop on a coding plan, such as the Z.AI GLM Coding Plan or Kimi Code, use one of the plan's models, named by the plan: zai-coding/glm-5.3. Tempr can get the plan's key two ways:

  • Stored in Tempr. Add the plan's key under Provider keys in the Portal, and keep Claude Desktop's settings as they are, with your virtual key.
  • Sent with each request. Point inferenceCredentialHelper at a script that prints the plan's key as the token and your virtual key as a header, so neither sits in the configuration itself: Tempr sends the plan's key only to that plan, and never stores it. An organization's keys take a key sent this way once an owner or admin turns on Plan logins.
{"token": "<the plan's key>", "headers": {"x-tempr-key": "tvk_..."}}

Claude Desktop speaks Anthropic's Messages API, so choose a plan whose entry on Coding plans lists Messages. It doesn't know a coding plan's models: it gives each one a 200K context window and no effort setting.

Several plans are sold only for the coding tools they support, and some refuse other tools, telling them apart by the identity each tool sends. Tempr passes Claude Desktop's own along and never sends another, so check which tools each plan supports before you subscribe.

What's next