mcp-say について
mcp-say は、Go で書かれた MCP サーバーで、Claude Desktop や Cursor などのクライアントに音声読み上げ機能を追加します。macOS の say、ローカルの Qwen3-TTS、ElevenLabs、Google、OpenAI のクラウド API を統合し、順次再生や音声ファイルの保存に対応しています。
主な機能
- 01システム音声とクラウド音声を含む複数の TTS ツール
- 02voice-say が利用可能な場合のローカル Qwen3-TTS ツール
- 03音声が重ならないための順次再生キュー
- 04再生せず音声ファイルのみを保存するオプション
- 05応答に読み上げテキストを出力しない設定
活用シーン
- 01AI アシスタントによるタスクの進捗や要約の音声通知
- 02プロジェクトごとに声を変えて発話元を区別
- 03API キーを使わずに macOS のローカル音声を利用
MCP 対応
本プロジェクトは MCP サーバーであり、say_tts、voice_tts、elevenlabs_tts、google_tts、openai_tts などの音声合成ツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-tts
TTS(テキスト読み上げ)用 MCP サーバー
概要 🤔
Claude Desktop や Cursor IDE などにテキスト読み上げ機能を追加します。
既存の TTS ツールに加え、voice-say が PATH 上で利用可能な場合は voice_tts も登録します:
say_ttsvoice_tts(利用可能な場合)elevenlabs_ttsgoogle_ttsopenai_tts
say_tts
macOS の say バイナリを使い、組み込みのシステム音声でテキストを読み上げます。
voice_tts
Voice のローカル voice-say CLI を使い、MLX 経由で Qwen3-TTS を実行します。Voice は API キー不要で、テキストと音声を Mac 上に保持します。モデルは呼び出しごとに再読み込みされるため、通常、起動には数秒かかります。そのため、時間が重要なアラートではなく、要約やアナウンスに使用してください。
このツールは、voice-say が PATH 上で解決できる場合にのみ登録されます。オプションのパラメーターは次のとおりです:
voice:プリセット音声RyanまたはAidentier:より高速な 0.6B 合成にはsmall、より高品質な 1.7B 合成にはlargestyle:読み上げ方に関する自由記述の指示describe:音声デザインに関する自由記述の指示。1.7B モデルを強制的に使用し、voiceと併用できません
Voice は音声を直接再生するため、--output-dir はサポートしていません。また、--no-play を指定すると、voice-say を起動せずに呼び出しが失敗します。
警告
Voice リポジトリは現在非公開で、まもなく公開される予定です。そのため、現時点ではリンクへのアクセスが必要です。
elevenlabs_tts
ElevenLabs のテキスト読み上げ API を使い、高品質な AI 音声でテキストを読み上げます。
google_tts
Google の Gemini TTS モデル を使い、30 種類の高品質な音声でテキストを読み上げます。利用可能な音声は次のとおりです:
Achernar、Achird、Algenib、Algieba、Alnilam、Aoede、Autonoe、Callirrhoe、Charon、Despina、Enceladus、Erinome、Fenrir、Gacrux、Iapetus、Kore、Laomedeia、Leda、Orus、Puck、Pulcherrima、Rasalgethi、Sadachbia、Sadaltager、Schedar、Sulafat、Umbriel、Vindemiatrix、Zephyr、Zubenelgenubi
openai_tts
OpenAI の Text-to-Speech API を使用して、自然な音声の 10 種類のボイスでテキストを読み上げます。
- alloy(温かみがあり、会話調で現代的)
- ash(自信に満ち、力強く、少し質感のある声)
- ballad(穏やかでメロディアス、やや詩的)
- coral(明るく、爽やかで、活気のある声)
- echo(ニュートラルで、落ち着きがあり、バランスの取れた声)
- fable(物語の語り手のように表現豊か)
- nova(明瞭で正確、ややフォーマル)
- onyx(低く、威厳があり、響きのある声)
- sage(心を落ち着かせ、共感的で安心感のある声)
- shimmer(明るく、表情豊かで、遊び心のある声)
- verse(多用途で、表現豊か)
3 種類の品質モデルに対応しています。
- gpt-4o-mini-tts - デフォルト。品質と速度を最適化
- tts-1 - 標準品質で、生成がより高速
- tts-1-hd - 高音質オーディオ、プレミアム品質
その他の機能:
- 0.25x~4.0x の速度調整(デフォルト:1.0x)
- パラメーターまたは
OPENAI_TTS_INSTRUCTIONS環境変数で、カスタム音声指示を指定できます(例:「明るく前向きな口調で話す」)
設定
順次 TTS と同時 TTS
デフォルトでは、TTS サーバーは音声操作を順次実行するように制御します。一度に音声を再生できる TTS リクエストは 1 件だけです。これにより、複数のエージェントが同時に話して聞き取れない騒音になるのを防ぎます。後続のリクエストは、現在の読み上げが完了するまでキューで待機します。
複数インスタンスの保護:ミューテックスは、単一の MCP サーバープロセス内だけでなく、複数の Claude Desktop インスタンス間でも機能します。複数の Claude Desktop ターミナルを実行する場合、重複した音声再生を防ぐため、システム全体のファイルロックを介して連携します。
TTS 操作を同時に実行する(複数の音声を同時に再生する)には、次のように設定します。
環境変数:
export MCP_TTS_ALLOW_CONCURRENT=true
コマンドラインフラグ:
mcp-tts --sequential-tts=false
注: TTS を同時に実行すると、音声が重なり、聞き取りにくくなる場合があります。複数の TTS 操作を同時に実行したい場合にのみ、このオプションを使用してください。
「Speaking:」出力を抑制する
デフォルトでは、TTS ツールは読み上げが完了すると「Speaking: [text]」のようなメッセージを返します。これは LLM の応答に干渉することがあります。この出力を抑制するには、次のように設定します。
環境変数:
export MCP_TTS_SUPPRESS_SPEAKING_OUTPUT=true
コマンドラインフラグ:
mcp-tts --suppress-speaking-output
有効にすると、ツールは読み上げたテキストをそのまま返す代わりに「Speech completed」を返します。
音声をディスクに保存する
TTS の音声出力を再生する代わりに(または再生に加えて)、ファイルに保存できます。
環境変数:
export MCP_TTS_OUTPUT_DIR=/path/to/audio # Save audio files to this directory
export MCP_TTS_NO_PLAY=true # Skip playback, only save (optional)
コマンドラインフラグ:
mcp-tts --output-dir /path/to/audio # Save and play
mcp-tts --output-dir /path/to/audio --no-play # Save only, no playback
ファイルは一意の名前で保存されます:tts_{timestamp}_{hash}.{ext}
| プロバイダー | 形式 |
|---|---|
| macOS say | AIFF |
| Voice | 再生のみ |
| ElevenLabs | MP3 |
| Google TTS | WAV |
| OpenAI TTS | MP3 |
はじめに
インストール
go install github.com/blacktop/mcp-tts@latest
❱ mcp-tts --help
TTS (text-to-speech) MCP Server.
Provides multiple text-to-speech services via MCP protocol:
• say_tts - Uses macOS built-in 'say' command (macOS only)
• voice_tts - Uses local Qwen3-TTS through voice-say (when available on PATH)
• elevenlabs_tts - Uses ElevenLabs API for high-quality speech synthesis
• google_tts - Uses Google's Gemini TTS models for natural speech
• openai_tts - Uses OpenAI's TTS API with various voice options
Each tool supports different voices, rates, and configuration options.
Requires appropriate API keys for cloud-based services.
Designed to be used with the MCP (Model Context Protocol).
Usage:
mcp-tts [flags]
Flags:
-h, --help help for mcp-tts
--no-play Skip playback, only save (requires --output-dir)
--output-dir string Save audio files to directory (env: MCP_TTS_OUTPUT_DIR)
--sequential-tts Enforce sequential TTS (prevent concurrent speech) (default true)
--suppress-speaking-output Suppress 'Speaking:' text output
-v, --verbose Enable verbose debug logging
設定
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json に追加します。
{
"mcpServers": {
"say": {
"command": "mcp-tts",
"env": {
"ELEVENLABS_API_KEY": "********",
"ELEVENLABS_VOICE_ID": "EXAVITQu4vr4xnSDxMaL",
"GOOGLE_AI_API_KEY": "********",
"OPENAI_API_KEY": "********",
"OPENAI_TTS_INSTRUCTIONS": "Speak in a cheerful and positive tone",
"MCP_TTS_SUPPRESS_SPEAKING_OUTPUT": "true",
"MCP_TTS_ALLOW_CONCURRENT": "false"
}
}
}
}
Claude Code
claude mcp add say \
-e GOOGLE_AI_API_KEY=your_key \
-e ELEVENLABS_API_KEY=your_key \
-e OPENAI_API_KEY=your_key \
-- mcp-tts
Codex CLI
codex mcp add say \
--env GOOGLE_AI_API_KEY=your_key \
--env ELEVENLABS_API_KEY=your_key \
--env OPENAI_API_KEY=your_key \
-- mcp-tts
Gemini CLI
gemini mcp add say mcp-tts \
-e GOOGLE_AI_API_KEY=your_key \
-e ELEVENLABS_API_KEY=your_key \
-e OPENAI_API_KEY=your_key
または、手動で ~/.gemini/settings.json(またはプロジェクトのルートにある .gemini/settings.json)に追加します。
{
"mcpServers": {
"say": {
"command": ["mcp-tts"],
"env": {
"GOOGLE_AI_API_KEY": "..."
}
}
}
}
環境変数
ELEVENLABS_API_KEY:ElevenLabs API キー(elevenlabs_ttsに必須)ELEVENLABS_VOICE_ID:ElevenLabs の音声 ID(任意。デフォルトはプリメイド音声「Sarah」EXAVITQu4vr4xnSDxMaL)。無料プランの API キーで使用できるのはプリメイド音声のみです。Voice Library の音声(コミュニティ/プロフェッショナル)は402 paid_plan_requiredを返します。GOOGLE_AI_API_KEYまたはGEMINI_API_KEY:Google AI API キー(google_ttsに必須)OPENAI_API_KEY:OpenAI API キー(openai_ttsに必須)OPENAI_TTS_INSTRUCTIONS:OpenAI TTS のカスタム音声指示(任意。例:「明るく前向きな口調で話す」)MCP_TTS_SUPPRESS_SPEAKING_OUTPUT:「Speaking:」の出力を抑制するには、「true」に設定します(任意)MCP_TTS_ALLOW_CONCURRENT:TTS 操作の同時実行を許可するには、「true」に設定します(任意。デフォルトは順次実行)MCP_TTS_OUTPUT_DIR:音声ファイルの保存先ディレクトリ(任意)MCP_TTS_NO_PLAY:保存時に再生をスキップするには、「true」に設定します(任意。MCP_TTS_OUTPUT_DIRが必要)MCP_TTS_ELICIT:対話型の確認プロンプトを有効にするには、「true」に設定します(--elicitでも指定可能。任意。デフォルトでは無効)。無効の場合、ツールは確認プロンプトを表示せず、明示的な引数やデフォルト値を使用します。エージェントでの使用におすすめです。
テスト
macOS TTS のテスト
❱ cat test/say.json | go run main.go --verbose
2025/03/23 22:41:49 INFO Starting MCP server name="Say TTS Service" version=1.0.0
2025/03/23 22:41:49 DEBU Say tool called request="{Request:{Method:tools/call Params:{Meta:<nil>}} Params:{Name:say_tts Arguments:map[text:Hello, world!] Meta:<nil>}}"
2025/03/23 22:41:49 DEBU Executing say command args="[--rate 200 Hello, world!]"
2025/03/23 22:41:49 INFO Speaking text text="Hello, world!"
{"jsonrpc":"2.0","id":3,"result":{"content":[{"type":"text","text":"Speaking: Hello, world!"}]}}
Google TTS のテスト
❱ cat test/google_tts.json | go run main.go --verbose
2025/05/23 18:26:45 INFO Starting MCP server name="Say TTS Service" version=""
2025/05/23 18:26:45 DEBU Google TTS tool called request="{...}"
2025/05/23 18:26:45 DEBU Generating TTS audio model=gemini-3.1-flash-tts-preview voice=Kore text="Hello! This is a test of Google's TTS API. How does it sound?"
2025/05/23 18:26:49 INFO Playing TTS audio via beep speaker bytes=181006
2025/05/23 18:26:53 INFO Speaking via Google TTS text="Hello! This is a test of Google's TTS API. How does it sound?" voice=Kore
{"jsonrpc":"2.0","id":4,"result":{"content":[{"type":"text","text":"Speaking: Hello! This is a test of Google's TTS API. How does it sound? (via Google TTS with voice Kore)"}]}}
OpenAI TTS のテスト
❱ cat test/openai_tts.json | go run main.go --verbose
2025/05/23 19:15:32 INFO Starting MCP server name="Say TTS Service" version=""
2025/05/23 19:15:32 DEBU OpenAI TTS tool called request="{...}"
2025/05/23 19:15:32 DEBU Generating OpenAI TTS audio model=tts-1 voice=nova speed=1.2 text="Hello! This is a test of OpenAI's text-to-speech API. I'm using the nova voice at 1.2x speed."
2025/05/23 19:15:34 DEBU Decoding MP3 stream from OpenAI
2025/05/23 19:15:34 DEBU Initializing speaker for OpenAI TTS sampleRate=22050
2025/05/23 19:15:36 INFO Speaking text via OpenAI TTS text="Hello! This is a test of OpenAI's text-to-speech API. I'm using the nova voice at 1.2x speed." voice=nova model=tts-1 speed=1.2
{"jsonrpc":"2.0","id":5,"result":{"content":[{"type":"text","text":"Speaking: Hello! This is a test of OpenAI's text-to-speech API. I'm using the nova voice at 1.2x speed. (via OpenAI TTS with voice nova)"}]}}
複数の TTS リクエストでのミューテックス動作のテスト
# Sequential mode (default) - speeches play one after another
cat test/sequential.json | go run main.go --verbose
# Concurrent mode - allows overlapping speech
cat test/sequential.json | go run main.go --verbose --sequential-tts=false
スキル:speak
このリポジトリには、TTS を使って計画、課題、要約を自動的に音声で知らせる speak スキルが含まれています。デフォルトではホストの macOS say 音声を使用します。また、プロジェクトやメッセージの種類ごとに異なる音声を割り当てることもできるため、別の部屋にいても何が話しているのかを判別できます。
スキルは Agent Skills オープン標準に準拠しており、Claude Code、Codex CLI、Gemini CLI で動作します。
スキルのインストール
skills.sh
npx skills add https://github.com/blacktop/mcp-tts --skill speak
Claude Code
プラグインマーケットプレイス経由(推奨):
claude plugin marketplace add blacktop/mcp-tts
claude plugin install speak@mcp-tts
または手動でインストール:
mkdir -p ~/.claude/skills
git clone https://github.com/blacktop/mcp-tts.git /tmp/mcp-tts
cp -r /tmp/mcp-tts/skill ~/.claude/skills/speak
スキルが使用可能になります。Claude は関連する場面で自動的に使用するほか、/speak で直接呼び出すこともできます。
Codex CLI
skill-installer を使用(Codex セッション内):
$skill-installer install the speak skill from https://github.com/blacktop/mcp-tts --path skill
または手動でインストール:
mkdir -p ~/.codex/skills
git clone https://github.com/blacktop/mcp-tts.git /tmp/mcp-tts
cp -r /tmp/mcp-tts/skill ~/.codex/skills/speak
インストール後に Codex を再起動してください。
Gemini CLI
Gemini CLI では、スキルのバンドルに拡張機能を使用します。このリポジトリを拡張機能としてインストールします:
gemini extensions install https://github.com/blacktop/mcp-tts.git
これにより speak スキルがインストールされます。
または手動でインストール(スキルのみ):
mkdir -p ~/.gemini/skills
git clone https://github.com/blacktop/mcp-tts.git /tmp/mcp-tts
cp -r /tmp/mcp-tts/skill ~/.gemini/skills/speak
注: Gemini CLI のスキルは実験的な機能です。
/settings→ 「Skills」を検索 → 切り替えをオンにして有効にしてください。
共通スキルディレクトリ(任意)
すべてのエージェントで 1 つのコピーを共有するには、インストールスクリプトを実行します:
git clone https://github.com/blacktop/mcp-tts.git
cd mcp-tts
./install-skill.sh
スキルを ~/.agents/skills/speak にコピーし、Claude Code、Codex CLI、Gemini CLI 用のシンボリックリンクを作成します。
インストールの確認
| エージェント | コマンド |
|---|---|
| Claude Code | 「利用可能なスキルは?」と尋ねるか、/speak と入力します |
| Codex CLI | 再起動時にスキルが自動的に読み込まれます |
| Gemini CLI | gemini extensions list を実行するか、/settings でスキルを確認します |
仕組み
次の場合にスキルを選択してください。
- 計画の完了 - 計画/TODO リストが確定したとき
- 問題の解決 - バグ修正またはエラーの解決が完了したとき
- 概要の生成 - 大きなタスクが完了したとき
- 長時間の操作で状態が変化 - ビルド、テスト、デプロイ、リリース、調査、監視のフェーズが完了または失敗したとき
- 人による介入が必要 - 承認、認証、手動操作、またはリトライ予算の枯渇によって進行が妨げられたとき
このスキルでは、認証情報を確認せず、デフォルトでローカルのみの音声を使用します。Voice が登録されている場合、計画と概要には voice_tts を使用し、緊急のアラートや代替手段には高速な say_tts を使用します。どちらもクラウド API のクォータを消費せず、読み上げる内容を Mac 上にとどめます。クラウド TTS は、ユーザーが明示的に選択した場合、または保存済みの設定がある場合にのみ使用します。そのクラウドプロバイダーでクォータ、トークン、認証、または設定に関するエラーが発生した場合、セッション中はクラウド TTS の自動使用を無効にし、このスキルはローカル音声を使用します。ローカルツールを利用できない場合は、テキストのみで応答します。他のクラウドプロバイダーを自動的に試すことはありません。その場限りのプロバイダー変更はセッション中のみ有効です。ユーザーが選択を記憶するよう求めた場合にのみ、設定を更新します。ローカルの say の音声を指定する場合、ユーザーがインストール済みの特定の音声を意図的に選択していない限り、ホストの System Voice を使用するために voice は未設定のままにしてください。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
