AI と連携する
HopBase のモデルファミリーを選び、対応するコントラクトをコーディングエージェントに渡します。
まずモデルファミリーを選び、選択中のタブに表示されるコントラクトを Codex、Claude Code、Cursor など任意のコーディングエージェントに渡します。各コントラクトには、そのファミリーに必要なキー、プロトコル、エンドポイントだけが含まれます。
対応するモデルタブを選ぶ
| 利用したい機能 | タブ | プランのキー |
|---|---|---|
| Claude API または Claude Code | Claude | Claude プランのキー |
| GPT チャットまたは Codex Responses | GPT / Codex | Codex Plus、Codex Pro、または GPT 公式ダイレクト(Azure)グループを含むキー。Codex グループはチャット専用です。Azure グループは gpt-image-2.5-flare と gpt-image-2.5-sunburst の画像生成にも対応します |
| GPT Image による画像生成 | GPT / Codex | GPT Image グループのキー。すべての gpt-image-* に対応します。GPT 公式ダイレクト(Azure)でも gpt-image-2.5-flare と gpt-image-2.5-sunburst を呼び出せます |
| Gemini チャット、Banana 画像 | Gemini | Gemini プランのキー |
| GLM チャット、または CC Switch 経由の GLM | GLM | GLM プランのキー |
| Seedream の画像生成・編集 | Seedream | Seedream プランのキー |
| Seedance の動画生成 | Seedance | Seedance プランのキー |
| MiniMax H3 の動画生成 | MiniMax H3 | MiniMax H3 プランのキー — H3 と H3-Max は別々のプランのため、H3 用キーでは H3-Max を呼び出せません |
| Kling の動画、画像、モーションコントロール、アバター、リップシンク | Kling | Kling プランのキー |
| Wan 3.0 または HappyHorse の動画生成 | Wan / HappyHorse | Wan 3.0 プランのキー、または HappyHorse プランのキー — コンソール上は別々のプランですが、1 つのキーに両方を含められます |
| Grok のチャット、画像、動画生成 | Grok | Grok プランのキー。動画生成には別の Grok 動画プランを使用します |
| Qwen チャット(画像・動画入力対応) | Qwen | Qwen プランのキー |
| DeepSeek V4 のチャット・推論 | DeepSeek V4 | DeepSeek プランのキー |
| Kimi K3 のチャット | Kimi K3 | Kimi K3 プランのキー |
| Doubao Seed のチャット(画像入力も可) | Doubao Seed | Doubao Seed プランのキー |
| Midjourney 画像生成 | Midjourney | Midjourney 画像生成グループのキー |
| 音声合成・ボイスクローン | MiniMax Speech | MiniMax 音声グループのキー |
| Doubao の音声合成・シーン音声生成・ボイスクローン | Doubao 音声 | Doubao 音声プランのキー |
複数モデルを使うプロジェクトでは、選択中のコントラクトに記載された専用の環境変数(HOPBASE_CLAUDE_API_KEY や HOPBASE_GEMINI_API_KEY など)を使用してください。単一モデルのプロジェクトでは、引き続き HOPBASE_API_KEY を使用できます。実際のキーを AI との会話に貼り付けたり、ソースコード、コミット、スクリーンショット、ログに含めたりしないでください。
各行に対応する正確なグループ名は、クイックスタート:グループの選び方を参照してください。Claude Max(ccmax)グループは Claude Code クライアント内でのみ使えます。SDK や API のプロジェクトで Claude を使う場合は、別の Claude グループを選んでください。
このプロジェクトでは HopBase 経由で Claude モデルのみを接続し、以下の契約に厳密に従ってください。メーカー公式 API ドキュメントと異なる場合は、この契約が優先されます。
対象範囲
- Claude API(Anthropic Messages)または Claude Code に必要な範囲だけを実装してください。他のモデルファミリーを追加・設定・テストしないでください。
- 既存のフレームワーク、SDK、コードスタイルを維持し、動作に必要な最小限の変更だけを行ってください。
- まず、ローカルのシングルユーザーツール、社内サービス、下流の顧客やテナントにサービスを提供するアプリケーションのどれに当たるかを判断し、それに応じてキーの配置とアーキテクチャを決めてください。
キー
- Claude 系のキーのみを使用してください。キーはコンソールのグループ 1 つに紐づき、そのグループのモデルにしか届きません:
- SDK、HTTP、エディター、Claude Code:「Claude Max(公式フル枠)」または「Claude Max(公式フル枠)- 期間限定特価」。
- 「Claude Max(ccmax)」は Claude Code クライアント内でのみ動作します。このキーで SDK や HTTP から呼ぶと失敗します。
- 複数モデルを扱うプロジェクトでは HOPBASE_CLAUDE_API_KEY または既存のシークレットマネージャーを読み取ってください。HOPBASE_API_KEY の再利用は、単一モデルのプロジェクトであることが明確な場合に限ります。
- キーを新規作成したり、他のモデルファミリーのキーを読み取ったり、実際のキーを会話に貼り付けるよう私に求めたりしないでください。キーがない場合は作業を止め、コンソールの「APIキー」で該当グループのキーを作成し、ローカルまたはシークレットマネージャーに設定するよう私に依頼してください。
モデル
- まずこのキーで GET https://api.hop-base.com/v1/models を呼び出し、レスポンスに含まれる claude- で始まる ID だけをそのままコピーして使用してください。
- 販売中: claude-fable-5-1、claude-sonnet-5、claude-sonnet-5-5、claude-opus-5-5、claude-fable-5、claude-opus-5、claude-opus-4-8、claude-opus-4-7、claude-opus-4-6、claude-sonnet-4-6、claude-haiku-4-5-20251001。
- 404 model_not_found は、その ID がこのキーのグループにないことを意味します。/v1/models を取得し直して返された ID を使い、モデル名を推測・短縮・書き換えしないでください。
接続
- Base URL は https://api.hop-base.com で、/v1 は付けません(SDK が /v1/messages を付加します)。/v1 で終わる Base URL は /v1/v1/messages になり 404 になります。
- 認証: SDK の api_key オプション、または生の HTTP では x-api-key ヘッダー。SDK ネイティブの認証方式を維持してください。
- エンドポイント: POST /v1/messages と POST /v1/messages/count_tokens。Claude のキーで OpenAI のパス(/v1/chat/completions、/v1/responses)を呼ぶと 404 です。Messages の呼び出しを Chat Completions に変換しないでください。
- Claude Code: ANTHROPIC_BASE_URL=https://api.hop-base.com、ANTHROPIC_AUTH_TOKEN=<Claude のキー>。ワンクリック設定は両方を ~/.claude/settings.json の env ブロックに書き込み、シェルの環境変数より優先されます。
リクエストのルール
- max_tokens は必ず送ってください。省略すると 4096 が補われ、長い出力は stop_reason "max_tokens" で打ち切られます。
- claude-opus-5-5: 思考は常時オンです。thinking {"type":"disabled"} や budget_tokens を送ると 400 になり、深さは output_config.effort(既定 medium)で調整します。tool_choice の any / tool は 400(auto を使用)。アシスタントのプレフィルは非対応です。
- 過去の thinking ブロックは受け取ったとおり(signature を含めて)返してください。書き換え・結合・モデル間での再利用は 400 "Invalid signature in thinking block" になります。
- 非ストリーミング呼び出しは 300 秒が上限です(超えると 504)。長い出力はストリーミングにし、Anthropic の SSE をそのまま中継してください。count_tokens の呼び出しも同時実行数を消費します。
エラーと再試行
- HTTP ステータスと error.code で分岐し、message の文言では判定しないでください。問い合わせ用にレスポンスヘッダー x-request-id を記録してください。
- 間隔を空けて再試行するもの(2 秒、5 秒、15 秒、最大 3 回、Retry-After に従う): 429、502、503、504、途中で切れたストリーム。
- そのまま再試行しないもの: 400、401、402、403、404、413、422。先にリクエスト、キー、グループ、残高を直してください。
- Anthropic 形式のエラーには code フィールドがありません。キーのエラー(401、402、403)は /v1/messages でも OpenAI 形式 {"error":{"code":…}} です。
- 404 "This API path is not supported by the current platform" は、プロトコルの誤りか Base URL の余分な /v1 です。設定を直し、再試行しないでください。
- ストリーム開始後の失敗は HTTP 200 のまま event: error 行で届きます。読み取りループで処理し、リクエスト全体を送り直してください。
実装
- Base URL、キーの変数名、デフォルトモデルは既存の設定の仕組みに入れ、.env.example は実際のキーを含めずに更新してください。
- 下流やマルチテナント向けの呼び出しでは、キーをサーバー側に保持し、呼び出し元の認証を再利用したうえで、モデルのアローリスト、リクエスト制限、タイムアウト、レート制限、利用状況の帰属管理、マスキングしたログを追加してください。ローカルのシングルユーザーツールにはこの層を追加しないでください。
- アカウントの既定の同時実行数は 5 リクエストです。超えた分はキューに入らず、Retry-After: 1 付きの 429 で即座に拒否されるため、クライアント側で流量を制御してください。
検証と引き渡し
- 設定後に最小限の実リクエストを 1 回送信してください。ストリーミングのテストは、プロジェクトが実際にストリーミングを使う場合のみ追加してください。
- 返された claude- モデルに max_tokens 1024 で「ok とだけ返信」を求める Messages リクエストを 1 回送り、content[0].text を確認してください。
- 変更したファイル、キーの変数名、モデル ID、エンドポイント、HTTP ステータス、マスキングしたレスポンスの要約を報告し、起動・検証・ロールバックの各コマンドを添えてください。コーディングエージェント用のルールファイルをダウンロード
このプロジェクトで使うモデルファミリーをすべて選択してください。ファイルは各契約を統合し、共通ルールを 1 回だけ記載したうえでファミリーごとの節を並べ、最新ドキュメントと MCP サーバーへのリンクを添えます。4 つ以上選択した場合、各節はキー・モデル・接続のルールだけを残し、全ルールはリンクで示します。
AGENTS.md.cursor/rules/hopbase.mdc.claude/skills/hopbase-api/SKILL.mdタブを切り替えると、コントラクトと「AI 用にコピー」の内容も連動して切り替わります。コントラクトは、AI エージェントに選択中のファミリーのキーのみでモデルを検出させ、その応答からモデル ID を選ばせるものです。これにより、プランをまたいだキーの取り違えを防ぎます。
ルールをリポジトリに残すには、コントラクトの下にあるパネルでプロジェクトが使うモデルファミリーをすべて選択し、AGENTS.md、Cursor ルール(.cursor/rules/hopbase.mdc)、または Claude Code スキル(.claude/skills/hopbase-api/SKILL.md)としてまとめてダウンロードしてください。共通ルールは 1 回だけ記載され、その後にファミリーごとの節と、最新ドキュメントおよび下記 MCP サーバーへのリンクが続きます。ファイルをコミットしておけば、どのエージェントセッションも同じルールから始められます。モデルやパラメーターが変わったら再度ダウンロードしてください。
ダウンストリーム利用への対応方針
| プロジェクトの状況 | 想定されるアーキテクチャ |
|---|---|
| ローカルのシングルユーザーツール | 環境変数と対応する SDK を使用します。プロキシサービスは追加しません |
| 社内向けサービス | キーはサーバー側に保持し、既存の認証、レート制限、エラー処理をそのまま維持します |
| 顧客向けまたはマルチテナントのサービス | キーの分離、呼び出し元の認証、モデルのアローリスト、レート制限、利用状況の帰属管理、バッファなしの SSE、ログのマスキングを追加します |
コントラクトがゲートウェイ的な制御を追加するのは、アプリケーションが下流のユーザーに代わってリクエストを行う場合のみです。ローカルな連携を不要にサービス層化することはありません。
MCP サーバー
コーディングエージェントは、保存したファイルだけに頼らず、MCP 経由で HopBase にリアルタイムで問い合わせることもできます。サーバーは読み取り専用で、リクエストと同じ API キーで認証します。モデルの呼び出しは引き続き通常の API エンドポイントに送ります。
| 項目 | 値 |
|---|---|
| エンドポイント | https://api.hop-base.com/mcp(Streamable HTTP、POST のみ。SSE ストリームとバッチリクエストは非対応) |
| 認証 | Authorization: Bearer <キー> または x-api-key: <キー> |
| 範囲 | 結果は使用中のキーに限られます:そのグループ(複数可)、呼び出せるモデル、利用状況 |
| ツール | 返す内容 |
|---|---|
list_models | このキーで呼び出せるモデルと実際の支払価格 |
get_model_limits | 指定したモデル ID について、このキーで呼び出せるか、およびドキュメントに記載されたエンドポイント、リクエストパラメーター、上限(出典ページへのリンク付き) |
search_docs | クエリ(モデル ID、パラメーター名、エラーコード)に最も一致するドキュメントの節。各結果に URL と抜粋付き |
get_balance | アカウント残高と、このキーの利用上限の使用状況(USD) |
get_key_info | キー名、グループ、利用上限、同時実行上限、有効期限、ステータス |
get_usage | このキーのリクエスト数、トークン数、請求額。既定は直近 7 日、最長 92 日 |
get_model_limits と search_docs は公開済みのドキュメントを読み取り、更新は最大 1 時間に 1 回です。リンク先のドキュメントページが正であり、結果に載っていない上限が存在しないとは限りません。
Claude Code
claude mcp add --transport http hopbase https://api.hop-base.com/mcp \
--header "Authorization: Bearer $HOPBASE_API_KEY"コマンド実行時にシェルが環境変数を展開するため、キーはローカルの Claude Code 設定に保存されます。チームで共有するプロジェクト設定にする場合は、代わりに .mcp.json にサーバーを追加し、ヘッダーを "Authorization": "Bearer ${HOPBASE_API_KEY}" と書いてください。Claude Code が起動時に展開するため、ファイルにキーは含まれません。
Cursor
プロジェクトの .cursor/mcp.json(すべてのプロジェクトに適用する場合は ~/.cursor/mcp.json)に追加します:
{
"mcpServers": {
"hopbase": {
"url": "https://api.hop-base.com/mcp",
"headers": { "Authorization": "Bearer ${env:HOPBASE_API_KEY}" }
}
}
}list_models と get_model_limits が見られるのは、設定したキーに含まれるグループだけです。別のモデルファミリーを確認するには、そのグループをキーに追加するか、そのグループを含むキーでサーバーエントリーをもう 1 つ追加してください。
次のステップ
- クイックスタート — 最初のリクエストを手動で送る
- Base URL とプロトコル — 各モデルファミリーで使う Base URL とプロトコル
- 利用可能なモデル — 各モデルの ID と機能
- エラーコードと再試行 — 各エラーコードの意味と再試行すべきかどうか