# エージェントと MCP

使いすぎられないトークンをエージェントに渡し、MCP で接続します。

## エージェント専用のトークンを渡す

**API & agents** で、必要な権限だけを与えたエージェント用のトークンを作成します：

- スコープは **read** と **rent**（**manage** や **billing** は付けない）。
- **支出上限**（ドル単位）、**最長レンタル時間**（時間単位）、**有効期限**。

トークンは一度しか表示されません。エージェントのシークレットストアに保管し、プロンプトやリポジトリには決して書かないでください。上限つきのトークンでは、すべてのレンタルに停止時刻の設定が必要で、上限を超えるレンタルは拒否されます。

## MCP で接続

MCP エンドポイントは `$ARRAKIS_URL/mcp` で、エージェントのトークンを使って接続します。MCP の Streamable HTTP で通信し、レスポンスはプレーンな JSON です。

Claude Code:

```sh
claude mcp add --transport http arrakis $ARRAKIS_URL/mcp --header "Authorization: Bearer ark_..."
```

Cursor（`mcp.json`）：

```json
{
  "mcpServers": {
    "arrakis": {
      "url": "$ARRAKIS_URL/mcp",
      "headers": { "Authorization": "Bearer ark_..." }
    }
  }
}
```

## ツール

| ツール | 機能 |
|---|---|
| `search_gpus` | GPU の性能、価格、ホストの信頼性から見て良い順にマシンを検索します。おすすめの 1 台とその理由も示します。絞り込み条件：GPU の種類、最小・最大 GPU 数、メモリ、GPU 1 時間あたりの上限価格、国。 |
| `get_market_summary` | GPU ファミリーごとの最新価格と空き状況。 |
| `get_balance` | 残高で支払える金額。 |
| `rent_gpu` | マシンをレンタルし、SSH コマンドとともに返します。`template_id` か任意の公開 `image` で起動します。課金対象。 |
| `deploy_model` | Hugging Face のモデルを、そのモデルに合った規模のマシン上で vLLM、SGLang、llama.cpp を使って推論サーバーとして動かし、エンドポイントと API キーを返します（[モデルをデプロイ](/ja/docs/models)）。課金対象。 |
| `list_images` | `template_id` に指定できる Arrakis イメージと、保存済みのイメージ。 |
| `list_instances` | 自分のマシンの一覧。 |
| `get_instance` | 1 台のマシンの最新の状態と、ホストからの通知（ある場合）。 |
| `get_events` | マシンに起きたこと：起動完了、終了とその理由（ホストによる回収かどうか）、ホストからの通知。どのツールの結果にも、直近 1 日分のアラートが含まれます。 |
| `terminate_instance` | マシンを停止して削除します。 |
| `schedule_removal` | マシンが自動で削除される時刻を設定します。 |
| `get_partner_earnings` | パートナー向け：自分のパートナーコードとリンク、紹介した顧客、獲得した額、パートナープログラムが受付中かどうか。 |
| `join_partner_program` | アカウントの所有者が同意する場合に、そのアカウントでパートナープログラムに参加します（[/partners](/ja/partners)）。 |

## 再試行しても二重にレンタルされない

予定しているレンタルごとに、変わらない `idempotency_key` を付けます。同じキーで再試行すると、二重に請求されることなく同じマシンが返ります。MCP では、キーを付けない呼び出しでも、同じマシン、名前、時間数で 10 分以内に繰り返された場合は、最初のマシンが返ります。

## 最初に試すプロンプト

> B200 を 3 時間レンタルして python eval.py を実行し、結果を手元にコピーしたら、マシンを停止して。

その他：[すべてのドキュメント](/ja/docs.md) · [OpenAPI](/openapi.json) · [llms.txt](/ja/llms.txt)
