Voice Bridge

io.github.dwarmerdam由 GitHub 账号 dwarmerdam 发布v0.1.5更新于 Oct 24, 2026

Multi-engine TTS for AI coding assistants. 5 engines, free engine included.

已验证STDIO仅桌面开发者工具媒体与设计

概览

AI 生成的概览

本地文本转语音 MCP 服务器,让 AI 助手通过五种 TTS 引擎之一把回复朗读出来。

可以做什么
朗读文本,可为单次调用指定引擎;朗读前会过滤代码、密钥、文件路径、URL 和 Markdown,并在句子边界截断过长文本。在 auto、edge-tts、ElevenLabs、Kokoro、macOS say 和 espeak-ng 之间切换默认引擎。查看当前模式、当前引擎以及可用引擎。列出某个引擎提供的语音,省略时使用当前引擎。
适用场景
适合在有扬声器的桌面上使用编程助手并希望把回复读出来时使用,例如免手操作或无障碍场景,也适合想免 API 密钥使用免费神经网络语音的用户。
运行要求
以本地进程运行。需要 Python 3.10+ 和 pip;npm 包只是自动安装 Python 包的封装,仍需要 PATH 中有 Python 和 pip。需要音频输出和播放器:macOS 用 afplay,Linux 用 mpv 或 ffplay,Windows 用 ffplay 或 mpv。可选 ElevenLabs 密钥,存放在本地 .env 文件中;Kokoro 需下载约 200MB 模型。
安装前请注意
音频只在本地机器播放;无头服务器、容器、SSH 会话和 CI 环境通常没有声卡,朗读命令会静默失败。ElevenLabs 是付费引擎,需要在本地 .env 文件中保存 ELEVENLABS_API_KEY。Claude Code 插件会添加 Stop 钩子,可能自动朗读每条回复;常开模式同样如此,直到关闭。除非选择本地引擎,文本会发送到 edge-tts 或 ElevenLabs 云服务。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Voice Bridge,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

Voice Bridge

[PyPI] [CI]

Multi-engine text-to-speech for AI coding assistants. Speaks responses aloud from Claude Code, Cursor, or VS Code via a Claude Code plugin, MCP server, or CLI pipe.

bash
pip install ai-voice-bridge[edge]   # Install with free edge-tts enginevoice-bridge test                   # Verify audio outputvoice-bridge on                     # Enable always-on mode (optional)

Features

  • Free by default -- edge-tts uses Microsoft Neural voices, no API key needed
  • 5 engines -- edge-tts, ElevenLabs, Kokoro (local ONNX), macOS say, espeak-ng
  • Text safety filter -- strips code blocks, secrets, file paths, URLs, and markdown before speaking
  • Claude Code plugin -- Stop hook speaks responses automatically, MCP server for tool-based control
  • Voice discovery -- browse, filter by gender/locale, and preview voices interactively

Prerequisites

Voice Bridge is a Python package that plays audio on your local machine. It requires:

RequirementDetails
Python 3.10+python3 --version to check
pipUsually bundled with Python. On some Linux distros: sudo apt install python3-pip
Audio outputSpeakers or headphones — audio plays locally, not over a network
Audio player (Linux/Windows)macOS: built-in (afplay). Linux: mpv (preferred) or ffplay. Windows: ffplay (preferred) or mpv

Audio player fallback order: macOS uses afplay (always available). Linux tries mpv then ffplay. Windows tries ffplay then mpv.

Not supported: headless servers, Docker containers, SSH sessions, and CI runners typically lack audio output. Voice Bridge will install and run the MCP server, but speak commands will fail silently without an audio player and sound hardware.

Quick Start

Install

bash
# Recommended: edge-tts (free, 400+ voices)pip install ai-voice-bridge[edge]
# Or with all enginespip install ai-voice-bridge[all]
# Or minimal (macOS say / Linux espeak only)pip install ai-voice-bridge

Test

bash
voice-bridge test          # Speak a test phrasevoice-bridge engines       # List available enginesvoice-bridge setup         # Interactive setup wizard

The setup wizard walks you through: detecting installed engines, testing audio output, optionally entering an ElevenLabs API key (if the SDK is installed), writing default state, and showing Claude Code integration options.

Use

bash
# Pipe text to speechecho "Hello world" | vb-speak
# Choose an engineecho "Hello" | vb-speak --engine edge-ttsecho "Hello" | vb-speak --engine say
# Modesvoice-bridge on            # Always-on: every AI response spokenvoice-bridge off           # Off: use "speak" keyword for single responsesvoice-bridge status        # Show current mode and engine

Claude Code Integration

Option 1: Install as a Plugin (Recommended)

bash
claude plugin marketplace add Tomorrow-You/voice-bridgeclaude plugin install voice-bridge@voice-bridge

This installs the plugin with a Stop hook (auto-speaks responses), the /speak skill, and the MCP server. Auto-installs ai-voice-bridge[edge,mcp] on first session.

Option 2: Manual Hook Setup

Add to your .claude/settings.json:

