About say-mcp-server
say-mcp-server is an MCP server for macOS that provides text-to-speech through the built-in say command. It suits macOS users who want agents to read text aloud, with control over speed, volume, pitch and voice.
Key features
- 01Speaks text using the built-in macOS say command
- 02Inline markers for rate, volume and pitch
- 03Optional background speech while other MCP calls run
- 04Lists voices available on the system
Use cases
- 01Having an agent read search results or notes aloud
- 02Playing long text in the background while continuing other work
- 03Comparing how different voices sound
MCP support
This is an MCP server that exposes the speak and list_voices tools to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEsay-mcp-server

An MCP server that provides text-to-speech functionality using macOS's built-in say command.
Requirements
- macOS (uses the built-in
saycommand) - Node.js >= 14.0.0
Configuration
Add the following to your MCP settings configuration file:
{
"mcpServers": {
"say": {
"command": "node",
"args": ["/path/to/say-mcp-server/build/index.js"]
}
}
}
Installation
npm install say-mcp-server
Tools
speak
The speak tool provides access to macOS's text-to-speech capabilities with extensive customization options.
Basic Usage
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)
Advanced Features
- 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"
}
});
Integration Examples
- 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_voices
List all available text-to-speech voices on the system.
Example:
use_mcp_tool({
server_name: "say",
tool_name: "list_voices",
arguments: {}
});
Recommended Voices
| 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)" |
Configuration
Add the following to your MCP settings configuration file:
{
"mcpServers": {
"say": {
"command": "node",
"args": ["/path/to/say-mcp-server/build/index.js"]
}
}
}
Requirements
- macOS (uses the built-in
saycommand) - Node.js >= 14.0.0
Contributors
- Barton Rhodes (@bmorphism) - [email protected]
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.