Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
VOICE_COACH_DIRNoDirectory for recordings, analysis details and progress.md.~/VoiceCoach
AZURE_SPEECH_KEYNoOptional Azure Speech key, required when using the Azure pronunciation backend.
VOICE_COACH_A4_HZNoTuning reference frequency for A4.440
AZURE_SPEECH_REGIONNoOptional Azure Speech region, required when using the Azure pronunciation backend.
VOICE_COACH_FILLERSNoPath to a custom filler-word TOML file.
VOICE_COACH_MAX_BYTESNoResponse size budget in bytes.2048
VOICE_COACH_MAX_SECONDSNoMaximum record_audio length in seconds.120
PHONEMIZER_ESPEAK_LIBRARYNoPath to libespeak-ng if it is not in Homebrew's default location.
VOICE_COACH_WHISPER_MODELNoWhisper model size: tiny, base, small, medium, large-v3, etc.small
VOICE_COACH_WHISPER_DEVICENoCTranslate2 device for Whisper.cpu
VOICE_COACH_PRONUNCIATION_DEVICENoPronunciation model device: auto (MPS when available), cpu or mps.auto
VOICE_COACH_WHISPER_COMPUTE_TYPENoCTranslate2 compute type for Whisper.int8
VOICE_COACH_PRONUNCIATION_BACKENDNoPronunciation backend: local (wav2vec2) or azure.local

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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
record_audioA

Records from the computer's microphone and saves a 16 kHz mono .wav.

Args:
    seconds: recording length (max 120 by default). Tell the user before calling.
    name: optional file name (without extension); defaults to date and time.

Returns `audio` (path of the .wav), levels (peak/RMS in dBFS, estimated SNR, % clipping),
`confidence` and `warnings`. The `no_microphone_permission` warning means macOS delivered no
audio: the user must enable the microphone for the app in System Settings.
analyze_pitchA

Measures the pitch accuracy of sung audio (solo voice, one melodic line).

Args:
    audio: audio path (wav/flac/mp3/m4a) or a name returned by record_audio.
    reference_midi: optional path to a .mid with the expected melody. Tolerates singing an
        octave up/down, starting at another moment and a somewhat different tempo.
    key: optional when there is no MIDI, e.g. "A minor", "G major", "F#" (Spanish names such as
        "La menor" also work): each note is compared with the nearest note of that scale.
        Without it, with the nearest equal-tempered note.
    midi_track: index of the MIDI track to use (default: the non-drum track with most notes).

Returns `summary` (notes, range, pct_within_25_cents, signed mean_deviation_cents,
tendency flat/sharp/centered, drift_cents between 1st and 2nd half, stability counts; with
MIDI also missed, extra_notes, wrong_notes, onsets on_time/late/early, octave_shift,
start_offset_ms and relative_tempo >1 = slower) and `notes`: t (s), dur, note or
expected/sung, cents (+ = sharp), stability (stable | vibrato with vibrato_hz and
vibrato_pp_cents | unstable with std_cents), drift_cents within the note and, with MIDI,
onset_ms/onset; reference notes not sung have status=missed and unmatched sung notes
status=extra. If the list does not fit, the most problematic notes are shown and the rest
is in `full_details`.
transcribeA

Transcribes audio with timestamps (faster-whisper, local).

Args:
    audio: audio path or a name returned by record_audio.
    language: "en", "es", "en-US", "Spanish"…; auto-detected when omitted.

Returns `language`, `language_prob`, `text`, `segments` [{t, end, text}] and `words`
[{w, t, end}]. If it does not fit, words are dropped first and then segments (everything
stays in `full_details`). The first call downloads the model (VOICE_COACH_WHISPER_MODEL).
speech_metricsA

Measures pace, pauses, filler words and pitch/volume variation of a speech.

Args:
    audio: audio path or a name returned by record_audio.
    language: language of the speech ("en" or "es"; filler lists exist for both).
    pause_threshold_s: minimum silence between words to count as a long pause.

Returns:
- `pace`: words, speaking_time_s, words_per_minute, wpm_excluding_long_pauses.
- `pauses`: count, total_s, max_s, per_minute and items [{t, dur, after: previous word}].
- `fillers`: total, per_minute, by_type and occurrences [{t, text}]. Ambiguous words
  ("like", "so") only count when isolated by a comma or a pause.
- `pitch`: median_f0_hz, std_semitones, range_p10_p90_semitones, monotone (std < 2 st) and
  monotone_stretches [{t, end}] over 8 s windows.
- `volume`: mean_dbfs, std_between_words_db, range_p10_p90_db, low_variation (std < 3 dB).
- `segments` of the transcript [{t, end, text}].
assess_pronunciationA

Compares the pronounced phonemes with the expected ones for a text read aloud (English).

Args:
    audio: audio path or a name returned by record_audio (up to 60 s; short sentences work best).
    expected_text: the exact text that was read.
    language: "en-US" (default) or "en-GB".

Returns `summary` (overall_score 0–100, words_with_errors, error counts by type,
frequent_confusions expected→detected) and `words`: word, score, t (s) and, when there are
errors, expected/detected in IPA and errors [{type: substitution|deletion|insertion,
expected, detected}]; `missing` when the word was not said. `phonemes` holds both full
sequences. Word score = 100·(1 − (S + D + 0.5·I)/expected phonemes). Allophonic variants
(flap, schwa, linking r) do not count as errors. The text_mismatch warning means a
different text was probably read. Backend: local wav2vec2, or Azure when
VOICE_COACH_PRONUNCIATION_BACKEND=azure (then the audio is sent to Azure).
read_progressA

Reads the latest sessions from the progress log (~/VoiceCoach/progress.md).

Use it at the start of a session to pick up the previous focus. Returns `file`,
`total_entries` and `entries` (markdown of each session, oldest to newest).
log_progressA

Appends a session to the progress log (~/VoiceCoach/progress.md).

Args:
    entry: markdown of the session. It should start with "## YYYY-MM-DD · mode · exercise";
        if it does not start with "## ", the date and time are added as the title.

Prompts

Interactive templates invoked by user choice

NameDescription
singing_sessionGuides a singing session: warm-up, exercise, pitch analysis, feedback and next step.
pronunciation_sessionGuides an English pronunciation session with minimal pairs and target sentences.
speaking_sessionGuides a public-speaking session: pace, pauses, filler words and pitch/volume variation.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.1/5.0

Scored across 7 tools

Disambiguation4/5

The tools target clearly different tasks: recording, sung pitch analysis, transcription, speech delivery metrics, pronunciation scoring, and progress log read/write. The only mild overlap is pitch measurement appearing in both analyze_pitch (singing, melodic line) and speech_metrics (speech variation), but the descriptions clearly separate singing from speech and read-aloud pronunciation assessment.

Naming Consistency4/5

Five of the seven tools follow a clear verb_noun pattern (record_audio, analyze_pitch, read_progress, assess_pronunciation, log_progress). The bare verb 'transcribe' and the noun phrase 'speech_metrics' are minor deviations but still readable and unambiguous.

Tool Count5/5

Seven tools is well within the sweet spot for this domain, and each one maps to a distinct stage of the coaching workflow (record, analyze, log, review). Nothing feels padded or redundant.

Completeness4/5

The surface covers the full loop: capture audio, analyze singing, speech and pronunciation, then read and append progress. The progress log has read/append but no update, delete, or cross-session comparison, which are minor gaps an agent can work around.

Maintenance

ActivityNo data
ResponsivenessNo issues