Skip to main content
Glama

speak

Claudeに回答を音声で読み上げてもらいます。

生の回答をそのままテキスト読み上げするのではありません。「簡単に読み返して」と言うと、Claudeは言ったことを短い読み上げ用スクリプトに書き直し、それを再生します。スクリプトはチャットには表示されません。これはあなたとモデルの間の会話であり、テキストは邪魔にならないように保たれます。

現在はClaude Codeで動作します。再生部分は単純なMCPサーバーなので、Claude Desktop、Cursor、その他のMCPクライアントにもそのまま組み込めます。

入手できるもの

  • speak MCPサーバー。ツールは speak、stop、pause、resume、back、skip、add_pronunciation、list_pronunciations、list_voices、set_default

  • Claudeが話している間のmacOS用フローティングオーバーレイ: すべてのウィンドウの上に小さなピル型の表示があり、ライブ波形、1文戻る、1文スキップ、正確な位置からの一時停止と再開、停止ができます。

  • Claude Code用の/speakスキル。スタイル: simple(デフォルト)、brief、decisions、full、eli5

  • 自動読み上げ: すべての回答の後にbriefスクリプトを読み上げるStopフック。デフォルトではオフ。

  • speak CLI: echo "hello" | speak

  • Raycastスクリプトコマンド: Speakは選択したテキストをそのまま読み上げます。Speak Simplyはclaude -pで短い読み上げ用サマリーに書き換えてから読み上げます。Speak Translatedは最初に翻訳します(デフォルトは英語。コマンドの引数に別の言語を入力するか、SPEAK_TRANSLATE_LANGUAGEを設定してデフォルトを変更できます)。英語以外の翻訳は、インストールされているmacOSの音声のうち、最適なものから順に(Premium、Enhanced、compact)一致する音声で読み上げられます。英語の場合は通常の音声がそのまま使われます。言語のPremium音声をダウンロードするには、システム設定 > アクセシビリティ > 読み上げと読み上げコンテンツ > システムの声 > 声を管理 で行えます。Speak Stopは停止します。これらのコマンドはシミュレートされたCmd+Cで選択範囲をコピーするため、Raycastにはアクセシビリティ権限が必要です。

Related MCP server: oto

エンジン

Engine

Cost

Needs

Notes

say

無料

macOS

デフォルト。高品質にするには、システム設定 > アクセシビリティ > 読み上げコンテンツ でPremiumまたはEnhancedの音声をダウンロードします。Siriの音声をシステムのデフォルトに設定すると、素のsayがそれを使います。

edge

無料

ネットワーク

edge-tts-universalによるMicrosoftニューラル音声。非常に高品質。非公式API。

kokoro

無料

npm i kokoro-js、初回実行時に約300MBのモデル

ローカルニューラルTTS。CPUで動作。

openai

有料

OPENAI_API_KEY

gpt-4o-mini-tts。

elevenlabs

無料枠

ELEVENLABS_API_KEY

eleven_flash_v2_5。

macOSでの音声の選択

デフォルトのsayエンジンはMacのシステム音声を使用するため、macOSで一度設定すれば、以降のすべての読み上げでそれが使われます。

  1. System Settings > Accessibility > Read & Speak(古いバージョンではSpoken Content)を開きます。

  2. System Voiceで音声を選択します。Appleは言語ごとに大きなライブラリを提供しており、PremiumとEnhancedはオンデマンドでダウンロードされ、コンパクトなデフォルトよりもはるかに良い音質です。Siriの音声もここで選択できます。

  3. 読み上げ速度をお好みに設定します。

発音

チャットでClaudeに伝えます:

  • 「これからfancyappをfan-see-appと発音して」

  • 「保存した発音は何?」

これらは~/.config/speak/pronunciations.jsonに保存されます(SPEAK_CONFIG_DIRでフォルダを上書き可能)。単語全体で大文字小文字を区別せずにマッチし、すべての読み上げに適用されます:

{
  "fancyapp": "fan-see-app",
  "OAuth": "oh auth"
}

