MCP Server for meeting recording and transcription — any video conferencing app, any OS
Server has 10 tools with complete descriptions and basic input schemas. Naming follows verb_noun convention (audio_record_start, audio_transcribe). Descriptions are detailed (100-300 chars) and explain WHEN to use each tool. However, schemas lack proper type constraints: parameters use generic string/null unions instead of enums where appropriate (e.g., model, language, quality). Output schemas are not documented. Error handling is minimal, no recovery guidance or actionable error messages visible in code. Tool composition is reasonable (separate record/transcribe/generate steps), but some tools combine concerns (audio_stop_and_transcribe does two things). Parameter descriptions are present but lack format constraints (e.g., 'language code' should specify ISO 639-1 format). No input validation visible for meeting_id path traversal risk, though _validate_meeting_id exists but is not enforced in all callers.
Configure transcription settings: language, model, diarization, quality.
Generate structured meeting minutes from a transcription.
Use this to check live translation progress during recording. Returns current translated text, elapsed time, segment count, and the path to the live markdown file. Only works while recording with live_translate enabled.
Use this when the user wants to record or extract audio from the computer. Works with: meetings (Meet/Teams/Zoom/Slack/Discord), YouTube videos, podcasts, Spotify, lectures, interviews, tutorials — any system audio. Also use this to extract text/transcript from a video playing in browser. Stereo WAV: left = system audio, right = microphone. With live_translate: translates audio in real-time to a markdown file.
Use this to stop recording WITHOUT transcribing. Saves the WAV file and returns its path. Prefer audio_stop_and_transcribe() which stops AND transcribes in one call.
Parameters lack enum constraints for known-value fields. 'model' accepts string|null but should be enum(tiny|base|small|medium|large-v3-turbo|large-v3). 'language' and 'quality' similarly unconstrained. Free-form strings invite hallucinated values.
Tool 'audio_stop_and_transcribe' combines two responsibilities (stop recording + transcribe). Should split into separate tools so agent can compose them independently. Violates single-responsibility principle.
Output schemas not documented. Tools return dicts but LLM cannot see field names, types, or structure. E.g., audio_status returns dict with 'capabilities', 'config_is_optional', etc., but no schema definition visible to client.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
Use this to check if the audio server is ready and show current config. Call this when user asks about status, setup, or what this server can do. This server can record and transcribe any audio: meetings, YouTube videos, podcasts, lectures, interviews, music. It can also extract text from video audio, generate meeting minutes, and identify speakers.
Stop recording and transcribe in one call. Combines audio_record_stop() and audio_transcribe().
Use this to transcribe a WAV file that already exists on disk. For recordings just made, use audio_stop_and_transcribe() instead. Works on any audio: meetings, YouTube, podcasts, lectures, interviews. Splits stereo channels for speaker attribution. With diarization, identifies individual speakers within each channel.
List all recordings on disk.
List all transcriptions on disk.
Error handling lacks recovery guidance. No visible error messages that tell LLM what to do next (e.g., 'Invalid meeting_id. Try recordings_list() to see available IDs'). Validation exists (_validate_meeting_id) but errors are not actionable.
Parameter descriptions lack format constraints. 'language code (e.g. en, fr, es)' should specify 'ISO 639-1 two-letter code'. 'model' description lists options but not as enum. Constraints should be formal (enum/pattern), not prose examples.