VoiceBox APIサーバー プロジェクト概要
プロジェクト概要
1.1 目的
AIエージェント(GitHub Copilot、Claude Desktop等)から音声合成を実行できるMCPサーバーをPythonで実装する。ずんだもん、春日部つむぎ、四国めたんなどのキャラクターボイスでテキストを読み上げることで、AIとのインタラクションをより豊かにする。
1.2 背景
- •C#版が存在するが、.NET SDKのインストールやVOICEVOX Coreのセットアップが複雑
- •Pythonでの実装により、環境構築を簡素化し、保守性を向上させる
- •VOICEVOXローカルサーバーのHTTP APIを利用することで、
requestsのみで簡潔に実装
機能要件
2.1 MCPサーバー機能
- •MCP (Model Context Protocol) サーバーとして動作
- •stdioによる通信をサポート
- •GitHub Copilot / Claude Desktopからツールとして呼び出し可能
2.2 音声合成機能(Speechツール)
2.2.1 基本機能
- •ツール名:
Speech - •入力: テキスト(文字列)
- •出力: 音声再生(バックグラウンド実行)
2.2.2 処理フロー
- •クライアントから音声合成リクエストを受信
- •VOICEVOXエンジンでテキストを音声合成(WAVファイル生成)
- •一時ファイルに保存
- •音声を再生
- •再生完了後、一時ファイルを削除
2.2.3 エラーハンドリング
- •音声合成エラー時はMCP通知で通知
- •音声再生エラー時も同様に通知
- •エラー発生時も一時ファイルは確実に削除
2.3 音声設定
- •音声スタイルID: 環境変数で設定可能
- •デフォルト: 1(ずんだもん ノーマル)
- •その他: 2(あまあま)、3(ツンツン)など
- •キャラクター: VOICEVOXの全キャラクターに対応
非機能要件
3.1 パフォーマンス
- •音声合成処理は非同期で実行
- •クライアントのリクエストは即座に応答(ブロッキングしない)
- •音声再生はバックグラウンドで実行
3.2 互換性
- •対応OS: macOS (優先)、Linux、Windows
- •Python: 3.9以上
- •VOICEVOX: ローカルアプリ版(デフォルト
http://localhost:50021でAPIサーバーが起動)
3.3 保守性
- •設定は環境変数で管理
- •ログ出力は標準エラー出力に統一(MCPプロトコル準拠)
- •モジュール化した構成
技術スタック
4.1 主要ライブラリ
- •mcp: MCPサーバー実装
- •requests: VOICEVOXローカルサーバーへのHTTPリクエスト
- •sounddevice / soundfile: 音声再生(macOS対応)
- •python-dotenv: 環境変数管理(開発用)
4.2 開発ツール
- •uv / pip: パッケージ管理
- •python-dotenv: 環境変数管理(開発用)
プロジェクト構成
code
yomiage-svr/ ├── api_server.py # FastAPI HTTPサーバー(メイン) ├── mcp_server.py # MCPサーバー本体(MCPクライアント用) ├── start_server.sh # 自動起動スクリプト ├── yomiage-svr/ # メインパッケージ │ ├── __init__.py │ ├── config.py # 話者設定・Ollama設定 │ ├── services/ │ │ ├── __init__.py │ │ ├── voicevox_service.py # VOICEVOX HTTP API音声合成サービス │ │ ├── ollama_service.py # Ollama口調変換サービス │ │ ├── audio_service.py # 音声再生サービス │ │ └── character_selector.py # キャラクター自動選択 │ └── tools/ │ ├── __init__.py │ └── speech_tool.py # Speechツール実装 ├── requirements.txt # 依存パッケージ ├── .vscode/ │ └── mcp.json # MCP設定ファイル └── README.md # 使い方ドキュメント
環境変数
| 変数名 | 説明 | デフォルト値 | 必須 |
|---|---|---|---|
VOICEVOX_STYLE_ID | 音声スタイルID(話者ID) | 1 | No |
VOICEVOX_BASE_URL | VOICEVOXサーバーURL | http://localhost:50021 | No |
VOICEVOX_SPEED_SCALE | 話す速度(0.5〜2.0) | 1.0 | No |
OLLAMA_BASE_URL | OllamaサーバーURL | http://localhost:11434 | No |
OLLAMA_MODEL | 使用モデル | gemma2:2b | No |
セットアップ手順
7.1 VOICEVOXアプリの起動
VOICEVOX公式サイトからアプリをダウンロード・インストールし、起動しておく。
デフォルトで http://localhost:50021 にAPIサーバーが立ち上がる。
7.2 Ollamaのインストールと起動
bash
# Ollamaをインストール(macOS) brew install ollama # 軽量モデルをダウンロード ollama pull gemma2:2b
7.3 依存パッケージインストール
bash
python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt
7.4 サーバー起動(推奨)
bash
# 全自動セットアップ(VOICEVOX・Ollama・APIサーバー) ./start_server.sh
7.5 MCP設定
.vscode/mcp.json に以下を追加:
json
{
"servers": {
"yomiage": {
"type": "stdio",
"command": "python",
"args": ["mcp_server.py"],
"cwd": "${workspaceFolder}",
"env": {
"VOICEVOX_STYLE_ID": "1"
}
}
}
}
使用例
HTTP API(直接呼び出し)
bash
# つむぎの口調変換+音声合成
curl -X POST http://127.0.0.1:8767/speech \
-H "Content-Type: application/json" \
-d '{"text": "お疲れ様です", "speaker_name": "tsumugi"}'
# 口調変換のみ(音声再生なし)
curl -X POST http://127.0.0.1:8767/transform \
-H "Content-Type: application/json" \
-d '{"text": "おつかれ", "speaker_name": "metan"}'
MCP経由(GitHub Copilot)
markdown
#yomiage タスクが完了しました
期待される動作
- •AIがテキストを生成
- •Speechツール/MCPツールが呼び出される
- •Ollama で口調変換(「お疲れ様です」→「お疲れ様です!あーし、嬉しいです!」)
- •VOICEVOX で音声合成
- •つむぎの音声で読み上げが開始
- •クライアントには即座に応答が返る
主要キャラクター設定
ずんだもん
- •語尾: 「〜なのだ」「〜のだ」
- •一人称: 「ボク」
- •特徴: 明るく元気、フレンドリー
春日部つむぎ
- •語尾: 「〜です!」「〜ます!」(「ね」「よ」は使用禁止)
- •一人称: 「あーし」
- •特徴: 丁寧で優しい、相手を気遣う
四国めたん
- •語尾: 「〜わ」「〜かしら」「〜でしょ」
- •一人称: 「わたし」または省略
- •特徴: 冷静で落ち着いた、お姉さん的
制約事項
9.1 ライセンス
- •VOICEVOX利用規約への準拠が必要
- •音声利用時は「VOICEVOX:ずんだもん」等のクレジット表記必須
9.2 技術的制約
- •VOICEVOXアプリをローカルで事前起動しておく必要がある
- •音声合成はVOICEVOX HTTP API経由(
localhost:50021)で実行 - •音声再生はシステムのオーディオデバイスに依存
- •Ollama(口調変換)も事前起動が必要(
localhost:11434)
トラブルシューティング
よくある問題
- •Ollama未起動: 口調変換が元のテキストのままの場合
- •解決:
ollama serveで起動するか./start_server.sh使用
- •解決:
- •ポート競合: 8767ポートが使用中
- •解決:
lsof -ti:8767 | xargs kill -9でプロセス終了
- •解決:
- •VOICEVOX未起動: 音声合成エラー
- •解決: VOICEVOXアプリを起動
今後の拡張案
10.1 機能拡張
- •複数キャラクターの選択機能
- •音声パラメータ調整(速度、音量、音程)
- •音声ファイルの保存機能
10.2 技術的改善
- •キャッシュ機構の実装
- •音声合成の並列処理
- •WebSocket経由のリアルタイム再生
成功基準
- • FastAPI HTTPサーバーとして正常に起動できる
- • MCPサーバーとして正常に起動できる
- • GitHub Copilot / Claude Desktopから呼び出せる
- • テキストを音声合成して再生できる
- • Ollama口調変換が正常動作する
- • エラー時も適切にハンドリングできる
- • 環境変数で音声スタイルを変更できる
- • macOS環境で問題なく動作する
- • 自動起動スクリプトが全サービスを統合管理する