---
title: "ThunderPhone CLI"
description: "ターミナルからログインし、音声エージェントと通話を管理し、MCPクライアントを設定して、プロジェクトのひな形を作成します。"
---

CLI には Node.js 18.18 以降が必要です。`npx` で実行するか、グローバルにインストールします。

```bash
npm install -g thunderphone
thunderphone --help
```

## ログイン

```bash
npx thunderphone login
thunderphone whoami --json
```

ログインすると確認コードが表示され、ブラウザが開き、認可を待機します。
ヘッドレスマシンでは `--no-browser` を使用し、表示された URL を別の場所で開きます。
デバイスログインには、API の OAuth デバイスフローがロールアウトされている必要があります。
`THUNDERPHONE_API_KEY` に設定した組織 API キーでもコマンドを認証でき、保存済みのログイン認証情報より優先されます。

認証情報はプロファイルごとに、ファイルモード `0600` で `~/.config/thunderphone/credentials.json`
に保存されます。`XDG_CONFIG_HOME` と `THUNDERPHONE_CONFIG_DIR` はディレクトリを上書きします。
アクセストークンは自動的に更新され、ローテーションされるリフレッシュトークンはアトミックに
保存されます。トークンがログイン時に表示されることはありません。

```bash
thunderphone login --profile work
thunderphone agents list --profile work --json
thunderphone logout --profile work
```

`THUNDERPHONE_PROFILE` はデフォルトのプロファイルを設定します。ログアウトするとローカルの認証情報は削除されますが、
サーバーの許可は取り消されません。デフォルト API は `https://api.thunderphone.com` です。
別の API を使用するには、`--api-base-url` または `THUNDERPHONE_API_BASE_URL` を使用します。プロファイルのトークンを
別の設定済み API URL に送信することはできません。その URL には別のプロファイルでログインしてください。

## コマンド

すべてのコマンドは `--json` を受け付けます。成功時のデータは stdout に出力され、エラーは
ゼロ以外の終了コードとともに stderr に出力されます。`--json` を指定しない場合、出力はコンパクトなテーブルまたはフィールド一覧になります。
JSON では API レスポンスの構造が維持され、認証情報フィールドは編集されます。MCP サービングでは、stdout は MCP プロトコル用に予約されます。

| コマンド | 用途 |
| --- | --- |
| `login [--no-browser] [--scope "scopes"]` | デバイスコードで認可する |
| `logout`, `whoami` | ローカル認証情報を削除する。アクセス可能な組織を一覧表示する |
| `agents list`, `agents get ID` | エージェントを取得する |
| `agents create --file agent.json` | エージェントを作成する |
| `agents update ID --file agent.json` | エージェントの下書きを保存する |
| `agents deploy ID`, `agents delete ID` | 下書きをデプロイする。エージェントを削除する |
| `numbers list` | 電話番号を取得する |
| `numbers provision --country US --area-code 415` | 米国の着信番号をプロビジョニングする |
| `numbers assign NUMBER_ID --agent ID` | 着信エージェントを割り当てる |
| `sms send TO --from FROM --body TEXT --idempotency-key KEY` | 安全な再実行に対応した、顧客接続済み通信事業者番号経由で SMS を送信する |
| `sms list [--limit N]`, `sms get UUID` | SMS レコードを一覧表示または確認する |
| `call TO --agent ID --from FROM [--wait]` | 発信通話を開始する。必要に応じて文字起こしを待機する |
| `calls list [--limit N] [--agent ID]` | 通話を一覧表示する（上限は 1～200） |
| `calls get ID`, `calls transcript ID` | 1 件の通話またはその文字起こしを取得する |
| `test run AGENT_ID [--scenario ID] --consent-to-charge` | ウェブチャネルを使用して、課金対象の保存済みシナリオを実行する |
| `test status RUN_ID [--agent ID]` | バッチを確認する。エージェントを指定した場合はシナリオの詳細も表示する |
| `import VENDOR export.json` | レビュー用にベンダー JSON インポートを準備する |
| `imports get UUID`, `imports commit UUID` | インポートを確認する。レビュー後に選択したエージェントを確定する |
| `mcp setup`, `mcp serve` | クライアントを設定する。stdio ブリッジを開始する |
| `init [directory]` | プロジェクトのスキャフォールドを生成する |

