get_statusLABSCO SUMMARY
The MCP server is a remote control for dictation, not a transcription endpoint.
Status, start, stop and cancel drive the same recording a hotkey or the tray icon drives, which makes this useful for scripting hands-free capture rather than for sending audio somewhere to be transcribed. Two settings decide whether that is comfortable on your machine: the server is disabled until mcp_enabled is true and will bind nowhere but loopback, and external starts stay blocked until you also set start_recording_enabled, because that call switches the microphone on. Both are read at launch, so restart Muninn after changing either.
What it is
Muninn is a macOS menu-bar dictation app for developer text: it records speech, transcribes it through a local-first provider route, runs the transcript through a configurable pipeline, and types the result into whatever app is focused. Its MCP surface is deliberately narrow — a loopback HTTP server exposing recording control, off until you turn it on.
What you get
- Four tools over MCP: get_status, start_recording, stop_recording and cancel_recording
- get_status is read-only and returns the current state — idle, recording_active, permission_blocked, already_running or failed — together with whether Microphone, Accessibility and Input Monitoring have been granted
- The same vocabulary is reachable from the packaged app through muninn://record, muninn://stop, muninn://toggle and muninn://cancel
- Behind those calls: capture to a temporary WAV at 16 kHz mono, then a route that tries Apple Speech and whisper.cpp locally before Deepgram, OpenAI, Google and xAI
- The built-in refine step applies a conservative developer-dictation prompt aimed at commands, flags, package names, file paths, environment variables and acronyms — the tokens general dictation tends to rewrite
- Pipeline steps can be any Unix filter, each with an id, cmd, args, timeout_ms and an on_error of continue, fallback_raw or abort
- Profiles match the frontmost app by bundle id or window title and swap both the refine behaviour and the tray glyph, so dictating into Terminal and into an editor can be shaped differently
- whisper.cpp defaults to tiny.en and downloads it on first use into ~/.local/share/muninn/models
Requirements
macOS, with Rust 1.88.0 or newer to build; cargo install muninn-speech-to-text installs the muninn binary. The app itself needs Microphone, Accessibility and Input Monitoring permissions, and macOS attaches those to the exact binary or .app, so put it at a stable path before granting them. Apple Speech additionally needs macOS 26+. The MCP server stays off until external_control.mcp_enabled = true, then serves at http://127.0.0.1:2769/mcp — it has no authentication, refuses any non-loopback bind address, and starts only at app launch. Starting a recording from outside is separately gated behind start_recording_enabled = true. Cloud providers read OPENAI_API_KEY, DEEPGRAM_API_KEY, GOOGLE_API_KEY, GOOGLE_STT_TOKEN or XAI_API_KEY; Apple Speech and whisper.cpp need none.
Setup effort
Follow the published steps — cargo install muninn-speech-to-text
USE CASES
Dictating a command or a file path without it being autocorrected
Speech goes to a local provider first, and the refine step is prompted to leave commands, flags, package names, paths and environment variables alone rather than tidy them into prose.
Letting a script capture a note hands-free
Start and stop the same recording the hotkey would, from whatever is already driving your workflow. External starts have to be enabled first, since the call turns on the microphone.
Checking why nothing was typed into the app
One read-only call reports whether it is idle, recording or permission-blocked, and which of Microphone, Accessibility and Input Monitoring were actually granted.
Throwing away a capture you never wanted
Discard the active recording before it is transcribed or injected — nothing reaches a provider and nothing is typed anywhere.
4 tools
Listed in project docs. Your client may show a different list.
start_recordingstop_recordingcancel_recordingBEFORE YOU INSTALL
What to know first
Tools you get
4 tools named in the project's documentation. The MCP server is off by default: set mcp_enabled = true in config.toml and restart Muninn. start_recording also needs start_recording_enabled = true.
Requires
Rust 1.88.0 or later
INSTALLATION
Connect your client
Server setup
Prerequisites: macOS, Rust 1.88.0 or newer, Xcode command line tools for local builds, and macOS permissions for Microphone, Accessibility, and Input Monitoring
Install from crates.io; the installed binary is named muninn:
cargo install muninn-speech-to-textOr build from a clone of the repository:
git clone https://github.com/bnomei/muninn.git
cd muninn
cargo build --release --bin muninnOr extract a release archive, then keep the binary at a stable path before granting macOS permissions.
mkdir -p "$HOME/.local/bin"
mv muninn "$HOME/.local/bin/muninn"
chmod +x "$HOME/.local/bin/muninn"Optionally, from the clone, build a local .app bundle for a stable app identity and URL-scheme handling.
cargo build --release --bin muninn
bash scripts/package-macos-app.sh
open dist/Muninn.appMove dist/Muninn.app to /Applications/Muninn.app and launch it once.
Muninn writes a default config on first run. To start from the sample config instead, run this from the clone.
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/muninn"
mkdir -p "$CONFIG_DIR"
cp configs/config.sample.toml "$CONFIG_DIR/config.toml"Set only the provider keys you actually use in ./.env (OPENAI_API_KEY, DEEPGRAM_API_KEY, GOOGLE_API_KEY, GOOGLE_STT_TOKEN, XAI_API_KEY). None are needed for the local Apple Speech or whisper.cpp route.
Grant Microphone, Accessibility, and Input Monitoring to Muninn in System Settings > Privacy & Security.
To turn on the MCP server, set mcp_enabled = true under [external_control] in config.toml (it is false by default), then restart Muninn. The server starts only at app launch.
Register it with your client, for example with Auggie.
auggie mcp add muninn --transport http --url http://127.0.0.1:2769/mcpMCP Clients
Auggie
auggie mcp add muninn --transport http --url http://127.0.0.1:2769/mcp