Say MCP Server

Say MCP Server

Enables text-to-speech functionality on macOS using the say command, offering extensive control over speech parameters like voice, rate, volume, and pitch for a customizable auditory experience.

bmorphism

Speech Processing
Visit Server

Tools

speak

Use macOS text-to-speech to speak text aloud

list_voices

List available text-to-speech voices

README

say-mcp-server

<a href="https://glama.ai/mcp/servers/lmmqoe15jp"><img width="380" height="200" src="https://glama.ai/mcp/servers/lmmqoe15jp/badge" alt="Say Server MCP server" /></a>

macOS System Voice Settings

An MCP server that provides text-to-speech functionality using macOS's built-in say command.

Requirements

  • macOS (uses the built-in say command)
  • 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

  1. 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"
  }
});
  1. 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"
  }
});
  1. 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

  1. 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
  }
});
  1. 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
  }
});
  1. 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" }
});
  1. 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

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

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 say command)
  • Node.js >= 14.0.0

Contributors

License

MIT

Recommended Servers

mcp-server-youtube-transcript

mcp-server-youtube-transcript

A Model Context Protocol server that enables retrieval of transcripts from YouTube videos. This server provides direct access to video captions and subtitles through a simple interface.

Featured
JavaScript
Zonos TTS MCP Server

Zonos TTS MCP Server

Facilitates direct speech generation using Claude for multiple languages and emotions, integrating with a Zonos TTS setup via the Model Context Protocol.

Local
TypeScript
MS-Lucidia-Voice-Gateway-MCP

MS-Lucidia-Voice-Gateway-MCP

A server providing text-to-speech and speech-to-text functionalities using Windows' native speech services without external dependencies.

Local
JavaScript
Ollama MCP Server

Ollama MCP Server

Enables seamless integration between Ollama's local LLM models and MCP-compatible applications, supporting model management and chat interactions.

Local
TypeScript
mcp-hfspace

mcp-hfspace

Use HuggingFace Spaces directly from Claude. Use Open Source Image Generation, Chat, Vision tasks and more. Supports Image, Audio and text uploads/downloads.

Local
TypeScript
Kokoro TTS MCP Server

Kokoro TTS MCP Server

Provides text-to-speech capabilities through the Model Context Protocol, allowing applications to easily integrate speech synthesis with customizable voices, adjustable speech speed, and cross-platform audio playback support.

Local
Python
Voice Recorder MCP Server

Voice Recorder MCP Server

Enables recording audio from a microphone and transcribing it using OpenAI's Whisper model. Works as both a standalone MCP server and a Goose AI agent extension.

Local
Python
Speech MCP

Speech MCP

A Goose MCP extension providing voice interaction with modern audio visualization, allowing users to communicate with Goose through speech rather than text.

Local
Python
Home Assistant MCP

Home Assistant MCP

Expose all Home Assistant voice intents through a Model Context Protocol Server allowing home control.

Local
Python
ElevenLabs Text-to-Speech MCP

ElevenLabs Text-to-Speech MCP

Contribute to georgi-io/jessica development by creating an account on GitHub.

Local
Python