io.github.boska/vox
Native macOS MCP server for voice I/O — Swift binary, SFSpeechRecognizer + ElevenLabs TTS.
Open source Open in the app JSON README (API)
About
Native macOS MCP server for voice I/O — Swift binary, SFSpeechRecognizer + ElevenLabs TTS.
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- boska
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 1.0.0
- Stars
- 1
- Last push
- 2026-05-23T00:38:59Z
- Repository state
- ativo
- Language
- Swift
- Added
- 2026-08-29 03:02:32
- Updated
- 2026-08-29 03:02:32
- Origin id
io.github.boska/vox
README
# vox
**A native macOS MCP server that gives Claude a voice.**
Built in Swift. No Node.js. No Python. No Electron. Just a single binary.
```json
{
"mcpServers": {
"vox": {
"command": "/path/to/vox"
}
}
}
```
Then just say: `listen` — and Claude hears you.
---
## Tools
| Tool | What it does |
|------|-------------|
| `listen` | Activates the mic, waits for you to speak, returns transcript + detected language when silence is detected |
| `speak` | Speaks text aloud — ElevenLabs TTS with automatic fallback to macOS system voice |
## Why Swift + macOS only
- **AVFoundation** — native mic capture, zero overhead
- **SFSpeechRecognizer** — Apple on-device speech recognition, works offline, 50+ languages
- **NLLanguageRecognizer** — automatic language detection per utterance
- **AVSpeechSynthesizer** — built-in TTS fallback, no API key needed
- Single ~200KB binary. Zero npm install. Zero Python venv.
## Requirements
- macOS 13+
- Microphone set as default in System Settings → Sound → Input
- Microphone + Speech Recognition permission for your terminal app
- Optional: `ELEVENLABS_API_KEY` in `~/.claude/.env` for high-quality multilingual TTS
## Install
### Option 1: Prompt for Claude Code
Copy and paste this into [Claude Code](https://claude.ai/code):
```
Install vox (native macOS voice input/output MCP server):
1. Download the code-signed binary to ~/vox:
curl -L https://github.com/boska/vox/releases/download/v1.1.0/vox-1.1.0-darwin-arm64 -o ~/vox && chmod +x ~/vox
2. Add to ~/.claude.json in the mcpServers section:
{
"mcpServers": {
"vox": {
"command": "/Users/$(whoami)/vox"
}
}
}
3. Restart Claude Code
4. Test it by saying: listen
```
Claude will handle the download, configuration, and restart.
### Option 2: Manual Install (Pre-built Binary)
```bash
curl -L https://github.com/boska/vox/releases/download/v1.1.0/vox-1.1.0-darwin-arm64 -o ~/vox && chmod +x ~/vox
```
Then add to `~/.claude.json`:
```json
{
"mcpServers": {
"vox": {
"command": "/Users/$(whoami)/vox"
}
}
}
```
Restart Claude Code.
### Option 3: Build from Source
```bash
git clone https://github.com/boska/vox
cd vox
swift build -c release --product vox
```
Add to `~/.claude.json`:
```json
{
"mcpServers": {
"vox": {
"command": "/path/to/vox/.build/release/vox"
}
}
}
```
Restart Claude Code.
## Voice
Default TTS voice is **Hana** via ElevenLabs (`eleven_multilingual_v2`). Supports Chinese, English, Czech, Vietnamese, and 20+ languages in the same voice. Without an ElevenLabs key, falls back to macOS system voice automatically.
## How it works
```
Claude Code
↓ JSON-RPC 2.0 over stdio
vox binary
↓ ↑
AVAudioEngine AVSpeechSynthesizer
SFSpeechRecognizer ElevenLabs API
NLLanguageRecognizer
```
No ports. No sockets. No daemon. Just stdin/stdout.
## Troubleshooting
**"No speech detected"** — speak within ~1s of calling listen, VAD cuts off after 0.8s silence.
**No default input device** — Mac mini has no built-in mic. Connect USB/Bluetooth mic or iPhone via Continuity Camera, set default in System Settings → Sound → Input.
**ElevenLabs silent** — add `ELEVENLABS_API_KEY=sk-...` to `~/.claude/.env`, or leave it out to use system voice.