Skip to content

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.

Final · 1Changes · 10

14 tools: 1 do something that can't be undone, 10 change things and 3 only read.

Scanned Oct 21, 2026

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/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn
  • The server marks "synthesize_speech" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "generate": a word for a change.

    What this check looks for

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".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The description's first verb is "generate": a word for a change.

      What this check looks for
    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/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.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.