リンクとメールアドレスは読み上げ形式で読まれます: https://example.com/loginは「example dot com slash login」、jane@example.deは「jane at example dot d e」になります。de、io、co.ukのような短い語尾は一文字ずつ綴られます。なぜなら「de」を単語として読むと「duh」になってしまうからです。

「live」「read」「lead」のように2つの読み方がある単語は、単語リストでは修正できません。スキルはClaudeにスクリプト内でそれらを綴り直すよう指示し、音声が誤って推測しないようにします: 「alive」の意味のliveは「lyive」、「read」の過去形は「red」、「金属」のleadは「led」です。スキルはよくある問題単語の表を持っており、読み上げ前にスクリプトをそれと照合します。

SPEAK_VOICEを未設定のままにするとシステムの音声に従います。say -v ?で得られる音声名を設定すると、Claudeのみ上書きされます。

SPEAK_ENGINEを設定しない限り、最初に利用可能なエンジンが使われます。SPEAK_VOICEで音声を設定します。どちらもset_defaultツールでセッションごとに変更できます(「edgeエンジンに切り替えて」など)。

インストール

RAYCAST_SCRIPTS_DIRをRaycastで既に追加されているディレクトリ(設定 > 拡張機能 > スクリプトコマンド)に設定すると、コマンドがそこにリンクされます。設定しない場合は、このリポジトリのraycast/を一度手動で追加してください。

RAYCAST_SCRIPTS_DIR=~/raycast-scripts ./install.sh

Node 20+、jq、Claude Codeが必要です。

git clone https://github.com/CareyScott/speak
cd speak
./install.sh

これにより、サーバーとmacOSオーバーレイヘルパー(Xcodeコマンドラインツールのswiftcが必要)がビルドされ、MCPサーバーがユーザースコープで登録され、スキルが~/.claude/skillsにリンクされ、Stopフックが~/.claude/settings.jsonに追加され、speakとspeak-autoが~/.local/binにリンクされます。

Claude Codeを再起動します。

使い方

Claudeに話しかけます:

  • 「それを読み返して」

  • 「簡単に言って」

  • 「私に何が必要か、声に出して」

  • /speak decisions

  • 「止めて」

すべての回答後に自動読み上げ:

speak-auto on            # brief style
speak-auto on decisions  # only the questions for you
speak-auto off

読み上げ中は、オーバーレイを使うか、そのまま言います:

  • 「一時停止」「再開」「1文戻って」「それをスキップ」「停止」

一時停止は正確な位置を保持します。再開はその位置から続行します。戻るは前の文を再生します。スキップは次の文に進みます。一時停止や再開についての音声はありません。ただ実行するだけです。

エンジンまたは音声を選択:

export SPEAK_ENGINE=edge
export SPEAK_VOICE=en-IE-ConnorNeural

またはチャットで: 「sayの音声を一覧表示して」「これからJamieを使って」

仕組み

スキルはClaudeに、耳で聞くための書き方を指示します: 短い文、要点を先に、コードは読むのではなく説明する、最後にあなたから必要な決定を述べる。Claudeはそのスクリプトでspeakツールを呼び出します。

サーバーは残ったマークダウンを除去し、スクリプトを文に分割し、現在の文を再生しながら次の文を合成します。

macOSでは、小さなSwiftヘルパー(overlay/main.swift)がAVAudioPlayerで再生を担当し、オーバーレイを描画します: 常に最前面に表示され、アクティブにならないパネルで、フォーカスを奪うことはありません。NodeはJSON Linesで1文ずつファイルをstdin経由で送信し、ヘルパーはstdoutにfinished、back、stopを報告します。一時停止と再開はヘルパー内で行われるため、位置は正確です。戻るとスキップは、次に再生する文をサーバーに伝えます。その他の環境では、サーバーはオーバーレイなしでafplayまたはffplayにフォールバックします。

自動読み上げはClaude CodeのStopフックです。フラグファイル~/.config/speak/autoが存在する場合、フックは停止を一度ブロックし、ファイルに指定されたスタイルでスクリプトを読み上げるようClaudeに依頼します。stop_hook_activeガードによりループを防ぎます。

開発

npm run dev        # run the server with tsx
npm test           # vitest
npm run typecheck

MIT.

Related MCP Connectors

Related MCP Servers