Mac Voice MCP vs Spoken

A side-by-side look at the Mac Voice MCP and Spoken MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.

Mac Voice MCP logoMac Voice MCPSpeech-to-Text · Local subprocess (stdio)Talk with your AI assistant out loud on a Mac, with on-device speech recognition (whisper.cpp).60GoodAuth: not declaredSpoken logoSpokenSpeech-to-Text · Local subprocess (stdio)Fetch published podcast transcripts as clean Markdown with real speaker names (not "Speaker 1") via the Spoken API. Search episodes, get transcripts, check credit balance.65GreatAuth: api key required

Verdict: choose Mac Voice MCP for speech-to-text work as a local process; choose Spoken for speech-to-text as a local process. You can also run both side by side in one mcpServers block.

Which MCP server should you choose?

Mac Voice MCP logoChoose Mac Voice MCP when

  • You need dedicated capabilities in the Speech-to-Text domain.
  • You prefer a local stdio subprocess transport.
  • You want tools like speak_and_listen, voice_setup.
Explore Mac Voice MCP

Spoken logoChoose Spoken when

  • You need dedicated capabilities in the Speech-to-Text domain.
  • You prefer a local stdio subprocess transport.
  • Its auth model fits you: API key required.
  • You want tools like search_podcasts, get_transcript, list_episodes.
Explore Spoken

Feature & specification comparison

Rows where the two servers differ are marked.

SpecMac Voice MCP logoMac Voice MCPSpoken logoSpoken
CategorySpeech-to-TextSpeech-to-Text
Quality signal60/100 · Good65/100 · Great
Install commandConfirmedConfirmed
TransportLocal subprocess (stdio)Local subprocess (stdio)
AuthNot declaredAPI key required
PricingNot declaredFreemium
Required env varsNone listedNone listed
Verified ownerCommunity listingCommunity listing
GitHub stars05
Directory activity 2 views 0 installs 0 upvotes 4 views 0 installs 0 upvotes
Tools28

Tools & capabilities

Mac Voice MCP tools 2

  • speak_and_listenSay something out loud to the user and hear their spoken reply. Speaks text_to_speak through the computer's speakers, then listens like a conversation turn — it waits for the user to start talking and stops when they finish — and returns an on-device transcript of what they said. Write text_to_speak for the ear, not the screen: - 1–3 short sentences, under ~40 words; lead with the outcome, then one question. - Plain words only: no markdown, bullets, emoji, code, file paths, URLs, stack traces or tables. - Describe code instead of reading it ("I added a retry to the upload function"), say file names not paths ("in index.ts"), round numbers ("about two hundred ms"), spell out symbols. - Ask one question at a time, answerable in a few words ("Should I deploy it — yes or no?"). - Put the details (diffs, logs, links) in your normal on-screen reply, and say so out loud. - Tool output (Bash stdout, file writes) is NOT the on-screen reply. Only your own assistant message text renders. - A spoken turn with no assistant message text shows the user nothing — never skip the on-screen reply. Good: "The build passed and all tests are green. Want me to open the pull request?" Bad: "## Results\n- `npm test` ✅ 42/42\n- see /Users/x/repo/src/index.ts:120" Once the user is talking with you by voice, keep the conversation in voice: answer each transcript with another speak_and_listen call (not a text reply) until they say stop or start typing. To end voice mode, or for a one-way announcement, pass listen: false: it returns at once and speaks while you work. A reply of "(No speech detected …)" means the user did not answer — never treat it as consent. Ask once more; if still nothing, stop and say on screen that voice mode is paused and they can type to carry on (not speak: the mic is off). The "voice-mcp timing" line at the end is diagnostics: ignore it unless the user asks why things feel slow. If it reports that voice-mcp is not set up, call voice_setup.
  • voice_setupCheck whether this computer has everything speak_and_listen needs — text-to-speech, a microphone recorder (SoX), whisper.cpp speech-to-text and the speech model — and optionally install what's missing. Anything already installed is reused (an existing model elsewhere on disk is symlinked, not re-downloaded). Call it with install=false (the default) first and tell the user what is missing. Only call it with install=true after the user agrees: it runs `brew install` for the missing packages and downloads the speech model once. It never uninstalls or changes anything else. kokoro=true (also only after the user agrees) installs the optional Kokoro voice: more natural than the built-in one, runs on this Mac, about 1 GB on disk. Once installed it's used automatically; the built-in voice stays as the fallback. If it reports INSTALLING, the install continues in the background — wait a minute and call it again to check.

