mcpField
M
mcp-tts

mcp-tts

ローカル
github.com/blacktopメディア・デザイン74今日更新

mcp-tts について

mcp-tts は Go で書かれた MCP サーバーで、Claude Desktop や Cursor などのクライアントに音声読み上げ機能を追加します。macOS の say、ローカルの Voice、ElevenLabs、Google Gemini、OpenAI の各 TTS に対応します。既定では音声を順番に再生し、複数のエージェントが同時に話すことを防ぎます。

主な機能

  1. 01macOS say、Voice、ElevenLabs、Google、OpenAI の 5 つの TTS ツール
  2. 02既定の順次再生と、環境変数による並行再生の選択
  3. 03AIFF、MP3、WAV 形式での音声ファイル保存
  4. 04OpenAI TTS の速度と音声指示の設定
  5. 05Claude Code、Codex CLI、Gemini CLI 向けの speak スキル

活用シーン

  1. 01コーディングエージェントによる作業完了時の要約読み上げ
  2. 02プロジェクトやメッセージ種別ごとの音声の使い分け
  3. 03生成した音声のファイル保存と後続処理

MCP 対応

本プロジェクトは MCP サーバーであり、say_tts、voice_tts、elevenlabs_tts、google_tts、openai_tts などのツールを MCP クライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"tts": {
"command": "npx",
"args": [
"-y",
"skills"
]
}
}
}
起動コマンドnpx -y skills

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmskills

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

mcp-tts ロゴ

mcp-tts

TTS(テキスト読み上げ)用 MCP サーバー

README の画像 README の画像 README の画像 README の画像 README の画像


概要 🤔

Claude Desktop や Cursor IDE などにテキスト読み上げ機能を追加します。

既存の TTS ツールに加え、voice-say が PATH 上で利用可能な場合は voice_tts も登録します:

  • say_tts
  • voice_tts(利用可能な場合)
  • elevenlabs_tts
  • google_tts
  • openai_tts
say_tts

macOS の say バイナリを使い、組み込みのシステム音声でテキストを読み上げます。

voice_tts

Voice のローカル voice-say CLI を使い、MLX 経由で Qwen3-TTS を実行します。Voice は API キー不要で、テキストと音声を Mac 上に保持します。モデルは呼び出しごとに再読み込みされるため、通常、起動には数秒かかります。そのため、時間が重要なアラートではなく、要約やアナウンスに使用してください。

このツールは、voice-say が PATH 上で解決できる場合にのみ登録されます。オプションのパラメーターは次のとおりです:

  • voice:プリセット音声 Ryan または Aiden
  • tier:より高速な 0.6B 合成には small、より高品質な 1.7B 合成には large
  • style:読み上げ方に関する自由記述の指示
  • 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 sayAIFF
Voice再生のみ
ElevenLabsMP3
Google TTSWAV
OpenAI TTSMP3

はじめに

インストール
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 CLIgemini extensions list を実行するか、/settings でスキルを確認します
仕組み

次の場合にスキルを選択してください。

  • 計画の完了 - 計画/TODO リストが確定したとき
  • 問題の解決 - バグ修正またはエラーの解決が完了したとき
  • 概要の生成 - 大きなタスクが完了したとき
  • 長時間の操作で状態が変化 - ビルド、テスト、デプロイ、リリース、調査、監視のフェーズが完了または失敗したとき
  • 人による介入が必要 - 承認、認証、手動操作、またはリトライ予算の枯渇によって進行が妨げられたとき

このスキルでは、認証情報を確認せず、デフォルトでローカルのみの音声を使用します。Voice が登録されている場合、計画と概要には voice_tts を使用し、緊急のアラートや代替手段には高速な say_tts を使用します。どちらもクラウド API のクォータを消費せず、読み上げる内容を Mac 上にとどめます。クラウド TTS は、ユーザーが明示的に選択した場合、または保存済みの設定がある場合にのみ使用します。そのクラウドプロバイダーでクォータ、トークン、認証、または設定に関するエラーが発生した場合、セッション中はクラウド TTS の自動使用を無効にし、このスキルはローカル音声を使用します。ローカルツールを利用できない場合は、テキストのみで応答します。他のクラウドプロバイダーを自動的に試すことはありません。その場限りのプロバイダー変更はセッション中のみ有効です。ユーザーが選択を記憶するよう求めた場合にのみ、設定を更新します。ローカルの say の音声を指定する場合、ユーザーがインストール済みの特定の音声を意図的に選択していない限り、ホストの System Voice を使用するために voice は未設定のままにしてください。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。