<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: CHIVOX AI</title>
    <description>The latest articles on DEV Community by CHIVOX AI (@_59eb1ed69d7c5c0d916345).</description>
    <link>https://dev.to/_59eb1ed69d7c5c0d916345</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3979162%2F70f6299b-382c-4fd3-ab94-6919787da5dc.png</url>
      <title>DEV Community: CHIVOX AI</title>
      <link>https://dev.to/_59eb1ed69d7c5c0d916345</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_59eb1ed69d7c5c0d916345"/>
    <language>en</language>
    <item>
      <title>I Built an AI Mandarin Voice Coach with Gemini Live API — Here's What I Learned</title>
      <dc:creator>CHIVOX AI</dc:creator>
      <pubDate>Wed, 01 Jul 2026 07:19:17 +0000</pubDate>
      <link>https://dev.to/_59eb1ed69d7c5c0d916345/i-built-an-ai-mandarin-voice-coach-with-gemini-live-api-heres-what-i-learned-5fjb</link>
      <guid>https://dev.to/_59eb1ed69d7c5c0d916345/i-built-an-ai-mandarin-voice-coach-with-gemini-live-api-heres-what-i-learned-5fjb</guid>
      <description>&lt;p&gt;I use Duolingo every day for Japanese. I genuinely like it. But three things drive me crazy.&lt;/p&gt;

&lt;p&gt;The progression is one-size-fits-all. The learning sequence is the same for everyone. Even if you've mastered certain vocabulary, you can't skip it. And if something is genuinely hard for you, you don't get significantly more practice on it. The "adaptive" difficulty doesn't feel adaptive.&lt;/p&gt;

&lt;p&gt;The speech scoring is unreliable. I'll pronounce a word the same way twice — once it lets me go, the next time it says no. When you're genuinely trying to improve your pronunciation, inconsistent feedback is worse than no feedback. It's demoralizing.&lt;/p&gt;

&lt;p&gt;The conversation practice is casual (making phone calls all the time?) which reminds me of Siri. This is the big one. Most people learn a language because they want to talk to other people. But every app I've tried focuses on vocabulary, grammar, reading — everything except actual conversation. I couldn't find a single app that puts you in a realistic scenario and says: "Order tea from this person. In Mandarin. Right now. With specific tasks. "&lt;/p&gt;

&lt;p&gt;That's how I came up with the idea of task-driven speaking scenarios. And that's what ChiChat is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What ChiChat Does&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ChiChat is an open-source AI Mandarin voice coach. You have real voice conversations with AI NPCs in everyday Chinese scenarios — a tea house (茶馆), a hotel (酒店), a wet market (菜市场). Each NPC speaks only Mandarin and adapts to your level.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9fiideyfcv603tm494jn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9fiideyfcv603tm494jn.jpg" alt=" " width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here's the flow:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;User speaks Mandarin → Mic → Gemini Live (STT + LLM + TTS) → NPC responds&lt;br&gt;
                                    ↓&lt;br&gt;
                           Slot tracking + Speech correction&lt;br&gt;
                                    ↓&lt;br&gt;
                    [End conversation] → Pronunciation scoring&lt;br&gt;
                                    ↓&lt;br&gt;
                         LLM evaluation (tier, feedback, drills)&lt;br&gt;
                                    ↓&lt;br&gt;
                    Coaching report + targeted pronunciation drills&lt;/p&gt;

&lt;p&gt;A typical session: you walk into a virtual tea house. The NPC, 小王 (a tea server), greets you. Your task might be: order 龙井茶 (Longjing tea) in a 小壶 (small pot), pick 花生 (peanuts) as a snack, sit by the window. You speak. He responds. It's a real conversation — you can interrupt him mid-sentence, change your mind, ask questions.&lt;/p&gt;

&lt;p&gt;After the conversation ends, you get three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Word-level pronunciation scores** — each word you said scored 0-100 by a professional assessment API (not ASR confidence)&lt;/li&gt;
&lt;li&gt;AI coaching feedback — a tier rating, dimension-by-dimension analysis, expression upgrade suggestions&lt;/li&gt;
&lt;li&gt;Targeted drills — pronunciation practice on your weakest words and phrases&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a six-phase learning loop: Select a scenario → Briefing (see your task) → Dialogue (talk to the NPC) → Review (transcript with scores) → Coaching (AI feedback) → Drill (practice weak spots).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three Problems I Set Out to Solve&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adaptive difficulty that actually adapts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ChiChat has four difficulty tiers. At Tier 1, the NPC speaks very slowly and offers binary choices: "你要绿茶还是红茶?" (Green tea or black tea?). At Tier 4, the NPC chats naturally about tea origins, brewing methods, and uses colloquial expressions.&lt;/p&gt;

