🎤 MCP语音服务器
AI编码代理的免费本地优先语音。 与Claude Code、KiloCode、Codex或任何兼容MCP的CLI交谈——由您机器上运行的Whisper+Kokoro提供支持。不需要API密钥。没有云。没有成本。
需要云语音吗?只需一个命令即可动态切换提供程序。
# In Claude Code chat:
/voice # speak → auto-transcribe (free, local)
/voice --provider elevenlabs # switch to ElevenLabs mid-conversation
/voice --provider openai --voice shimmer # or OpenAI
/voice --provider local # back to free______________________________________________________________________
这是什么
MCP(模型上下文协议)服务器,为任何兼容的AI编码代理提供语音接口。它处理:
- 语音转文本(STT) --Whisper将您的声音转录为文本
- 文本转语音(TTS) --Kokoro会把特工的回应告诉你
- 语音活动检测(VAD) --Silero VAD自动检测您何时停止说话
- 提供商切换 --运行时本地和云提供商之间的交换
它作为CLI工具自动生成的后台进程运行。你从不手动启动它。
为什么
- macOS听写已损坏且不可靠
- 云语音API需要花钱,并将您的音频发送给第三方
- 现有的语音工具没有与编码代理集成
- 你应该能够免提与你的AI配对程序员交谈
______________________________________________________________________
提供商
| 提供商 | STT | TTS | 成本 | 最适合 |
|---|---|---|---|---|
| 本地 (默认) | 耳语 | 科科罗 | 0美元/月 | 日常使用、隐私、离线 |
| 十一实验室 | Whisper\* | ElevenLabs API | ~1.50美元/月 | 自然语音,远程SSH |
| 开放人工智能 | OpenAI Whisper API | OpenAI TTS | 约0.45美元/月 | 最佳STT准确性 |
*\*ElevenLabs模式仍然使用本地Whisper进行STT以节省资金。*
本地优先策略的年度成本: 0-18美元/年.
______________________________________________________________________
建筑
┌──────────────────────────────────────────────────────────┐
│ MCP Voice Server (auto-spawned) │
│ │
│ Transport: stdio (Claude Code) or HTTP :9000 (debug) │
│ │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ LOCAL │ │ ELEVENLABS │ │ OPENAI │ │
│ │ Whisper+ │ │ Whisper+ │ │ OpenAI+ │ │
│ │ Kokoro │ │ 11Labs TTS │ │ OpenAI TTS │ │
│ └────────────┘ └────────────┘ └────────────┘ │
│ ↕ fallback chain: local → elevenlabs → openai │
│ │
│ Audio Pipeline: │
│ Mic (sox) → VAD (Silero) → STT → Agent → TTS → Speaker │
└──────────────────────────────────────────────────────────┘
↑ ↑ ↑
Claude Code KiloCode Codex / Any MCP Client______________________________________________________________________
快速开始
# 1. Clone the repo
git clone https://github.com/shane9coy/sc-mcp-voice-server.git
cd mcp-voice-server
# 2. Install dependencies
bash install.sh
# 3. Add to your AI coding tool (see INSTALL.md for full details)
# Add to .claude/settings.json:
# "voice": { "command": "node", "args": ["/path/to/mcp-voice-server/src/index.js"] }
# 4. Make sure Whisper + Kokoro are running
# Whisper: http://localhost:2022
# Kokoro: http://localhost:8880
# 5. Test it
node src/index.js --http
curl http://localhost:9000/api/health→ See 安装.md 获取完整的分步指南。
______________________________________________________________________
用法
使用克劳德代码
claude --voice然后在聊天中:
/voice # Listen → transcribe → return text
/voice speak "Hello world" # Speak text aloud
/voice --provider elevenlabs # Switch to ElevenLabs
/voice --provider local # Switch back to free
/voice status # Show health of all providers使用KiloCode/OpenCode
kilocode --voice相同 /voice 命令工作。
独立(HTTP模式)
# Start the HTTP debug server
node src/index.js --http
# Health check
curl http://localhost:9000/api/health
# Speak
curl -X POST http://localhost:9000/api/speak \
-H 'Content-Type: application/json' \
-d '{"text": "Voice server online."}'
# Switch provider
curl -X POST http://localhost:9000/api/switch \
-H 'Content-Type: application/json' \
-d '{"provider": "elevenlabs"}'
# Listen (records mic, transcribes, returns text)
curl -X POST http://localhost:9000/api/listen远程SSH
# Cloud providers auto-detected when SSH'd
ssh user@remote
voice --provider elevenlabs # works without local services
# Or tunnel local services through SSH
ssh -L 2022:localhost:2022 -L 8880:localhost:8880 user@remote
voice --provider local # local Whisper/Kokoro via tunnel______________________________________________________________________
MCP工具
服务器公开了任何MCP客户端都可以调用的5个工具:
| 工具 | 说明 |
|---|---|
voice_listen | 录音麦克风→ VAD自动停止→ STT → 返回成绩单 |
voice_speak | 文本→ TTS → 播放音频 |
voice_switch | 在运行时更改提供者、型号或语音 |
voice_status | 健康检查所有提供者+显示当前配置 |
voice_detect_intent | 解析成绩单→ 通往正确代理的路线 |
语音监听
{
"max_duration_seconds": 30,
"language": "en",
"use_vad": true,
"model": "base"
}
// Returns: { "transcript": "what you said", "provider": "local", "model": "base" }语音_峰值
{
"text": "Hello world",
"voice": "af_heart",
"model": "kokoro-v0.19"
}
// Returns: { "success": true, "provider": "local", "voice": "af_heart" }语音开关
{
"provider": "elevenlabs",
"model": "eleven_turbo_v2",
"voice": "antoni"
}
// Returns: { "success": true, "activeProvider": "elevenlabs", "info": {...} }______________________________________________________________________
配置
配置文件位置
~/.voice-mcp/config.json --首次运行时自动创建。
超越优先级(最高获胜)
- CLI标志:
--provider elevenlabs --model eleven_turbo_v2 --voice antoni - 项目配置:
.claude/voice-config.json或.opencode/voice-config.json - 用户配置:
~/.voice-mcp/config.json - 内置默认值
默认配置
{
"defaultProvider": "local",
"vad": {
"enabled": true,
"silenceThresholdMs": 800,
"speechPadMs": 300
},
"audio": {
"sampleRate": 16000,
"channels": 1,
"format": "wav",
"captureDevice": "default",
"playbackCommand": "auto"
},
"providers": {
"local": {
"stt": { "url": "http://localhost:2022/v1/audio/transcriptions", "model": "base" },
"tts": { "url": "http://localhost:8880/v1/audio/speech", "model": "kokoro-v0.19", "voice": "af_heart" },
"requiresAuth": false
},
"elevenlabs": {
"stt": { "url": "http://localhost:2022/v1/audio/transcriptions", "model": "base" },
"tts": { "url": "https://api.elevenlabs.io/v1", "model": "eleven_monolingual_v1", "voice": "rachel" },
"requiresAuth": true,
"envKey": "ELEVENLABS_API_KEY"
},
"openai": {
"stt": { "url": "https://api.openai.com/v1/audio/transcriptions", "model": "whisper-1" },
"tts": { "url": "https://api.openai.com/v1/audio/speech", "model": "tts-1", "voice": "nova" },
"requiresAuth": true,
"envKey": "OPENAI_API_KEY"
}
},
"fallbackChain": {
"local": ["local", "elevenlabs", "openai"],
"elevenlabs": ["elevenlabs", "local", "openai"],
"openai": ["openai", "elevenlabs", "local"]
}
}更改默认值
编辑 ~/.voice-mcp/config.json 要更改默认模式或语音:
# Example: switch default local Whisper model to "medium" for better accuracy
# Edit ~/.voice-mcp/config.json → providers.local.stt.model = "medium"或者通过创建来覆盖每个项目 .claude/voice-config.json 在您的项目根目录中。
______________________________________________________________________
ElevenLabs的声音
| 语音 | ID | 风格 |
|---|---|---|
| 瑞秋 | 21m00Tcm4TlvDq8ikWAM | 专业、热情 |
回家。 AZnzlk1XvdvUBZXUNXHP | 强壮、精力充沛 | |
| 贝拉 | EXAVITQu4vr4xnSDxMaL | 富有表现力,温暖 |
安东尼 。 ErXwobaYp3c4kHULIAXi | 深而温暖 | |
| 艾莉 | MF3mGyEYCHzMOFVexZHj | 年轻、聪明 |
| 乔希 | TxGEqnHWrfWFTfGW9XjX | 深度、叙事性 |
| 山姆 | yoZ06aMxZJJ28mfd3POQ | 急躁、充满活力 |
/voice --provider elevenlabs --voice antoni______________________________________________________________________
OpenAI语音
可用语音: alloy, echo, fable, onyx, nova, shimmer
可用型号: tts-1 (快速、廉价), tts-1-hd (更高的质量,2倍的成本)
/voice --provider openai --model tts-1-hd --voice shimmer______________________________________________________________________
项目结构
mcp-voice-server/
├── README.md ← you are here
├── INSTALL.md ← step-by-step install guide
├── LICENSE
├── package.json
├── install.sh ← automated dependency installer
├── vad-record.py ← Python VAD helper script
├── src/
│ ├── index.js ← entry point (stdio MCP or HTTP)
│ ├── mcp-server.js ← MCP tool definitions + handlers
│ ├── http-server.js ← Express REST API (standalone/debug)
│ ├── config.js ← config loader with merge logic
│ ├── providers/
│ │ ├── base-provider.js ← abstract interface
│ │ ├── local-provider.js ← Whisper + Kokoro
│ │ ├── elevenlabs-provider.js ← ElevenLabs API
│ │ └── openai-provider.js ← OpenAI API
│ ├── audio/
│ │ ├── capture.js ← mic recording via sox
│ │ ├── vad.js ← Silero VAD integration
│ │ ├── playback.js ← cross-platform audio playback
│ │ └── convert.js ← ffmpeg format conversion
│ └── utils/
│ ├── health.js ← service health checks
│ ├── logger.js ← structured logging
│ └── errors.js ← custom error types
└── tests/
└── smoke-test.sh ← basic integration tests______________________________________________________________________
需求
| 依赖关系 | 版本 | 必需 | 目的 |
|---|---|---|---|
| Node.js | >=18 | ✅ | 服务器运行时 |
| Python 3 | >=3.9 | ✅ | VAD脚本 |
| sox | 任何 | ✅ | 麦克风捕获 |
| ffmpeg | 任何 | ✅ | 音频转换 |
| Whisper服务器 | 任何 | ✅ | 本地STT(本地主机:2022) |
| Kokoro服务器 | 任何 | ✅ | 本地TTS(本地主机:8880) |
| 火炬+silero vad | 任何 | ✅ | 语音活动检测 |
| Eleven LABS_API_KEY | - | 电梯标签\_ API_KEY❌ 可选 | ElevenLabs提供商 |
| OPENAI_API_KEY | - | ❌ 可选 | OpenAI提供程序 |
______________________________________________________________________
故障排除
| 问题 | 修复 |
|---|---|
Cannot connect to localhost:2022 | 启动Whisper服务器 |
Cannot connect to localhost:8880 | 启动您的Kokoro服务器 |
sox not found | brew install sox (macOS)或 apt install sox (Linux) |
ffmpeg not found | brew install ffmpeg (macOS)或 apt install ffmpeg (Linux) |
ELEVENLABS_API_KEY not set | export ELEVENLABS_API_KEY=your-key 在您的shell配置文件中 |
python3 not found | brew install python3 |
No speech detected | 检查配置中的麦克风权限+输入设备 |
| 克劳德代码中未显示语音工具 | 检查 .claude/settings.json 有语音MCP条目 |
| 提供程序开关不工作 | 检查是否为云提供程序设置了API密钥 |
______________________________________________________________________
贡献
PR欢迎。该架构旨在使添加新提供者变得容易——只需扩展即可 BaseProvider 并实施 transcribe(), speak(),以及 healthCheck().
______________________________________________________________________
许可证
麻省理工学院
