
Voice Mode
STDIOVoice Mode MCP server for hands-free conversation with Claude Code using speech recognition
Voice Mode MCP server for hands-free conversation with Claude Code using speech recognition
Voice Mode for Claude Code allows you to have a continuous two-way conversation with Claude Code, hands-free.
It uses the new Claude Code hooks to deliver voice input to Claude while it works.
This lets you speak continuously to Claude - interrupt, redirect, or provide feedback without stopping what Claude is doing.
Optionally enable text-to-speech to have Claude speak back to you.
Voice recognition and text-to-speech are handled by the browser, so there is nothing to download, and no API keys are needed.
Installation is easy.
npm install -g @anthropic-ai/claude-code
npx mcp-voice-hooks@latest install-hooks claude mcp add voice-hooks npx mcp-voice-hooks@latest
claude
The browser interface will automatically open after 3 seconds (http://localhost:5111).
Click "Start Listening"
Say something to Claude. You will need to send one message in the Claude Code CLI to start the conversation.
There are two options for voice responses:
Mac has built-in text to speech, but high quality voices are not available by default.
You can download high quality voices from the system voice menu: System Settings > Accessibility > Spoken Content > System Voice
Click the info icon next to the system voice dropdown. Search for "Siri" to find the highest quality voices. You'll have to trigger a download of the voice.
Once it's downloaded, you can select it in the Browser Voice (Local) menu in Chrome.
Test it with the bash command:
say "Hi, this is your Mac system voice"
To use Siri voices with voice-hooks, you need to set your system voice and select "Mac System Voice" in the voice-hooks browser interface.
Other downloaded voices will show up in the voice dropdown in the voice-hooks browser interface so you can select them there directly, instead of using the "Mac System Voice" option.
There is a bug in Safari that prevents browser text-to-speech from loading high-quality voices after browser restart. This is a Safari Web Speech API limitation. To use high-quality voices in Safari you need to set your system voice to Siri and select "Mac System Voice" in the voice-hooks browser interface.
The hooks are automatically installed/updated when the MCP server starts. However, if you need to manually install or reconfigure the hooks:
npx mcp-voice-hooks install-hooks
This will configure your project's .claude/settings.local.json
with the necessary hook commands.
To completely remove MCP Voice Hooks:
# Remove from Claude MCP servers claude mcp remove voice-hooks
# Also remove hooks and settings npx mcp-voice-hooks uninstall
This will:
.claude/settings.local.json
If you're developing mcp-voice-hooks itself:
# 1. Clone the repository git clone https://github.com/johnmatthewtennant/mcp-voice-hooks.git cd mcp-voice-hooks # 2. Install dependencies npm install # 3. Link the package locally npm link # 4. Install hooks (one time) npx mcp-voice-hooks install-hooks # 5. Start Claude Code claude
Important: When developing with npm link
:
dist
folder, not your TypeScript sourcesrc/*.ts
), you must run npm run build
public/*
), just restart Claude CodeThe default port is 5111. To use a different port, add to your project's .claude/settings.local.json
:
{ "env": { "MCP_VOICE_HOOKS_PORT": "8080" } }
When running in MCP-managed mode, the browser will automatically open if no frontend connects within 3 seconds. To disable this behavior:
{ "env": { "MCP_VOICE_HOOKS_AUTO_OPEN_BROWSER": "false" } }
By default, voice input is not automatically delivered before tool execution to allow for faster tool execution. To enable auto-delivery before tools:
{ "env": { "MCP_VOICE_HOOKS_AUTO_DELIVER_VOICE_INPUT_BEFORE_TOOLS": "true" } }
When auto-delivery before tools is enabled:
MCP_VOICE_HOOKS_AUTO_DELIVER_VOICE_INPUT
is enabled (default)When auto-delivery before tools is disabled (default):
By default, mcp-voice-hooks automatically delivers voice input to Claude after tool use, before speaking, and before stopping:
dequeue_utterances
and wait_for_utterance
MCP tools are hidden from ClaudeTo disable auto-delivery:
{ "env": { "MCP_VOICE_HOOKS_AUTO_DELIVER_VOICE_INPUT": "false" } }
When auto-delivery is disabled:
dequeue_utterances
and wait_for_utterance
tools become visible