kesha-voice-kit
Provides offline microphone dictation through the Raycast launcher, allowing users to record audio with a live signal meter, auto-stop on silence, transcribe locally, and copy the text to the clipboard.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
Transcribe locally — 25 languages, up to ~19x faster than Whisper on Apple Silicon, ~10x on an x86 CPU
Speak back — text-to-speech in 9 languages
Plug into agents — ship voice workflows as CLI commands, an MCP server, an OpenClaw skill, or a Hermes agent
Small Rust engine — single ~74 MB binary, no ffmpeg, no Python, no native Node addons
Quick start
Runtime: Bun >= 1.4.0.
# 1. Install Bun (skip if you have it)
curl -fsSL https://bun.sh/install | bash # macOS/Linux — or: brew install bun
powershell -c "irm bun.sh/install.ps1 | iex" # Windows
# 2. Install Kesha
bun add -g @drakulavich/kesha-voice-kit
kesha --version # confirms `kesha` resolved on PATH
# 3. Download the engine and models — pick one path
kesha init # guided: TTS languages and optional VAD / diarization
kesha install --plan && kesha install # manual: preview the sizes, then download
# 4. Transcribe
kesha audio.ogg # transcript to stdoutkesha install pulls ~2.5 GB on Linux/Windows and ~0.6 GB on Apple Silicon, whose CoreML engine reads a smaller model set. It is always explicit — nothing downloads behind your back — and reports download progress on stderr. If bun --version fails right after step 1, reload your PATH: exec $SHELL -l. To remove the engine, models and everything else Kesha wrote, run kesha uninstall.
Prefer Homebrew or Docker? See Other install methods. Air-gapped or behind a corporate mirror? See docs/model-mirror.md.
Platform support
All three targets transcribe, detect the spoken language, run VAD, and speak. The macOS-only rows need Apple frameworks — they are not a missing port. Windows is a tested path rather than a published binary nobody ran: CI does a cold kesha install on windows-latest, transcribes a fixture, and round-trips a synthesis (#216, #667).
macOS arm64 | Linux x64 | Windows x64 | |
Transcribe · audio language ID · VAD | CoreML / ANE | ONNX CPU | ONNX CPU |
TTS — | ✅ | ✅ | ✅ |
TTS — | ✅ | — | — |
Mic capture and live dictation ( | ✅ | — | — |
Speaker diarization ( | ✅ | — | — |
Word-level timestamps ( | ✅ | ✅ | ✅ |
Voice auto-routing from the text's language | ✅ | pass | pass |
Intel Macs get no published engine binary. Full matrix with maturity labels: docs/product-positioning.md.
Related MCP server: m4x
Plug into your agent
MCP server —
kesha mcpexposes transcribe/synthesize/list tools to any MCP client (Claude, Cursor, Codex, Gemini). Setup: docs/mcp.md.OpenClaw — give your LLM agent ears. Install & config: docs/openclaw.md.
Hermes Agent — local STT/TTS through Hermes command providers. Setup: docs/hermes.md.
Raycast (macOS) — offline microphone dictation from the launcher: Dictate to Clipboard records with a live signal meter, auto-stops on silence, transcribes locally, and copies the text. Install from the Raycast Store · source:
raycast/.Programmatic API —
@drakulavich/kesha-voice-kit/corefor use inside a Bun program. See docs/api.md.
Speech-to-text
kesha audio.ogg # transcribe (plain text)
kesha --format transcript audio.ogg # text + language/confidence
kesha --format json audio.ogg # full JSON with lang fields
kesha --json --timestamps audio.ogg # JSON with timestamped segments
kesha --itn audio.ogg # spelled-out numbers -> digits
kesha --toon audio.ogg # compact LLM-friendly TOONMultiple files get head-style headers; stdout is the transcript, stderr is errors — pipe-friendly:
$ kesha freedom.ogg tahiti.ogg
=== freedom.ogg ===
Свободу попугаям! Свободу!
=== tahiti.ogg ===
Таити, Таити! Не были мы ни в какой Таити! Нас и тут неплохо кормят.Record from the mic (macOS):
kesha record --out hello.wav, thenkesha hello.wav. Linux and Windows do not capture the microphone; pass an existing audio file instead. See docs/stt.md.Live dictation (darwin-arm64):
kesha record --live | pbcopyprints the transcript as you speak;--auto-stopends it after silence once VAD is installed. Ctrl-C still prints what you dictated. See docs/stt.md.Long / silence-heavy audio: install VAD (
kesha install --vad); Kesha auto-uses it past 120 s. Without VAD, long audio falls back to fixed ASR chunks. See docs/vad.md.Speaker diarization (darwin-arm64):
kesha install --diarize, thenkesha --json --speakers meeting.m4astamps each segment with aspeakerid. See docs/stt.md.Word-level timestamps (every platform):
kesha --json --timestamps audio.oggadds awordsarray to each segment. See docs/stt.md.Text-language detection: JSON and TOON results include
textLanguage, separate from the spokenaudioLanguage. See docs/stt.md.Written-form numbers:
--itnturns spelled-out English numbers into digits ("two hundred thirty two"→"232"). See docs/stt.md.A file name starting with
-: write it as./-file.wav. See docs/stt.md.
Text-to-speech
Kesha speaks back in 9 languages. Kokoro runs natively through FluidAudio CoreML/ANE on Apple Silicon and through ONNX on Linux and Windows; Russian uses Vosk-TTS, while macos-* system voices need no model download. On macOS Kesha picks the voice from the text's own language; on Linux and Windows, state the language with --lang <code> (or the voice with --voice <id>) — otherwise the engine default speaks.
kesha install --tts # English voices; sizes differ per platform — preview: kesha install --plan
kesha install --tts en ru # + Russian (+~937 MB, Vosk)
kesha say "Hello, world" > hello.wav
kesha say "Привет, мир" > privet.wav # auto-routes by language (macOS)
kesha say --lang ru "Привет, мир" > privet.wav # explicit — the Linux/Windows path
kesha say --voice ru-vosk-m02 "Голос в текст." > ru.wavOutput formats (--format, or inferred from the --out extension):
kesha say "Hello" --out hi.wav # WAV (default, uncompressed)
kesha say "Hello" --format ogg-opus --out hi.ogg # OGG/Opus — messenger voice notes
kesha say "Hello" --format flac --out hi.flac # FLAC — lossless, plays in every browser incl. Safari/iOSkesha say --list-voices lists the voices kesha knows; some need kesha install --tts <lang> before they speak. Voices, the full catalogue, macOS system voices, SSML, speaking rate (--rate, <prosody>), Russian word stress, and Russian/English abbreviation handling are all in docs/tts.md.
Languages
Speech-to-text spans 25 languages and text-to-speech 9 — full tables with codes, flags, and per-platform availability in docs/languages.md. Audio language detection identifies 107 languages.
Performance
Up to ~19x faster than Whisper on Apple Silicon (M2), ~10x faster on an x86 Linux CPU (~2.5x faster than faster-whisper)
Compared against Whisper large-v3-turbo, all engines auto-detecting language:
Full per-file breakdown (Russian + English): BENCHMARK.md. The chart is from an M2. The x86 figure comes from a GitHub-hosted ubuntu-latest runner (AMD EPYC, ONNX on CPU), where openai-whisper runs in FP32.
Other install methods
Except Nix, these install the Bun CLI wrapper; engine + models still download explicitly via kesha install.
Homebrew —
brew install drakulavich/tap/kesha-voice-kit· docs/distribution.mdLinux packages (
.deb/.rpm, x64) — published on stable releases, see docs/distribution.mdDocker (GHCR image) — docs/docker.md
Nix (
aarch64-darwin/x86_64-linux) — builds the engine from source (nix build github:drakulavich/kesha-voice-kit#kesha-engine). The fullkeshaCLI vianix run/nix profile installis not yet available — it needs a maintainer with Nix to populate a build hash (#946). · docs/distribution.mdShell completions + manpage —
kesha completions bash|zsh|fishandkesha manpageprint the packaged files to install wherever your shell expects them.
More
Architecture — runtime data flow, the models that ship, the CLI ↔ Rust engine boundary, model pinning, and where tests live.
Use cases — copy-paste recipes (transcribe a meeting, speak from OpenClaw, run offline, move the cache).
Product positioning — supported workflows, non-goals, maturity labels, platform matrix.
Changelog — every release, with the behaviour changes spelled out.
Diagnostics:
kesha status(--diskfor cache usage,--jsonfor scripts,--checkexits 1 unless the engine and ASR model are installed),kesha doctor,kesha support-bundle(redacted.tar.gzfor issues), andkesha logsproduce local, content-free diagnostics — see docs/diagnostic-logs.md. Every failure prints a stableerror [CODE]: …line and a documented process exit code.Moving the files: one variable,
KESHA_HOME, moves everything Kesha writes (models, logs, stats) into a directory of your choice — see where Kesha keeps its files.Scripting & CI:
--json(or--toon) for machine-readable output (each file'swarningsrepeats what stderr warned about it),--include-errors(with either) to get per-file failures on stdout alongside the results,--quiet/-qto silence progress, and--no-color(orNO_COLOR=1) for plain logs. Colors switch off automatically whenCI=true.Privacy / Local Stats: Stats are off by default and fully local. Opt in with
kesha stats enableto record content-free operational metrics in a local SQLite database — never networked, never storing audio, transcripts, text, or paths. Full commands & lifecycle: docs/local-stats.md.
Contributing
See CONTRIBUTING.md and the Decision log (why platform/model choices were made — and reversed). Dev setup: just dev-setup (Bun, Rust, nextest, platform libs).
License
Made with 💛🩵 and 🥤 energy under MIT License
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
AI voice generation: text-to-speech and voice cloning from any MCP client.
MCP server for Speech-to-Text
Remote text-to-speech MCP server with text_to_speech and list_voices tools. Free plan.
Bambara AI over MCP: text-to-speech, transcription and translation (Bamanankan + more).
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceLocal-first speech-to-text and text-to-speech MCP server. Hot-swappable engines via config.yaml — no code changes, no API keys required.2MIT
- AlicenseAqualityDmaintenanceLocal, private audio transcription MCP server enabling AI agents to transcribe audio files entirely on-device without uploading data.3MIT
- AlicenseNot gradedqualityBmaintenanceLocal voice and AI platform for macOS offering speech recognition, speech synthesis, MLX-based inference, OpenAI-compatible APIs, and MCP tools for use as an assistant or integration gateway.MIT
- AlicenseNot gradedqualityCmaintenanceLocal-first voice I/O for MCP clients, enabling hands-free dictation, spoken responses, and voice-based Q&A with coding agents.11MIT