Local Voice Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Local Voice Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Give your MCP clients the ability to speak by running local voice models using Chatterbox Turbo TTS or Kokoro TTS.
The package includes a high-quality female reference voice that's used by default with Chatterbox Turbo TTS. All environment variables are optional.
{
"mcpServers": {
"local-voice-mcp": {
"command": "npx",
"args": ["-y", "@codecraftersllc/local-voice-mcp"],
"env": {
"USE_MALE_VOICE": "false",
"CHATTERBOX_MAX_CHARACTERS": "2000",
"CHATTERBOX_PLAYBACK_VOLUME": "75"
}
}
}
}Local Voice MCP supports two TTS engines:
High-quality voice synthesis with voice cloning support and paralinguistic tags. Automatically detects and uses the optimal backend for your hardware.
[laugh], [sigh], [cough], etc.)mlx-community/chatterbox-turbo-6bitChatterboxTurboTTSHigh-quality open-source TTS using ONNX runtime with multi-language and multi-voice support.
To use Kokoro, set the TTS_ENGINE environment variable:
{
"mcpServers": {
"local-voice-mcp": {
"command": "npx",
"args": ["-y", "@codecraftersllc/local-voice-mcp"],
"env": {
"TTS_ENGINE": "kokoro",
"KOKORO_LANGUAGE": "en-us",
"KOKORO_VOICE": "af_sarah",
"KOKORO_SPEED": "1.0"
}
}
}
}Setup:
Kokoro TTS automatically installs Python dependencies and downloads model files (~100MB) on first use. Just configure the MCP server and you're ready to go!
What Happens on First Use:
kokoro-onnx, soundfile, numpy) are automatically installed via pipkokoro-v1.0.onnx ~90MB, voices-v1.0.bin ~13MB) are automatically downloaded~/.cache/kokoro-tts/ for future useManual Installation (Optional):
If you prefer to install dependencies manually or if automatic installation fails:
# Install Python dependencies
pip install kokoro-onnx soundfile numpy
# Model files will still auto-download, or you can download manually:
cd ~/.cache/kokoro-tts
wget https://github.com/nazdridoy/kokoro-tts/releases/download/v1.0.0/kokoro-v1.0.onnx
wget https://github.com/nazdridoy/kokoro-tts/releases/download/v1.0.0/voices-v1.0.binAvailable Voices:
af_alloy, af_bella, af_sarah, af_nova, am_adam, am_michael, am_eric, and morebf_emma, bf_isabella, bm_george, bm_lewis, and moreff_siwisif_sara, im_nicolajf_alpha, jm_kumo, and morezf_xiaobei, zm_yunjian, and moreVoice Blending: Kokoro supports blending multiple voices for unique voice characteristics:
# 60-40 mix of two voices
KOKORO_VOICE="af_sarah:60,am_adam:40"
# Equal blend (50-50)
KOKORO_VOICE="am_adam,af_sarah"@modelcontextprotocol/sdk[laugh], [sigh], [cough] directly in textnpm install -g local-voice-mcpgit clone <repository-url>
cd local-voice-mcp
npm install
npm run buildRun as an MCP server with stdio transport:
local-voice-mcp-serverOr using npx:
npx local-voice-mcp-serverRun as an HTTP server:
MCP_MODE=http local-voice-mcp-serverOr set the port:
PORT=3000 MCP_MODE=http local-voice-mcp-server# Run MCP server in development
npm run dev:mcp
# Run HTTP server in development
npm run dev:http
# Run tests
npm test
# Build project
npm run buildWhen running in MCP mode, the following tools are available:
synthesize_textConverts text to speech and returns audio data using the configured TTS engine.
Common Parameters:
text (string, required): Text to synthesizeChatterbox Turbo-Specific Parameters:
referenceAudio (string, optional): Path to reference audio for voice cloningNote: Chatterbox Turbo uses paralinguistic tags directly in text instead of prosody parameters. Include tags like [laugh], [sigh], [cough], [chuckle], [gasp], [groan], [clear throat], [sniff], [shush] in your text for expressive speech.
Kokoro-Specific Parameters:
speed (number, optional): Speech speed (0.5-2.0, default: 1.0)language (string, optional): Language code (e.g., 'en-us', 'en-gb', 'fr-fr', 'ja', 'cmn', default: 'en-us')voice (string, optional): Voice name (e.g., 'af_sarah', 'am_adam', 'bf_emma', default: 'af_sarah')model_path (string, optional): Path to Kokoro ONNX model filevoices_path (string, optional): Path to Kokoro voices bin fileReturns:
Example Response:
{
"success": true,
"message": "Speech synthesis completed successfully",
"audioFile": "/tmp/local-voice-mcp/audio_20240115_103000_abc123.wav",
"textLength": 25,
"audioFormat": "wav",
"engine": "chatterbox",
"engineName": "chatterbox",
"options": {},
"generatedAt": "2024-01-15T10:30:00.000Z"
}The audio file is saved to the temporary directory and can be played using any audio player or accessed programmatically.
play_audioPlay an audio file using the system's default audio player with optional volume control.
Parameters:
audioFile (string, required): Path to the audio file to playvolume (number, optional): Playback volume as percentage (0-100). If not specified, uses CHATTERBOX_PLAYBACK_VOLUME environment variable or default of 50.Supported Formats:
Returns:
Example Response:
{
"success": true,
"message": "Successfully played audio file: /tmp/local-voice-mcp/audio_123.wav",
"audioFile": "/tmp/local-voice-mcp/audio_123.wav",
"volume": 50,
"platform": "darwin",
"command": "afplay -v 0.5 /tmp/local-voice-mcp/audio_123.wav",
"timestamp": "2024-01-15T10:30:00.000Z"
}Platform Support:
ffplay (from ffmpeg) for consistent volume control across all platformsafplay command with -v volume flagMediaPlayer and volume controlmpg123 (MP3) with gain control or aplay (WAV, no volume control)tts_statusReturns the current status of the TTS service.
Parameters: None
Returns:
Example Response:
{
"success": true,
"status": "operational",
"message": "TTS service is ready and operational",
"timestamp": "2024-01-15T10:30:00.000Z",
"service": {
"name": "Chatterbox TTS",
"version": "0.1.0",
"capabilities": [
"text-to-speech synthesis",
"voice cloning with reference audio",
"prosody controls"
]
}
}service-infoProvides information about the Local Voice MCP service.
URI: local-voice://service-info
When running in HTTP mode, the server exposes:
POST /ttsElevenLabs-compatible text-to-speech endpoint.
Headers:
X-API-Key: API key (placeholder for authentication)Content-Type: application/jsonRequest Body:
{
"text": "[sigh] Hello, world! [laugh] This is great!",
"options": {
"referenceAudio": "path/to/reference.wav"
}
}Response:
audio/wav#### Server Configuration
PORT: HTTP server port (default: 59125)MCP_MODE: Operation mode - "mcp" or "http" (default: "mcp")#### TTS Engine Selection
TTS_ENGINE: TTS engine to use - "chatterbox", "kani-mlx", or "kokoro" (default: "chatterbox")#### Chatterbox Turbo TTS Configuration
These environment variables can be used to set default values for Chatterbox Turbo TTS synthesis. They will be used if not overridden by options passed to the synthesize method:
PYTHON_PATH: Path to Python interpreter (default: "python3"). Important: If using Apple Silicon with Python 3.13+, point this to a conda environment with Python 3.11-3.12 where mlx-audio is installed.CHATTERBOX_REFERENCE_AUDIO: Path to reference audio file for voice cloning (can be anywhere on your system, supports .wav, .mp3, .flac, .ogg, .m4a, .aac). If not specified, uses the bundled high-quality female reference voice.USE_MALE_VOICE: Use male voice instead of bundled female reference voice (true/false, default: false). When set to true, uses the default Chatterbox male voice instead of the bundled female voice. This only applies when no custom reference audio is specified.CHATTERBOX_MAX_CHARACTERS: Maximum number of characters allowed for text input (integer, default: 2000)CHATTERBOX_OUTPUT_DIR: Output directory for generated audio files (default: system temp + "local-voice-mcp")CHATTERBOX_PLAYBACK_VOLUME: Default audio playback volume as percentage (integer, 0-100, default: 50)Paralinguistic Tags: Instead of prosody controls, use paralinguistic tags directly in your text: [laugh], [sigh], [cough], [chuckle], [gasp], [groan], [clear throat], [sniff], [shush]
Example: "[sigh] I can't believe it's Monday again. [laugh] But let's make the best of it!"
#### Kokoro Configuration
These environment variables can be used to set default values for Kokoro synthesis:
KOKORO_SPEED: Speech speed (float, 0.5-2.0, default: 1.0)KOKORO_LANGUAGE: Language code (string, default: "en-us"). Supported: en-us, en-gb, fr-fr, it, ja, cmnKOKORO_VOICE: Voice name (string, default: "af_sarah"). See available voices above. Can also use voice blending format like "voice1:weight,voice2:weight"KOKORO_MODEL_PATH: Path to kokoro ONNX model file (string, default: "kokoro-v1.0.onnx")KOKORO_VOICES_PATH: Path to voices bin file (string, default: "voices-v1.0.bin")KOKORO_MAX_CHARACTERS: Maximum number of characters allowed for text input (integer, default: 5000)KOKORO_OUTPUT_DIR: Output directory for generated audio files (default: system temp + "local-voice-mcp")PYTHON_PATH: Path to Python interpreter (default: "python3")Example:
# Set default TTS parameters via environment variables
# Reference audio can be anywhere on your system
export CHATTERBOX_REFERENCE_AUDIO="/Users/john/Music/my-voice.wav"
export CHATTERBOX_MAX_CHARACTERS="3000"
export CHATTERBOX_PLAYBACK_VOLUME="75"
# Run the MCP server with these defaults
local-voice-mcp-serverUsing with npx:
{
"mcpServers": {
"local-voice-mcp": {
"command": "npx",
"args": ["-y", "@codecraftersllc/local-voice-mcp"],
"env": {
"CHATTERBOX_REFERENCE_AUDIO": "/Users/john/Music/my-voice.wav",
"CHATTERBOX_MAX_CHARACTERS": "3000",
"CHATTERBOX_PLAYBACK_VOLUME": "75"
}
}
}
}Using male voice instead of bundled female voice:
{
"mcpServers": {
"local-voice-mcp": {
"command": "npx",
"args": ["-y", "@codecraftersllc/local-voice-mcp"],
"env": {
"USE_MALE_VOICE": "true"
}
}
}
}Priority Order:
synthesize_text or play_audio tools (highest priority)Add to your MCP client configuration:
{
"local-voice-mcp": {
"command": "npx",
"args": ["-y", "local-voice-mcp-server"],
"env": {}
}
}Cursor is a popular AI-powered code editor that supports MCP. Here's how to test the Local Voice MCP server with Cursor:
First, install the package globally or ensure it's available:
npm install -g local-voice-mcp
# or
npm install local-voice-mcpAdd the MCP server to your Cursor configuration file. The location depends on your operating system:
~/Library/Application Support/Cursor/User/globalStorage/cursor.mcp/config.json%APPDATA%\Cursor\User\globalStorage\cursor.mcp\config.json~/.config/Cursor/User/globalStorage/cursor.mcp/config.jsonAdd this configuration:
{
"mcpServers": {
"local-voice-mcp": {
"command": "local-voice-mcp-server",
"args": [],
"env": {}
}
}
}Or if using npx:
{
"mcpServers": {
"local-voice-mcp": {
"command": "npx",
"args": ["-y", "local-voice-mcp-server"],
"env": {}
}
}
}After adding the configuration, restart Cursor to load the MCP server.
Once Cursor is restarted, you can test the TTS functionality:
Can you synthesize speech for "Hello, this is a test of the local voice MCP server"? What's the status of the TTS service? Synthesize "[sigh] Welcome to the future of AI coding. [laugh] It's going to be amazing!" Play the audio file that was just generated Play the audio file at 25% volumeYou should see the following tools available in Cursor:
If the MCP server doesn't appear in Cursor:
local-voice-mcp-server directly in terminal to ensure it worksWhen working correctly:
All responses are in structured JSON format with clear file paths, making it easy for MCP clients and AI agents to understand and work with the results.
pip install mlx-audiopip install chatterbox-ttsImportant for Apple Silicon users: The mlx-audio package requires Python <3.13 due to dependency constraints. If your system Python is 3.13+, you'll need to use a conda environment:
# Create a Python 3.11 environment for Chatterbox
conda create -n chatterbox python=3.11
conda activate chatterbox
pip install mlx-audio
# Then set PYTHON_PATH in your MCP config to point to this environment{
"mcpServers": {
"local-voice-mcp": {
"command": "npx",
"args": ["-y", "@codecraftersllc/local-voice-mcp"],
"env": {
"TTS_ENGINE": "chatterbox",
"PYTHON_PATH": "/path/to/miniconda3/envs/chatterbox/bin/python"
}
}
}
}The service automatically detects your hardware and uses the optimal backend:
| Platform | Backend | Model |
|---|---|---|
| Apple Silicon (via MLX) | MLX | mlx-community/chatterbox-turbo-6bit |
| NVIDIA GPU (CUDA) | PyTorch | ChatterboxTurboTTS |
| CPU | PyTorch | ChatterboxTurboTTS (slower) |
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ MCP Client │ │ HTTP Client │ │ CLI Tool │
│ (Cursor, etc.) │ │ │ │ │
└─────────┬───────┘ └─────────┬────────┘ └─────────┬───────┘
│ │ │
│ stdio │ HTTP │ stdio
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Local Voice MCP Server │
│ ┌─────────────────┐ ┌─────────────────────────────────┐ │
│ │ MCP Server │ │ HTTP Server │ │
│ │ (stdio) │ │ (Express.js) │ │
│ └─────────────────┘ └─────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ TTS Tools & Services │ │
│ │ ┌─────────────────┐ ┌─────────────────────────────┐ │ │
│ │ │ ChatterboxService│ │ File Management │ │ │
│ │ │ │ │ (Cleanup & Security) │ │ │
│ │ └─────────────────┘ └─────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────┐
│ Python TTS │
│ (Chatterbox Turbo) │
└─────────────────────┘MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.