Sample Nova Sonic Mcp について
Sample Nova Sonic Mcp は AWS Bedrock の Nova Sonic モデルを使用した Web およびコマンドライン実装です。リアルタイム双方向音声ストリーミング、MCP ツール統合、多言語対応、音声カスタマイズを備えたモダンなウェブインターフェースを提供します。
主な機能
- 01双方向リアルタイム音声ストリーミング
- 02Nova Sonic 音声モデル
- 03MCP ツール統合
- 04WebSocket リアルタイム通信
- 05多言語対応
- 06音声可視化
活用シーン
- 01音声対話アプリケーション
- 02多言語音声対話
- 03AI 音声アシスタント
- 04リアルタイム音声処理
MCP 対応
MCP サーバーを設定経由で統合する MCP クライアント。音声対話アプリケーション内で MCP ツールを公開し、AI 機能を拡張します。
詳細
Amazon Nova Sonic と MCP
このプロジェクトは、Amazon Nova Sonic モデルと統合された WebSocket ベースの双方向オーディオストリーミングアプリケーションです。リアルタイム音声対話を実現し、最新のウェブインターフェースを通じた自然な会話インタラクションを可能にしながら、AWS の強力な Nova Sonic モデルを活用して応答を処理・生成します。
English | 中文
プロジェクト概要
Amazon Nova Sonic は AWS Bedrock が提供する高度な音声モデルで、自然な人間の音声入力を処理し、高品質な音声応答を生成することができます。本プロジェクトでは、以下の機能を含む完全なアプリケーションシステムの構築方法を実演しています:
- 双方向リアルタイムオーディオストリーミング:継続的な音声入力と出力をサポートし、自然な会話体験を実現します
- 多言語サポート:英語と中国語の双言語インターフェースが組み込まれており、簡単に切り替えられます
- 複数の音声オプション:様々な AI 音声ペルソナ(tiffany、matthew、amy など)をサポートしています
- ツール統合システム:MCP(Model Context Protocol)を通じた拡張機能をサポートしています
- WebSocket リアルタイム通信:低遅延のオーディオ伝送と処理を保証します
- レスポンシブウェブインターフェース:異なるデバイスに対応した最新のユーザーインターフェース
- オーディオビジュアライゼーション:リアルタイムオーディオ波形表示でユーザー体験を向上させます
- CLI モードサポート:コマンドラインから事前録音されたオーディオを使用してインタラクションすることができます
このシステムは、双方向ストリーミングと AWS Bedrock 統合を処理するサーバー、およびオーディオストリームとユーザーインタラクションを管理する最新のウェブクライアントで構成されています。リアルタイムオーディオストリーミング、Amazon Nova Sonic モデルとの統合、双方向通信処理、チャット履歴管理機能を備えたレスポンシブウェブインターフェースをサポートしています。
使用方法
システム要件
- Node.js(v18.0.0 以上)
- Bedrock アクセスが有効化された AWS アカウント
- 適切な認証情報が設定された AWS CLI
- WebAudio API をサポートする最新ブラウザ
- オーディオキャプチャと再生用のマイクとスピーカー
依存関係
このプロジェクトは以下の主要な依存関係を使用しています:
{
"dependencies": {
"@aws-sdk/client-bedrock-runtime": "^3.787.0",
"@aws-sdk/credential-providers": "^3.787.0",
"@modelcontextprotocol/sdk": "^1.9.0",
"@smithy/node-http-handler": "^4.0.4",
"@smithy/types": "^4.2.0",
"axios": "^1.8.4",
"cors": "^2.8.5",
"express": "^4.18.0",
"rxjs": "^7.8.2",
"socket.io": "^4.8.1"
}
}
インストール手順
- リポジトリをクローンします:
git clone <repository-url>
cd aws-nova-sonic-mcp
- 依存関係をインストールします:
npm install
- AWS 認証情報を設定します:
# Configure AWS CLI with your credentials
aws configure --profile default
- TypeScript コードをビルドします:
npm run build
クイックスタート
- サーバーを起動します:
npm start
- ブラウザで開きます:
http://localhost:3000
-
マイクへのアクセス許可を求められたら許可します。
-
通話ボタンをクリックして会話を開始します。