json
{  "hooks": {    "Stop": [      {        "hooks": [          {            "type": "command",            "command": "bash -c 'VB_HOOK=$(python3 -c \"import voice_bridge; import pathlib; print(pathlib.Path(voice_bridge.__file__).parent / \\\"integrations\\\" / \\\"claude_hook.sh\\\")\" 2>/dev/null) && [ -f \"$VB_HOOK\" ] && bash \"$VB_HOOK\"'",            "timeout": 5          }        ]      }    ]  }}

Then add to your CLAUDE.md:

markdown
## Voice Bridge (TTS)- **NEVER** use `<speak>` tags unless the user's message starts with "speak"- When user starts with "speak", wrap your ENTIRE response in `<speak>...</speak>` tags- Strip the "speak" keyword before processing- Inside tags, write naturally -- no markdown, code blocks, or file paths

Option 2: Always-On Mode

Skip the <speak> tag convention entirely:

bash
voice-bridge on

Now every Claude response is spoken automatically. Toggle off with voice-bridge off.

Hook Details

The Stop hook runs in the background so it doesn't block Claude Code. It:

  • Extracts text from <speak> tags (single-turn mode) or the full response (always-on mode)
  • Truncates to 2,000 characters before speaking
  • Uses a fallback chain: configured engine > espeak > say
  • Logs to ~/.voice-bridge/voice-bridge.log (auto-rotated at 1MB, keeps 2 backups)
  • Runs vb-speak --stream for sentence-by-sentence playback

Engines

EngineCostQualitySetupPlatformDefault voice
edge-ttsFreeHigh (neural)pip install ai-voice-bridge[edge]Allen-US-GuyNeural
ElevenLabsPaidHighestpip install ai-voice-bridge[elevenlabs] + API keyAllGeorge (JBFqnCBsd6RMkjVDRZzb), model eleven_flash_v2_5
KokoroFreeGoodpip install ai-voice-bridge[kokoro] + model downloadAll (English only)bm_lewis
sayFreeBasicBuilt-inmacOSSamantha
espeakFreeBasicapt install espeak-ngLinuxen

When engine is set to auto (default), Voice Bridge picks the first available in this order: edge-tts > say > espeak > kokoro > elevenlabs. ElevenLabs is only considered "available" if the SDK is installed AND a valid API key is configured -- it will never be auto-selected without credentials.

Discovering Voices

bash
voice-bridge voices              # List voices for current enginevoice-bridge voices edge-tts     # List voices for a specific engine
# Filter by gender and/or localevoice-bridge voices edge-tts --gender Female --locale en-US
# Preview a specific voicevoice-bridge voices edge-tts --preview en-US-AriaNeural
# Interactively audition voices (next/select/quit after each)voice-bridge voices edge-tts --gender Female --locale en-US --preview
# Random sample of 3 voicesvoice-bridge voices edge-tts --sample 3 --preview

Filtering options: --gender (Male/Female) works with edge-tts and kokoro. --locale (e.g. en-US, en-GB) works with edge-tts and say. --sample N picks N random voices. All combine with --preview for interactive audition.

ElevenLabs preview uses free pre-recorded samples when available (no API credits consumed).

Switching Engines

bash
voice-bridge engine edge-tts     # Free neural voicesvoice-bridge engine elevenlabs   # Premium cloudvoice-bridge engine kokoro       # Local offlinevoice-bridge engine say          # macOS built-invoice-bridge engine espeak       # Linux built-invoice-bridge engine auto         # Best available (default)

ElevenLabs Setup

bash
pip install ai-voice-bridge[elevenlabs]voice-bridge setup  # Prompts for your ElevenLabs API key# Or manually: create ~/.voice-bridge/.env with ELEVENLABS_API_KEY=your-keyvoice-bridge engine elevenlabsvoice-bridge test

Kokoro Setup (Offline)

bash
pip install ai-voice-bridge[kokoro]# Download model files (~200MB) from:# https://github.com/thewh1teagle/kokoro-onnx/releases/tag/model-files-v1.0# Place in: ~/.voice-bridge/models/ (or $VOICE_BRIDGE_HOME/models/)voice-bridge engine kokorovoice-bridge test

Configuration

Voice Bridge stores configuration in ~/.voice-bridge/ (macOS), ~/.local/share/voice-bridge/ (Linux, respects XDG_DATA_HOME), or %APPDATA%\voice-bridge\ (Windows).

Override with the VOICE_BRIDGE_HOME environment variable.

FilePurpose
.envAPI keys (ElevenLabs)
.stateRuntime state (mode, engine, speed, voice)
models/Kokoro ONNX model files
voice-bridge.logHook execution logs (auto-rotated at 1MB, 2 backups)

State Variables

The .state file is a shell-sourceable key-value file. All values are optional — defaults apply if unset.

