SpeakUp MCP Server

SpeakUp MCP Server

An MCP server that gives Claude Code text-to-speech capabilities with support for multiple simultaneous instances, message queuing, and a web UI for monitoring.

Category
Visit Server

README

SpeakUp MCP Server

An MCP server that gives Claude Code text-to-speech capabilities with support for multiple simultaneous instances, message queuing, and a web UI for monitoring.

Features

  • Centralized queue - Multiple Claude Code instances share one audio output, no overlapping
  • Project identification - Each message announces which project it's from
  • Web UI - Monitor queue, history, and stop playback at http://localhost:7849
  • CLI control - speakup status, speakup stop, speakup history
  • 5 emotional tones - neutral, excited, concerned, calm, urgent
  • Streaming playback - Audio starts immediately, doesn't wait for full synthesis
  • Persistent history - SQLite storage of all messages

Architecture

Claude Code #1        Claude Code #2        Claude Code #3
     │                     │                     │
     ▼                     ▼                     ▼
MCP Server #1         MCP Server #2         MCP Server #3
(thin client)         (thin client)         (thin client)
     │                     │                     │
     └─────────────────────┼─────────────────────┘
                           ▼
              ┌────────────────────────┐
              │   SpeakUp Service      │
              │   localhost:7849       │
              │   ─────────────────    │
              │   • FIFO queue         │
              │   • SQLite history     │
              │   • Web UI             │
              │   • Streaming playback │
              └────────────────────────┘

Quick Setup

One-line install:

curl -fsSL https://raw.githubusercontent.com/zachswift615/speakup-mcp/main/install.sh | bash

This will:

  • Clone the repo to ~/.speakup/src
  • Create a virtual environment
  • Install all dependencies
  • Download voice files (~70MB)
  • Add speakup CLI to your PATH (~/.local/bin)
  • Start the background service

Or install manually:

git clone https://github.com/zachswift615/speakup-mcp.git
cd speakup-mcp
./install.sh

Project Setup

In any project directory, run:

speakup init my-project-name

This will:

  1. Create/update .mcp.json with the TTS server config
  2. Create/update .claude/CLAUDE.md with usage instructions for Claude

Then restart Claude Code to load the new config.

Options

# Use full announcements ("This is Claude from my-project: ...")
speakup init my-project --announce full

# Disable announcements
speakup init my-project --announce none

Manual Configuration

If you prefer manual setup, add to your project's .mcp.json:

{
  "mcpServers": {
    "tts": {
      "command": "python",
      "args": ["-m", "claude_tts_mcp.server"],
      "env": {
        "SPEAKUP_PROJECT": "my-project-name",
        "SPEAKUP_ANNOUNCE": "prefix"
      }
    }
  }
}

Environment Variables

Variable Values Description
SPEAKUP_PROJECT any string Project name shown in messages (default: "claude")
SPEAKUP_ANNOUNCE prefix, full, none How to announce the project

Announce modes:

  • prefix - "my-project: Hello world" (default)
  • full - "This is Claude from my-project: Hello world"
  • none - "Hello world" (no announcement)

CLI Commands

# Project setup
speakup init <project>    # Initialize SpeakUp in current directory
speakup init <project> --announce full   # With full announcements

# Service management
speakup service start     # Start the background service
speakup service stop      # Stop the service
speakup service status    # Check if service is running

# Playback control
speakup stop              # Stop current playback and clear queue
speakup status            # Show what's playing and queued
speakup history           # Show recent messages
speakup history -n 50     # Show last 50 messages

Web UI

Open http://localhost:7849 to see:

  • Now Playing - Current message being spoken
  • Queue - Messages waiting to play
  • History - Recent messages with status (played/skipped)
  • Stop All button - Stop playback and clear queue

The service auto-starts when the first MCP tool is invoked.

Usage

Once configured, Claude Code can use the TTS tools:

# Simple speech
speak(text="Hello world!")

# With emotional tone
speak(text="All tests passed!", tone="excited")

# Warning
speak(text="Found 3 errors", tone="concerned")

# Fast speech
speak(text="Quick update", speed=1.5)

# Stop current speech and clear queue
stop()

Tones

Tone Effect
neutral Default, clear speech
excited More variation, slightly faster
concerned Steadier, slower
calm Very steady, relaxed pace
urgent Energetic, fast

CLAUDE.md Integration

Add this to your project's CLAUDE.md to encourage Claude to use TTS effectively:

## Voice/TTS (Text-to-Speech)

Use `mcp__tts__speak_tool` to speak to the user aloud. Use it liberally - for thinking
out loud, narrating what you're doing, conversing naturally, or any time voice adds to
the experience.

**Parameters:**
- `text` (required): What to say
- `tone`: neutral | excited | concerned | calm | urgent (default: neutral)
- `speed`: 0.5 to 2.0 (default: 1.0)
- `interrupt`: Stop current speech before starting (default: true)

**Example uses:**
- Thinking through a problem out loud
- Announcing task completion or updates
- Reading errors or warnings aloud
- Conversational back-and-forth

**Tone guide:**
- `calm` - explanations, walkthroughs
- `urgent` - errors, critical issues
- `excited` - successes, good news
- `concerned` - warnings, risky operations

Use `mcp__tts__stop_tool` to stop speech mid-playback.

Why Use This?

Multi-Instance Support

Running multiple Claude Code windows? Messages queue up instead of talking over each other. Each message is prefixed with its project name so you know which instance is speaking.

Subagent Visibility

When using subagent-driven development, you typically have limited visibility into what agents are doing. With TTS instructions in your CLAUDE.md, subagents announce their progress as they work - giving you real-time audio feedback without watching the terminal.

Token Efficient

The MCP interface is minimal:

  • Responses: {"success": true, "message_id": 1, "queue_position": 0}

No verbose payloads, no unnecessary metadata.

Streaming Playback

Audio begins playing immediately as it's synthesized, rather than waiting for full generation. This reduces time-to-first-sound significantly for longer text.

Data Storage

  • History database: ~/.speakup/history.db (SQLite)
  • Service PID file: ~/.speakup/service.pid
  • Voice models: ~/.claude-tts/voices/

Manual Voice Setup

If you prefer manual setup, download the default voice:

mkdir -p ~/.claude-tts/voices/en_US-lessac-medium
cd ~/.claude-tts/voices/en_US-lessac-medium
curl -LO https://github.com/k2-fsa/sherpa-onnx/releases/download/tts-models/vits-piper-en_US-lessac-medium.tar.bz2
tar -xjf vits-piper-en_US-lessac-medium.tar.bz2 --strip-components=1
rm vits-piper-en_US-lessac-medium.tar.bz2

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

Project Structure

src/claude_tts_mcp/
├── server.py           # MCP server (thin client)
├── service.py          # Background service with HTTP API + Web UI
├── cli.py              # CLI commands (speakup)
├── queue_manager.py    # Message queue and playback coordination
├── history.py          # SQLite history storage
├── streaming_player.py # Streaming audio playback
├── sherpa_engine.py    # sherpa-onnx TTS wrapper
├── tone_mapper.py      # Tone → synthesis parameters
└── voice_manager.py    # Voice model management

Requirements

  • Python 3.10+
  • macOS (Linux/Windows support planned)
  • Audio output device

License

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured