← MCP servers · mbailey

voicemode

BLOCKgrade F · trust 47/100

Natural voice conversations with Claude Code

anthropicasrclaudeclaudecodekokorolivekitmcpmcp server

Overview

From the repository's own README, as read at the audited commit.

# VoiceMode> Natural voice conversations with Claude Code (and other MCP capable agents)[![PyPI Downloads](https://static.pepy.tech/badge/voice-mode)](https://pepy.tech/project/voice-mode)[![PyPI Downloads](https://static.pepy.tech/badge/voice-mode/month)](https://pepy.tech/project/voice-mode)[![PyPI Downloads](https://static.pepy.tech/badge/voice-mode/week)](https://pepy.tech/project/voice-mode)VoiceMode enables natural voice conversations with Claude Code. Voice isn't about replacing typing - it's about being available when typing isn't.**Perfect for:**- Walking to your next meeting- Cooking while debugging- Giving your eyes a break after hours of screen time- Holding a coffee (or a dog)- Any moment when your hands or eyes are busy## See It In Action[![VoiceMode Demo](https://img.youtube.com/vi/cYdwOD_-dQc/maxresdefault.jpg)](https://www.youtube.com/watch?v=cYdwOD_-dQc)## Quick Start**Requirements:** Computer with microphone and speakers### Option 1: Claude Code Plugin (Recommended)The fastest way for Claude Code users to get started:```bash# Add the VoiceMode marketplaceclaude plugin marketplace add mbailey/voicemode# Install VoiceMode pluginclaude plugin install voicemode@voicemode## Install dependencies (CLI, Local Voice Services)/voicemode:install# Start talking!/voicemode:converse```### Option 2: Python installer packageInstalls dependencies and the VoiceMode Python package.```bash# Install UV package manager (if needed)curl -LsSf https://astral.sh/uv/install.sh | sh# Run the installer (sets up dependencies and local voice services)uvx voice-mode-install# Add to Claude Codeclaude mcp add --scope user voicemode -- uvx --refresh --from voice-mode voicemode-mcp-launcher# Optional: Add OpenAI API key as fallback for local servicesexport OPENAI_API_KEY=your-openai-key# Start a conversationclaude converse```For manual setup, see the [Getting Started Guide](docs/tutorials/getting-started.md).## Features- **Natural conversations** - speak naturally, hear responses im

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add voice-mode --env OPENAI_API_KEY=${OPENAI_API_KEY} -- None voice-mode==8.12.0

Exposed tools (25) 17 read · 4 write · 4 destructive

Blast radius: 4 tools can delete or overwrite. An agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
check_audio_dependenciesreadCheck system audio dependencies and provide installation guidance.
check_audio_devicesreadList available audio input and output devices
conchreadObserve and manage the conch (VoiceMode
config_reloaddestructiveReload configuration from .voicemode.env files and clear all caches.
get_provider_detailsreadGet detailed information about a specific provider endpoint.
kokoro_installwrite
kokoro_uninstalldestructiveUninstall kokoro-fastapi and optionally remove models and data.
list_config_keysreadList all available configuration keys with their descriptions.
list_tts_voicesreadList available TTS voices for different providers.
pause_conversationreadPause the conversation for a duration while KEEPING the floor (conch hold).
refresh_provider_registryreadManually refresh health checks for voice provider endpoints.
servicereadUnified service management tool for voice mode services.
show_config_filesreadShow which .voicemode.env files are being used for configuration.
update_configwriteUpdate a configuration value in the voicemode.env file.
voice_mode_inforeadGet diagnostic information about the voice-mode installation.
voice_registryreadGet the current voice provider registry showing all discovered endpoints.
voice_statisticsread
voice_statistics_exportread
voice_statistics_recentread
voice_statistics_resetdestructive
voice_statistics_summaryread
voice_statusreadCheck the status of all voice services including TTS, STT, LiveKit, and audio devices.
whisper_installwrite
whisper_model_installwriteDownload Whisper model(s) with pre-built Core ML support.
whisper_uninstalldestructiveUninstall whisper.cpp and optionally remove models and data.

Details

Source
mbailey/voicemode
PyPI
voice-mode
Transports
stdio · streamable-http
Credentials it reads
CARTESIA_API_KEYOPENAI_API_KEYVOICEMODE_CREDENTIAL_STOREVOICEMODE_MCP_TOKENVOICEMODE_SERVE_SECRETVOICEMODE_SERVE_TOKEN
License
MIT
Stars
1,364 · pushed 0d ago

Trust audit

Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)WARN
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (1 observation(s))
Shell
declared (9 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
Makefile:120
@CURRENT_VERSION=$$(uv run python -c "exec(open('voice_mode/__version__.py').read()); print(__version__)") && \
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.env_exfil · CWE-200, CWE-319
installer/voicemode_install/cli.py:152
os.environ.copy() ... curl
Why it matters. reads secrets in the same file that sends data out
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/scripts/voicemode-hook-receiver
.claude/scripts/voicemode-hook-receiver
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
install.sh
install.sh
Why it matters. link not followed
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
voice_mode/prompts/__init__.py:13
importlib.import_module(f".{module_name}", package=__name__)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
voice_mode/resources/__init__.py:13
importlib.import_module(f".{module_name}", package=__name__)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
voice_mode/tools/__init__.py:138
importlib.import_module(f".{tool_name}", package=__name__)
MEDIUMCode injection · code.dynamic_import · CWE-78, CWE-94, CWE-95
voice_mode/tools/__init__.py:150
importlib.import_module(module_path, package=__name__)
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
.claude/skills/impressions/SKILL.md:78
| `VOICEMODE_MLX_AUDIO_BASE_URL`   | `http://127.0.0.1:8890/v1`                    | OpenAI-compatible mlx-audio endpoint                 |
MEDIUMObfuscation / stealth · obf.anti_debug · CWE-506, CWE-94
voice_mode/config.py:1154
sys.settrace(trace_calls)
MEDIUMSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
.claude/commands/install.md:79
- **UV** - Python package manager (install: `curl -LsSf https://astral.sh/uv/install.sh | sh`)
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
config_reload, kokoro_uninstall, voice_statistics_reset, whisper_uninstall
Why it matters. 4 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.symlink · CWE-1104
AGENTS.md
AGENTS.md
Why it matters. link not followed
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_audio_files_path_traversal.py:74
result = _run(_handler("../../etc/passwd"))
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/test_audio_files_path_traversal.py:152
result = _run(_handler("../../etc/passwd"))
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
CHANGELOG.md:248
- `VOICEMODE_MLX_AUDIO_BASE_URL` (default `http://127.0.0.1:8890/v1`) -- OpenAI-compatible mlx-audio endpoint.
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/.archive/api-discovery-urls.md:59
curl http://127.0.0.1:8880/docs
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/.archive/api-discovery-urls.md:60
curl http://127.0.0.1:8880/openapi.json
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
docs/.archive/api-discovery-urls.md:63
curl http://127.0.0.1:8880/v1/models
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
docs/web/index-minimal-v3.html:10
src: url('data:font/woff2;base64,d09GMgABAAAAAAKgAA0AAAAAB8AAAAJOAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgkIKgmSCFgsGAAE2AiQDCAQgBQYHLBttA8geh7HbZEkXzVA+8hE8v9bK9/v7cMBIgJBqYiTZU2BNROgoCXWqVuUE2BwBVW/MzP5
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
voice_mode/cartesia_tts.py:200
yield base64.b64decode(data_b64)
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
.claude/skills/voicemode/references/permissions.md:40
- **[Full permissions guide](../../../../docs/guides/permissions.md)** — permission levels (voice-only, voice+service, all-with-denies), security notes on what each tool can do, common JSON mistakes.
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
docs/.archive/npm-global-no-sudo.md:9
- Security concerns from running npm with elevated privileges
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/.archive/LIVEKIT_SETUP.md:228
**Generate JWT tokens** for API access using development credentials:
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
llms.txt:90
- [Manage personal access tokens](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens): You can use a personal access token in place of 
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-09-15 · audit v0.4.0 · source sha 41f91d5d341f · full audit: observations/trust-audit/mcp-server/mbailey__voicemode.json · Report an issue or request a re-scan

Audit history

DateSourceVerdictGradeScoreChange
2026-09-1541f91d5d341fBLOCKF47first audit

Alternatives

Other servers in the same categories, safer ones first.

Questions

What is the voicemode MCP server?

Natural voice conversations with Claude Code

What tools does voicemode expose?

25 in total: 17 read-only, 4 that write, and 4 that can delete or overwrite (config_reload, kokoro_uninstall, voice_statistics_reset, whisper_uninstall). Every one is listed on this page with its risk.

Is voicemode safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (47/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 4 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does voicemode need?

It reads CARTESIA_API_KEY, OPENAI_API_KEY, VOICEMODE_CREDENTIAL_STORE, VOICEMODE_MCP_TOKEN, VOICEMODE_SERVE_SECRET and VOICEMODE_SERVE_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does voicemode run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on PyPI as voice-mode.

How current is this page?

The grade is for one exact copy of the source (41f91d5d341f), read on 2026-09-15. The repository is watched and re-audited when it changes.

Provenance: OBSERVED · read 2026-09-15 · job trust-audit-2026-09-15