टेक्स्ट-टू-स्पीच MCP Server: Kokoro के साथ Claude के लिए लोकल TTS
एक टेक्स्ट-टू-स्पीच MCP server बनाएँ जो आपके अपने कंप्यूटर पर चलने वाली निजी आवाज़ Claude को दे। जानें कि Kokoro का 82 million parameter मॉडल कैसे काम करता है, 60 लाइन का Python server पाएँ, उसे Claude Desktop और Claude Code से जोड़ें, और उसकी तुलना hosted voices से करें।
Claude 2,000 शब्दों का लेख एक मिनट से कम में लिख सकता है, और फिर आप उसे दस मिनट तक आँखें सिकोड़कर पढ़ते हैं। एक text to speech MCP server यह अंतर मिटा देता है। Claude एक tool कॉल करता है, आपकी मशीन पर चलने वाला एक छोटा voice मॉडल टेक्स्ट को ऑडियो में बदलता है, और नतीजा आपके स्पीकर पर चलने लगता है, इससे पहले कि आपकी चाय ठंडी हो।
Kokoro ही वह मॉडल है जो इसे व्यावहारिक बनाता है। इसमें सिर्फ़ 82 million parameters हैं, यह Apache 2.0 लाइसेंस के तहत आता है, और 24 kHz की स्पीच देता है जो कहीं बड़े सिस्टम के सामने भी टिकती है। कोई API बिल नहीं है, आपके ड्राफ़्ट किसी तीसरे पक्ष पर अपलोड नहीं होते, और कोई rate limit नहीं है। यह लेख दिखाता है कि हिस्से आपस में कैसे जुड़ते हैं, लगभग 60 लाइन का एक काम करने वाला Python server देता है, उसे Claude Desktop और Claude Code से जोड़ता है, और फिर ईमानदारी से देखता है कि hosted voice कब बेहतर विकल्प है।
लोकल में टेक्स्ट-टू-स्पीच क्यों चलाएँ
Cloud voices बहुत अच्छी लगती हैं, लेकिन उनके साथ शर्तें जुड़ी होती हैं। हर request आपकी मशीन से बाहर जाती है, हर character का हिसाब रखा जाता है, और हर outage आपकी परेशानी बन जाता है। लोकल server इन सभी बातों को पलट देता है।
बिना अतिरिक्त कोशिश के निजता
जब Claude कोई ड्राफ़्ट contract, निजी journal entry, या अप्रकाशित product spec ज़ोर से पढ़ता है, तो टेक्स्ट आपके MCP server से होकर गुज़रता है और उसके आगे कहीं नहीं जाता। Kokoro आपके CPU या GPU पर inference चलाता है, एक WAV फ़ाइल disk पर लिखता है, और निशान वहीं खत्म हो जाता है। एक ईमानदार चेतावनी: Claude को अब भी वह सब मिलता है जो आप टाइप करते हैं, इसलिए "लोकल" का मतलब voice step है, पूरी बातचीत नहीं।
लागत और ऑफ़लाइन उपयोग
Hosted voice APIs आम तौर पर प्रति character या प्रति मिनट शुल्क लेते हैं। एक podcast intro के लिए यह ठीक है, लेकिन ऐसे agent के लिए जो दिन भर हर जवाब narrate करता है, यह भारी पड़ता है। Kokoro के weights एक बार डाउनलोड हो जाने के बाद, हर अतिरिक्त वाक्य पर बस कुछ सेकंड की बिजली खर्च होती है। लंबे दस्तावेज़, बार-बार retake, और अलग-अलग voices के प्रयोग, इन सबकी लागत एक जैसी है: शून्य।
पहली launch पर मॉडल Hugging Face से डाउनलोड होता है। उसके बाद server हवाई जहाज़ में, तहखाने में, या किसी corporate firewall के पीछे भी काम करता है। लेटेन्सी आपके हार्डवेयर पर निर्भर करती है, network round trip पर नहीं, इसलिए रात 3 बजे और दोपहर 3 बजे व्यवहार एक जैसा रहता है।
Kokoro असल में क्या है
आकार, लाइसेंस और ट्रेनिंग
Kokoro-82M एक open-weight text to speech मॉडल है, जो ISTFTNet vocoder के साथ StyleTTS 2 architecture पर बना है। Version 1.0 27 जनवरी 2025 को आया, उससे पहले 25 दिसंबर 2024 को एक पिछला release आया था। लेखकों ने कुछ सौ घंटे के permissively licensed और synthetic audio पर ट्रेनिंग की, और इसीलिए Apache 2.0 लाइसेंस व्यावसायिक प्रोजेक्ट्स के साथ सहज बैठता है।
स्पेसिफिकेशन
मान
पैरामीटर
82 मिलियन
लाइसेंस
Apache 2.0
आउटपुट सैंपल रेट
24 kHz
आर्किटेक्चर
ISTFTNet vocoder के साथ StyleTTS 2
v1.0 में आवाज़ें
54
v1.0 में भाषाएँ
8
सिस्टम डिपेंडेंसी
espeak-ng
💡 छोटा मतलब कमज़ोर नहीं। Kokoro का आकार ही इसे लैपटॉप पर चलने लायक बनाता है। सादे अंग्रेज़ी गद्य की narration में, एक आम सुनने में, इसे कई paid voices से अलग पहचानना मुश्किल है। हुक्म पर भावनाएँ दिखाने में, जैसे फुसफुसाना या हँसना, बड़े hosted मॉडल आगे निकल जाते हैं।
भाषाएँ और voice codes
Voice के नाम एक पैटर्न पर चलते हैं: पहला अक्षर भाषा या accent है, दूसरा लिंग है। af_heart एक American English female voice है, और bm_george एक British English male voice है। पाइपलाइन को टेक्स्ट को सही तरीके से phonemes में बदलने के लिए एक मेल खाता lang_code भी चाहिए।
Code
Language
Example voices
a
American English
af_heart, am_michael
b
British English
bf_emma, bm_george
e
Spanish
ef_dora
f
French
ff_siwis
h
Hindi
hf_alpha
i
Italian
if_sara
j
Japanese
jf_alpha
p
Brazilian Portuguese
pf_dora
z
Mandarin Chinese
zf_xiaobei
"8 languages" की गिनती में American और British English एक भाषा मानी जाती है। Japanese और Mandarin के लिए misaki family के अतिरिक्त packages साथ में इंस्टॉल हो जाते हैं, इसलिए उन्हें चालू करने से पहले project का README ज़रूर पढ़ें।
MCP server कैसे काम करता है
तीन चलते हुए हिस्से
इस setup में सिर्फ़ तीन हिस्से हैं, और हर एक का काम सीमित है:
Client। Claude Desktop या Claude Code Model Context Protocol बोलता है और तय करता है कि कोई tool कब कॉल करने लायक है।
Server। एक छोटा Python process, जिसे client stdio पर शुरू करता है। यह कुछ tools दिखाता है और उससे ज़्यादा कुछ नहीं।
Kokoro। उसी process के भीतर एक बार memory में लोड होता है, ताकि बाद की calls में धीमी शुरुआत न हो।
प्रवाह छोटा है। Claude speak कॉल करने का फ़ैसला करता है, टेक्स्ट के साथ एक voice नाम भेजता है, server ऑडियो synthesize करता है, उसे चलाता है, और फ़ाइल का path सादे टेक्स्ट में लौटाता है ताकि Claude आपको बता सके कि रिकॉर्डिंग कहाँ सेव हुई।
तैयार servers जिन्हें आज़माने लायक है
सब कुछ खुद लिखना ज़रूरी नहीं है। कई community projects पहले से Kokoro को MCP के लिए wrap कर चुके हैं:
kristofferv98/MCP_tts_server एक से ज़्यादा TTS engines देता है, जिनमें Kokoro भी है, और streaming playback के साथ आता है।
scottschram का kokoro-tts-mcp Apple Silicon पर MLX acceleration के साथ Kokoro-82M चलाता है।
hammeiam का koroko-speech-mcp एक संक्षिप्त speech server है, जो Kokoro के आसपास बना है।
तैयार servers एक दोपहर बचाते हैं। नीचे दिए तरीके से खुद लिखने में लगभग एक घंटा लगता है, लेकिन इससे टेक्स्ट की सफ़ाई, voice की डिफ़ॉल्ट सेटिंग और फ़ाइलें कहाँ जाएँ, इन सब पर आपका पूरा नियंत्रण रहता है।
Server चरण-दर-चरण बनाएँ
Dependencies इंस्टॉल करें
एक virtual environment इस्तेमाल करें ताकि PyTorch stack आपके system Python से दूर रहे। Python 3.10, 3.11 या 3.12 सुरक्षित विकल्प है।
Kokoro को आपके system पर espeak-ng phonemizer भी चाहिए:
macOS: brew install espeak-ng
Debian या Ubuntu: sudo apt-get install espeak-ng
Windows: espeak-ng का release package इंस्टॉल करें, फिर नया terminal खोलें
Server फ़ाइल लिखें
इसे kokoro_server.py के नाम से सेव करें। यह दो tools दिखाती है, startup पर English pipeline लोड करती है, टेक्स्ट से markdown साफ़ करती है, और Claude को रोके बिना ऑडियो चलाती है।
import os
import re
import time
from pathlib import Path
import numpy as np
import sounddevice as sd
import soundfile as sf
from kokoro import KPipeline
from mcp.server.fastmcp import FastMCP
SAMPLE_RATE = 24000
OUT_DIR = Path(os.environ.get("KOKORO_OUT", Path.home() / "kokoro_audio"))
OUT_DIR.mkdir(parents=True, exist_ok=True)
mcp = FastMCP("kokoro-tts")
pipelines = {}
def get_pipeline(lang_code: str) -> KPipeline:
if lang_code not in pipelines:
pipelines[lang_code] = KPipeline(lang_code=lang_code)
return pipelines[lang_code]
def clean_text(text: str) -> str:
text = re.sub(r"`{3}.*?`{3}", " code block omitted. ", text, flags=re.S)
text = re.sub(r"https?://\S+", "link", text)
text = re.sub(r"[#*_`>]+", "", text)
return re.sub(r"[ \t]+", " ", text).strip()
@mcp.tool()
def speak(text: str, voice: str = "af_heart", speed: float = 1.0,
lang_code: str = "a", play: bool = True) -> str:
"""Read text aloud with Kokoro. Returns the path of the saved WAV file."""
pipeline = get_pipeline(lang_code)
parts = []
for _, _, audio in pipeline(clean_text(text), voice=voice, speed=speed):
if audio is not None:
parts.append(audio.detach().cpu().numpy())
if not parts:
return "No audio was produced. Check the text and the voice name."
wave = np.concatenate(parts)
path = OUT_DIR / f"speech_{time.strftime('%Y%m%d_%H%M%S')}.wav"
sf.write(path, wave, SAMPLE_RATE)
if play:
sd.play(wave, SAMPLE_RATE)
return f"Saved {len(wave) / SAMPLE_RATE:.1f}s of audio to {path}"
@mcp.tool()
def list_voices() -> str:
"""List a few Kokoro voices and the lang_code each one needs."""
return (
"a: af_heart, af_bella, am_michael | b: bf_emma, bm_george | "
"e: ef_dora | f: ff_siwis | j: jf_alpha"
)
if __name__ == "__main__":
get_pipeline("a")
mcp.run()
यहाँ तीन design चुनाव मायने रखते हैं। Pipeline हर भाषा के हिसाब से cache होती है, इसलिए English और Spanish के बीच बदलने पर कुछ भी दोबारा लोड नहीं होता। Playback sd.play इस्तेमाल करता है, जो तुरंत लौट आता है, इसलिए Claude को ऑडियो खत्म होने का इंतज़ार नहीं करना पड़ता। और फ़ाइल में कहीं भी print कॉल नहीं होता, क्योंकि stdio server पर stdout protocol का है। एक भटका हुआ print message stream को बिगाड़ देता है।
Claude के साथ register करें
Claude Desktop के लिए claude_desktop_config.json खोलें। macOS पर यह ~/Library/Application Support/Claude/ में रहती है, और Windows पर %APPDATA%\Claude\ में। Command को अपने virtual environment के भीतर के interpreter की ओर इंगित करें, किसी साधारण python की ओर नहीं।
claude mcp add kokoro-tts -- /absolute/path/to/.venv/bin/python /absolute/path/to/kokoro_server.py
Client को restart करें, फिर एक सादे वाक्य से टेस्ट करें: "speak tool इस्तेमाल करके bm_george voice में hello कहिए।" अगर आपको एक ब्रिटिश सज्जन अभिवादन करते सुनाई दें, तो पूरी chain काम कर रही है।
Claude को स्वाभाविक ढंग से बोलने दें
कान के लिए लिखना
जो टेक्स्ट स्क्रीन पर अच्छा पढ़ता है, वह अक्सर ज़ोर से सुनने में अटपटा लगता है। Claude को एक स्थायी निर्देश दें, ताकि वह पहले ड्राफ़्ट से ही सुनने के लिए लिखे:
जब मैं आपसे कुछ ज़ोर से पढ़ने को कहूँ, तो speak tool कॉल करें। कान के लिए लिखें: छोटे वाक्य, बुलेट चिह्न नहीं, URLs नहीं, और जब संख्याएँ या acronyms बोलने में कठिन हों, तो उन्हें पूरा लिखें।
Server में clean_text function आपका safety net है, लेकिन वह ऐसे वाक्य को नहीं बचा सकता जिसमें स्वाभाविक विराम न हों। कुछ आदतें एक साथ output बेहतर बना देती हैं:
लंबे अंशों को paragraphs में बाँटें। Pipeline डिफ़ॉल्ट रूप से line breaks पर टेक्स्ट तोड़ती है, जिससे हर हिस्सा छोटा रहता है और गति स्थिर रहती है।
मुश्किल नामों की spelling ध्वनि के अनुसार बदलें। अगर कोई brand name गलत बोला जाता है, तो उसे वैसे लिखें जैसे वह बोला जाता है।
Speed 0.9 और 1.1 के बीच रखें। इस सीमा से आगे, speech हड़बड़ाहट या सुस्ती वाली लगने लगती है।
Hands-free voice कहाँ काम आता है
Voice tool उन पलों में अपनी जगह बनाता है जब आपकी आँखें या हाथ व्यस्त हों:
खाना पकाना। Claude से छह लोगों के लिए रेसिपी adapt करवाएँ और जब आपकी उँगलियों पर आटा लगा हो, तब steps ज़ोर से सुनें।
Proofreading। ड्राफ़्ट सुनने से अटपटी लय और बार-बार आए शब्द पकड़ में आते हैं, जिन्हें आँखें अक्सर छोड़ देती हैं।
यात्रा और सैर। बैठने से पहले कल के notes या लंबे thread का बोला हुआ सार माँगें।
Accessibility। बोलकर दी गई जानकारी कम दृष्टि वाले या पढ़ने में कठिनाई वाले लोगों को लंबे टेक्स्ट के साथ अधिक आराम से काम करने में मदद कर सकती है।
गति, हार्डवेयर और आम समस्याओं के हल
आपकी मशीन पर क्या उम्मीद करें
Kokoro एक आम लैपटॉप CPU पर चलता है, और GPU या Apple Silicon इसे और तेज़ कर देते हैं। किसी और के benchmark पर भरोसा करने के बजाय, अपना टेस्ट खुद चलाएँ: 200 शब्दों का एक paragraph भेजें और render का समय playback के समय से तुलना करें। अगर render पहले खत्म हो जाए, तो आपके पास real-time की गुंजाइश है और लंबे दस्तावेज़ भी तुरंत लगेंगे।
दो आदतें अनुभव को सहज रखती हैं। Pipeline को startup पर लोड करें, जैसा ऊपर का server करता है, क्योंकि पहला synthesis हमेशा सबसे धीमा होता है। और मॉडल को resident रखें: MCP client calls के बीच आपके server process को ज़िंदा रखता है, इसलिए weights memory में बने रहते हैं।
💡 टिप: Register करने से पहले server को एक बार terminal से चलाएँ। कोई भी लापता dependency client में एक अस्पष्ट "server failed" बैनर के बजाय पढ़ने योग्य Python error के रूप में दिख जाएगी।
पाँच समस्याएँ और उनके हल
लक्षण
संभावित कारण
हल
क्लाइंट बताता है कि सर्वर शुरू नहीं हुआ
कॉन्फ़िग गलत Python की ओर इशारा करता है
वर्चुअल एनवायरनमेंट इंटरप्रेटर का एब्सोल्यूट पाथ इस्तेमाल करें
टूल कॉल अटक जाता है, फिर एरर आता है
किसी print कॉल ने stdout पर लिखा
print हटाएँ और इसके बजाय stderr पर लॉग करें
फ़ोनीम या espeak एरर
espeak-ng PATH में नहीं है
इसे इंस्टॉल करें, फिर नया टर्मिनल खोलें
फ़ाइल सेव हुई लेकिन आवाज़ नहीं आई
ऑडियो आउटपुट डिवाइस या PortAudio की समस्या
Linux पर PortAudio इंस्टॉल करें, या sounddevice में कोई डिवाइस चुनें
नाम अजीब तरह से बोले जाते हैं
फ़ोनीमाइज़र ने गलत अंदाज़ा लगाया
नाम को वैसे लिखें जैसा वह सुनाई देता है
लोकल Kokoro बनाम hosted voices
लोकल हमेशा जवाब नहीं है। Kokoro निजी, दोहराने योग्य, और मुफ़्त narration के लिए बेहतरीन है, लेकिन कुछ कामों को 54 voices से ज़्यादा की ज़रूरत होती है।
जब hosted voices जीतते हैं
जब आपको voice cloning, व्यापक भाषा समर्थन, या बारीक भावनात्मक नियंत्रण चाहिए, तब hosted मॉडल की ओर जाएँ। Picasso IA के text to speech संग्रह में कई विकल्प हैं, सभी एक क्लिक की दूरी पर:
एक समझदार बँटवारा: रोज़ के पढ़ने, drafts, और निजी किसी भी चीज़ के लिए Kokoro इस्तेमाल करें, और किसी video, podcast, या product demo के अंतिम take के लिए hosted voice पर जाएँ।
भाषा मॉडल के साथ जोड़ी
Server सिर्फ़ बोलता है। वह क्या बोलता है, यह उन शब्दों को लिखने वाले मॉडल पर निर्भर करता है। लंबे drafts और सावधानी से rewriting के लिए Claude Sonnet 5 और Claude Opus 4.7 मज़बूत विकल्प हैं, जबकि Claude 4.5 Haiku तेज़ बोले गए जवाबों को चुस्त रखता है। काम के हिसाब से मॉडल चुनें, फिर delivery Kokoro को सौंप दें।
आपकी बारी: Picasso IA के साथ बनाएँ
अब आपके पास Claude के लिए एक निजी आवाज़ है, जिसकी हर वाक्य पर कोई लागत नहीं है। अगला कदम है अपने प्रोजेक्ट्स को एक चेहरा देना। जिस दिन आप यह server पूरा करें, उसी दिन आप Picasso IA पर अपने ऑडियो के साथ लगाने के लिए thumbnails, article headers, और scene art बना सकते हैं।
फ़ोटोरियलिस्टिक दृश्यों के लिए Seedream 4.5 आज़माएँ, या जब आपको बारीक detail और साफ़ composition चाहिए, तब Flux 2 Pro चुनें। जब किसी प्रोजेक्ट को स्टूडियो voice चाहिए, तो अपने लोकल Kokoro setup के साथ Speech 2.8 HD को भी परखें और नतीजों की तुलना कान से करें।
Picasso IA खोलें, एक prompt लिखें, और देखें कि क्या मिलता है। फिर कैमरा कोण बदलकर दूसरा prompt आज़माएँ। खुलकर प्रयोग करें, क्योंकि सबसे अच्छे prompt कोशिश करने, सुनने और समायोजित करने से ही आते हैं।