claude-voice-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@claude-voice-mcpwhat's left on my to-do list for tomorrow's client meeting?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
claude-voice-mcp
Talk to Claude Code on your Mac while you drive, walk or cook, using the voice mode of the Claude mobile app.
The Claude app's voice mode can only use remote connectors (MCP servers reachable by URL). This small server is such a connector: it hands each spoken request to Claude Code running headless on your Mac, which keeps access to everything it normally has (local files, notes, CLIs, MCP servers, skills), and sends back a short answer written to be read aloud.
"What's left on my to-do list for the client meeting tomorrow?" "Add a reminder to call the plumber on Thursday." "Find the last invoice from Acme in my email and tell me the amount."
How it works
Claude app (voice) ──HTTPS──▶ tunnel (Cloudflare, Tailscale, ngrok…) ──▶ this server (127.0.0.1) ──▶ claude -p … ──▶ your tools
▲ │
└───────────────────────────────── short answer as the MCP tool result ◀─────────────────────────┘Requests go through a tunnel: no port is opened on your Mac or router.
Each request runs
claude -pwith Sonnet, low effort and--permission-mode auto, plus a system prompt that asks for one to four plain sentences.Follow-up questions resume the same Claude Code session (
session_id).Requests longer than about 25 seconds return a task id; the voice assistant fetches the result with
get_task_result.
Tools
Tool | What it does |
| Hands a request to Claude Code and returns a short spoken-style answer. |
| Starts 2 to 3 independent requests at the same time, each in its own Claude Code session. The Claude app runs tool calls one after the other, so this is the way to save time on multi-part questions. |
| Fetches the results of requests still running. With several ids, it returns as soon as one more finishes, so the assistant can report answers as they arrive. |
Related MCP server: talk-to-claude-code
Requirements
macOS, with the Mac awake and online when you call it.
Claude Code installed and signed in (
claudein~/.local/bin, or setCLAUDE_BIN).Node.js 20 or later.
A Claude plan that allows custom connectors in the Claude app.
A way to give your Mac a stable public HTTPS address. Pick one:
Option | Own domain needed | How |
Cloudflare Tunnel (recommended) | Yes, on Cloudflare | Cloudflare Access: sign-in with your email |
Tailscale Funnel | No ( | A password |
ngrok with a static domain | No | A password |
Avoid tunnels whose address changes at every restart (such as Cloudflare quick tunnels): the connector URL would break each time.
Setup
Install
git clone https://github.com/guillaume-gonano/claude-voice-mcp && cd claude-voice-mcp npm install && npm test mkdir -p data cp install.env.example data/install.env cp config.example.json data/config.jsonEdit both files (see Configuration).
Set up your tunnel so that
https://<your host>reacheshttp://127.0.0.1:47851. Then follow option A or B.
A. Cloudflare Tunnel + Access
Requirements: a domain on Cloudflare, Cloudflare Zero Trust (the free plan is enough) and cloudflared. Optionally, the cf CLI logged in, so the installer can create the DNS record and Access application for you; otherwise create them in the dashboard.
In Cloudflare Zero Trust → Networks → Tunnels, create a remotely managed tunnel with a public hostname (for example
mcp.example.com) pointing tohttp://127.0.0.1:47851. Save its token indata/tunnel-token(chmod 600).In
data/install.env, setTUNNEL="cloudflare"and fill in the Cloudflare lines.Run
scripts/install.sh. It creates the DNS record if needed and a Cloudflare Access application on/authorize, limited to your email. It then writesdata/config.jsonand starts two LaunchAgents: the server and the tunnel. It ends with checks:/mcpmust answer 401 and/authorize302.
B. Any other tunnel + password
Start your tunnel and keep it running. For example:
Tailscale Funnel:
tailscale funnel --bg 47851ngrok:
ngrok http --url=<your-static-domain> 47851
In
data/install.env, setTUNNEL="other"andHOSTto the public hostname.Run
scripts/install.sh. It generates a random password (unlesspasswordis already set indata/config.json) and shows it once. It then starts the server as a LaunchAgent.
The password is asked only once, when you add the connector. Five wrong tries lock the page for 15 minutes.
Then, for both options
Add the connector in the Claude app: Settings → Connectors → Add custom connector → https://<your host>/mcp. Sign in (Cloudflare Access or password) when asked. Then start voice mode and ask something.
Configuration
data/config.json (personal, never committed):
Key | Meaning |
| Your first name, used in the prompts. |
| What Claude Code can reach on your Mac. The voice assistant reads it to decide when to call the tool. |
| Extra instructions appended to the voice system prompt (language, house rules). |
| Optional Claude Code permission rules run without confirmation, for example |
The installer adds publicUrl, port, and either access (Cloudflare) or password (other tunnels; at least 16 characters).
Environment variables: CLAUDE_BIN, VOICE_MCP_MODEL (default sonnet), VOICE_MCP_EFFORT (default low) and VOICE_MCP_WAIT_MS (default 25000: the Claude app gives up on a tool call after about 40 s, so longer requests return a task id) and VOICE_MCP_MAX_RUNNING (default 3 parallel tasks).
Security
Read this before installing: this connector gives a full Claude Code agent, running with your user account's rights, to whoever can use it.
The connector uses several layers of protection:
No inbound port. The server listens on
127.0.0.1only, and the tunnel client makes an outgoing connection.OAuth 2.1 with PKCE.
/mcprefuses any request without a valid token (401).Only the Claude apps can register as clients. Only the claude.ai and claude.com callback URLs are accepted; anything else is refused with 400.
Tokens are issued only after your sign-in. With Cloudflare,
/authorizesits behind Cloudflare Access, limited to your email, and the server also checks the Access JWT signature, audience and email itself. With another tunnel,/authorizeasks for your password, and five wrong tries lock it for 15 minutes. Cloudflare Access is stronger: a password can leak or be guessed, so keep the generated one.Tokens are stored as SHA-256 hashes in
data/oauth-state.json(mode 0600). Access tokens last 24 hours; refresh tokens last 90 days and rotate on each use.Three narrow tools, with no direct shell access.
Claude Code's own guardrails stay on. Auto permission mode applies, and the voice prompt forbids sending, publishing, deleting or paying unless you explicitly ask.
Remaining risks you should accept knowingly:
Your Claude account is the key. Anyone signed in to it can use the connector, so protect it with strong sign-in (2FA or passkey).
Prompt injection is reduced, not eliminated. An email or web page that Claude Code reads could contain hostile instructions.
"Always allow" removes a human check. Setting the tools to "Always allow" in the Claude app means no confirmation before each call.
To cut access immediately, disconnect the connector in Claude, or stop the server:
launchctl bootout gui/$(id -u)/local.claude-voice-mcpTo revoke every token issued so far, delete data/oauth-state.json and restart the server.
Limits
Each request starts Claude Code, so expect roughly 10 seconds for a simple answer, and more for real work.
Requests use your Claude Code usage or quota like any other session.
The Mac must stay awake: for example, use
caffeinate, or Energy settings that prevent sleep.
Development
npm test # OAuth flow, Access and password guards, and tools, with a fake Claude CodeLicense
MIT. Not affiliated with Anthropic.
This server cannot be deployed
Maintenance
Related MCP Connectors
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Give your AI agent a memory and body on your iPhone: set alarms, ring your phone, over MCP.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceExposes headless Claude Code as a remote MCP server with a voice client, enabling hands-free task execution and session management via OpenAI's Realtime API.-
- AlicenseAqualityBmaintenanceMCP server that lets you drive Claude Code sessions hands-free by voice from any MCP client, enabling remote models to send prompts, monitor progress, and get results read back.71MIT
- AlicenseNot gradedqualityCmaintenanceVoice interface for Claude Code enabling hands-free, conversational interaction entirely on-device for Apple Silicon Macs. It provides push-to-talk transcription and automatic spoken responses via local AI models.MIT
- AlicenseNot gradedqualityBmaintenanceEnables voice-driven software development by bridging the Claude app's voice mode to Claude Code, allowing users to direct repository work through natural language while requiring approval before any write or shell execution.MIT