Spoken tools 8

  • search_podcastsSearch published podcast episodes by text query, or paste an episode URL (Spotify, YouTube, etc.). Returns matching episodes with their id, title, podcast, podcast_id, and date. Use the id with get_transcript, or the podcast_id with list_episodes to get the show's whole back-catalog. Does not consume credits.
  • get_transcriptFetch a podcast episode's transcript as clean Markdown with real speaker names and timestamps. Pass an episode id from search_podcasts. Costs 1 credit on the first fetch of an episode; repeat fetches are free and errors are never charged.
  • list_episodesList a podcast's entire back-catalog (every episode, newest first). Pass a podcast_id from a search_podcasts result. Returns each episode's id, title, and date — fetch any with get_transcript. Use this to transcribe a whole show. Does not consume credits itself; transcribing the returned episodes costs 1 credit each (repeat fetches are free), so make sure the key has enough credits before looping.
  • get_balanceCheck the current Spoken credit balance, account email, and recent usage for the configured API key. Does not consume credits.
  • list_followingThe shows this key is kept current on. Every charged fetch makes its show a follow: the five most-fetched shows from the last 180 days are followed automatically (source 'fetch'), and up to 25 more can be declared with follow_podcast (source 'explicit'). Muted shows are listed separately. Use list_new_episodes to see what is new on them. Does not consume credits; the demo key has nothing to follow with.
  • follow_podcastDeclare a follow for a show, or clear a mute. Pass a podcast_id from search_podcasts. A declared follow stays until unfollow_podcast, regardless of fetch activity, and does not use one of the five automatic slots. For a show never fetched, what counts as new starts from its newest episode now. Does not consume credits.
  • unfollow_podcastMute a show: it leaves the followed list and later fetches do not re-add it. follow_podcast reverses it. Pass a podcast_id from list_following. Does not consume credits.
  • list_new_episodesWhat is new on the shows this key follows: for each show, the episodes released in the last 90 days that are newer than the newest one already fetched from it (up to 10 per show), each with a transcript_url. Episodes with no transcript are left out. Fetch any with get_transcript (1 credit each on first fetch); a fetch raises that show's floor, so the next call lists only what came after. Refreshed hourly, so a show followed moments ago may be empty until its first poll. Does not consume credits.

Ready-to-paste client configs

Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.

Mac Voice MCP

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "mac-voice-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "mac-voice-mcp@latest"
      ]
    }
  }
}

Spoken

mcpServers (Claude Desktop / Cursor)
{
  "mcpServers": {
    "spokenmd-spoken": {
      "command": "npx",
      "args": [
        "-y",
        "spoken-mcp"
      ]
    }
  }
}

Frequently asked questions

Mac Voice MCP is categorized under Speech-to-Text and uses a local stdio subprocess. Spoken belongs to Speech-to-Text and uses a local stdio subprocess. Pick Mac Voice MCP for speech-to-text work and Spoken for speech-to-text.

Copy the mcpServers block from the config section on this page into your client's config (for example claude_desktop_config.json or ~/.cursor/mcp.json), then fully restart the client.

Mac Voice MCP has no declared pricing — check the project's own site. Spoken is listed as freemium — a free tier with paid plans. Auth: api key required. If a server needs environment variables such as API keys, define them under the env key in your client's MCP config.

Yes. MCP clients support multiple servers: add mac-voice-mcp and spokenmd-spoken as separate keys in the same mcpServers object, and your assistant will call tools from either one.

On AllMCPs, Mac Voice MCP has a quality signal of 60/100 (Good) with 2 views, 0 installs and 0 GitHub stars. Spoken has 65/100 (Great) with 4 views, 0 installs and 5 GitHub stars.