mcpField
M
mcp-say

mcp-say

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

mcp-say について

mcp-say は、Go で書かれた MCP サーバーで、Claude Desktop や Cursor などのクライアントに音声読み上げ機能を追加します。macOS の say、ローカルの Qwen3-TTS、ElevenLabs、Google、OpenAI のクラウド API を統合し、順次再生や音声ファイルの保存に対応しています。

主な機能

  1. 01システム音声とクラウド音声を含む複数の TTS ツール
  2. 02voice-say が利用可能な場合のローカル Qwen3-TTS ツール
  3. 03音声が重ならないための順次再生キュー
  4. 04再生せず音声ファイルのみを保存するオプション
  5. 05応答に読み上げテキストを出力しない設定

活用シーン

  1. 01AI アシスタントによるタスクの進捗や要約の音声通知
  2. 02プロジェクトごとに声を変えて発話元を区別
  3. 03API キーを使わずに macOS のローカル音声を利用

MCP 対応

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

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"say": {
"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 つのサーバーを複数のクライアントで再利用できます。