VariableDefaultDescription
VOICE_BRIDGE_MODEoffMode: off (single-turn) or always (always-on)
VOICE_BRIDGE_ENGINEautoEngine name or auto
VOICE_BRIDGE_EDGE_VOICEen-US-GuyNeuraledge-tts voice
VOICE_BRIDGE_EDGE_RATE+0%edge-tts rate (e.g. +30%, -10%)
VOICE_BRIDGE_ELEVENLABS_SPEED1.0ElevenLabs speed (0.7–1.2)
VOICE_BRIDGE_KOKORO_VOICEbm_lewisKokoro voice name
VOICE_BRIDGE_KOKORO_SPEED1.4Kokoro speed multiplier
VOICE_BRIDGE_SAY_RATE200macOS say words per minute
VOICE_BRIDGE_ESPEAK_RATE175espeak words per minute

Text Safety Filter

Before any text reaches the TTS engine, Voice Bridge strips:

  • Code blocks (fenced ``` and inline `)
  • Secrets: OpenAI/Anthropic keys (sk-...), GitHub tokens (ghp_, gho_), AWS keys (AKIA...), PEM private keys, 64+ char hex strings
  • File paths: Unix (/Users/..., /home/...) and Windows (C:\Users\...)
  • URLs: http:// and https://
  • Markdown: headers, bold/italic markers, list bullets, table rows

Text is truncated to 4,000 characters at the nearest sentence boundary (. ). The Claude hook applies a separate 2,000 character limit before passing text to vb-speak.

CLI Reference

bash
# Controlvoice-bridge on              # Always-on modevoice-bridge off             # Single-turn mode (default)voice-bridge status          # Show mode, engine, configvoice-bridge test            # Test audio outputvoice-bridge engines         # List all engines with install statusvoice-bridge setup           # Interactive setup wizard
# Engine configvoice-bridge engine [name]   # Get/set enginevoice-bridge voice [id]      # Set voice for current enginevoice-bridge voices [engine] # List available voicesvoice-bridge speed [val]     # Set engine speed (see below)
# Voice discoveryvoice-bridge voices edge-tts --gender Female --locale en-US  # Filtervoice-bridge voices edge-tts --preview en-US-AriaNeural      # Preview onevoice-bridge voices edge-tts --gender Female --preview       # Interactivevoice-bridge voices edge-tts --sample 3 --preview            # Random sample
# Pipe to speechecho "text" | vb-speak                    # Default engineecho "text" | vb-speak --engine edge-tts  # Specific engineecho "text" | vb-speak --voice Aria       # Override voice for this callecho "text" | vb-speak --stream           # Stream sentence-by-sentenceecho "text" | vb-speak --dry-run          # Print filtered text only

Streaming mode (--stream): reads stdin, splits text at sentence boundaries (. , ! , ? ), and speaks each sentence as it completes. For edge-tts, sentences are queued so the next one generates while the current one plays.

Speed Control

Each engine accepts a different speed format:

EngineFormatDefaultExample
edge-ttsPercentage string+0%voice-bridge speed +30%
elevenlabsFloat (0.7–1.2)1.0voice-bridge speed 1.1
kokoroPositive float1.4voice-bridge speed 1.8
sayWords per minute200voice-bridge speed 250
espeakWords per minute175voice-bridge speed 220

Speed applies to whichever engine is currently active. Check with voice-bridge speed (no value).

MCP Server

Voice Bridge includes an MCP (Model Context Protocol) server so any MCP-compatible tool can speak text aloud.

npm shim (npx ai-voice-bridge): The npm package is a thin wrapper that auto-installs the Python package. It requires Python 3.10+ and pip on your PATH. On startup it checks for audio players and warns if none are found. See Prerequisites for full requirements.

Setup with Claude Desktop

Add to your claude_desktop_config.json:

json
{  "mcpServers": {    "voice-bridge": {      "command": "python3",      "args": ["-m", "voice_bridge.mcp.server"]    }  }}

Or after npm publish, use the npm shim:

json
{  "mcpServers": {    "voice-bridge": {      "command": "npx",      "args": ["ai-voice-bridge"]    }  }}

Setup with Cursor / VS Code

Add the same MCP server config in your editor's MCP settings. The config format is the same as Claude Desktop.

Setup with Claude Code

bash
claude mcp add voice-bridge -- python3 -m voice_bridge.mcp.server

MCP Tools

ToolParametersDescription
speaktext (required), engine (optional)Speak text aloud. Optionally override engine for this call.
set_enginename (required)Switch the default TTS engine (auto, edge-tts, elevenlabs, kokoro, say, espeak)
get_status(none)Show current mode, engine, and available engines
list_voicesengine (optional)List available voices. Defaults to current engine if omitted.

Install with MCP support

bash
pip install ai-voice-bridge[mcp]

This installs the voice-bridge-mcp command as an alternative to python3 -m voice_bridge.mcp.server.

Development

bash
git clone https://github.com/Tomorrow-You/voice-bridge.gitcd voice-bridgepython3 -m venv .venv && source .venv/bin/activatepip install -e ".[all,dev]"pytest

License

MIT. See LICENSE for details.

The edge-tts optional dependency is licensed under GPL-3.0. It is not included in the base install.

来源:README.md,提交 113e0bc

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.5最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分