An MCP server that provides text-to-speech functionality using macOS's built-in say
command.
- macOS (uses the built-in
say
command) - Node.js >= 14.0.0
Add the following to your MCP settings configuration file:
{
"mcpServers": {
"say": {
"command": "node",
"args": ["/path/to/say-mcp-server/build/index.js"]
}
}
}
npm install say-mcp-server
The speak
tool provides access to macOS's text-to-speech capabilities with extensive customization options.
Use macOS text-to-speech to speak text aloud.
Parameters:
text
(required): Text to speak. Supports:- Plain text
- Basic punctuation for pauses
- Newlines for natural breaks
- [[slnc 500]] for 500ms silence
- [[rate 200]] for changing speed mid-text
- [[volm 0.5]] for changing volume mid-text
- [[emph +]] and [[emph -]] for emphasis
- [[pbas +10]] for pitch adjustment
voice
(optional): Voice to use (default: "Alex")rate
(optional): Speaking rate in words per minute (default: 175, range: 1-500)background
(optional): Run speech in background to allow further MCP interaction (default: false)
- Voice Modulation:
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"
}
});
- Dynamic Rate Changes:
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"
}
});
- Emphasis and Pitch:
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"
}
});
- With 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
}
});
- With YouTube Transcripts:
// 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
}
});
- Background Speech with Multiple Actions:
// 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" }
});
- With 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
}
});
}
Example:
use_mcp_tool({
server_name: "say",
tool_name: "speak",
arguments: {
text: "Hello, world!",
voice: "Victoria",
rate: 200
}
});
List all available text-to-speech voices on the system.
Example:
use_mcp_tool({
server_name: "say",
tool_name: "list_voices",
arguments: {}
});
Voice | Language/Region | Intellectual Figure | Haiku | CLI Specification |
---|---|---|---|---|
Anna (Premium) | German | Emmy Noether | Symmetrie haucht Leben Algebras verborgne Form Abstraktion blüht Symmetry breathes life Algebra's hidden forms Abstraction blooms |
-v "Anna (Premium)" |
Emma (Premium) | Italian | Maria Adelaide Sneider | Algoritmi in danza Macchina sussurra dolce Il codice vive Algorithms dance Machine whispers secrets soft Code becomes alive |
-v "Emma (Premium)" |
Federica (Premium) | Italian | Pia Nalli | Teoremi fluenti Numeri danzano liberi Verità emerge Flowing theorems dance Numbers move in freedom's space Truth emerges pure |
-v "Federica (Premium)" |
Serena (Premium) | English (UK) | Bertha Swirles | Quantum waves ripple Through mathematical seas deep Truth's light emerges Quantum waves ripple Through mathematical seas deep Truth's light emerges |
-v "Serena (Premium)" |
Petra (Premium) | German | Ruth Moufang | Algebra spricht In Symmetrien versteckt Wahrheit erblüht Algebra speaks soft Hidden in symmetries pure Truth blooms anew here |
-v "Petra (Premium)" |
Yuna (Premium) | Korean | Hee Oh | 숨은 패턴 빛나고 마음의 방정식 핀다 지식 자라나 Hidden patterns gleam Mind's equations softly bloom Knowledge multiplies |
-v "Yuna (Premium)" |
Alva (Premium) | Swedish | Sonja Korovkin | Mönster flödar fritt Genom tankens labyrinter Visdom blomstrar här Patterns flowing free Through labyrinths of the mind Wisdom blooms right here |
-v "Alva (Premium)" |
Amélie (Premium) | French (Canada) | Sophie Germain | Nombres premiers murmurent Dansent entre les silences Symétrie s'ouvre Prime numbers whisper Dancing between the silence Symmetry unfolds |
-v "Amélie (Premium)" |
Ewa (Premium) | Polish | Maria Wielgus | Logiki korzenie Matematyczne krainy Myśl kiełkująca Logic's tender roots Mathematical landscapes Thought's seeds germinate |
-v "Ewa (Premium)" |
Kiyara (Premium) | Hindi | Shakuntala Devi | गणित की लय में अंक नृत्य करते हैं ज्ञान जगता है In rhythm of math Numbers dance their sacred steps Knowledge awakens |
-v "Kiyara (Premium)" |
Majed (Premium) | Arabic | Maha Al-Aswad | أرقام ترقص في فضاء اللانهاية الحقيقة تشرق Numbers dance freely In infinity's vast space Truth rises like dawn |
-v "Majed (Premium)" |
Tünde (Premium) | Hungarian | Julia Erdős | Számok táncolnak Végtelen térben szállnak Igazság virrad Numbers dance and soar Through infinite space they glide Truth dawns pure and bright |
-v "Tünde (Premium)" |
Fiona (Enhanced) | English (Scottish) | Mary Somerville | Highland mists reveal Mathematical mysteries Truth shines like the stars Highland mists reveal Mathematical mysteries Truth shines like the stars |
-v "Fiona (Enhanced)" |
Lesya (Enhanced) | Ukrainian | Olena Voinova | Тиша говорить Між зірками знання спить Думка проростає Silence speaks softly Knowledge sleeps among the stars Thought begins to grow |
-v "Lesya (Enhanced)" |
Carmit (Enhanced) | Hebrew | Tali Seror | מילים נושמות בשקט בין שורות של דממה שיר מתעורר Words breathe silently Between lines of deep stillness Poem awakening |
-v "Carmit (Enhanced)" |
Milena (Enhanced) | Russian | Olga Ladyzhenskaya | Память шепчет нам Уравнения текут Истина молчит Memory whispers Equations flow like rivers Truth speaks silently |
-v "Milena (Enhanced)" |
Katya (Enhanced) | Russian | Sofia Kovalevskaya | Числа танцуют В пространстве бесконечном Истина цветёт Numbers dance freely In space of infinity Truth blooms like a flower |
-v "Katya (Enhanced)" |
Damayanti (Enhanced) | Indonesian | Sri Pekerti | Angka menari Dalam ruang tak batas Kebenaran tumbuh Numbers dance gently In boundless space they flutter Truth grows like new leaves |
-v "Damayanti (Enhanced)" |
Dariush (Enhanced) | Persian | Maryam Mirzakhani | اعداد می رقصند در فضای بی پایان حقیقت می روید Numbers dance with grace In endless space they traverse Truth springs forth anew |
-v "Dariush (Enhanced)" |
Rocko (Italian) | Italian | Astro Boy (Tetsuwan Atomu) Italian dub |
Robot di metallo Cuore umano batte forte Pace nel futuro Metal robot form Human heart beats strong within Peace in future dawns |
-v "Rocko (Italian (Italy))" |
Rocko (Italian) | Italian | Jeeg Robot d'Acciaio (Kōtetsu Jeeg) |
Acciaio lucente Protettore dei deboli Vola nel cielo Shining steel warrior Protector of the helpless Soars through the heavens |
-v "Rocko (Italian (Italy))" |
Rocko (Italian) | Italian | Numero 5 (Short Circuit) |
Input infinito La coscienza si risveglia Vita artificiale Infinite input Consciousness awakening Artificial life |
-v "Rocko (Italian (Italy))" |
Binbin (Enhanced) | Chinese (Mainland) | Li Shanlan | 算术之道流 数理演绎真理 智慧绽放 Arithmetic flows Logic unfolds truth's pattern Wisdom blossoms bright |
-v "Binbin (Enhanced)" |
Han (Premium) | Chinese (Mainland) | Chen Jingrun | 素数之舞动 哥德巴赫猜想 真理永恒 Prime numbers dancing Goldbach's conjecture whispers Truth eternal flows |
-v "Han (Premium)" |
Lilian (Premium) | Chinese (Mainland) | Hua Luogeng | 数论之光芒 解析延续美 智慧升华 Number theory shines Analysis extends grace Wisdom ascends pure |
-v "Lilian (Premium)" |
Meijia | Chinese (Taiwan) | Sun-Yung Alice Chang | 幾何之美現 曲率流動不息 空間展開 Geometry shows Curvature flows endlessly Space unfolds anew |
-v "Meijia" |
Sinji (Premium) | Chinese (Hong Kong) | Shing-Tung Yau | 流形之奧秘 卡拉比空間動 維度交織 Manifolds reveal Calabi spaces in flow Dimensions weave truth |
-v "Sinji (Premium)" |
Tingting | Chinese (Mainland) | Wang Zhenyi | 星辰轨迹明 天文数学融 智慧闪耀 Starlit paths shine bright Astronomy meets numbers Wisdom radiates |
-v "Tingting" |
Yue (Premium) | Chinese (Mainland) | Chern Shiing-shen | 微分几何 纤维丛中寻真 本质显现 Differential forms In fiber bundles seek truth Essence emerges |
-v "Yue (Premium)" |
Add the following to your MCP settings configuration file:
{
"mcpServers": {
"say": {
"command": "node",
"args": ["/path/to/say-mcp-server/build/index.js"]
}
}
}
- macOS (uses the built-in
say
command) - Node.js >= 14.0.0
- Barton Rhodes (@bmorphism) - barton@vibes.lol
MIT