Atlas / MCP servers / mbailey / Voice Mode

Voice ModeBLOCK

mcp/mbailey/voice-mode

Natural voice conversations with Claude Code

Verdict
BLOCK
Grade
F
Trust score
47 /100
Exposed tools
25 17r · 4w · 4d
Transport
stdio · streamable-http
License
MIT
Stars
1,375
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Natural voice conversations with Claude Code (and other MCP capable agents)

[](https://pepy.tech/project/voice-mode) [](https://pepy.tech/project/voice-mode) [](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

[](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:

# Add the VoiceMode marketplace
claude plugin marketplace add mbailey/voicemode

# Install VoiceMode plugin
claude plugin install voicemode@voicemode

## Install dependencies (CLI, Local Voice Services)

/voicemode:install

# Start talking!
/voicemode:converse

Option 2: Python installer package

Installs dependencies and the VoiceMode Python package.

# 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 Code
claude mcp add --scope user voicemode -- uvx --refresh --from voice-mode voicemode-mcp-launcher

# Optional: Add OpenAI API key as fallback for local services
export OPENAI_API_KEY=your-openai-key

# Start a conversation
claude converse

For manual setup, see the Getting Started Guide.

Feat

Read from source at commit 41f91d5d341fOBSERVED · 2026-09-24
02

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
03

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.
04

Trust audit

BLOCKgrade F · trust 47/100 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-24 · audit v0.4.1 · source sha 41f91d5d341ffull audit observations/trust-audit/mcp-server/mbailey__voice-mode.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-09-2441f91d5d341fBLOCKF47first audit
06

Questions

What is the Voice Mode MCP server?

Natural voice conversations with Claude Code

What tools does Voice Mode 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 Voice Mode 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 Voice Mode 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 Voice Mode 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-24. The repository is watched and re-audited when it changes.

Advertisement