&lt;p&gt;The trick is simple: the difficulty knob is just a system instruction modifier. Same model, same voice — different NPC persona. &lt;/p&gt;

&lt;p&gt;Here's what Tier 1 looks like for the tea house:Speak very slowly and clearly. Offer multiple choice, like "Do you want green tea or black tea?" Accept single-word answers. If they don't know what to say, give them options.&lt;/p&gt;

&lt;p&gt;And Tier 4:Completely natural conversation. Chat about tea origins, brewing methods, use colloquial expressions. Expect natural, fluent dialogue.&lt;/p&gt;

&lt;p&gt;Promotion requires 2 consecutive evaluations above your current tier — not just one lucky run. And the tier assessment is independent: your history doesn't anchor your score. A Tier 1 learner who suddenly performs at Tier 3 gets rated Tier 3.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pronunciation scoring you can trust&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;ASR (speech recognition) tells you what you said. Pronunciation scoring tells you how well you said it. These are fundamentally different things. ASR can perfectly transcribe your speech while you butcher every tone.&lt;/p&gt;

&lt;p&gt;ChiChat uses a professional pronunciation assessment API which I came across via X. I'm really happy there are smart people working in this niche niche technique! They offer their services via the MCP (Model Context Protocol) and can do both English and Chinese Mandarin. Each word gets a 0-100 score. If you say "茉莉花茶" (jasmine tea) and score 45, that means your tones need work — and the score will be consistent the next time you say it the same way.&lt;/p&gt;

&lt;p&gt;Here's the core of the MCP integration — it's a standard JSON-RPC call:&lt;/p&gt;