アプリケーションが読み込まれると、上図のようなインターフェースが表示されます。インターフェースは以下の主要なセクションに分かれています:
- 上部ステータスバー:接続状態と音声ペルソナセレクターを表示します
- 中央インタラクション領域:大きな青い円形のオーディオビジュアライゼーション表示領域
- 下部コントロールバー:マイクコントロール、通話コントロール、テキスト表示ボタン
設定オプション
システムプロンプト
インターフェースの設定ボタンからシステムプロンプトをカスタマイズできます。システムは複数のプリセットテンプレートを提供しており、カスタムプロンプトを作成することもできます。
// Custom system prompt example
const SYSTEM_PROMPT =
"You are an assistant. The user and you will have a spoken conversation...";
socket.emit("systemPrompt", SYSTEM_PROMPT);
音声設定
複数の AI 音声ペルソナをサポートしており、ユーザーアバタードロップダウンメニューから選択できます:
// Voice configuration example
socket.emit("voiceConfig", { voiceId: "tiffany" });
言語設定
英語と中国語のインターフェース切り替えをサポートしています:
// Language setting options
const currentLanguage = "en"; // English, can be set to "zh" for Chinese
updateUITexts(); // Update interface text
MCP サーバー設定
mcp_config.json ファイルを通じて MCP サーバーを設定します:
{
"mcpServers": {
"github.com/tavily-ai/tavily-mcp": {
"command": "npx",
"args": ["-y", "[email protected]"],
"env": {
"TAVILY_API_KEY": "your-api-key"
},
"disabled": false,
"autoApprove": []
}
}
}
コマンドラインインターフェース(CLI)モード
CLI モードを使用して、事前録音されたオーディオファイルを処理できます:
# Run in CLI mode
npm run cli -- --input=/path/to/audio.wav
トラブルシューティング
- マイクアクセスの問題
- 問題: ブラウザに「マイク権限が拒否されました」と表示される
- 解決策:
// Check microphone permissions const permissions = await navigator.permissions.query({ name: "microphone" }); if (permissions.state === "denied") { console.error("Microphone access permission required"); // Display instructions to guide users to enable permissions }
- オーディオ再生の問題
-
問題: オーディオ出力がない
-
解決策:
// Verify if AudioContext is initialized if (audioContext.state === "suspended") { await audioContext.resume(); } // Check audio player if (!audioPlayer.initialized) { await audioPlayer.start(); }
- 接続の問題
- サーバーログを確認する
- AWS 認証情報の設定を確認する
- WebSocket 接続を検証する:
socket.on("connect_error", (error) => { console.error("Connection failed:", error); });
- セッションタイムアウトの問題
- 問題: 一定期間の非アクティブ後にセッションが切断される
- 解決策: システムには 5 分の自動セッションクリーンアップがあり、
server.tsで調整できます
クライアント側のオーディオ処理
- WebAudio API を使用してオーディオをキャプチャおよび処理します
- 16kHz サンプリングレート、モノ PCM フォーマット
- リアルタイムオーディオビジュアライゼーション表示
- オーディオ割り込み (バージインイン) サポート。ユーザーは AI レスポンスをいつでも割り込むことができます
サーバー側のオーディオ処理
- 効率的な通信のために HTTP/2 ストリーミングを使用します
- 複数セッションの同時処理に対応
- リソースリークを防止するための自動セッションクリーンアップメカニズム
インフラストラクチャ
アプリケーションは Node.js サーバー上で実行され、以下の主要なコンポーネントを含みます:
- WebSocket 接続と HTTP リクエストを処理する Express.js サーバー
- リアルタイム通信のための Socket.IO
- スピーチツースピーチモデル処理用の Nova Sonic クライアント
- 機能を拡張するための MCP ツール統合システム
Web インターフェース機能
アプリケーションは以下の機能を備えたモダンな Web インターフェースを提供します:
メインインターフェース

メインインターフェースには以下の主要な要素が含まれています:
- 接続状態インジケーター: 左上隅に現在の接続状態が表示されます。例えば、「サーバーに接続済み」またはエラーメッセージ
- 音声ペルソナ選択: 異なる AI 音声ペルソナを選択するための上中央のドロップダウンメニュー
- 設定ボタン: 構成パネルを開くための右上のギアアイコン
- オーディオビジュアライゼーション: リアルタイムオーディオ波形および音声アクティビティを表示する中央の青い円形領域
- 制御ボタン:
- 左下のマイクボタン: マイクのオン/オフを制御します
- 中央の通話ボタン: 会話の開始/終了 (赤は会話がアクティブであることを示します)
- 右下のテキストボタン: テキスト会話コンテンツの表示/非表示を切り替えます
会話インターフェース
- 会話履歴のリアルタイム表示
- テキスト会話コンテンツの表示/非表示のサポート
- ユーザーとアシスタントの音声アクティビティを表示するオーディオビジュアライゼーション
- 多言語 UI サポート (英語と中国語)
構成パネル

構成パネルには 3 つの主要なタブが含まれています:
-
プロンプトタブ
- システムプロンプトテンプレート選択ドロップダウンを提供します
- 現在のシステムプロンプトテキストコンテンツを表示します
- カスタムプロンプト編集をサポートします
-
言語タブ
- インターフェース言語選択を提供します (英語と中国語に対応)
- シンプルで直感的な言語切り替えインターフェース
-
MCP サーバータブ
- 構成されたすべての MCP サーバーを表示します
- サーバー URL、コマンド、パラメーター、および有効化状態を含みます
- 各サーバーが提供する利用可能なツールの数を表示します
- 詳細なツール情報を表示するために展開できます
音声ペルソナ選択

- 複数の AI 音声ペルソナオプションをサポートします:
- Tiffany (女性) - デフォルト音声。自然でフレンドリーなトーン
- Matthew (男性) - 落ち着いた専門的な男性音声
- Amy (女性) - クリアで活発な女性音声
- 各音声ペルソナには性別を示すアイコンが付いています
- ユーザーはいつでも音声を切り替えることができ、変更は次の AI レスポンスからすぐに反映されます
セキュリティに関する考慮事項
- すべての AWS 認証情報は適切に保護し、コードに直接埋め込まないようにしてください
- WebSocket 接続は CORS 保護で構成されています
- API セキュアアクセスはトークンメカニズムを通じて実装できます
- 本番環境では HTTPS の有効化を検討してください
- MCP ツール実行には適切なセキュリティ制限が必要です
貢献ガイドライン
このプロジェクトへの貢献を歓迎します:
- リポジトリをフォークします
- フィーチャーブランチを作成します (
git checkout -b feature/amazing-feature) - 変更をコミットします (
git commit -m 'Add some amazing feature') - ブランチにプッシュします (
git push origin feature/amazing-feature) - プルリクエストを開きます
ライセンス
このプロジェクトは ISC ライセンスの下でライセンスされています。詳細は LICENSE ファイルを参照してください。
関連リソース
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。