server

$npx mdskill add terrylica/cc-skills/server

Start or stop the Kokoro TTS HTTP server on localhost:8779

  • Provides OpenAI-compatible text-to-speech API endpoints for audio synthesis
  • Depends on Kokoro TTS models and macOS launchd for production deployment
  • Executes commands based on user triggers like 'start tts server' or 'stop tts server'
  • Delivers server status and model information via HTTP health and model endpoints
SKILL.md
.github/skills/serverView on GitHub ↗
---
name: server
description: "Start/stop Kokoro TTS HTTP server. TRIGGERS - start tts server, kokoro server, tts http, stop tts server."
allowed-tools: Read, Write, Edit, Bash, Glob, AskUserQuestion
---

# Kokoro TTS Server

Manage the Kokoro TTS HTTP server — an OpenAI-compatible `/v1/audio/speech` endpoint on localhost:8779.

> **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.

## Server Overview

The server provides:

- `GET /health` — Health status JSON
- `GET /v1/models` — List available models
- `POST /v1/audio/speech` — Synthesize text to audio (WAV, MP3, Opus, PCM)

## Quick Start

### Start (foreground, for testing)

```bash
~/.local/share/kokoro/.venv/bin/python ~/.local/share/kokoro/tts_server.py
```

### Start (launchd, for production)

Per the macOS launchd policy, the launchd plist must launch a compiled Swift binary (not a bash script). Guide the user through:

1. Compile Swift launcher binary
2. Create launchd plist at `~/Library/LaunchAgents/com.terryli.kokoro-tts-server.plist`
3. Bootstrap: `launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.terryli.kokoro-tts-server.plist`

### Stop

```bash
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.terryli.kokoro-tts-server.plist
```

### Verify

```bash
curl -s http://127.0.0.1:8779/health | python3 -m json.tool
```

Expected: `{"status": "ok", "provider": "kokoro-tts-mlx", "model": "mlx-community/Kokoro-82M-bf16", "device": "mlx-metal"}`

## Environment Variables

| Variable               | Default     | Purpose                |
| ---------------------- | ----------- | ---------------------- |
| `KOKORO_SERVER_PORT`   | `8779`      | Listen port            |
| `KOKORO_SERVER_HOST`   | `127.0.0.1` | Bind address           |
| `KOKORO_DEFAULT_VOICE` | `af_heart`  | Default voice          |
| `KOKORO_DEFAULT_LANG`  | `en-us`     | Default language       |
| `KOKORO_DEFAULT_SPEED` | `1.0`       | Speech speed (0.1–5.0) |
| `KOKORO_PLAY_LOCAL`    | `0`         | Play via afplay        |

## Troubleshooting

| Issue               | Cause                  | Solution                                   |
| ------------------- | ---------------------- | ------------------------------------------ |
| Port already in use | Another server running | `lsof -i :8779` to find, kill it           |
| Model load fails    | Not installed          | Run `/kokoro-tts:install` first            |
| Slow first request  | Warmup synthesis       | Normal — first request triggers model load |


## Post-Execution Reflection

After this skill completes, check before closing:

1. **Did the command succeed?** — If not, fix the instruction or error table that caused the failure.
2. **Did parameters or output change?** — If the underlying tool's interface drifted, update Usage examples and Parameters table to match.
3. **Was a workaround needed?** — If you had to improvise (different flags, extra steps), update this SKILL.md so the next invocation doesn't need the same workaround.

Only update if the issue is real and reproducible — not speculative.
More from terrylica/cc-skills