Voice Assistant MCP Server について
Voice Assistant MCP Serverは、Twilio Voice、Deepgram AI、OpenAIを使ったHR向け電話自動化システムです。MCP対応アシスタントから候補者面接や結果通知を行え、通話目的に応じたプロンプトとリアルタイム音声処理に対応します。
主な機能
- 01AIによる電話面接
- 02面接結果の電話通知
- 03求人案内の発信
- 04リアルタイム音声処理
- 05通話状況と設定の確認
活用シーン
- 01電話で候補者に質問
- 02面接結果とフィードバックの伝達
- 03候補者への求人案内
MCP 対応
MCP サーバーとして、面接、結果通知、求人案内、通話状況の取得、Twilio設定確認のツールをClaudeなどのクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
音声アシスタント MCP サーバー
Twilio Voice、Deepgram AI、OpenAIを統合し、インテリジェントな音声ベースの人事自動化ツールを作成する、強力なModel Context Protocol(MCP)サーバーです。このシステムを使うと、Claude などの AI アシスタントが、自然な音声会話を通じて電話面接を実施したり、通知を送信したり、人事関連の連絡を管理したりできます。
デモ動画
https://github.com/user-attachments/assets/6c47a8b7-7428-4711-bf26-00d5951ec66f
機能
主な機能
- AI を活用した音声面接:AI を使って候補者と電話でプロフェッショナルな面接を実施します
- 面接結果の通知:候補者に電話で面接結果とフィードバックを自動的に伝えます
- 求人情報の案内:新しいポジションについて、候補者候補者に連絡します
- リアルタイム音声処理:Deepgram の Voice Agent API を活用します
- MCP 統合:Claude やその他の MCP 対応 AI アシスタントとシームレスに統合します
技術的な機能
- WebSocket ベースのメディアストリーミング:Twilio Media Streams によるリアルタイム音声処理
- 動的なプロンプト挿入:通話の目的に応じたコンテキスト付き AI プロンプト
- 関数呼び出しの処理:通話管理のための高度な AI 関数呼び出し
- 包括的なログ記録:デバッグと監視のための詳細なログ記録
- 環境設定:認証情報を安全に管理します
アーキテクチャ
sequenceDiagram
participant Claude as MCP Client(Claude App)
participant MCP as MCP Server
participant Twilio as Twilio Voice
participant Deepgram as Deepgram
participant AI as OpenAI
%% Step 1: Initiate interaction
Claude->>MCP: Initiate voice action (e.g., interview, notification)
MCP->>Twilio: Setup voice call
Twilio-->>MCP: Call status updates
%% Step 2: Real-time audio processing
Twilio->>Deepgram: Start audio stream
Deepgram-->>AI: Transcribed text
AI->>Deepgram: LLM response
Deepgram->>Twilio: Stream audio
前提条件
プロジェクトをセットアップする前に、以下をご用意ください。
- Node.js(v22 以降)
- Twilio アカウント:
- Account SID
- Auth Token
- 電話番号(発信通話用)
- Deepgram アカウントと API Key
- Webhook 用のパブリック URL(ngrok または本番サーバー)
インストール
-
リポジトリをクローンします。
git clone https://github.com/prakharbhardwaj/voice-agent-mcp-server.git cd voice-agent-mcp-server -
依存関係をインストールします。
npm install -
環境を設定します。 ルートディレクトリに
.envファイルを作成します。# Server Configuration PORT=3000 SERVER_URL=your_ngrok_url_or_server_url # Twilio Credentials TWILIO_ACCOUNT_SID=your_twilio_account_sid TWILIO_AUTH_TOKEN=your_twilio_auth_token TWILIO_PHONE_NUMBER=+your_twilio_phone_number # Deepgram API Key DEEPGRAM_API_KEY=your_deepgram_api_key -
MCP サーバーを設定します。
mcp-config.jsonを更新して、実際のパスと認証情報を設定します。{ "mcpServers": { "voice-agent-mcp-server": { "type": "stdio", "command": "node", "args": ["/path/to/your/voice-agent-mcp-server/mcp-server.js"], "env": { "NODE_ENV": "production", "SERVER_URL": "your_ngrok_url_or_server_url", "TWILIO_ACCOUNT_SID": "your_twilio_account_sid", "TWILIO_AUTH_TOKEN": "your_twilio_auth_token", "TWILIO_PHONE_NUMBER": "+your_twilio_phone_number" } } } }
使い方
Web サーバーを起動する
npm run dev
Claude Desktop で使用する
- MCP サーバーの設定を Claude Desktop の設定に追加します。
- macOS の場合:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows の場合:
%APPDATA%\Claude\claude_desktop_config.json
- macOS の場合:
- Claude Desktop を再起動します
- Claude との会話で利用可能なツールを使用します
利用可能な MCP ツール
1. conduct_interview
候補者とのプロフェッショナルな面接を実施するため、音声通話を開始します。
パラメーター:
candidatePhone(string):E.164 形式の電話番号candidateName(string):候補者の名前position(string):応募しているポジションinterviewQuestions(array):質問の一覧
例:
Conduct an interview with John Doe at +1234567890 for the Software Engineer position.
Ask about their experience with React, their problem-solving approach, and their career goals.
2. notify_interview_result
候補者に電話をかけ、面接結果を伝えます。
パラメーター:
candidatePhone(string):E.164 形式の電話番号candidateName(string):候補者の名前position(string):面接を受けたポジションresult(enum):"accepted"、"rejected"、または "next_round"message(string):追加のフィードバックメッセージ
例:
Call Jane Smith at +1234567890 to let her know she's been accepted for the Product Manager role.
3. discuss_job_opening
求人の機会について、候補者候補者に連絡します。
パラメーター:
candidatePhone(string):E.164 形式の電話番号candidateName(string):候補者候補者の名前position(string):案内する求人ポジションcompanyInfo(string):会社と職務についての簡単な情報nextSteps(string):興味がある場合の次のステップ
4. get_call_status
進行中の音声通話のステータスとシステムの稼働状況を取得します。
5. check_twilio_config
Twilio の設定とサービスの準備状況を確認します。
プロジェクト構成
├── index.js # Main Fastify server
├── mcp-server.js # MCP server implementation
├── mcp-config.json # MCP configuration
├── package.json # Dependencies and scripts
└── src/
├── SettingsConfiguration.js # Deepgram agent settings
├── config/
│ └── dotenv.js # Environment configuration
├── mcp/
│ ├── logger.js # Logging utilities
│ ├── prompts.js # AI prompt generators
│ ├── server.js # MCP server logic
│ └── tools.js # MCP tool definitions
├── routes/
│ └── twilioRoute.js # Twilio webhook handlers
├── services/
│ ├── functionCallHandler.js # AI function call processing
│ └── twilioService.js # Twilio API wrapper
└── websockets/
└── mediaStreamHandler.js # WebSocket media processing
設定の詳細
Deepgram エージェントの設定
このシステムでは、Deepgram の Voice Agent を次のように使用します。
- 音声認識:Nova-3 モデル
- テキスト読み上げ:Aura-2 Asteria 音声
- LLM 統合:OpenAI GPT-4o-mini
- 音声フォーマット:8kHz の μ-law エンコーディング(Twilio 対応)
Twilio の統合
- メディアストリーム:WebSocket 経由のリアルタイム音声ストリーミング
- TwiML:カスタムパラメーターを使用した動的な通話ルーティング
- 通話管理:ステータスの追跡と通話の制御
トラブルシューティング
よくある問題
-
Twilio の webhook が通話を受信しない:
- SERVER_URL が公開アクセス可能であることを確認します
- ngrok が実行中で、URL が更新されていることを確認します
- TwiML の設定を確認します
-
Deepgram の接続に関する問題:
- DEEPGRAM_API_KEY が有効であることを確認します
- WebSocket の接続を確認します
- 音声フォーマットの互換性を確認します
-
Claude で MCP サーバーが読み込まれない:
- mcp-config.json のパスが絶対パスであることを確認します
- すべての環境変数が設定されていることを確認します
- 設定を変更した後、Claude Desktop を再起動します
デバッグ
コンソール出力と src/mcp/mcp-server.log ファイルを確認して、詳細なログを有効にします。
開発
開発モードでの実行
# Start web server with auto-reload
npm run dev
新しいツールの追加
src/mcp/tools.jsでツールを定義しますsrc/mcp/prompts.jsにプロンプト生成ロジックを追加しますsrc/mcp/server.jsにツールハンドラーを実装します
セキュリティに関する考慮事項
- すべての認証情報を環境変数に保存します
- 本番環境では HTTPS/WSS を使用します
- 電話番号と入力データを検証します
- 本番環境で使用する場合はレート制限を実装します
- Twilio のセキュリティに関するベストプラクティスに従います
コントリビューション
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更を加えます
- 該当する場合はテストを追加します
- プルリクエストを送信します
既知の問題
Claude Desktop との ES モジュールの互換性
この MCP サーバーを Claude Desktop で使用する際に SyntaxError: Unexpected identifier が発生する場合、これは Claude Desktop がターミナルと同じ PATH 環境や作業ディレクトリのコンテキストにアクセスできないことが原因です。
根本原因:Claude Desktop が、ターミナルで使用しているものと同じ Node.js バイナリを見つけられない場合(特に nvm を使用している場合)や、"type": "module" を含む package.json を見つけられるプロジェクトディレクトリから実行されない場合があります。
解決策:Claude Desktop の設定で、Node.js バイナリの絶対パスを使用します。
{
"mcpServers": {
"voice-agent-mcp-server": {
"type": "stdio",
"command": "/Users/yourusername/.nvm/versions/node/v22.16.0/bin/node",
"args": ["/path/to/your/project/mcp-server.js"],
"env": {
// ... your environment variables
}
}
}
}
重要なポイント:
- Node.js バイナリには絶対パスを使用します(
which nodeで確認できます) - Node.js が
package.jsonを見つけられるように、cwdをプロジェクトディレクトリに設定します - これにより、Claude Desktop が正しい Node.js とプロジェクトのコンテキストを使用できます
関連する問題:MCP Servers Issue #64
サポート
問題や質問がある場合:
- トラブルシューティングのセクションを確認します
src/mcp/mcp-server.logのログを確認します- リポジトリで issue を作成します
Twilio、Deepgram、Model Context Protocol を使用して構築
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。