発信通話には、発信が有効な番号が必要です。`THUNDERPHONE_FROM_NUMBER` で
`--from` を指定できます。顧客の VoIP 番号では引き続き発信通話を利用できます。
ThunderPhone がプロビジョニングした番号は、最初は着信専用です。組織管理者は
電話番号ページから発信通話をリクエストできます。各リクエストは
手動で審査されます。`--wait` のデフォルトのタイムアウトは 1 時間です。変更するには
`--timeout SECONDS` を設定します。タイムアウトしても通話は終了せず、待機のみ停止します。

SMS にも、接続済みの Twilio または Telnyx
アカウント上の SMS 対応番号が必要です。ThunderPhone 所有の番号から送信されることはありません。同一性キーを再利用するのは、
完全に同じ送信者、受信者、本文で再試行する場合に限ってください。

インポートでは `vapi`、`retell`、`elevenlabs`、`bland` をサポートしています。2 番目の引数は
リモートベンダー ID ではなく、ベンダー JSON エクスポートへのパスです。API はマッピングを
非同期で準備します。`imports get UUID` で確認し、準備が完了して
マッピングされたフィールドと警告をレビューした後にのみ確定してください。[エージェントのインポート](/ja/guides/import-agents)を参照してください。

## MCP の設定

```bash
thunderphone mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client codex --scope user --api-key-env THUNDERPHONE_API_KEY
thunderphone mcp setup --client claude-desktop --scope user
```

クライアント: `claude-code`、`codex`、`cursor`、`vscode`、`gemini`、`claude-desktop`、および
`windsurf`。プロジェクトスコープがデフォルトです。Desktop と Windsurf ではユーザースコープが必要です。
`--client` を省略すると、プロジェクトから単一のクライアントを検出します。検出結果が曖昧な場合は、
対話型で確認を求めるか、非対話型セッションでは手順を示して失敗します。
設定では書き込んだファイルを出力し、関連しないサーバーは保持されます。既存の JSON
は有効な厳密 JSON である必要があります。Codex の TOML 値は保持されますが、コメントは再整形される場合があります。

設定では直接リモート HTTP が優先されます。`--api-key-env` を指定すると、キーそのものではなく
変数参照を書き込みます。このオプションを指定しない場合、直接 HTTP はクライアントの
OAuth サポートに依存し、CLI の認証情報ファイルは使用しません。任意の stdio 対応クライアントで
`thunderphone login` の認証情報を再利用するには、次を使用します。

```json
{
  "mcpServers": {
    "thunderphone": {
      "command": "npx",
      "args": ["-y", "@thunderphone/mcp"]
    }
  }
}
```

ラッパーは `THUNDERPHONE_API_KEY`、次に現在の CLI プロファイル（必要に応じて更新）を確認し、
その後 OAuth を `mcp-remote` に委任します。`THUNDERPHONE_MCP_URL` はエンドポイントを上書きします。
テレメトリーは送信しません。スタンドアロン設定は
`npx -y @thunderphone/mcp setup --client cursor`、または `@thunderphone/mcp` をグローバルに
インストールした後の `thunderphone-mcp setup` でも利用できます。

## プロジェクトを作成する

```bash
npx create-thunderphone-agent my-receptionist
npx create-thunderphone-agent my-outbound --template python --agent-type outbound
# Equivalent:
thunderphone init my-receptionist --template node --agent-type receptionist
```

テンプレートは `node` と `python`、エージェントタイプは `receptionist`、`outbound`、および
`custom` です。デフォルトのエージェントは、明示的なデモ情報を備えた英語・スペイン語対応の歯科受付です。
プロジェクトには `agent.json`、デプロイスクリプト、Claude Code、Cursor、VS Code 用の MCP 設定、
エージェント指示、`.env.example`、および README が含まれます。
スキャフォールディングはオフラインで実行され、空でないディレクトリへの上書きは拒否されます。

デプロイ前に業務情報を編集してください。生成された README の説明に従って、API キー、接続済みの発信者番号、
およびテスト受信者をエクスポートします。`npm run deploy`
または `python deploy.py` は、エージェントを作成または更新し、そのドラフトをデプロイして、課金対象のテスト通話を発信します。
スクリプトは API キー認証を使用します。CLI と stdio MCP ラッパーはデバイスログインにも対応しています。
Python スクリプトには Python 3.9 以降が必要です。
