公式の Deploy Claude Desktop with an LLM gateway ガイドに基づいています — shunt こそが、あなたが接続するゲートウェイです。shunt は Anthropic の Messages API(ストリーミングとツール使用に対応する POST /v1/messages)と、オプションの GET /v1/models を実装しています。これはまさに、Claude Desktop のサードパーティ推論が期待するゲートウェイ契約です。
1. Claude Desktop を shunt へ向ける
Developer → Configure Third-Party Inference… で、Inference provider を Gateway に設定し、Gateway base URL に稼働中の shunt(デフォルトのバインド 127.0.0.1:3001)を設定します。
| Claude Desktop キー | 値 |
|---|---|
inferenceProvider |
gateway |
inferenceGatewayBaseUrl |
http://127.0.0.1:3001(または公開 shunt URL) |
shunt は平文 HTTP を提供します。ループバック以外へデプロイする場合は、ゲートウェイの共有とまったく同じように、前段で TLS を終端するかトンネルを使ってください。
2. 認証方式を選ぶ
Claude Desktop には 3 つの方式があります。shunt は静的キー(およびその認証情報ヘルパー版)にそのまま対応しますが、ユーザー単位の SSO は shunt がインバウンドで実装しているゲートウェイ機能ではありません。
| Claude Desktop の方式 | shunt 側 | 備考 |
|---|---|---|
静的 API キー(inferenceGatewayApiKey) |
[server.auth] クライアントトークン |
推奨。 |
認証情報ヘルパー(inferenceCredentialHelper) |
[server.auth] クライアントトークンを出力する実行可能ファイル |
ゲートウェイ認証情報をすでに発行している組織向け。 |
インタラクティブ SSO(inferenceGatewayOidc + inferenceCredentialKind: interactive) |
インバウンドでは未対応 | shunt は外部 IdP の JWT ではなく、静的トークンを検証します — 以下を参照してください。 |
静的 API キー(推奨)
shunt で [server.auth] を有効にし、各ユーザーへクライアントトークンを配布します。
[server.auth]
header = "x-shunt-token" # default
tokens_env = "SHUNT_CLIENT_TOKENS"そのトークンを Claude Desktop の inferenceGatewayApiKey に設定します。shunt は Authorization: Bearer または x-api-key でクライアントトークンを受け付けるため、どちらの Gateway auth scheme でも動作します。
| Claude Desktop キー | 値 |
|---|---|
inferenceGatewayApiKey |
shunt のクライアントトークン |
inferenceGatewayAuthScheme |
bearer(デフォルト)または x-api-key |
[server.auth] がなければ、shunt はインバウンドの認証情報を要求しません(個人用のループバックゲートウェイなら問題ありません)。それでも Claude Desktop はこのフィールドへの入力を要求するため、任意のプレースホルダーを指定してください。
このトークンは GET /v1/models と、注入された認証情報を使う(マッピング/プールされた)モデルをゲートします。パススルーモデルは開いたままで、オペレーター自身のプロバイダー認証情報を運びます。
3. モデルを選択する
shunt は GET /v1/models を提供するため、Claude Desktop は起動時にピッカーを自動検出します。何が表示されるかは 2 つの要素で決まります。
Discovery フィルター。 Claude Desktop の自動 discovery に表示されるのは、Claude と認識できる id、つまり tier 名の id(claude-sonnet-*、claude-opus-*、claude-haiku-*、claude-fable-*)のみです。shunt の組み込みカタログはリファレンス Claude apps gateway を正確にミラーしています。9 つすべてが tier 名の id なので、Claude Desktop にはそのすべてが表示されます。
// GET /v1/models — builtin catalog (auto_include_builtin_models), all tier-named
// (each entry also carries "type": "model")
{ "data": [
{ "id": "claude-opus-4-6" }, { "id": "claude-sonnet-4-5-20250929" },
{ "id": "claude-haiku-4-5-20251001" }, { "id": "claude-fable-5" },
{ "id": "claude-opus-4-8" }, { "id": "claude-opus-4-7" },
{ "id": "claude-opus-4-1-20250805" }, { "id": "claude-sonnet-5" },
{ "id": "claude-sonnet-4-6" }
], "has_more": false, "first_id": null, "last_id": null }選定した claude-<slug>-via-<provider> エイリアス(Claude Code で機能するパターン)は Claude Desktop では破棄されます — モデルディスカバリー → Claude Desktop は tier 名の id のみを認識しますを参照してください。
非 Anthropic バックエンドを公開する。 選択肢は 2 つあります。
-
tier 名の id をマッピングする。
[[routes]]のupstream_modelでマッピングすると、Desktop で選択したときにバックエンドへ解決されます。[[routes]] model = "claude-sonnet-5" # a tier-named id Claude Desktop recognizes provider = "codex" upstream_model = "gpt-5.6-sol" # real backend slug -
Desktop 側で discovery を上書きする。 shunt がルーティングする正確な id を、明示的な
inferenceModelsリストに指定します。すべてのエントリが完全な id なら、Claude Desktop は/v1/modelsの呼び出しをスキップします。
4. 検証
クライアントトークンを使って、shunt が discovery と推論に応答することを確認します。
# Discovery — the token gates it when [server.auth] is set
curl -s "$SHUNT_URL/v1/models" -H "Authorization: Bearer $SHUNT_CLIENT_TOKEN" | jq '.data[].id'
# A tier-named id you mapped -> diverted to the backend
curl -s -X POST "$SHUNT_URL/v1/messages" \
-H "Authorization: Bearer $SHUNT_CLIENT_TOKEN" \
-H "anthropic-version: 2023-06-01" -H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'その後 Claude Desktop を開きます。モデルピッカーに tier 名のエントリが表示されるはずです。空の場合は、discovery がフィルターで除外された(tier 名でない id)か、/v1/models に到達できていません。フォールバックとして inferenceModels を明示的に設定してください。