🎙️ whisper-telegram-mcp
转录与语音合成 —— 通过 Telegram 为 Claude 提供双向语音能力

一个 MCP 服务器,通过 Telegram 赋予 Claude 双向语音能力:使用 Whisper 转录接收到的语音消息,并以合成语音进行回复。兼容 Claude Desktop、Claude Code 以及任何支持 MCP 的客户端。
🚀 快速开始
⚡ 使用 Claude Code 在 30 秒内完成配置
这是最快的上手方式 —— 只需告诉 Claude Code 帮你配置即可:
- 添加到
.mcp.json(Claude Code)或 claude_desktop_config.json(Claude Desktop):
{
"mcpServers": {
"whisper-telegram-mcp": {
"command": "uvx",
"args": ["whisper-telegram-mcp"],
"env": {
"TELEGRAM_BOT_TOKEN": "your-bot-token-here"
}
}
}
}
- 重启 Claude 并说:"Set up my Telegram bot for voice transcription" —— Claude 会引导你通过 BotFather 创建机器人并完成全部配置。
📦 使用 uvx 一键运行
uvx whisper-telegram-mcp
无需安装 —— uvx 会处理一切。
🐍 或使用 pip 安装
pip install "whisper-telegram-mcp[all]"
whisper-telegram-mcp
✨ 主要特性
- 转录本地音频文件 —— 支持 OGG、WAV、MP3、FLAC 等多种格式
- 转录 Telegram 语音消息 —— 传入
file_id,返回文本
- 将文本合成为语音消息 —— 合成语音并以 OGG 格式返回(在 Telegram 中显示为原生语音消息)
- 两种转录后端 —— 本地 faster-whisper(免费、隐私安全)或 OpenAI Whisper API(云端)
- 自动模式(auto) —— 优先尝试本地后端,失败时回退到 OpenAI
- 语言检测 —— 自动检测,或指定 ISO-639-1 语言代码
- 词级时间戳 —— 可选的细粒度计时
📋 前提条件
| 功能 |
要求 |
| 转录(本地) |
无 —— faster-whisper 已通过 [local] 附加依赖打包 |
| 转录(云端) |
环境变量 OPENAI_API_KEY |
| 语音回复 —— Kokoro(最佳音质) |
需要 Docker —— 运行 docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:latest |
| 语音回复 —— OpenAI TTS(回退方案) |
环境变量 OPENAI_API_KEY |
| 语音回复 —— macOS say(最终兜底) |
仅限 Mac,无需配置 |
⚠️ 重要提示
Kokoro 依赖 Docker。 如果 Docker 未运行,语音回复会自动回退到 OpenAI TTS 或 macOS say。
🤖 Telegram 机器人配置
- 打开 Telegram,向 @BotFather 发送消息
- 发送
/newbot 并按照提示创建机器人
- 复制 token(形如
1234567890:ABCdef...)
- 将
TELEGRAM_BOT_TOKEN 添加到 MCP 配置的环境变量中(见下文)
- 向你的机器人发送消息即可开始 —— 它只会响应已授权的用户
💡 使用建议
Claude Telegram 插件负责访问控制。关于配对/白名单的设置,请参阅其官方文档。
🔌 集成配置
Claude Desktop
添加到 Claude Desktop 配置文件(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"whisper-telegram-mcp": {
"command": "uvx",
"args": ["whisper-telegram-mcp"],
"env": {
"WHISPER_MODEL": "base",
"WHISPER_BACKEND": "auto",
"TELEGRAM_BOT_TOKEN": "your-bot-token-here"
}
}
}
}
Claude Code
添加到项目的 .mcp.json:
{
"mcpServers": {
"whisper-telegram-mcp": {
"command": "uvx",
"args": ["whisper-telegram-mcp"],
"env": {
"WHISPER_MODEL": "base",
"WHISPER_BACKEND": "auto",
"TELEGRAM_BOT_TOKEN": "your-bot-token-here"
}
}
}
}
🛠️ 工具列表
| 工具 |
说明 |
transcribe_audio |
将本地音频文件(OGG、WAV、MP3 等)转录为文本 |
transcribe_telegram_voice |
通过 file_id 下载并转录 Telegram 语音消息 |
speak_text |
将文本转换为语音 → OGG/Opus 文件(在 Telegram 中显示为语音消息) |
list_models |
列出可用的 Whisper 模型大小,附带速度/准确率信息 |
check_backends |
检查哪些后端(local/OpenAI)可用且已配置 |
transcribe_audio
file_path: str # 音频文件的绝对路径
language: str | None # ISO-639-1 代码(例如 "en"),None 表示自动检测
word_timestamps: bool # 是否包含词级时间戳(默认:false)
transcribe_telegram_voice
file_id: str # Telegram 语音消息的 file_id
bot_token: str | None # 机器人 token(默认回退到 TELEGRAM_BOT_TOKEN 环境变量)
language: str | None # ISO-639-1 代码,None 表示自动检测
word_timestamps: bool # 是否包含词级时间戳(默认:false)
speak_text
将文本转换为 OGG/Opus 音频文件,会自动选择当前可用的最佳 TTS 后端。
text: str # 要合成的文本
voice: str # 语音名称(默认:"af_sky")
output_path: str|None # 输出 .ogg 文件的可选路径
🎵 TTS 后端(按优先级排序)
| 后端 |
成本 |
音质 |
配置 |
| Kokoro(本地) |
免费 |
自然、高音质 |
需手动启动(见下文) |
| OpenAI TTS(云端) |
约 $0.015/千字符 |
高音质 |
环境变量 OPENAI_API_KEY |
| macOS say(兜底) |
免费 |
机械音 |
仅限 Mac,无需配置 |
在 auto 模式(默认)下,服务器会依次尝试 Kokoro、OpenAI、macOS say。可通过环境变量 TTS_BACKEND 进行配置。
🐳 在本地启动 Kokoro
Kokoro FastAPI 并未发布在 PyPI 上 —— 需要在启动 MCP 服务器之前手动启动:
docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:latest
docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-gpu-mac:latest
git clone https://github.com/remsky/Kokoro-FastAPI && cd Kokoro-FastAPI && ./start-cpu.sh
启动后,MCP 服务器会自动在 http://127.0.0.1:8880/v1 检测到它。可通过环境变量 KOKORO_BASE_URL 覆盖该地址。
🎤 Kokoro 语音(主要)
| 语音 |
口音 |
风格 |
af_sky |
美式 |
女声(默认) |
af_bella |
美式 |
女声 |
af_sarah |
美式 |
女声 |
af_nicole |
美式 |
女声 |
am_adam |
美式 |
男声 |
am_michael |
美式 |
男声 |
bf_emma |
英式 |
女声 |
bf_isabella |
英式 |
女声 |
bm_george |
英式 |
男声 |
bm_lewis |
英式 |
男声 |
🎤 OpenAI 语音(回退方案)
| 语音 |
风格 |
alloy |
中性 |
echo |
男声 |
fable |
叙事风格 |
onyx |
低沉男声 |
nova |
女声 |
shimmer |
柔和女声 |
回退时,Kokoro 的语音名称会自动映射到最接近的 OpenAI 或 macOS 语音。
📤 返回值
{
"file_path": "/tmp/tmpXXX.ogg",
"size_bytes": 16555,
"backend": "kokoro",
"voice": "af_sky",
"success": true,
"error": null
}
将返回的 file_path 作为 Telegram 附件发送,它便会以原生语音消息的形式呈现。
📄 转录响应格式
所有转录工具均返回以下格式:
{
"text": "Hello, this is a voice message.",
"language": "en",
"language_probability": 0.98,
"duration": 3.5,
"segments": [
{"start": 0.0, "end": 3.5, "text": "Hello, this is a voice message."}
],
"backend": "local",
"success": true,
"error": null
}
⚙️ 配置项
所有配置均通过环境变量完成:
| 变量 |
默认值 |
说明 |
WHISPER_BACKEND |
auto |
auto、local 或 openai |
WHISPER_MODEL |
base |
Whisper 模型大小(见下文) |
OPENAI_API_KEY |
— |
使用 openai 转录和 TTS 后端时为必填 |
TELEGRAM_BOT_TOKEN |
— |
使用 transcribe_telegram_voice 时为必填 |
WHISPER_LANGUAGE |
自动检测 |
ISO-639-1 语言代码 |
TTS_BACKEND |
auto |
auto、kokoro、openai 或 macos |
TTS_VOICE |
af_sky |
speak_text 的默认语音(Kokoro 语音名称) |
KOKORO_BASE_URL |
http://127.0.0.1:8880/v1 |
Kokoro FastAPI 基础 URL |
🔧 工作原理
MCP Client (Claude)
|
[MCP stdio]
|
whisper-telegram-mcp
/ | \
/ | \
transcribe_audio transcribe_ speak_text
telegram_voice |
| | auto_tts()
| [Bot API DL] / | \
+--------+------+ Kokoro OpenAI macOS
| (local) (cloud) (say)
auto_transcribe() |
/ \ .ogg file
LocalBackend OpenAIBackend
(faster-whisper) (Whisper API)
- Claude 通过 MCP(stdio 传输)发送工具调用
- 对于 Telegram 语音消息,通过 Bot API 下载文件
auto_transcribe() 选择当前可用的最佳转录后端
auto_tts() 选择当前可用的最佳 TTS 后端(Kokoro → OpenAI → macOS)
- 结果以结构化 JSON 返回
⚖️ 本地方案 vs OpenAI 方案
|
本地(faster-whisper) |
OpenAI API |
| 成本 |
免费 |
$0.006/分钟 |
| 隐私 |
所有数据保留在设备本地 |
音频发送至 OpenAI |
| 速度 |
视模型而定,约 1-10 秒 |
约 1-3 秒 |
| 配置 |
自动(首次使用下载模型) |
需要 OPENAI_API_KEY |
| 准确率 |
使用 base 或更大模型时表现出色 |
出色 |
| 离线 |
支持 |
不支持 |
📊 模型大小
| 模型 |
参数量 |
速度 |
准确率 |
显存 |
tiny |
39M |
最快 |
最低 |
~1GB |
base |
74M |
快 |
良好 |
~1GB |
small |
244M |
中等 |
较好 |
~2GB |
medium |
769M |
慢 |
高 |
~5GB |
large-v3 |
1550M |
最慢 |
最高 |
~10GB |
turbo |
~800M |
快 |
高 |
~6GB |
纯英文变体(tiny.en、base.en、small.en、medium.en)在英文场景下准确率略高。
🔒 隐私与数据
- 本地后端(faster-whisper):音频保留在你的设备上,任何数据都不会离开本机。
- OpenAI 后端:音频将发送至 OpenAI API,遵循其数据保留政策
- 临时文件:从 Telegram 下载的音频会写入
/tmp,并在转录完成后立即删除
- 日志:仅输出到 stderr —— 任何音频内容或凭据都不会被记录到日志
🧑💻 开发
git clone https://github.com/abid-mahdi/whisper-telegram-mcp.git
cd whisper-telegram-mcp
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/ -v -m "not integration"
pytest tests/ -m integration -v
pytest tests/ --cov=src/whisper_telegram_mcp --cov-report=term-missing
🔍 MCP Inspector
uvx mcp dev src/whisper_telegram_mcp/server.py
🤝 贡献指南
- Fork 本仓库
- 创建特性分支(
git checkout -b feat/amazing-feature)
- 运行测试(
pytest tests/ -v -m "not integration")
- 使用 Conventional Commits 规范提交(
feat:、fix:、docs: 等)
- 提交 Pull Request
📄 许可证
MIT