Skip to main content
Glama
README.md
# speaches-mcp

An MCP (Model Context Protocol) server that exposes [speaches](https://github.com/speaches-ai/speaches) as `transcribe_audio` and `text_to_speech` tools.

Speaches is a local, OpenAI API-compatible server for speech-to-text (via faster-whisper) and text-to-speech (via Kokoro/Piper). This MCP server lets AI assistants like Claude use it directly.

## Tools

### `transcribe_audio`
Transcribe an audio file using your speaches instance.

| Parameter | Required | Description |
|-----------|----------|-------------|
| `file_path` | ✅ | Absolute path to the audio file |
| `language` | ❌ | ISO-639-1 language code (e.g. `en`). Omit for auto-detect. |
| `model` | ❌ | Whisper model ID. Defaults to `SPEACHES_STT_MODEL` env var. |

### `text_to_speech`
Convert text to speech and save to a file.

| Parameter | Required | Description |
|-----------|----------|-------------|
| `text` | ✅ | Text to convert |
| `output_path` | ✅ | Absolute path for the output audio file (e.g. `/tmp/output.mp3`) |
| `voice` | ❌ | Voice ID. Defaults to `TTS_VOICE` env var. |
| `model` | ❌ | TTS model ID. Defaults to `TTS_MODEL` env var. |

## Usage

### With Docker + Supergateway (SSE transport)

This exposes the MCP server over SSE on port `8010`, suitable for remote clients.

```bash
docker compose up --build
```

Then connect your MCP client to `http://localhost:8010/sse`.

### Standalone (stdio transport)

Build the image:

```bash
docker build -t speaches-mcp .
```

Run it:

```bash
docker run --rm -i \
  -e SPEACHES_URL=http://your-speaches-host:8000 \
  speaches-mcp
```

For Claude Desktop, add to your config:

```json
{
  "mcpServers": {
    "speaches": {
      "command": "docker",
      "args": ["run", "--rm", "-i",
        "-e", "SPEACHES_URL=http://your-speaches-host:8000",
        "speaches-mcp"
      ]
    }
  }
}
```

## Environment Variables

| Variable | Default | Description |
|----------|---------|-------------|
| `SPEACHES_URL` | `http://speaches:8000` | Base URL of your speaches instance |
| `STT_MODEL` | `Systran/faster-whisper-large-v3` | Default speech-to-text model |
| `TTS_MODEL` | `speaches-ai/Kokoro-82M-v1.0-ONNX` | Default text-to-speech model |
| `TTS_VOICE` | `af_heart` | Default TTS voice |
| `OPENAI_API_KEY` | `dummy` | Required by the OpenAI SDK but not used by speaches |

## Downloading Models

Before transcribing, make sure you've downloaded models into speaches:

```bash
# Speech-to-text
curl http://your-speaches-host:8000/v1/models/Systran/faster-whisper-large-v3 -X POST

# Text-to-speech
curl http://your-speaches-host:8000/v1/models/speaches-ai/Kokoro-82M-v1.0-ONNX -X POST
```

## License

MIT

TDQS

C2/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: text_to_speech converts text to audio, and transcribe_audio converts audio to text. There is no overlap.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern using underscores, making them predictable and easy to understand.

Tool Count3/5

With only two tools, the server feels thin for a speech processing domain, where additional tools for voice management or language selection might be expected.

Completeness4/5

The core operations of text-to-speech and transcription are covered, but missing features like voice listing or parameter configuration create minor gaps.