voicememos-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SONIOX_BASE_URL | No | Soniox EU endpoint, e.g. `https://api.eu.soniox.com` | |
| VOICEMEMOS_SINCE | No | only auto-transcribe memos from this date on | |
| VOICEMEMOS_WORKER | No | With the default `VOICEMEMOS_WORKER=launchd`, the MCP server has no secrets and no access to Voice Memos; it can only queue requests. In `inprocess` mode it does both itself. | launchd |
| VOICEMEMOS_MARKERS | No | spoken words that tag a sentence; `*` accepts inflected forms (`question*=Question`) | idea=Idea,task=Task,... |
| VOICEMEMOS_LANGUAGES | No | language hints, e.g. `fi,en` | en |
| VOICEMEMOS_MARKER_END | No | end word after the wake word that closes a longer marker, e.g. `end` | |
| VOICEMEMOS_OUTPUT_DIR | No | outside Documents on purpose, see [Where transcripts live](#where-transcripts-live) | ~/Library/Application Support/voicememos-mcp/transcripts |
| VOICEMEMOS_DIARIZATION | No | separate speakers in conversations | 1 |
| VOICEMEMOS_MARKER_WAKE | No | wake word required before a marker word, e.g. `dictate*`; empty = marker word alone | |
| VOICEMEMOS_MAX_ATTEMPTS | No | failed after this many tries | |
| VOICEMEMOS_ROAM_ENABLED | No | append new transcripts to Roam daily notes | 0 |
| VOICEMEMOS_CONTEXT_TERMS | No | names and rare terms the engine should know | |
| VOICEMEMOS_SECOND_READER | No | `gemini` = second reading for every new memo, `gemini-low` = only for memos with low certainty | |
| VOICEMEMOS_CONF_THRESHOLD | No | words below this are marked | 0.70 |
| VOICEMEMOS_EXCLUDE_FOLDERS | No | Voice Memos folders hidden from everything | |
| VOICEMEMOS_VOICEPRINT_NAME | No | your name, shown when the voiceprint recognises you | |
| VOICEMEMOS_VOICEPRINT_MODEL | No | accepts `wespeaker_en_voxceleb_resnet34_LM` | |
| VOICEMEMOS_TIMESTAMP_EVERY_S | No | time in the recording at the start of a paragraph, at most once a minute | |
| VOICEMEMOS_EXCLUDE_TITLE_REGEX | No | titles hidden from everything | |
| VOICEMEMOS_SECOND_READER_MODEL | No | gemini-4-argon | |
| VOICEMEMOS_SECOND_READER_MAX_MIN | No | longer recordings are read in parts | 60 |
| VOICEMEMOS_SECOND_READER_CHUNK_MIN | No | approximate length of a part | 30 |
| VOICEMEMOS_SECOND_READER_MIN_AGREEMENT | No | A reading that agrees with the primary words on less than a tenth of the words is rejected | 0.1 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| voicememos_statusA | Library size, transcription status counts, worker health and configuration. |
| voicememos_listB | List memos, newest first. Args: limit: page size (max 200). offset: start index for paging. since: only memos recorded on or after this date (YYYY-MM-DD). until: only memos recorded on or before this date (YYYY-MM-DD). title: case-insensitive substring of the title. status: transcribed, pending, segmenting (longer than the engine accepts: being transcribed in parts), not_transcribed, not_downloaded, failed or too_long (long and cannot be split: splitting off or ffmpeg missing). |
| voicememos_readA | Read one transcript with uncertainty marks. Args: memo: memo id from voicememos_list (8 characters is enough). format: 'markdown' (with header), 'text' (transcript only) or 'json' (word-level data). threshold: confidence threshold for marking words (default from config); re-renders without re-transcribing. offset: character offset for long transcripts (see next_offset). max_chars: maximum characters returned (1000-100000). |
| voicememos_searchA | Search transcripts and titles (case-insensitive). Returns snippets per memo. Args: query: text to find, or a regular expression when regex=true. limit: maximum number of memos returned. since: only memos recorded on or after this date (YYYY-MM-DD). until: only memos recorded on or before this date (YYYY-MM-DD). regex: treat query as a regular expression. |
| voicememos_markersB | Sentences the user tagged by starting them with a spoken marker word (e.g. "Idea: ..."). Args: since: only memos recorded on or after this date (YYYY-MM-DD). until: only memos recorded on or before this date (YYYY-MM-DD). label: only this marker label. limit: maximum number of markers returned. |
| voicememos_transcribeA | Queue memos for transcription in the background. Returns a job_id immediately. Args: memos: memo ids to transcribe. since: or: all memos recorded on or after this date (YYYY-MM-DD). until: or: all memos recorded on or before this date (YYYY-MM-DD). redo: transcribe again even if a transcript exists. push_roam: also append the transcripts to Roam daily notes (if Roam is configured). |
| voicememos_second_readA | Queue a second, independent reading (Gemini) of already transcribed memos. Disagreements with the primary engine appear as {a|b} in the transcript. Returns a job_id. Args: memos: memo ids. since: or: memos recorded on or after this date (YYYY-MM-DD). until: or: memos recorded on or before this date (YYYY-MM-DD). model: Gemini model id (default from config, e.g. gemini-4-argon). redo: read again even if a second reading exists. limit: at most this many memos (oldest first). only_uncertain: only memos with low certainty; long recordings (read in parts) only in their parts with low certainty. realign: no new reading; align the stored readings again with the current rules. |
| voicememos_compare_readersA | Compare primary engine and second reader per language (agreement, calibration, samples). Writes a Markdown report with a listening checklist and returns the summary. Args: since: only memos recorded on or after this date (YYYY-MM-DD). until: only memos recorded on or before this date (YYYY-MM-DD). samples: disagreements to sample per language (max 50). |
| voicememos_voiceprintA | Recognise the owner's voice with a local voiceprint. Args: action: 'status' (enrollment state, thresholds and suggested enrollment memos), 'enroll' (build the voiceprint from memos where only the owner speaks), 'identify' (apply it to already transcribed memos), 'add_other' (store a known other voice, e.g. a relative who sounds similar, from one speaker of one memo; it is never shown by name, it only prevents mistaking that person for the owner) or 'remove_other' (by name). memos: memo ids for 'enroll' (2+, ideally 4-6 from different years), 'identify', or one memo for 'add_other'. since: for 'identify': memos recorded on or after this date (YYYY-MM-DD). until: for 'identify': memos recorded on or before this date (YYYY-MM-DD). name: the owner's name for 'enroll' (default from config); the other person's name for 'add_other' / 'remove_other'. speaker: for 'add_other' in a multi-speaker memo: the speaker label (S1, S2, ...). |
| voicememos_transcribe_statusA | Progress of a transcription job, or the 10 most recent jobs when job_id is omitted. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes: listing, reading, searching, marker extraction, transcription, job status, comparison, and voiceprint operations are separated by resource and action. The only mild ambiguity is between voicememos_status and voicememos_transcribe_status, though the descriptions make library status vs. job progress clear.
All tools use the same voicememos_ prefix and snake_case style, making the set predictable to scan. There is minor variation between verb-like names (list, read, search, transcribe) and noun-like names (status, markers, voiceprint), but the convention remains readable and consistent overall.
Ten tools is a well-scoped size for a domain covering memo retrieval, transcription workflows, search, markers, second-reader comparison, and voiceprint handling. Each tool earns its place without obvious redundancy or bloat.
The tool surface covers the core lifecycle well: listing and reading memos, searching, extracting markers, queuing transcription, checking job progress, running a second reading, comparing readers, and managing voiceprints. Minor gaps exist around memo management such as deleting, renaming, or exporting memos, but these are not central to the apparent transcription-analysis purpose.