语音MCP服务器
可以在Claude Code中进行语音对话的MCP服务器。
- 单目标跟踪:MLX Whisper(Apple Silicon优化)
- 文本转语音:Kokoro(多语言支持:日语、英语、中文等)
- 语音活动检测:Silero VAD+RMS双过滤器
当前代码 韩语输入→日语输出硬编码为。 更改为其他语言的步骤 语言更改指南 请参阅部分。
要求
- macOS(苹果硅M1/M2/M3)
- Python 3.11或更高版本
- Claude 代码命令行界面
- 麦克风(MacBook内置麦克风或外置麦克风)
安装
1.存储库克隆
git clone https://github.com/jeonghyeon-net/voice-mcp-demo.git
cd voice-mcp-demo2.安装Python3.11(如果没有)
brew install python@3.113.创建和激活虚拟环境
python3.11 -m venv venv
source venv/bin/activate4.安装依赖性
pip install -r requirements.txt5.下载型号
python setup_models.py⚠️ 必需:使用Claude Code前请务必运行。 提前下载Whisper、Kokoro TTS和Silero VAD型号。 首次运行时下载约2-3 GB。
6.确认安装
# VAD 테스트 (마이크 테스트)
python test_vad.py换句话说,应该显示阴性概率。
MCP设置
~/.mcp.json 创建或修改文件:
{
"mcpServers": {
"voice": {
"command": "/경로/voice-mcp-demo/venv/bin/python",
"args": ["/경로/voice-mcp-demo/voice_mcp.py"]
}
}
}/경로/请将更改为实际路径。使用方法
在Claude Code中:
> listen输入后,将启动语音识别模式。
工具
| 工具 | 说明 |
|---|---|
listen() | 用麦克风听语音(韩语) |
speak(text) | 用日语TTS回复 |
listen_fixed(duration) | 固定时间录音 |
流
listen输入→哔哔声后说话- Claude用日语回答(
speak) - 继续或结束对话
验证MCP服务器注册
Claude Code运行后 /mcp 输入:
> /mcp
✓ voice (connected)voice如果已连接,则准备就绪。
对话示例
> listen
⏺ voice - listen (MCP)
⎿ { "result": "[사용자]: 안녕하세요\n\n⚠️ ..." }
⏺ voice - speak (MCP)(text: "こんにちは!何かお手伝いできますか?")
⎿ { "result": "→ listen() 호출하세요" }
⏺ voice - listen (MCP)
⎿ { "result": "[사용자]: 오늘 날씨 어때?\n\n⚠️ ..." }
...结束语音对话
- 说“结束”、“拜拜”、“谢谢”等,Claude就会结束对话。
- 或Ctrl+C强制退出
- 超时(5分钟内不说话自动关闭)
提示
- 首次运行时 加载模型需要一段时间(TTS介绍“初化中”)
- 说话的时候 比夫酒后等0.5秒左右再说
- 话结束的时候 安静1.5秒后开始识别
- Claude回答后 自动重听模式(可能需要手动输入listen)
设定值
voice_mcp.py可在中调整:
| 设置 | 默认值 | 说明 |
|---|---|---|
VAD_THRESHOLD 0.85语音检测阈值 | ||
RMS_THRESHOLD 0.02卷阈值 | ||
SILENCE_DURATION 1.5秒沉默后结束时间 | ||
timeout_seconds 300秒最大等待时间 |
语言更改指南
默认值为 韩语输入→日语输出是。要更改为其他语言,请:
更改为英语TTS
voice_mcp.py 修改:
# 1. TTS 언어 코드 변경 (get_tts 함수)
_tts = KPipeline(lang_code='a', repo_id='hexgrad/Kokoro-82M')
# 'a' = 미국 영어, 'b' = 영국 영어, 'j' = 일본어
# 'k' = 한국어, 'z' = 중국어, 'f' = 프랑스어 등
# 2. 음성 변경 (speak 함수의 기본값)
def speak(text: str, voice: str = "af_heart", speed: float = 1.0) -> str:
# 영어 음성: af_heart, af_bella, am_adam, am_michael 등Kokoro支持的语言
代码语言 |------|------| | a |美国英语| | b |英国英语| | j |日语| | z |中文| | f |法语| | e |西班牙语| | i |意大利语| | p |葡萄牙语| | h |印地语|
参考:Kokoro 82M不支持韩语TTS。如果需要韩语语音输出,请使用其他TTS引擎(Edge TTS、Google TTS等)。
英语语音列表
语音说明 |------|------| | af_heart |美国女性(默认推荐)| | af_bella |美国女性| | af_sarah |美国女性| | am_adam |美国男性| | am_michael |美国男性| | bf_emma |英国女性| | bm_george |英国男性|
speak()更改提示
让Claude用英语回答 speak 修改函数的docstring:
@mcp.tool()
def speak(text: str, voice: str = "af_heart", speed: float = 1.0) -> str:
"""
Speak in English.
⚠️ Text must be in English only!
Args:
text: English text
voice: Voice
speed: Speed
Returns:
Playback complete
"""更改输入语言
listen() 更改函数的默认language参数:
def listen(timeout_seconds: int = 300, language: str = "en") -> str:
# "ko" = 한국어, "en" = 영어, "ja" = 일본어完整的英语设置示例
# get_tts()
_tts = KPipeline(lang_code='a', repo_id='hexgrad/Kokoro-82M')
# listen()
def listen(timeout_seconds: int = 300, language: str = "en") -> str:
# speak()
def speak(text: str, voice: str = "af_heart", speed: float = 1.0) -> str:
"""Speak in English. Text must be in English only!"""动作原理
整个流程
[사용자] --말함--> [마이크] --오디오--> [Silero VAD] --음성구간--> [Whisper] --텍스트--> [Claude]
|
[사용자] 0.85 and rms > 0.022.语音识别(STT)
# MLX Whisper - Apple Silicon GPU 가속
result = mlx_whisper.transcribe(
audio_data,
path_or_hf_repo="mlx-community/whisper-medium-mlx",
language="ko" # 한국어
)3.语音合成(TTS)
# Kokoro TTS - 일본어 음성 생성
tts = KPipeline(lang_code='j', repo_id='hexgrad/Kokoro-82M')
for _, _, audio in tts(text, voice='jf_alpha', speed=1.0):
sd.play(audio, 24000)MCP通信
Claude Code voice_mcp.py (FastMCP 서버)
|
├── listen() # 도구 1
├── speak() # 도구 2
└── listen_fixed() # 도구 3模型上下文协议(MCP)是允许Claude Code调用外部工具的协议。 ~/.mcp.json在注册服务器后,Claude可以使用这些工具。
项目结构
voice-mcp-demo/
├── voice_mcp.py # MCP 서버 메인
├── setup_models.py # 모델 사전 다운로드
├── echo.py # 독립 실행 버전 (Ollama 연동)
├── run.sh # echo.py 실행 스크립트
├── test_vad.py # VAD 테스트 도구
├── requirements.txt # 의존성
└── README.md测试
# VAD 테스트
./venv/bin/python test_vad.py
# 독립 실행 (echo.py)
./run.sh故障排除
无法识别语音
- 检查麦克风权限
- 降低RMS_THRESHOLD(0.01)
对背景噪音有反应
- VAD_THRESHOLD提高(0.9)
- 提高RMS_THRESHOLD(0.03)
MCP连接失败
- 检查python路径
python -m py_compile voice_mcp.py语法检查
许可证
麻省理工学院
