Open in
ThunderPhoneをMCPサーバーとして使用する
Claude、ChatGPT、Claude Code、Codex、Cursor、VS Code、またはその他のStreamable HTTP MCPクライアントから、ThunderPhone音声エージェントを構築、テスト、検証、運用します。
ThunderPhone は、以下の場所で Streamable HTTP Model Context Protocol サーバーを公開しています。
https://api.thunderphone.com/v1/mcpこれは、リモート MCP サーバーを音声エージェントに接続する場合とは逆方向です。
| 方向 | 結果 |
|---|---|
| リモート MCP サーバー → ThunderPhone エージェント | 音声エージェントがリモートサーバーのツールを呼び出せます。 |
| ThunderPhone → MCP クライアント | コーディングエージェントで ThunderPhone を構築、テスト、運用できます。 |
認証
ディレクトリクライアントでは、デフォルトで OAuth を使用します。ログインし、組織を選択して、要求された権限を承認します。アクセス権は 組織 → APIキー → 承認済みアプリ で取り消します。
APIキーで設定されたクライアントでは、組織 → キー で sk_live_ キーを作成し、THUNDERPHONE_API_KEY として MCP クライアントに公開します。キーは1つの組織に紐付けられます。別の組織が所有する ID は見つからないものとして扱われます。
CLI と stdio の代替手段
ThunderPhone CLI は、無関係なサーバーを保持したままクライアント設定を書き込めます。
npx -y @thunderphone/mcp setup --client cursor --api-key-env THUNDERPHONE_API_KEY
npx thunderphone mcp setup --client claude-desktop --scope user@thunderphone/mcp をグローバルインストールした後は、同じオプションで thunderphone-mcp setup を使用します。セットアップは Claude Code、Codex、Cursor、VS Code、Gemini、Claude Desktop、Windsurf をサポートしています。直接 HTTP が推奨されます。Desktop では stdio を使用します。
stdio 対応クライアントでは、command: "npx" と args: ["-y", "@thunderphone/mcp"] を設定します。ラッパーはまず THUNDERPHONE_API_KEY を使用し、次に thunderphone login の認証情報を使用して期限切れのトークンを更新し、その後 mcp-remote 経由で OAuth を使用します。デバイスログインと OAuth には、対応する API OAuth の提供開始が必要です。APIキーの経路には必要ありません。直接 HTTP の設定では CLI 認証情報ストアを読み取りません。デバイスログインを再利用するには stdio ラッパーを使用します。
これらは、以下の手動クライアント設定の代替手段です。
クライアント設定
Claude と ChatGPT は OAuth でログインするため、API キーは不要です。ThunderPhone アカウントをまだ作成していない場合は、ログインページで アカウントを作成 を選択します。メールアドレスの確認後、承認画面に戻ります。
Claude(ウェブ、デスクトップ、モバイル)
- カスタマイズ → コネクタ を開きます(旧バージョンでは 設定 → コネクタ)。コネクタディレクトリに ThunderPhone が表示されている場合は選択します。表示されない場合は カスタムコネクタを追加 を選択し、名前を
ThunderPhone、URL をhttps://api.thunderphone.com/v1/mcpとして入力します。 - 接続 を選択し、ThunderPhone にログインして組織を選択し、権限を承認します。
- チャットでツールメニューから ThunderPhone を有効にし、必要な操作を依頼します。例: 「エージェントを一覧表示」。
Claude は各ツールを初めて使用する前に確認を求めます。ほとんどの確認を省略するには、カスタマイズ → コネクタ → ThunderPhone を開き、読み取り専用ツール を常に許可するよう設定します。これらのツールは、エージェント、通話、文字起こし、残高、ドキュメントを参照するだけです。変更が実行される前に毎回確認したい場合は、書き込み/削除ツール を承認が必要な設定のままにします。
カスタムコネクタには有料の Claude プランが必要です。Team および Enterprise プランでは、まずオーナーが組織のコネクタ設定でコネクタを追加し、その後各メンバーが自身の ThunderPhone アカウントを接続します。
ChatGPT
- ChatGPT のアプリディレクトリに ThunderPhone が表示されている場合は、選択して接続します。
- 表示されない場合は 設定 → アプリとコネクタ → 詳細設定 を開き、開発者モード を有効にして、URL
https://api.thunderphone.com/v1/mcpと OAuth 認証を使用するコネクタを作成します。 - ThunderPhone にログインし、組織を選択して権限を承認します。ツールメニューからチャットに ThunderPhone を追加します。
エージェントまたは電話番号の削除、下書きの破棄、キャンペーンの開始、外部システムに書き込み可能なテストリクエストの送信では、どちらのアプリでも2回目の確認が求められます。破壊的操作の確認を参照してください。
Claude Code
claude mcp add --transport http thunderphone https://api.thunderphone.com/v1/mcp \
--header "Authorization: Bearer $THUNDERPHONE_API_KEY"Codex
以下を ~/.codex/config.toml に追加します。
[mcp_servers.thunderphone]
url = "https://api.thunderphone.com/v1/mcp"
bearer_token_env_var = "THUNDERPHONE_API_KEY"Cursor
.cursor/mcp.json を作成します。
{
"mcpServers": {
"thunderphone": {
"url": "https://api.thunderphone.com/v1/mcp",
"headers": {
"Authorization": "Bearer ${env:THUNDERPHONE_API_KEY}"
}
}
}
}Claude Desktop
Claude Desktop の設定に mcp-remote ブリッジを追加します。
{
"mcpServers": {
"thunderphone": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://api.thunderphone.com/v1/mcp",
"--header",
"Authorization: Bearer ${THUNDERPHONE_API_KEY}"
],
"env": {
"THUNDERPHONE_API_KEY": "sk_live_YOUR_API_KEY"
}
}
}
}VS Code
.vscode/mcp.json を作成し、VS Code の入力プロンプトでキーを入力します。
{
"inputs": [
{
"type": "promptString",
"id": "thunderphone-api-key",
"description": "ThunderPhone organization API key",
"password": true
}
],
"servers": {
"thunderphone": {
"type": "http",
"url": "https://api.thunderphone.com/v1/mcp",
"headers": {
"Authorization": "Bearer ${input:thunderphone-api-key}"
}
}
}
}ツール
すべてのツールには MCP 注釈が付いています。表内の R は読み取り専用、D は破壊的操作、I はべき等、O はオープンワールドまたはネットワークとの連携を示します。ダッシュはヒントが設定されていないことを示します。
接続
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
get_connection_identity | — | R, I | 認証情報を検証し、組織と安全な認証情報メタデータを返します。 |
エージェント
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_agents | — | R, I | エージェントを一覧表示します。 |
get_agent | agent_id | R, I | 1つのエージェントを取得します。 |
create_agent | エージェント設定 | — | エージェントを作成します。 |
update_agent | agent_id、変更フィールド | D | エージェントの下書きにフィールドをステージングし、下書き内の既存の値を置き換えます。確認手順なしで実行されます。deploy_agent を実行するまでデプロイ済みエージェントは変更されず、discard_agent_draft を実行すると下書きが元に戻ります。 |
deploy_agent | agent_id、任意の if_updated_at | D, I | 下書きを本番環境に反映します。 |
discard_agent_draft | agent_id、任意の if_updated_at、2回目のリクエストで confirmation_token | D, I | ステージング済みの変更を破棄します。2ステップです。破壊的操作の確認を参照してください。 |
duplicate_agent | agent_id、任意の name | — | 組織内でエージェントを複製します。 |
delete_agent | agent_id、2回目のリクエストで confirmation_token | D, I | エージェントを完全に削除します。2ステップです。 |
list_agent_versions | agent_id | R, I | デプロイ済みの設定バージョンを一覧表示します。 |
電話番号と通信事業者
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_phone_numbers | — | R, I | 組織の電話番号とルーティングを一覧表示します。 |
get_phone_number_limits | — | R, I | 管理対象番号の使用状況と上限を取得します。 |
provision_phone_number | 任意の area_code、city、state、idempotency_key | D, O | ThunderPhone 管理の着信番号を購入します。 |
list_voip_connections | — | R, I | 接続されている顧客キャリアを一覧表示します。 |
search_voip_numbers | connection_id、country、type、任意の area_code | R, I, O | キャリアの在庫を検索します。 |
import_voip_numbers | connection_id、numbers | D, O | キャリアですでに所有している番号をインポートします。 |
update_phone_number | phone_number_id、ルーティング/ラベル/Webhook フィールド | D | エージェントの割り当てを含む、番号のルーティングを更新します。 |
delete_phone_number | phone_number_id、confirm、任意の release_at_provider、2 回目のリクエストでの confirmation_token | D, I, O | 番号を解放します。2 ステップです。 |
SMS
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
send_sms | from_number, to, body, idempotency_key | D, I, O | 接続されたTwilioまたはTelnyxの番号を通じて、プレーンテキストのSMSを1件送信します。 |
通話
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_calls | 任意のフィルター、limit、offset | R、I | RESTの通話履歴フィルターで通話を一覧表示します。 |
get_call | call_id | R、I | 通話ステータスとメタデータを取得します。 |
get_call_transcript | call_id、任意のlive | R、I | 通話の文字起こしを取得します。 |
get_call_audio_url | call_id、任意のdownload | R、I、O | 署名付き音声URLを返します。MCP経由で音声をストリーミングすることはありません。 |
get_call_grade | call_id | R、I | 最新の通話評価を取得します。 |
place_call | agent_id、from_number、to_number | D、O | 冪等ではない発信通話を1件実行します。 |
export_calls | 通話フィルター、export_format | R、I | RESTエンドポイントの上限までJSONまたはCSVとしてエクスポートします。 |
テストと検証
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_test_scenarios | agent_id | R, I | テストシナリオを一覧表示します。 |
create_test_scenario | agent_id, title, scenario_prompt, 任意の条件 | — | シナリオを作成します。 |
generate_test_scenarios | agent_id, 任意の count、include_edge_cases、locale | O | エージェントプロンプトからシナリオを生成します。 |
run_agent_tests | agent_id, channel, consent_to_charge, 任意の選択項目/マトリクス | D, O | ウェブまたは電話経由でシナリオを実行します。 |
get_test_run | agent_id, batch_id | R, I | バッチのステータスとシナリオごとの結果を取得します。 |
list_validation_runs | agent_id | R, I | 最近の下書き検証実行を一覧表示します。 |
get_validation_status | agent_id | R, I | 最新の検証状態と下書き一致情報を取得します。 |
ナレッジ
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_knowledge_bases | — | R, I | ナレッジベースを一覧表示します。 |
create_knowledge_base | name、任意の description | — | ナレッジベースを作成します。 |
add_knowledge_document | knowledge_base_id、name、content | — | テキストまたは Markdown を追加します。 |
import_knowledge_url | url、任意の name | O | 安全な取り込みのために公開ページをキューに追加します。 |
search_knowledge | knowledge_base_id、query | R, I | 本番の検索機能を通じて検索します。 |
連携、Webhook、リモート MCP サーバー
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_integrations | — | R, I | HTTP 関数インテグレーションを一覧表示します。 |
create_integration | display_name、関数 spec、任意のエンドポイントフィールド | — | HTTP ツールを作成します。認証ヘッダーはダッシュボードで追加します。 |
test_integration | url、任意のメソッド/本文/タイムアウト、header_names を含む integration_id、2 回目のリクエストの confirmation_token | D, O | 制限付きで SSRF 保護されたテストリクエストを送信します。保存済みのヘッダー値はインテグレーションから入力され、そのホストにのみ送信されます。POST(デフォルト)、PUT、PATCH、DELETE は 2 ステップです。GET はすぐに実行されます。 |
list_webhook_endpoints | — | R, I | 署名付き Webhook エンドポイントを一覧表示します。 |
list_webhook_deliveries | 任意の agent_id、任意の endpoint_id | R, I | ペイロードを含まない最近の Webhook 配信結果を一覧表示します。 |
create_webhook_endpoint | label、url、任意のイベント/ステータス | O | 署名付き Webhook エンドポイントを作成します。 |
test_webhook_endpoint | endpoint_id | O | 通常の配信フローで合成イベントを送信します。 |
list_mcp_servers | — | R, I | 音声エージェントから呼び出し可能なリモートサーバーを一覧表示します。 |
create_mcp_server | display_name、url | O | リモートサーバーを登録して同期します。認証ヘッダーが必要なサーバーはダッシュボードで追加します。 |
sync_mcp_server_tools | server_id | D, O | リモートサーバーのツールカタログを更新します。 |
キャンペーン
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_campaigns | — | R, I | 発信キャンペーンを一覧表示します。 |
create_campaign | キャンペーンフィールド | — | 下書きキャンペーンを作成します。 |
add_campaign_contacts | campaign_id、contacts | — | 最大5,000件の JSON 連絡先を追加します。 |
campaign_action | campaign_id、action、任意の consent_to_charge、2回目のリクエストでは confirmation_token | D, O | start、pause、resume、または stop を実行します。start と resume は2段階操作です。pause と stop は即時に実行されます。 |
get_campaign_stats | campaign_id | R, I | カウンターと最近の結果を取得します。 |
音声、請求、ドキュメント
| ツール | 主な引数 | 注釈 | 機能 |
|---|---|---|---|
list_voices | — | R、I | 音声と対応言語を一覧表示します。 |
preview_voice | voice, language, text | O | サンプルを生成し、署名付き URL を返します。 |
list_voice_clones | — | R、I | カスタム音声クローンを一覧表示します。 |
get_billing_summary | — | R、I | 残高と正式なティア価格を取得します。支払いの変更操作は公開されません。 |
search_docs | query、任意の limit | R、I、O | 公開ドキュメントのインデックスを検索します。 |
get_doc_page | path | R、I、O | 公開されている Markdown ドキュメントページを 1 件取得します。 |
すべての製品ツールは、公開 API と同じ REST コードパスを使用します。したがって、REST 検証、組織スコープ、ロール、請求承認、クォータ、TCPA 確認、プロバイダー安全性、監査動作は変更なく適用されます。
破壊的操作の確認
D とマークされたツールは、何かを変更または削除するか、実在の人物への発信を開始します。元に戻せない操作には、2 回のリクエストが必要です。最初のリクエストでは何も変更されず、次を返します。
{
"status": "confirmation_required",
"action": "Delete agent",
"target": { "id": 195, "name": "Front Desk Receptionist" },
"confirmation_token": "…",
"expires_in_seconds": 600,
"next_step": "…"
}アシスタントは影響を受ける内容をユーザーに示し、確認を求めます。その後、同じ引数に confirmation_token を追加してリクエストを繰り返します。トークンは 10 分間有効で、1 つの組織、1 つのツール、および 1 組の完全に一致する引数に対してのみ有効です。そのため、3 つのエージェントを削除するには 3 回の確認が必要です。pause または stop を指定した campaign_action はこの手順をスキップするため、実行中のキャンペーンは常にすぐに停止できます。GET を指定した test_integration も同様です。一部の D ツールは 1 回のリクエストで実行されます。これは、D がサーバー側の確認ではなく、その操作の影響を示すためです。update_agent は下書きの内容を置き換えます(discard_agent_draft で元に戻せます)。deploy_agent は本番設定を置き換え、update_phone_number は進行中の通話を再ルーティングし、sync_mcp_server_tools はリモートサーバーのツールカタログを置き換えます。import_voip_numbers は番号を通信事業者に再割り当てし、run_agent_tests はクレジットを消費する可能性があります。send_sms と place_call は実在の人物に連絡します(place_call には独自の同意確認があります)。provision_phone_number は番号を購入します。MCP クライアントは、これらの操作についても承認を求める場合があります。
スタータープロンプト
prompts/list は、再利用可能な5つのワークフローを提供します。
create_inbound_receptionistrun_agent_testsbuy_and_attach_numberreview_low_grade_callsadd_url_to_agent_knowledge
一覧にあるプロンプト名と宣言された引数を指定して prompts/get を使用すると、すぐに実行できるユーザーメッセージを取得できます。
リソース
resources/list は、公開キャッシュ済みの参照情報を公開します。
| URI | 内容 |
|---|---|
thunderphone://docs/llms.txt | 公開ドキュメントのインデックス。 |
thunderphone://docs/quickstart | クイックスタートの Markdown。 |
thunderphone://pricing | 現在の公開料金の Markdown。 |
1 件を resources/read で読み取ります。公開フェッチでは、短いタイムアウト、2 MiB の上限、プロセス内で 10 分間のキャッシュを使用します。
プロトコルとエラー
サーバーはプロトコルバージョン 2025-06-18 と 2025-03-26 をサポートします。サポート対象のクライアントバージョンをエコーし、それ以外の場合は 2025-06-18 を選択します。initialize、ping、ツール、プロンプト、リソース、通知を実装しています。通知は 202 Accepted を返します。このステートレスサーバーは SSE リスナーまたはセッション削除を公開しないため、GET と DELETE は Allow: POST を伴う 405 Method Not Allowed を返します。
ツールの失敗は、isError: true を含む成功した JSON-RPC レスポンスとして返されます。テキストには短い文に続いて JSON ブロックが含まれます。
{
"code": "insufficient_balance",
"detail": "There is not enough prepaid balance.",
"next_step": "Call get_billing_summary, add funds in Organization > Billing, then retry."
}place_call では、固有の outbound_tcpa_confirmation_required: プレフィックスが維持されます。不明な JSON-RPC メソッドは、HTTP 200 レスポンス内で -32601 を返します。JSON-RPC バッチは MCP 2025-06-18 でサポートされておらず、明確な -32600 の無効なリクエストエラーを返します。