&lt;p&gt;typescript&lt;br&gt;
const res = await fetch(MCP_URL, {&lt;br&gt;
  method: "POST",&lt;br&gt;
  headers: {&lt;br&gt;
    "Authorization": &lt;code&gt;Bearer ${apiKey}&lt;/code&gt;,&lt;br&gt;
    "Content-Type": "application/json",&lt;br&gt;
    "Mcp-Session-Id": sessionId,&lt;br&gt;
  },&lt;br&gt;
  body: JSON.stringify({&lt;br&gt;
    jsonrpc: "2.0",&lt;br&gt;
    id: Date.now(),&lt;br&gt;
    method: "tools/call",&lt;br&gt;
    params: {&lt;br&gt;
      name: "cn_sentence_eval",&lt;br&gt;
      arguments: { ref_text: refText, audio_base64: audioBase64, rank: 100 },&lt;br&gt;
    },&lt;br&gt;
  }),&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;The MCP session has a ~3-minute timeout. We cache the session ID and retry with a fresh session if it goes stale — transparent to the user.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conversation-first, not vocabulary-first&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most language apps start with flashcards. ChiChat starts with a task.&lt;/p&gt;

&lt;p&gt;Each scenario has slots — the key decisions you need to make during the conversation. For the tea house: tea type, pot size, snack, seating. For the hotel: room type, number of nights, breakfast, payment method. The app randomly generates a task from these slots, and your goal is to communicate your choices to the NPC through natural conversation.&lt;/p&gt;

&lt;p&gt;You don't memorize "大床房 means king-size room" on a flashcard. You check into a hotel and figure it out when the NPC asks what you want. The NPC tracks your slot progress with Gemini's function calling:&lt;/p&gt;

&lt;p&gt;typescript&lt;br&gt;
{&lt;br&gt;
  name: "update_slots",&lt;br&gt;
  description: "Call whenever the customer specifies any relevant info.",&lt;br&gt;
  parameters: {&lt;br&gt;
    type: "OBJECT",&lt;br&gt;
    properties: {&lt;br&gt;
      tea_type: { type: "STRING", enum: ["绿茶", "红茶", "乌龙茶", "茉莉花茶", "普洱茶"] },&lt;br&gt;
      size:     { type: "STRING", enum: ["小壶", "中壶", "大壶"] },&lt;br&gt;
      snack:    { type: "STRING", enum: ["花生", "瓜子", "绿豆糕", "不要"] },&lt;br&gt;
      seating:  { type: "STRING", enum: ["窗边", "包间", "大厅"] },&lt;br&gt;
    },&lt;br&gt;
  },&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This is the non-obvious trick: function calling works inside a live voice session. The model calls &lt;code&gt;update_slots&lt;/code&gt; mid-conversation without interrupting the audio stream. It also calls &lt;code&gt;correct_user_speech&lt;/code&gt; after each turn to fix ASR misrecognitions (like "绿茶" being misheard as "旅差") — all happening in real time, inside the same WebSocket connection.&lt;/p&gt;

&lt;p&gt;Under the Hood: Gemini Live API&lt;/p&gt;

&lt;p&gt;The core of ChiChat is Google's Gemini Live API. This is genuinely different from the typical voice AI pipeline of "record → Whisper → GPT → TTS → play." Gemini Live gives you a single WebSocket connection with bidirectional audio streaming. STT, LLM inference, and TTS all happen in one round trip. The latency is sub-1-second.&lt;/p&gt;

&lt;p&gt;Here's the session setup:&lt;/p&gt;

&lt;p&gt;typescript&lt;br&gt;
const session = await ai.live.connect({&lt;br&gt;
  model: "gemini-3.1-flash-live-preview",&lt;br&gt;
  config: {&lt;br&gt;
    responseModalities: [Modality.AUDIO],&lt;br&gt;
    speechConfig: {&lt;br&gt;
      voiceConfig: {&lt;br&gt;
        prebuiltVoiceConfig: { voiceName: scenario.voiceName },&lt;br&gt;
      },&lt;br&gt;
    },&lt;br&gt;
    systemInstruction: buildSystemInstruction(scenario, task, tier),&lt;br&gt;
    tools: [buildSlotTool(scenario), buildCorrectionTool()],&lt;br&gt;
    inputAudioTranscription: {},&lt;br&gt;
    outputAudioTranscription: {},&lt;br&gt;
  },&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;Three things to notice:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;responseModalities: [Modality.AUDIO]&lt;/code&gt; — the model responds with audio, not text. But we also get text transcripts for both input and output via &lt;code&gt;inputAudioTranscription&lt;/code&gt; and &lt;code&gt;outputAudioTranscription&lt;/code&gt;. This gives us the transcript for the review phase without running a separate ASR step.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;tools&lt;/code&gt; — function calling works inside live sessions. The model can call &lt;code&gt;update_slots&lt;/code&gt; and &lt;code&gt;correct_user_speech&lt;/code&gt; mid-conversation. This is how we do structured data extraction on top of a voice conversation without interrupting the flow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;voiceName&lt;/code&gt; — each scenario gets a different voice. Puck (male) for the tea house server, Leda (young female) for the hotel receptionist, Kore (mature female) for the market vendor 张阿姨.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Barge-in is built in. The user can interrupt the NPC mid-sentence — just like a real conversation. No special handling needed; the Gemini Live API's VAD (voice activity detection) handles it natively.&lt;/p&gt;

&lt;p&gt;Progressive JSON Streaming&lt;/p&gt;

&lt;p&gt;After the conversation ends, we send the transcript to an LLM for coaching evaluation. The response is a large JSON object — tier assessment, dimension feedback, pronunciation details, expression suggestions, targeted drills. This takes 3-20 seconds depending on the model.&lt;/p&gt;

&lt;p&gt;Our first approach: stream the raw JSON to the user as it arrives. Terrible idea. Users saw partial JSON fragments scrolling past and had no idea what was happening.&lt;/p&gt;

&lt;p&gt;Our second approach: show a spinner until the full response arrives. Better, but the wait felt long.&lt;/p&gt;

&lt;p&gt;Final solution: progressive JSON parsing. We stream the LLM response via SSE, accumulate the chunks, and on every chunk, try to close the incomplete JSON with various bracket combinations. If any combination parses, we render the structured coaching UI with whatever data is available.&lt;/p&gt;

&lt;p&gt;typescript&lt;br&gt;
function tryParsePartialJson(text: string): Partial | null {&lt;br&gt;
  const cleaned = text.replace(/^&lt;br&gt;
&lt;br&gt;
&lt;code&gt;(?:json)?\s*\n?/i, "")&lt;br&gt;
                      .replace(/\n?&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
\s*$/i, "").trim();&lt;br&gt;
  if (!cleaned.startsWith("{")) return null;&lt;br&gt;
  const closers = ["}", "]}", "]}}", "]}]}}", '"}}}', '"}}', '"}'];&lt;br&gt;
  for (const closer of closers) {&lt;br&gt;
    try {&lt;br&gt;
      const obj = JSON.parse(cleaned + closer);&lt;br&gt;
      if (obj &amp;amp;&amp;amp; typeof obj === "object") return obj;&lt;br&gt;
    } catch { /* try next */ }&lt;br&gt;
  }&lt;br&gt;
  return null;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;It's hacky. It works. The user sees the coaching sections appear one by one as the LLM generates them — tier rating first, then dimension feedback, then suggestions, then drills. The UI feels alive instead of frozen.&lt;/p&gt;

&lt;p&gt;The Fork Story: English → Mandarin&lt;/p&gt;

&lt;p&gt;ChiChat started as an internal English speaking coach I built over about 3 weeks--Obviously that's what I'm good at. Coffee shop, hotel, farmer's market — English NPCs for learners of English. When it was working well, I wanted to flip it: build a Mandarin coach for people learning Chinese.&lt;/p&gt;

&lt;p&gt;The fork took 7 commits. Here's what changed and what didn't:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Changed&lt;/th&gt;
&lt;th&gt;Stayed the same&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3 scenarios (tea house, hotel, wet market)&lt;/td&gt;
&lt;td&gt;Audio pipeline (PCM capture, ring buffer, playback)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NPC system instructions (all Mandarin)&lt;/td&gt;
&lt;td&gt;Turn-capture state machine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evaluation rubrics (tones, measure words, particles)&lt;/td&gt;
&lt;td&gt;Progression system&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pronunciation API (unified &lt;code&gt;cn_sentence_eval&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;Drill UI component&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Default eval LLM (Gemini Flash Lite, free tier)&lt;/td&gt;
&lt;td&gt;SSE streaming evaluation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API keys: 4 required → 2 required&lt;/td&gt;
&lt;td&gt;Hook architecture&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few things broke in interesting ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrong voice gender. The male tea house server had a female voice. Voice assignment is one line of config, but you don't notice until you actually listen.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cn_word_eval&lt;/code&gt; doesn't exist. The English version used separate API calls for word-level and sentence-level scoring. For Chinese, only &lt;code&gt;cn_sentence_eval&lt;/code&gt; exists — it handles both. Took a while to figure out why single-word drills were failing silently.&lt;/li&gt;
&lt;li&gt;English leaking into Chinese UI. The hotel scenario still showed "without breakfast" instead of "不含早餐" deep in the slot values.&lt;/li&gt;
&lt;li&gt;4 API keys → 2. The English version required a separate LLM endpoint for evaluation. For the open-source Mandarin version, I switched the default to Gemini 3.1 Flash Lite — it's free tier (500 req/day) and uses the same Google API key that powers the voice dialogue. One key for everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point: if your architecture separates content (scenarios, prompts, rubrics) from mechanics (audio pipeline, state machine, evaluation flow), porting to a new language is mostly a content job.&lt;/p&gt;

&lt;p&gt;Try It Yourself&lt;/p&gt;

&lt;p&gt;ChiChat is MIT licensed. You need two API keys:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Google AI Studio API key&lt;/strong&gt; — powers both Gemini Live dialogue and conversation evaluation (&lt;a href="https://aistudio.google.com/apikey" rel="noopener noreferrer"&gt;get one here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pronunciation scoring API key&lt;/strong&gt; — powers word-level pronunciation assessment(&lt;a href="https://api-portal.cloud.chivox.com/login" rel="noopener noreferrer"&gt;get one here&lt;/a&gt;,they offer 600 times free trial. Enough for my development anyway.)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/lindun1979/ChiChat.git" rel="noopener noreferrer"&gt;https://github.com/lindun1979/ChiChat.git&lt;/a&gt;&lt;br&gt;
cd ChiChat&lt;br&gt;
cp .env.example .env.local&lt;br&gt;
Add your API keys to .env.local&lt;br&gt;
npm install&lt;br&gt;
npm run dev&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Open `http://localhost:3000` in Chrome (mic access required).

What's Next

I have a lot more ideas. More scenarios — a restaurant, a taxi, a doctor's visit. More languages — the architecture supports it. Better audio (migrating from the deprecated `ScriptProcessorNode` to `AudioWorklet`). Mobile optimization.

I believe this journey will be fruitful — not just for the project, but for deepening my understanding of both technology and language learning. Every time I test a new scenario, I learn something about what makes conversation practice effective. Every time I debug the audio pipeline, I learn something about real-time voice systems.

If you're interested in voice AI, language learning, or both — [join us on GitHub](https://github.com/lindun1979/ChiChat). Open an issue, suggest a scenario, or just try it and tell me what you think.

Let's Discuss

I'm genuinely curious about a few things:

- Real-time vs. post-conversation feedback. Right now, pronunciation scoring happens after the conversation ends. Should it happen during? Real-time correction would help, but it might break the conversational flow.
- Voice quality for teaching. The built-in Gemini voices are multilingual, but they're not optimized for pedagogical clarity. Has anyone experimented with fine-tuning TTS voices specifically for language teaching?
- What scenario would you add first? I went with tea house, hotel, and wet market because they're everyday situations with clear task structures. What's missing?

Drop a comment. I'd love to hear from anyone building in this space.

---

ChiChat is open source under MIT license. GitHub: [github.com/lindun1979/ChiChat](https://github.com/lindun1979/ChiChat)*

Tech stack: Next.js 16, React 19, TypeScript, Gemini Live API, Tailwind CSS 4, Vitest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>voiceai</category>
      <category>mcp</category>
      <category>languagelearning</category>
      <category>asr</category>
    </item>
    <item>
      <title>Chivox MCP — Speech assessment for AI language agents</title>
      <dc:creator>CHIVOX AI</dc:creator>
      <pubDate>Thu, 18 Jun 2026 06:24:36 +0000</pubDate>
      <link>https://dev.to/_59eb1ed69d7c5c0d916345/chivox-mcp-speech-assessment-for-ai-language-agents-30kj</link>
      <guid>https://dev.to/_59eb1ed69d7c5c0d916345/chivox-mcp-speech-assessment-for-ai-language-agents-30kj</guid>
      <description>&lt;p&gt;If you’re building an AI language tutor, you’ve already solved the easy part: listening. Speech-to-text APIs like Whisper or Realtime give you what the user said. But here’s the harder problem — and the one that actually matters for learning outcomes: how well did they say it?&lt;/p&gt;

&lt;p&gt;That gap between transcription and assessment is exactly where Chivox MCP lives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;&lt;br&gt;
Chivox MCP is a Model Context Protocol server that turns any LLM into a linguistics-grade speech examiner. Connect your agent to our streamable HTTP endpoint, pass it an audio clip, and you get back a fully structured, typed score matrix that goes far beyond “correct” or “incorrect.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You receive:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Holistic dimensions: overall, accuracy, fluency, and rhythm scores.&lt;br&gt;
Granular drill-downs: syllable-, word-, and phoneme-level feedback.&lt;br&gt;
Tonal precision: native support for tonal Mandarin, scoring pronunciation, pinyin, and character enunciation with the same rigor as English.&lt;br&gt;
One schema, sixteen tools, zero friction.&lt;/p&gt;

&lt;p&gt;The public catalog ships 16 production-ready tools today:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;10 English tasks: word, sentence, paragraph, phonics, multiple-choice, semi-open, correction, and realtime evaluation&lt;/p&gt;

&lt;p&gt;6 Mandarin tasks: character, pinyin, sentence, paragraph, constrained recognition, and AI-Talk&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Every tool returns the same top-level schema. That means switching a user from an English paragraph exercise to a Mandarin tone drill — or from a word-level prompt to a realtime stream — requires zero schema migration work on your end. If you’ve already wired your agent to MCP, you’ve already integrated Chivox.&lt;/p&gt;

&lt;p&gt;This is not a transcription layer.Let’s be clear: Chivox MCP is not another STT wrapper around Whisper. While transcription tells you “the user said ‘beach’”, Chivox tells you “the user substituted /iː/ with /ɪ/ and dropped the final affricate” — and wraps that finding in a typed JSON document your agent can act on immediately.&lt;/p&gt;

&lt;p&gt;Our engine is a dedicated pronunciation-scoring model trained on exam-grade reference audio, and it has served as the backbone of national-scale Chinese English examinations for over a decade. The MCP layer is simply the modern, standardized interface to that battle-tested infrastructure.&lt;/p&gt;

&lt;p&gt;Built for the agents you’re already shipping.If you have shipped an integration with OpenAI Realtime or a Whisper pipeline, you know exactly where transcription ends and pedagogy begins. &lt;/p&gt;

&lt;p&gt;Chivox MCP is the assessment layer you slot on top:&lt;br&gt;
Tutoring agents that generate targeted phoneme drills instead of generic “try again” feedback.&lt;br&gt;
Test-prep agents that need rubric-aligned, defensible scoring.&lt;br&gt;
Language-learning apps that must evaluate spoken Mandarin tones with linguistic fidelity.&lt;br&gt;
Corporate training tools that assess fluency and rhythm at scale.&lt;br&gt;
Because it speaks MCP, it drops into your existing tool-calling architecture without custom SDKs or fragile REST adapters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get started&lt;/strong&gt;&lt;br&gt;
Chivox MCP is available now through the CHIVOX API Portal. Grab an API key, point your agent at the streamable HTTP endpoint, and start returning exam-room precision in your next conversation turn.&lt;/p&gt;

&lt;p&gt;Don’t just transcribe speech. Examine it.&lt;br&gt;
Visit CHIVOX website: &lt;a href="https://api-portal.cloud.chivox.com/global" rel="noopener noreferrer"&gt;https://api-portal.cloud.chivox.com/global&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
