Brainiall Pronunciation
by brainiall.com · remote · no sign-in to list tools · v1.0.0 · published by com.brainiall
Pronunciation assessment, phoneme scoring, speaker voice ID, audio transcription, speech synthesis.
14 tools: 1 do something that can't be undone, 10 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone1Claude Code: ask: see these tools
- Changes things10Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http pronunciation https://api.brainiall.com/mcp/pronunciation/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "synthesize_speech" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "generate": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
14 tools
Can't be undone 1Claude Code: ask
voice_id_enrollEnroll a voiceprint for a speaker from ~2s of clear speech.No findings
Why it is in this group
- The description says "irreversible".
Description, as the server wrote it Enroll a voiceprint for a speaker from ~2s of clear speech. Repeat with more clips to strengthen it. Only an irreversible embedding is stored — never the raw audio. Returns: dict with keys: speaker_id (str), n_samples (int), enrolled (bool).
Annotations the server declares
- title: Enroll Voiceprint
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Changes things 10Claude Code: ask
assess_pronunciationAssess English pronunciation quality from audio.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Assess English pronunciation quality from audio. Scores pronunciation at four levels: overall, sentence, word, and phoneme. Each score is 0-100. Phonemes are returned in both IPA and ARPAbet notation. Sub-300ms inference latency. Args: audio_base64: Base64-encoded audio data. Supports WAV, MP3, OGG, and WebM formats. text: The reference English text that the speaker was expected to read aloud. audio_format: Audio format hint — one of 'wav', 'mp3', 'ogg', 'webm'. Defaults to 'wav'. Returns: dict with keys: - overallScore (int 0-100): Overall pronunciation quality - sentenceScore (int 0-100): Sentence-level fluency and accuracy - words (list): Per-word scores, each containing: - word (str): The word - score (int 0-100): Word pronunciation score - phonemes (list): Per-phoneme scores with IPA/ARPAbet notation - decodedTranscript (str): What the model heard (ASR transcript) - transcript (str): Reference text - confidence (float 0-1): Scoring confidence - warnings (list[str]): Quality warnings if any - audioQuality (dict): Audio metrics (SNR, peak/RMS dB, etc.)
Annotations the server declares
- title: Assess Pronunciation
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
check_pronunciation_serviceCheck if the Brainiall Pronunciation service is healthy and ready.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check if the Brainiall Pronunciation service is healthy and ready. Returns: dict with keys: - status (str): 'healthy' or error state - modelLoaded (bool): Whether the scoring model is loaded - version (str): API version
Annotations the server declares
- title: Check Pronunciation Service
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
check_stt_serviceCheck if the Brainiall Speech service is healthy and ready.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check if the Brainiall Speech service is healthy and ready. Returns: dict with keys: - status (str): 'healthy' or error state - modelLoaded (bool): Whether the speech-recognition model is loaded - version (str): API version
Annotations the server declares
- title: Check STT Service
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
check_tts_serviceCheck if the Brainiall Voice service is healthy and ready.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check if the Brainiall Voice service is healthy and ready. Returns: dict with keys: - status (str): 'healthy' or error state - modelLoaded (bool): Whether the synthesis model is loaded - version (str): API version
Annotations the server declares
- title: Check TTS Service
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
check_whisper_serviceCheck if the Brainiall Speech Pro service is healthy and ready.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Check if the Brainiall Speech Pro service is healthy and ready. Returns: dict with keys: - status (str): 'healthy' or error state - modelLoaded (bool): Whether the Brainiall Speech Pro engine is loaded - diarizeLoaded (bool): Whether the diarization pipeline is loaded - version (str): API version - modelName (str): Engine version identifier
Annotations the server declares
- title: Check Brainiall Speech Pro Service
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
synthesize_speechGenerate natural speech audio from English text.1 finding
Why it is in this group
- The description's first verb is "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "synthesize_speech" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "generate": a word for a change.
Description, as the server wrote it Generate natural speech audio from English text. Produces high-quality speech with 12 English voices. Returns base64-encoded WAV audio (16-bit PCM, 24kHz mono) along with metadata. Available voices: - af_heart (default), af_bella, af_nicole, af_sarah, af_sky (American female) - am_adam, am_michael (American male) - bf_emma, bf_isabella (British female) - bm_george, bm_lewis, bm_daniel (British male) Args: text: English text to synthesize (1-5000 characters). voice: Voice ID. See list above. Defaults to 'af_heart'. speed: Speed multiplier from 0.5 to 2.0 (default: 1.0). Returns: dict with keys: - audio_base64 (str): Base64-encoded WAV audio (16-bit PCM, 24kHz) - duration_ms (str): Audio duration in milliseconds - voice (str): Voice ID used - text_length (str): Input text character count - processing_ms (str): Synthesis time in milliseconds
Annotations the server declares
- title: Synthesize Speech
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
transcribe_audioTranscribe audio to text with word-level timestamps.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Transcribe audio to text with word-level timestamps. Converts spoken English audio into text with optional word-level timestamps and per-word confidence scores. Args: audio_base64: Base64-encoded audio data (WAV, MP3, OGG, FLAC, WebM). audio_format: Audio format hint. Auto-detected from magic bytes if omitted. include_timestamps: Whether to include word-level timing (default: true). Returns: dict with keys: - text (str): Full decoded transcript - words (list): Per-word results with timestamps, each containing: - word (str): The transcribed word - start (float): Start time in seconds - end (float): End time in seconds - confidence (float 0-1): Word-level confidence - audioDurationMs (int): Audio duration in milliseconds - metadata (dict): Processing time, audio length, model version - audioQuality (dict): Audio metrics (SNR, peak/RMS dB, etc.)
Annotations the server declares
- title: Transcribe Audio
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
transcribe_audio_proTranscribe audio with Brainiall Speech Pro — multilingual transcription.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Transcribe audio with Brainiall Speech Pro — multilingual transcription. Supports 99 languages with automatic language detection, word-level timestamps, per-word confidence scores, and optional speaker diarization (identifies who spoke each word). Best-in-class WER (~2%). Args: audio_base64: Base64-encoded audio (WAV, MP3, OGG, FLAC, WebM). language: Language code. Auto-detected if omitted. Supports 99 languages. diarize: Enable speaker diarization (default: false). When true, each word includes a speaker label (e.g. SPEAKER_00, SPEAKER_01). Returns: dict with keys: - text (str): Full decoded transcript - words (list): Per-word results with timestamps, each containing: - word (str), start (float), end (float), confidence (float 0-1) - speaker (str|null): Speaker label when diarize=true - speakers (dict|null): Speaker info with count and labels - audioDurationMs (int): Audio duration in milliseconds - metadata (dict): Processing time, language, languageProbability - audioQuality (dict): Audio metrics (SNR, peak/RMS dB, etc.)
Annotations the server declares
- title: Transcribe Audio Pro
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
voice_id_identify1:N identification — rank everyone enrolled in the group against this clip.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 1:N identification — rank everyone enrolled in the group against this clip. Returns: dict with keys: candidates (list of {speaker_id, similarity}, best first).
Annotations the server declares
- title: Identify Speaker (1:N)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
voice_id_verify1:1 verification — is this clip the enrolled speaker?No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 1:1 verification — is this clip the enrolled speaker? Returns: dict with keys: similarity (float), match (bool), threshold (float).
Annotations the server declares
- title: Verify Speaker (1:1)
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
Only reads 3Claude Code: allow
get_phoneme_inventoryGet the full phoneme inventory supported by the pronunciation scorer.No findings
Why it is in this group
- The name "get_phoneme_inventory" says "get": a word for reading.
Description, as the server wrote it Get the full phoneme inventory supported by the pronunciation scorer. Returns a list of all English phonemes the engine can assess, including ARPAbet symbol, IPA equivalent, example word, and phoneme category (vowel, consonant, diphthong). Returns: list of dicts, each with keys: - arpabet (str): ARPAbet symbol (e.g. 'AA', 'TH') - ipa (str): IPA notation - example (str): Example word containing the phoneme - category (str): vowel, consonant, or diphthong
Annotations the server declares
- title: Get Phoneme Inventory
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_tts_voicesList all available Brainiall Voice synthesis voices with metadata.No findings
Why it is in this group
- The name "list_tts_voices" says "list": a word for reading.
Description, as the server wrote it List all available Brainiall Voice synthesis voices with metadata. Returns: dict with keys: - voices (list): Available voices, each with id, name, gender, accent, grade - defaultVoice (str): Default voice ID
Annotations the server declares
- title: List TTS Voices
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
voice_id_list_speakersList the speakers enrolled in a group.No findings
Why it is in this group
- The name "voice_id_list_speakers" says "list": a word for reading.
Description, as the server wrote it List the speakers enrolled in a group. Returns: dict with keys: speakers (list of {speaker_id, n_samples, ...}).
Annotations the server declares
- title: List Enrolled Speakers
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http pronunciation https://api.brainiall.com/mcp/pronunciation/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__pronunciation__get_phoneme_inventory",
"mcp__pronunciation__voice_id_list_speakers",
"mcp__pronunciation__list_tts_voices"
],
"ask": [
"mcp__pronunciation__assess_pronunciation",
"mcp__pronunciation__check_pronunciation_service",
"mcp__pronunciation__transcribe_audio",
"mcp__pronunciation__check_stt_service",
"mcp__pronunciation__voice_id_enroll",
"mcp__pronunciation__voice_id_verify",
"mcp__pronunciation__voice_id_identify",
"mcp__pronunciation__synthesize_speech",
"mcp__pronunciation__check_tts_service",
"mcp__pronunciation__transcribe_audio_pro",
"mcp__pronunciation__check_whisper_service"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as pronunciation. Review it before you use it.