better-call-claude について
better-call-claudeは、Claude Codeと電話、SMS、WhatsAppで双方向にやり取りするMCPサーバーです。電話からタスクを開始し、進捗や判断依頼を受け取り、チャネルをまたいで会話の文脈を引き継げます。
主な機能
- 01発着信の音声通話
- 02双方向のSMSメッセージ
- 03WhatsAppメッセージ
- 04チャネル間の文脈共有
- 05WhatsAppの継続的な受信
活用シーン
- 01電話からClaude Codeのタスクを開始
- 02入力が必要な際にコールバックを受信
- 03SMSでデプロイ状況を確認
- 04音声で始めたタスクをWhatsAppで継続
MCP 対応
このMCPサーバーはClaude Codeを電話、SMS、WhatsAppの連絡チャネルに接続します。タスクの実行中にClaude Codeがユーザーとやり取りできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y better-call-claudeBETTERCALLCLAUDE_PHONE_PROVIDERPhone provider: 'twilio' or 'telnyx'BETTERCALLCLAUDE_PHONE_NUMBERYour phone number in E.164 formatBETTERCALLCLAUDE_PHONE_ACCOUNT_SIDシークレットTwilio Account SID or Telnyx API KeyBETTERCALLCLAUDE_PHONE_AUTH_TOKENシークレットTwilio Auth Token or Telnyx API SecretBETTERCALLCLAUDE_USER_PHONE_NUMBERYour personal phone number in E.164 format (for outbound calls/SMS)BETTERCALLCLAUDE_OPENAI_API_KEYシークレットOpenAI API key for speech-to-text (Whisper) and text-to-speechBETTERCALLCLAUDE_WHATSAPP_NUMBERWhatsApp number if different from phone number (e.g., Twilio Sandbox)BETTERCALLCLAUDE_PORTLocal HTTP server portTAILSCALE_HOSTNAMEOverride Tailscale hostname for webhook URLBETTERCALLCLAUDE_WHATSAPP_PROVIDERWhatsApp provider: set to 'baileys' for free WhatsApp via WebSocket (no Twilio needed)BETTERCALLCLAUDE_BAILEYS_AUTH_DIRシークレットPath to Baileys auth state directory (default: data/baileys-auth)BETTERCALLCLAUDE_WHATSAPP_CHAT_HISTORY_SIZEMax WhatsApp chat history messages to retain (default: 50)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Better Call Claude
音声通話、SMS、WhatsApp を介した Claude Code との双方向コミュニケーション。
電話から Claude に電話してタスクを開始し、Claude が入力を必要とするときや状況を伝えたいときに折り返しを受け取れます。
📞 「ねえ Claude、認証モジュールをリファクタリングして、完了したときか判断が必要なときに電話して。」
[20 分後、電話が鳴る]
🤖 「リファクタリングは完了しましたが、セキュリティ上の問題が見つかりました。今すぐ修正しますか、それともチケットを作成しますか?」
💬 SMS/WhatsApp を使う場合:
あなた:「Claude、デプロイの状況はどう?」
Claude:「デプロイが完了しました。3 つのサービスを更新し、ヘルスチェックはすべて成功しています。」
機能
- 📱 着信通話 - 電話から Claude Code に電話してタスクを開始
- 📲 発信通話 - 完了したとき、行き詰まったとき、または判断が必要なときに Claude から電話
- 💬 SMS メッセージ - Claude とテキストメッセージを送受信
- 📱 WhatsApp - WhatsApp Business と完全に統合
- 🔄 チャネル間のコンテキスト - 音声で開始し、シームレスに WhatsApp で続行
- 🔗 永続セッション - Claude は WhatsApp メッセージを待ち受けるために起動したまま
- 🔒 セキュアな転送 - ガイド付き自動セットアップに対応した Tailscale Funnel
- 🗣️ 自然な会話 - すべてのチャネルで複数ターンのやり取りに対応
- 🔧 ツールの組み合わせ - コミュニケーション中に Claude が他のツールを使用可能
- ⚡ Webhook の自動更新 - URL の変更時に Twilio webhook を自動更新
- 🆓 Baileys による無料の WhatsApp - API 費用ゼロ、ビジネス認証不要の個人用 WhatsApp
- ⌚ どこでも利用可能 - 電話、スマートウォッチ、その他あらゆるデバイス
⚠️ テスト状況
チャネル プロバイダー 状況 音声 Twilio ✅ テスト済み・動作確認済み Twilio Sandbox ✅ テスト済み・動作確認済み SMS Twilio ⏳ A2P 10DLC 認証待ち 音声 Telnyx 🔬 未テスト SMS Telnyx 🔬 未テスト Telnyx 🔬 未テスト Baileys(無料) 🔬 新機能 - テストへのご協力を歓迎します その他のプロバイダー/チャネルの組み合わせのテストへのご協力を歓迎します!
クイックスタート
1. セットアップを選択
| セットアップ | 利用できる機能 | 費用 | 必要なアカウント |
|---|---|---|---|
| Baileys のみ | WhatsApp メッセージ | 無料 | なし |
| Twilio/Telnyx | 音声 + SMS + WhatsApp | 約 1 ドル/月 + 使用量 | Twilio/Telnyx + OpenAI |
| ハイブリッド | 音声 + SMS(Twilio)+ WhatsApp(Baileys) | 約 1 ドル/月 + 音声の使用量 | Twilio/Telnyx + OpenAI |
WhatsApp だけを使いたい場合は? オプション C:Baileys に進んでください。アカウントも API キーも不要で、完全無料です。
2. 電話プロバイダーを設定する
オプション A:Telnyx(推奨 — 50%安価)
- portal.telnyx.comでアカウントを作成し、本人確認を行います
- 電話番号を購入します(月額約1ドル)
- Voice API アプリケーションを作成します:
- Webhook URL に、トンネル URL +
/webhook/telnyx/inboundを設定します - API バージョンに v2 を設定します
- Webhook URL に、トンネル URL +
- 電話番号でSMS を有効にします:
- Messagingに移動し、Messaging Profile を作成します
- 電話番号をプロファイルに割り当てます
- SMS の Webhook URL に、トンネル URL +
/webhook/telnyx/smsを設定します
- WhatsApp を有効にします(任意):
- ポータルのWhatsAppに移動します
- WhatsApp Business の認証を完了します
- Webhook URL に、トンネル URL +
/webhook/telnyx/whatsappを設定します
- 発信通話用に電話番号を認証します
- Connection ID(または Messaging Profile ID)と API Key を取得します
オプション B:Twilio
- twilio.com/consoleでアカウントを作成します
- 電話番号を購入します
- 電話番号の Webhook を設定します:
- 音声 Webhook:トンネル URL +
/webhook/twilio/inbound - SMS Webhook:トンネル URL +
/webhook/twilio/sms
- 音声 Webhook:トンネル URL +
- WhatsApp を有効にします(任意):
- WhatsApp Sendersに移動します
- WhatsApp Business の設定を完了します
- Webhook URL に、トンネル URL +
/webhook/twilio/whatsappを設定します
- Account SID と Auth Token を取得します
オプション C:Baileys(無料の WhatsApp — API プロバイダー不要)
Baileys は WebSocket 経由で WhatsApp の Web プロトコルに直接接続します。個人の WhatsApp アカウントを使用するため、ビジネス認証も API 費用も不要で、Twilio/Telnyx も必要ありません。
仕組み: WhatsApp Web と同様に、QR コードをスキャンしてデバイスをリンクします。
ステップ 1:クローンしてインストールする
git clone https://github.com/sns45/better-call-claude
cd better-call-claude
bun install
ステップ 2:WhatsApp をペアリングする
bun run baileys:pair
- ターミナルに QR コードが表示されます
- スマートフォンで WhatsApp を開き、設定 > リンク済みデバイス > デバイスをリンクを選択します
- QR コードをスキャンします
- 「Paired successfully!」というメッセージが表示されるまで待ちます
セッションはdata/baileys-auth/に保存されるため、再度スキャンする必要はありません。
ステップ 3:Claude Code に追加する(~/.claude.jsonまたは~/.claude/settings.json):
{
"mcpServers": {
"better-call-claude": {
"command": "bun",
"args": ["run", "/path/to/better-call-claude/src/index.ts"],
"env": {
"BETTERCALLCLAUDE_WHATSAPP_PROVIDER": "baileys",
"BETTERCALLCLAUDE_USER_PHONE_NUMBER": "+1234567890"
}
}
}
}
これで完了です!Tailscale も Twilio も OpenAI のキーも必要ありません。
ステップ 4:Claude Code を再起動してテストする
自分宛てに WhatsApp メッセージを送信する(または誰かにメッセージを送ってもらう)と、Baileys が受信して Claude タスクを起動します。または、Claude に WhatsApp の送信を依頼します:
「こんにちは、と WhatsApp で送って」
オプション D:ハイブリッド(Twilio/Telnyx の音声通話 + Baileys の WhatsApp)
両方の利点を活用できます。Twilio/Telnyx で音声通話と SMS を処理し、Baileys で WhatsApp を無料で利用します。
- Twilio または Telnyx を設定します(上記のオプション A/B)
bun run baileys:pairを実行して WhatsApp をペアリングします- MCP の設定に追加します:
{
"env": {
"BETTERCALLCLAUDE_PHONE_PROVIDER": "twilio",
"BETTERCALLCLAUDE_WHATSAPP_PROVIDER": "baileys",
"BETTERCALLCLAUDE_PHONE_ACCOUNT_SID": "your-account-sid",
"BETTERCALLCLAUDE_PHONE_AUTH_TOKEN": "your-auth-token",
"BETTERCALLCLAUDE_PHONE_NUMBER": "+15551234567",
"BETTERCALLCLAUDE_USER_PHONE_NUMBER": "+15559876543",
"BETTERCALLCLAUDE_OPENAI_API_KEY": "sk-..."
}
}
音声通話と SMS は Twilio 経由で送信されます。WhatsApp は Baileys 経由で送信されます(無料)。
Baileys のみのモード(オプション C)を使用する場合は、この手順をスキップしてください。Baileys には Webhook は不要です。
Tailscale Funnel は、電話プロバイダーから Webhook を受信するための、無料で安定した公開 URL を提供します。
Tailscale を使う理由: 無料で無制限のトンネル、安定した URL(ランダムなサブドメインなし)、エンタープライズグレードのセキュリティを利用できます。
パス: Better Call Claude は、ほかのサービスとの競合を避けるため、
/bccパス(例:https://your-hostname.ts.net/bcc)を使用します。
初回セットアップ(自動):
MCP サーバーを初めて起動すると、セットアップ手順が案内されます。
-
Tailscale をインストールする(未インストールの場合):
# macOS brew install tailscale # Linux curl -fsSL https://tailscale.com/install.sh | sh -
認証する - サーバーが
tailscale upを自動実行し、ブラウザーを開きます。 -
Funnel を有効にする - ターミナルに表示された URL にアクセスし、tailnet で Funnel を有効にします(管理者による初回のみの手順です)。
これで完了です!残りの処理はサーバーが自動的に行います。
4. Better Call Claude をインストールする
# Quick start with bunx (recommended)
bunx better-call-claude
# Or install globally
bun install -g better-call-claude
better-call-claude
5. Claude Code に追加する
~/.claude/settings.json に追加します:
{
"mcpServers": {
"better-call-claude": {
"command": "bunx",
"args": ["better-call-claude"],
"env": {
"BETTERCALLCLAUDE_PHONE_PROVIDER": "telnyx",
"BETTERCALLCLAUDE_PHONE_ACCOUNT_SID": "your-connection-id",
"BETTERCALLCLAUDE_PHONE_AUTH_TOKEN": "your-api-key",
"BETTERCALLCLAUDE_PHONE_NUMBER": "+15551234567",
"BETTERCALLCLAUDE_USER_PHONE_NUMBER": "+15559876543",
"BETTERCALLCLAUDE_OPENAI_API_KEY": "sk-..."
}
}
}
}
注: Tailscale のセットアップは初回実行時に自動で行われます。必要に応じて、サーバーがインストールと認証の手順を案内します。
Claude Code を再起動します。これで完了です!
環境変数
必須変数
| 変数 | 説明 |
|---|---|
BETTERCALLCLAUDE_PHONE_PROVIDER | telnyx または twilio |
BETTERCALLCLAUDE_PHONE_ACCOUNT_SID | プロバイダーのアカウント/接続 ID |
BETTERCALLCLAUDE_PHONE_AUTH_TOKEN | プロバイダーの API キー/認証トークン |
BETTERCALLCLAUDE_PHONE_NUMBER | Telnyx/Twilio の電話番号(E.164) |
BETTERCALLCLAUDE_WHATSAPP_NUMBER | 異なる場合の WhatsApp 番号(例:Twilio Sandbox) |
BETTERCALLCLAUDE_USER_PHONE_NUMBER | 個人の電話番号 |
BETTERCALLCLAUDE_OPENAI_API_KEY | TTS/STT 用の OpenAI API キー |
Baileys(無料の WhatsApp)
| 変数 | デフォルト | 説明 |
|---|---|---|
BETTERCALLCLAUDE_WHATSAPP_PROVIDER | (未設定) | 無料の WhatsApp を有効にするには baileys を設定します |
BETTERCALLCLAUDE_BAILEYS_AUTH_DIR | data/baileys-auth | セッション認証情報のディレクトリ |
Baileys のみのモード:
WHATSAPP_PROVIDER=baileysを設定し、Twilio/Telnyx の認証情報を設定していない場合、必要なのはUSER_PHONE_NUMBERだけです。Tailscale も OpenAI キーも不要です。
Tailscale(任意)
| 変数 | デフォルト | 説明 |
|---|---|---|
TAILSCALE_HOSTNAME | 自動検出 | Tailscale のホスト名を上書きします |
任意の変数
| 変数 | デフォルト | 説明 |
|---|---|---|
BETTERCALLCLAUDE_TTS_VOICE | onyx | OpenAI の音声(alloy、echo、fable、onyx、nova、shimmer) |
BETTERCALLCLAUDE_PORT | 3333 | ローカル HTTP サーバーのポート |
BETTERCALLCLAUDE_TRANSCRIPT_TIMEOUT_MS | 180000 | 音声認識のタイムアウト(3 分) |
BETTERCALLCLAUDE_STT_SILENCE_DURATION_MS | 800 | 発話終了の検出 |
使い方
音声通話
あなた → Claude(着信)
個人の電話から Telnyx/Twilio の電話番号に電話をかけます:
📱 「ねえ Claude、決済モジュールのユニットテストを書いてください。終わったら電話してください。」
Claude は応答し、作業を開始します。完了すると、折り返し電話をかけます。
Claude → あなた(発信)
あなたの入力が必要な場合、Claude から電話をかけることができます:
🤖 「キャッシュレイヤーの方法を 3 つ見つけました。選べるように説明しましょうか?」
通話中の音声コマンド
- 「電話を切って」または「さようなら」 - 通話を終了します
- 「ちょっと待って」 - あなたが続けるまで Claude が待機します
- 「続けて」 - Claude がタスクを続行します
- 「キャンセルして」 - 現在の操作を中止します
SMS メッセージ
あなた → Claude(受信 SMS)
Telnyx/Twilio の番号にテキストメッセージを送ります:
💬 「ねえ Claude、デプロイの状況はどうですか?」
Claude は SMS で返信します:
🤖 「デプロイは 80% 完了しています。現在、統合テストを実行中です。完了まであと 5 分です。」
Claude → You(発信 SMS)
Claude からテキストで最新情報を送信できます。
🤖 「auth.ts の 42 行目でビルドに失敗しました。自動修正するには「fix」、続行するには「skip」と返信してください。」
あなた → Claude(WhatsApp の受信)
ビジネス番号に WhatsApp メッセージを送信します。
💬 「過去 1 時間のエラーログを表示して」
Claude は WhatsApp で返信します。
🤖 「3 件のエラーが見つかりました。\n1. 14:32 に接続タイムアウト\n2. 14:45 に認証失敗\n3. 15:01 にレート制限\n\n調査が必要なものはありますか?」
Claude → You(WhatsApp の送信)
Claude はリッチな WhatsApp メッセージを送信できます。
🤖 「コードレビューが完了しました。2 件の問題が見つかりました。\n• 23 行目:未使用の変数\n• 67 行目:エラーハンドリングの欠落\n\n自動修正するには「fix」、詳細を確認するには「details」と返信してください。」
チャネル間でのコンテキスト共有
音声でタスクを開始し、そのまま WhatsApp でスムーズに続けられます。Claude はすべての内容を記憶しています。
使用例
-
Claude に電話します:
📞 「やあ Claude、todo アプリを開発モードで実行して、WhatsApp で続きを話そう」
-
Claude がアプリを起動し、WhatsApp のメッセージ待機モードになります:
🤖 「todo アプリがポート 5173 で実行中です。追加の指示を WhatsApp で送ってください。」
-
WhatsApp メッセージを送信します:
💬 「localtunnel 経由で公開して、URL を allowed hosts に追加して」
-
Claude が WhatsApp で返信します:
🤖 「完了しました。Localtunnel の URL は https://xyz.loca.lt です。vite.config.ts の allowedHosts に追加しました。」
-
会話を続けます:
💬 「リモートからアクセスしたいので、パブリック IP を教えて」
🤖 「パブリック IP は 203.0.113.42 です。https://xyz.loca.lt からアプリにアクセスできます。」
WhatsApp のメッセージ待機を開始するキーフレーズ:
- 「WhatsApp で続きを話そう」
- 「WhatsApp で話そう」
- 「WhatsApp のメッセージを待って」
WhatsApp サンドボックス(Twilio)
テストには、完全な WhatsApp Business アカウントの代わりに Twilio の WhatsApp サンドボックスを使用できます。
- Twilio Console > Messaging > WhatsApp Sandbox にアクセスします
- 参加コードをサンドボックス番号(+1 415 523 8886)に送信します
- Webhook URL を
{your-tailscale-url}/bcc/webhook/twilio/whatsappに設定します - 設定に追加します:
"BETTERCALLCLAUDE_WHATSAPP_NUMBER": "+14155238886"
注: サンドボックスでは、72 時間ごとに再参加が必要です。
仕組み
┌─────────────────┐ ┌──────────────────────────────────┐
│ Your Phone │────────>│ Phone Provider │
│ 📞 Voice │<────────│ (Telnyx/Twilio) │
│ 💬 SMS │ │ │
│ 📱 WhatsApp │ │ • Voice API │
└─────────────────┘ │ • Messaging API │
│ • WhatsApp Business API │
└──────────────┬───────────────────┘
│ webhooks
▼
┌──────────────────────────────────┐
│ Transport Layer │
│ (Tailscale Funnel) │
└──────────────┬───────────────────┘
│
▼
┌─────────────────┐ ┌──────────────────────────────────┐
│ Claude Code │◄──────► │ Better Call Claude MCP Server │
│ (your IDE) │ stdio │ (local, port 3333) │
└─────────────────┘ │ │
│ • Voice handling │
│ • SMS handling │
│ • WhatsApp handling │
│ • Conversation management │
└──────────────┬───────────────────┘
│
▼
┌──────────────────────────────────┐
│ OpenAI API │
│ (Whisper STT + TTS) │
│ (Voice calls only) │
└──────────────────────────────────┘
通信フロー
音声:
- 着信: あなたが電話 → プロバイダー → Webhook → MCP サーバー → Claude Code
- 発信: Claude Code → MCP サーバー → プロバイダー → あなたの電話が鳴ります
- 音声認識: あなたの音声 → Whisper STT → テキスト → Claude → TTS → 音声再生
SMS:
- 受信: あなたがテキストを送信 → プロバイダー → Webhook → MCP サーバー → Claude Code
- 送信: Claude Code → MCP サーバー → プロバイダー API → SMS が配信されます
WhatsApp:
- 受信: あなたがメッセージを送信 → プロバイダー → Webhook → MCP サーバー → Claude Code
- 送信: Claude Code → MCP サーバー → プロバイダー API → WhatsApp メッセージが配信されます
MCP ツール
音声ツール
receive_inbound_call
ユーザーからの着信を受け付け、処理します。
initiate_call
ユーザーへの電話を開始します。
const { callId, response } = await initiate_call({
message: "Hey! I finished the refactor. What should I work on next?"
});
continue_call
追加のメッセージで通話を続けます。
const response = await continue_call({
call_id: callId,
message: "Got it. Should I also add the caching layer?"
});
speak_to_user
応答を待たずに話します(確認応答用)。
await speak_to_user({
call_id: callId,
message: "Let me search for that. One moment..."
});
end_call
通話を終了します。
await end_call({
call_id: callId,
message: "Perfect, I'll get started. Talk soon!"
});
get_call_status
現在または最近の通話のステータスを確認します。
const status = await get_call_status({ call_id: callId });
// { state: "active", duration: 45, transcript: [...] }
メッセージングツール
receive_inbound_message
受信した SMS または WhatsApp メッセージを確認します。
const result = await receive_inbound_message({
channel: "any", // "sms", "whatsapp", or "any"
timeout_ms: 5000 // How long to wait
});
// { success: true, channel: "sms", conversation_id: "...", message: "Deploy now" }
send_sms
ユーザーに SMS メッセージを送信します。
const result = await send_sms({
message: "Build complete! 42 tests passed.",
wait_for_reply: true,
timeout_ms: 180000
});
// { success: true, conversation_id: "...", reply: "Great, deploy it" }
send_whatsapp
ユーザーに WhatsApp メッセージを送信します。
const result = await send_whatsapp({
message: "Found 3 issues in code review:\n• Issue 1\n• Issue 2\n• Issue 3",
wait_for_reply: true
});
// { success: true, conversation_id: "...", reply: "Fix issue 1 first" }
reply_to_conversation
既存の会話に返信します(音声、SMS、WhatsApp で利用できます)。
const result = await reply_to_conversation({
conversation_id: "abc-123",
message: "Got it, fixing issue 1 now.",
wait_for_reply: false
});
get_conversation_history
任意の会話のメッセージ履歴全体を取得します。
const history = await get_conversation_history({
conversation_id: "abc-123"
});
// { success: true, channel: "whatsapp", messages: [...], state: "active" }
費用
音声通話
| サービス | 費用 |
|---|---|
| Telnyx 発信通話 | 約 $0.007/分 |
| Twilio 発信通話 | 約 $0.014/分 |
| OpenAI Whisper(STT) | 約 $0.006/分 |
| OpenAI TTS | 約 $0.015/1K 文字 |
一般的な音声会話: 約 $0.03~0.05/分
SMS
| サービス | 費用 |
|---|---|
| Telnyx SMS(米国) | 約 $0.004/メッセージ |
| Twilio SMS(米国) | 約 $0.0079/メッセージ |
一般的な SMS のやり取り: 約 $0.01~0.02/回
| サービス | 費用 |
|---|---|
| Baileys(個人用 WhatsApp) | 無料 |
| Telnyx WhatsApp | 約 $0.005/メッセージ |
| Twilio WhatsApp | 約 $0.005/メッセージ+会話料金 |
一般的な WhatsApp のやり取り: 無料(Baileys)または約 $0.01~0.02(Twilio/Telnyx)
インフラストラクチャ
| サービス | 費用 |
|---|---|
| 電話番号 | 約 $1/月 |
| Tailscale Funnel | 無料 |
セキュリティに関する考慮事項
Tailscale Funnel のセキュリティ
- Funnel はパブリックエンドポイントを作成しますが、トラフィックは Tailscale のセキュアなネットワークを経由します
- エンタープライズ利用向けに SSO/SCIM と統合できます
- 監査ログは Tailscale の管理コンソールで確認できます
- Webhook の署名はデフォルトで検証されます
一般
- 電話番号がログに記録されることはありません
- 通話の文字起こしは一時的なもので、再起動時に消去されます
- 認証情報は環境変数を使用し、ハードコードしないでください
機能のアテステーション
このリポジトリには、リポジトリのルートに smithmark の機能マニフェスト smithmark.yaml が含まれています。これは、このサーバーが自身のプロセス外でアクセスするすべての対象を宣言する「コードによる信頼」の宣言です。対象には、外部接続先のネットワークホスト(Twilio、Telnyx、OpenAI、WhatsApp/Baileys のインフラストラクチャ、および、起動された claude サブプロセスを介して間接的にアクセスする api.anthropic.com)、読み書きするファイルシステムのパス(Baileys の認証状態、起動時のデバッグログ)、実行するバイナリ(claude、tailscale、which、open、sudo)、読み取る環境変数、取り扱うシークレットの種類(Twilio、Telnyx、OpenAI の API キー)が含まれます。
GitHub でリリースするたびに、.github/workflows/smithmark-attest.yml が公開済み npm tarball に対するキーレスの Sigstore アテステーションを生成します。GitHub の OIDC トークンを短期間有効な Fulcio 署名証明書と交換し、その証明書でアテステーションに署名するとともに、公開 Rekor 透明性ログに署名を記録します。署名キーもシークレットも使用しません。生成された smithmark-attestation.sigstore.json は GitHub リリースに添付されます。
公開済みのバージョンを検証するには、次のコマンドを実行します。
smithmark verify [email protected] \
--certificate-identity "https://github.com/sns45/better-call-claude/.github/workflows/smithmark-attest.yml@refs/tags/v3.1.1" \
--certificate-oidc-issuer "https://token.actions.githubusercontent.com"
(v3.1.1 を実際のリリースタグに置き換えてください)
smithmark.yaml は、このサーバーの機能範囲に関する正式な宣言です。smithmark lint(および厳格モードでの verify)は、意図的にホストを認識しない仕様です。マニフェストがホストレベルで何を宣言しているかに関係なく、すべてのネットワーク/実行/ファイルシステムの呼び出し箇所に対して、一般的な「未宣言」の指摘を出すため、ネットワークに接続する実際の MCP サーバーはすべて、参考情報としての指摘を受けます。これらの指摘は想定されたノイズであり、マニフェストが古くなっていることを示すものではありません。信頼する記録は上記のマニフェストです。
トラブルシューティング
音声に関する問題
Claude が通話に応答しない
- MCP サーバーが稼働していることを確認します:
claude --debug - プロバイダーのダッシュボードで Webhook URL が設定されていることを確認します
- Tailscale Funnel が有効であることを確認します
発信通話を行えない
BETTERCALLCLAUDE_USER_PHONE_NUMBERが正しいことを確認します- 電話番号がプロバイダーで認証済みであることを確認します
- プロバイダーのアカウントに十分な残高があることを確認します
音質に関する問題
- ネットワーク接続を確認します
- 別の TTS 音声を試します:
BETTERCALLCLAUDE_TTS_VOICE=nova - 無音検出を調整します:
BETTERCALLCLAUDE_STT_SILENCE_DURATION_MS=1000
SMS に関する問題
SMS が届かない
- プロバイダーのダッシュボードで、電話番号の SMS が有効になっていることを確認します
- SMS Webhook URL が設定されていることを確認します:
/webhook/telnyx/smsまたは/webhook/twilio/sms - 電話番号に Messaging Profile が割り当てられていることを確認します(Telnyx)
SMSを送信できない
- 電話番号がSMSに対応しているか確認します
- 宛先番号の形式を確認します(E.164:+15551234567)
- プロバイダーアカウントの残高を確認します
WhatsAppの問題
WhatsAppメッセージを受信できない
- プロバイダーポータルでWhatsApp Businessが設定されているか確認します
- Webhook URLを確認します:
/webhook/telnyx/whatsappまたは/webhook/twilio/whatsapp - WhatsApp Businessの認証が完了していることを確認します
WhatsAppメッセージを送信できない
- ユーザーから先にメッセージを送ってもらう必要があります(WhatsAppの24時間ルール)
- WhatsApp Businessの承認状況を確認します
- メッセージテンプレートが要件に準拠していることを確認します(先に送信するメッセージの場合)
Baileysの問題
QRコードが表示されない
MCP サーバー内にはQRコードを表示できません(stdoutはMCPプロトコル用に確保されています)。ペアリングスクリプトを別途実行してください:
cd /path/to/better-call-claude
bun run baileys:pair
ペアリングが完了すると、セッションが保存され、MCP サーバーが自動的に接続します。
「Baileys configured but no session found」
bun run baileys:pairを実行して、まずWhatsAppをペアリングしてから、Claude Codeを再起動してください。
WhatsAppからログアウトされた
認証ディレクトリを削除して、再度ペアリングしてください:
rm -rf data/baileys-auth
bun run baileys:pair
メッセージを受信できない
- Baileysが接続されているか確認します(stderrで
[Baileys] Connectedを探します) - メッセージが個人チャットからのものであることを確認します(グループメッセージは除外されます)
- 送信者がリンク済みアカウント自身でないことを確認します(自身のメッセージは除外されます)
Tailscaleの問題
「Tailscale not running」
- macOS:アプリケーションからTailscaleアプリを開きます
- Linux:
sudo systemctl start tailscaled && tailscale up
「Funnel not enabled」
- ターミナルに表示されたURLにアクセスしてFunnelを有効にします
- または、https://login.tailscale.com/admin/acls にアクセスして、Funnel機能を追加します
Funnelは起動するがWebhookが動作しない
tailscale funnel statusで、/bccが使用中のポートを指していることを確認します- 電話プロバイダーのWebhook URLがTailscale URL(
/bccパスを含む)と一致していることを確認します curl https://your-hostname.ts.net/bcc/healthでテストします
開発
# Clone the repo
git clone https://github.com/sns45/better-call-claude
cd better-call-claude
# Install dependencies
bun install
# Run in development mode
bun run dev
ローカルでのテスト
# Start the MCP server
bun run dev
# In another terminal, test with MCP inspector
npx @anthropics/mcp-inspector
技術スタック
- ランタイム: Bun - 高速なJavaScriptランタイム
- Webフレームワーク: Hono - 軽量で高速なWebフレームワーク
- 電話: Telnyx / Twilio - 電話API
- WhatsApp: Baileys - 無料のWhatsApp Webプロトコル
- 音声: OpenAI Whisper - STT/TTS
- トランスポート: Tailscale Funnel - 公開URLのトンネリング
- プロトコル: MCP - Model Context Protocol
コントリビューション
PRを歓迎します!ガイドラインについてはCONTRIBUTING.mdをご覧ください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。