Most MCP servers give an agent access to something remote — a database, an API, a ticket tracker. Vext's voice MCP server does the opposite: it gives an agent access to your microphone, your meeting transcripts, and your dictation history, all without anything leaving the machine.

It's off by default. Turning it on lets any process on your Mac that holds the token drive the app, so this is a deliberate choice, not a default we make for you. This post covers what the server exposes, how to connect the common clients, and the handful of workflows where it earns its keep.

What it is

Vext runs a local HTTP server speaking Streamable HTTP MCP. Three facts define its security posture:

  • Loopback only. It binds to 127.0.0.1, so it never crosses a network.
  • Bearer token. Every request carries an Authorization: Bearer header. The token is generated on first read and can be regenerated from Settings.
  • Off by default. Nothing listens until you enable it.

The default port is 58398 — high and unassigned, chosen so it doesn't collide with dev servers or the other Muvon apps' MCP endpoints. The path is /mcp, giving a full endpoint of http://127.0.0.1:58398/mcp.

The server itself shipped in Vext 1.4.0, alongside live transcript.

Adding the MCP server to Claude Code and other clients

Settings shows a copyable snippet for each client with your actual token filled in. The shapes are:

Claude Code — one claude mcp add command:

claude mcp add --transport http vext http://127.0.0.1:58398/mcp --header "Authorization: Bearer YOUR_TOKEN"

Cursor, Windsurf, Claude Desktop — standard mcpServers JSON:

{
  "mcpServers": {
    "vext": {
      "url": "http://127.0.0.1:58398/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Codex — the Codex MCP server entry goes in ~/.codex/config.toml:

[mcp_servers.vext]
url = "http://127.0.0.1:58398/mcp"
http_headers = { Authorization = "Bearer YOUR_TOKEN" }

OpenCode — opencode.json, project or ~/.config/opencode/:

{
  "mcp": {
    "vext": {
      "type": "remote",
      "url": "http://127.0.0.1:58398/mcp",
      "enabled": true,
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

Octomind is the one exception. Its HTTP servers can't send custom headers, so the token rides in the query string instead — safe here precisely because the endpoint is loopback-only. Settings gives you that variant separately.

The 38 tools, grouped

Rather than list every signature, here's the shape of what an agent can do.

Live dictation. start_dictation, stop_dictation, cancel_dictation. The agent starts listening, you talk, it collects the transcript after cleanup and your active style are applied. stop_dictation takes paste=true to insert the text at your cursor exactly like a normal dictation.

Typing on your behalf. paste_text inserts text at the cursor of the frontmost app and restores your clipboard afterwards.

File transcription. transcribe_file runs the local speech model over a wav, m4a, mp3, or aiff on disk and returns both raw and cleaned text.

Meetings. start_meeting, stop_meeting, list_meetings, get_meeting, rename_meeting, delete_meeting, summarize_meeting, export_meeting. Meetings record microphone and system audio with speaker labels. The transcript is available immediately; speaker refinement and the summary finish in the background, so get_meeting is a poll target. Export writes markdown, txt, srt, or vtt and returns the path.

Speakers. list_speakers, rename_speaker, merge_speakers, delete_speaker, label_meeting_speaker. Voice profiles persist across meetings, so naming someone once carries forward.

Notes and history. start_note, stop_note, list_notes, get_note, delete_note, plus list_dictations, get_dictation, delete_dictation, retry_dictation. Notes are recorded and stored rather than pasted.

Configuration. get_settings, set_settings, list_microphones, set_microphone, list_app_profiles, set_app_profile, remove_app_profile, list_vocabulary, add_vocabulary, remove_vocabulary, get_status.

Read-only tools are marked as such, and destructive ones (delete_note, delete_dictation, and friends) are flagged destructive, so well-behaved clients can gate them behind confirmation.

What this is actually good for

Tool inventories are easy to write and hard to care about. Three workflows justify the setup:

1. Talking to your agent without a hotkey dance. Ask Claude Code to start dictation, speak your requirements for two minutes, and let it collect the transcript itself. You never touch the keyboard, and the agent controls the timing — it can start listening after it finishes asking you a question. This is the natural extension of Claude Code voice input.

2. Meeting-to-commit. After a planning call: "read my last meeting, pull out the action items assigned to me, and open issues for them." get_meeting returns the transcript with speaker names and timestamps plus the summary. The agent has real context about who committed to what, and none of that audio ever left your Mac.

3. Teaching the recognizer from the codebase. add_vocabulary takes a heard-as → replace-with pair. Point an agent at your repo and have it add your module names, unusual identifiers, and dependency names to the vocabulary in bulk. Dictation accuracy on your own project's jargon improves immediately, and you didn't type any of the entries by hand.

Where it doesn't help

Be realistic. The server won't make an agent code better, and dictating code character-by-character is still worse than typing it — speech is for prose, intent, and review comments, which is the argument in voice coding with AI agents.

There's also a real security consideration worth stating plainly: enabling the server means any local process holding the token can start your microphone and paste text into your frontmost app. That's a meaningful capability. It's why the feature ships off, why the token exists at all, and why regenerating it is one click. If you share a machine or run untrusted local tooling, think before enabling.

Getting started

MCP settings live under Settings → General → MCP server for AI agents: a toggle, the port, the token, and per-client snippets with the token already substituted.

brew install muvon/tap/vext

Vext is $49 once, with a 100-dictation trial, on macOS 14+ with Apple Silicon. Transcription and polishing run locally; the MCP server is local too. The whole loop — microphone, model, transcript, agent — stays on your machine.