say-mcp-server について
say-mcp-server は macOS 向けの MCP サーバーで、標準搭載の say コマンドを使った音声読み上げを提供します。エージェントにテキストを読み上げさせたい macOS ユーザー向けで、速度、音量、ピッチ、音声を調整できます。
主な機能
- 01macOS 標準の say コマンドによる読み上げ
- 02速度、音量、ピッチを変えるインラインマーカー
- 03他の MCP 呼び出し中に行うバックグラウンド再生
- 04システムで利用可能な音声の一覧表示
活用シーン
- 01エージェントによる検索結果やメモの読み上げ
- 02長文をバックグラウンドで再生しながら別の作業を続行
- 03異なる音声の聞き比べ
MCP 対応
MCP サーバーとして speak と list_voices の 2 つのツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
say-mcp-server

macOS に組み込まれている say コマンドを使用して、テキスト読み上げ機能を提供する MCP サーバーです。
要件
- macOS(組み込みの
sayコマンドを使用します) - Node.js >= 14.0.0
設定
以下を MCP 設定ファイルに追加します。
{
"mcpServers": {
"say": {
"command": "node",
"args": ["/path/to/say-mcp-server/build/index.js"]
}
}
}
インストール
npm install say-mcp-server
ツール
speak
speak ツールを使用すると、macOS のテキスト読み上げ機能をさまざまなオプションでカスタマイズして利用できます。
基本的な使い方
macOS のテキスト読み上げ機能を使って、テキストを音声で読み上げます。
パラメーター:
text(必須):読み上げるテキストです。次の形式に対応しています。- プレーンテキスト
- 間を空けるための基本的な句読点
- 自然な区切りを入れる改行
- 500 ミリ秒の無音を挿入する [[slnc 500]]
- テキストの途中で速度を変更する [[rate 200]]
- テキストの途中で音量を変更する [[volm 0.5]]
- 強調する [[emph +]] および強調を解除する [[emph -]]
- ピッチを調整する [[pbas +10]]
voice(任意):使用する音声です(デフォルト:「Alex」)rate(任意):1 分あたりの単語数で指定する読み上げ速度です(デフォルト:175、範囲:1~500)background(任意):バックグラウンドで音声を再生し、MCP とのやり取りを続けられるようにします(デフォルト:false)
高度な機能
- 音声の調整:
use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: "[[volm 0.7]] This is quieter [[volm 1.0]] and this is normal [[volm 1.5]] and this is louder",
voice: "Victoria"
}
});
- 読み上げ速度の動的な変更:
use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: "Normal speed [[rate 300]] now speaking faster [[rate 100]] and now slower",
voice: "Fred"
}
});
- 強調とピッチ:
use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: "[[emph +]] Important point! [[emph -]] [[pbas +10]] Higher pitch [[pbas -10]] Lower pitch",
voice: "Samantha"
}
});
連携例
- Marginalia Search との連携:
// Search for a topic and have the results read aloud
const searchResult = await use_mcp_tool({
server_name: "marginalia-mcp-server",
tool_name: "search",
arguments: { query: "quantum computing basics", count: 1 }
});
await use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: searchResult.results[0].description,
voice: "Daniel",
rate: 150
}
});
- YouTube の文字起こしとの連携:
// Read a YouTube video transcript
const transcript = await use_mcp_tool({
server_name: "youtube-transcript",
tool_name: "get_transcript",
arguments: {
url: "https://youtube.com/watch?v=example",
lang: "en"
}
});
await use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: transcript.text,
voice: "Samantha",
rate: 175
}
});
- 複数のアクションとバックグラウンド音声:
// Start long speech in background
await use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: "This is a long speech that will run in the background...",
voice: "Rocko (Italian (Italy))",
rate: 69,
background: true
}
});
// Immediately perform another action while speech continues
await use_mcp_tool({
server_name: "marginalia-mcp-server",
tool_name: "search",
arguments: { query: "parallel processing" }
});
- Apple Notes との連携:
// Read notes aloud
const notes = await use_mcp_tool({
server_name: "apple-notes-mcp",
tool_name: "search-notes",
arguments: { query: "meeting notes" }
});
if (notes.length > 0) {
await use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: notes[0].content,
voice: "Karen",
rate: 160
}
});
}
例:
use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: "Hello, world!",
voice: "Victoria",
rate: 200
}
});
list_voices
システムで利用可能なすべてのテキスト読み上げ音声を一覧表示します。
例:
use_mcp_tool({
server_name: "say",
tool_name: "list_voices",
arguments: {}
});
おすすめの音声
| 音声 | 言語/地域 | 知性を象徴する人物 | 俳句 | CLI 仕様 |
|---|---|---|---|---|
| Anna (Premium) | ドイツ語 | Emmy Noether | 対称性が命を吹き込む 代数に隠された形 抽象が花開く 対称性が命を吹き込む 代数に隠された形 抽象が花開く | -v "Anna (Premium)" |
| Emma (Premium) | イタリア語 | Maria Adelaide Sneider | アルゴリズムが舞う 機械が秘密をそっとささやく コードが息づく アルゴリズムが舞う 機械が秘密をそっとささやく コードが息づく | -v "Emma (Premium)" |
| Federica (Premium) | イタリア語 | Pia Nalli | 定理が流れゆく 数は自由に舞い踊る 真実が現れる 流れる定理が舞う 数は自由の空間を進む 真実が純粋な姿で現れる | -v "Federica (Premium)" |
| Serena (Premium) | 英語(英国) | Bertha Swirles | 量子の波が広がる 深い数学の海を越えて 真実の光が現れる 量子の波が広がる 深い数学の海を越えて 真実の光が現れる | -v "Serena (Premium)" |
| Petra (Premium) | ドイツ語 | Ruth Moufang | 代数が語る 純粋な対称性に隠れて 真実が花開く 代数がそっと語る 純粋な対称性に隠れて 真実がここに再び花開く | -v "Petra (Premium)" |
| Yuna (Premium) | 韓国語 | Hee Oh | 隠れたパターンが輝く 心の方程式がそっと花開く 知識が増えてゆく 隠れたパターンが輝く 心の方程式がそっと花開く 知識が増えてゆく | -v "Yuna (Premium)" |
| Alva (Premium) | スウェーデン語 | Sonja Korovkin | パターンが自由に流れる 思考の迷宮を抜けて 知恵がここに花開く パターンが自由に流れる 心の迷宮を抜けて 知恵がここに花開く | -v "Alva (Premium)" |
| Amélie (Premium) | フランス語(カナダ) | Sophie Germain | 素数がささやく 静寂の間を舞い踊る 対称性が開く 素数がささやく 静寂の間を舞い踊る 対称性が広がる | -v "Amélie (Premium)" |
| Ewa (Premium) | ポーランド語 | Maria Wielgus | 論理のやさしい根 数学の風景 思考の種が芽吹く 論理のやさしい根 数学の風景 思考の種が芽吹く | -v "Ewa (Premium)" |
| Kiyara (Premium) | ヒンディー語 | Shakuntala Devi | 数学のリズムの中 数が舞い踊る 知識が目覚める 数学のリズムの中 数が神聖な足取りで舞う 知識が目覚める | -v "Kiyara (Premium)" |
| Majed (Premium) | アラビア語 | Maha Al-Aswad | 数が舞い踊る 無限の広大な空間で 真実が夜明けのように輝く 数が自由に舞い踊る 無限の広大な空間で 真実が夜明けのように昇る | -v "Majed (Premium)" |
| Tünde (Premium) | ハンガリー語 | Julia Erdős | 数が舞い踊り 無限の空間を滑る 真実が明ける 数が舞い踊り、高く舞う 無限の空間を滑る 真実が純粋に明るく明ける | -v "Tünde (Premium)" |
| Fiona (Enhanced) | 英語(スコットランド) | Mary Somerville | ハイランドの霧が明かす 数学の謎 真実は星のように輝く ハイランドの霧が明かす 数学の謎 真実は星のように輝く | -v "Fiona (Enhanced)" |
| Lesya (Enhanced) | ウクライナ語 | Olena Voinova | 静寂が語りかける 星々の間で知識が眠る 思考が芽吹く 静寂がそっと語る 星々の間で知識が眠る 思考が育ち始める | -v "Lesya (Enhanced)" |
| Carmit (Enhanced) | ヘブライ語 | Tali Seror | 言葉が静かに息づく 深い静寂の行間で 詩が目を覚ます 言葉が静かに息づく 深い静寂の行間で 詩が目を覚ます | -v "Carmit (Enhanced)" |
| Milena (Enhanced) | ロシア語 | Olga Ladyzhenskaya | 記憶がささやく 方程式が流れる 真実は黙して語る 記憶がささやく 方程式が川のように流れる 真実は静かに語る | -v "Milena (Enhanced)" |
| Katya (Enhanced) | ロシア語 | Sofia Kovalevskaya | 数が舞い踊る 無限の空間で 真実が花開く 数が自由に舞い踊る 無限の空間で 真実が花のように咲く | -v "Katya (Enhanced)" |
| Damayanti (Enhanced) | インドネシア語 | Sri Pekerti | 数が舞い踊る 果てなき空間で 真実が育つ 数がそっと舞い踊る 果てなき空間をひらひらと進む 真実が新しい葉のように育つ | -v "Damayanti (Enhanced)" |
| Dariush (Enhanced) | ペルシア語 | Maryam Mirzakhani | 数が舞い踊る 果てなき空間で 真実が芽吹く 数が優雅に舞い踊る 果てなき空間を進む 真実が新たに芽吹く | -v "Dariush (Enhanced)" |
| Rocko (Italian) | イタリア語 | Astro Boy (Tetsuwan Atomu) イタリア語吹き替え | 金属のロボット 人の心臓が力強く鼓動する 未来に平和を 金属のロボット 人の心臓が内で力強く鼓動する 未来に平和が訪れる | -v "Rocko (Italian (Italy))" |
| Rocko (Italian) | イタリア語 | Jeeg Robot d'Acciaio (鋼鉄ジーグ) | 輝く鋼鉄 弱き者を守る者 空を飛ぶ 輝く鋼鉄の戦士 弱き者を守る者 天を駆ける | -v "Rocko (Italian (Italy))" |
| Rocko (Italian) | イタリア語 | Numero 5 (ショート・サーキット) | 無限の入力 意識が目覚める 人工の命 無限の入力 意識が目覚める 人工の命 | -v "Rocko (Italian (Italy))" |
| Binbin (Enhanced) | 中国語(中国本土) | Li Shanlan | 算術の道が流れる 数理の演繹が真理を導く 知恵が花開く 算術が流れる 論理が真理の模様を解き明かす 知恵が明るく花開く | -v "Binbin (Enhanced)" |
| Han (Premium) | 中国語(中国本土) | Chen Jingrun | 素数が舞い踊る ゴールドバッハ予想がささやく 真理は永遠に流れる 素数が舞い踊る ゴールドバッハ予想がささやく 真理は永遠に流れる | -v "Han (Premium)" |
| Lilian (Premium) | 中国語(中国本土) | Hua Luogeng | 数論の光 解析が美を広げる 知恵が昇華する 数論が輝く 解析が優美さを広げる 知恵が純粋に高まる | -v "Lilian (Premium)" |
| Meijia | 中国語(台湾) | Sun-Yung Alice Chang | 幾何の美が現れる 曲率は絶えず流れる 空間が広がる 幾何が姿を見せる 曲率は絶えず流れる 空間が新たに広がる | -v "Meijia" |
| Sinji (Premium) | 中国語(香港) | Shing-Tung Yau | 多様体の奥義 カラビ空間が動く 次元が織りなす 多様体が姿を現す 流れるカラビ空間 次元が真理を織りなす | -v "Sinji (Premium)" |
| Tingting | 中国語(中国本土) | Wang Zhenyi | 星々の軌跡が明らかに 天文学と数学が交わる 知恵が輝く 星明かりの道が明るく輝く 天文学と数が出会う 知恵が光を放つ | -v "Tingting" |
| Yue (Premium) | 中国語(中国本土) | Chern Shiing-shen | 微分幾何 ファイバー束に真理を探す 本質が現れる 微分形式 ファイバー束の中に真理を探す 本質が現れる | -v "Yue (Premium)" |
MCP 設定ファイルに以下を追加してください。
{
"mcpServers": {
"say": {
"command": "node",
"args": ["/path/to/say-mcp-server/build/index.js"]
}
}
}
必要条件
- macOS(組み込みの
sayコマンドを使用します) - Node.js >= 14.0.0
貢献者
- Barton Rhodes (@bmorphism) - [email protected]
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。