MCP சேவையகம் ஒரு API-ஐ, முகவர் உரையாடலின் நடுவே அழைக்கக்கூடிய சில பெயரிட்ட கருவிகளாக மாற்றுகிறது; நீண்ட வேலை ஒன்று, முகவர் வரம்புக்குட்பட்ட சுற்றுகளில் காத்திருக்கும் ஒரு கைப்பிடியை (handle) அந்தக் கருவி திருப்பித் தரும்போது, அந்த வேலைக்கும் அது பொருந்தும். ஒரு பாட்காஸ்ட் இணைப்பை ஒட்டுங்கள், அதன் சாரத்தைப் பிரெஞ்சு மொழியில் கேளுங்கள்; எந்தக் குறியீடும் எழுத வேண்டியதில்லை.
ஒரு குறியீட்டு முகவர், எந்த நிரலும் செய்வது போலவே VocalStack API-ஐப் பயன்படுத்தலாம்: API குறிப்பு-ஐப் படியுங்கள், SDK-க்கு எதிராக சில வரிகள் எழுதுங்கள், இயக்குங்கள். முகவர் இல்லாமலேயே இயங்கப்போகும் ஒன்றுக்கு இதுவே சரியான வழி.
MCP (Model Context Protocol) மற்ற சூழலுக்கானது: நீங்கள் ஓர் உதவியாளருடன் பேசிக்கொண்டிருக்கிறீர்கள், குறியீடு இல்லாமலே இப்போதே எதையாவது டிரான்ஸ்கிரைப் செய்ய விரும்புகிறீர்கள். MCP சேவையகம் பெயரிட்ட கருவிகளின் ஒரு சிறிய பட்டியலை வெளியிடுகிறது; ஒவ்வொன்றுக்கும் ஒரு விளக்கமும், அதன் வாதங்களுக்கான JSON schema-வும் உண்டு. முகவர் அந்தப் பட்டியலை ஒரு முறை படித்து, கோரிக்கை பொருந்தும்போது கருவியை அதன் பெயரால் அழைக்கும். "இந்தப் பாட்காஸ்டை டிரான்ஸ்கிரைப் செய்து, விலை நிர்ணயம் பற்றி அவர்கள் என்ன சொன்னார்கள் என்று சொல்லுங்கள்" என்பது மூன்று கருவி அழைப்புகளாக மாறும்; முகவர் ஒருபோதும் HTTP பாதையைப் பார்ப்பதில்லை.
சேவையகங்கள் இரண்டு வகைகளில் வருகின்றன. உள்ளூர் சேவையகம் கிளையன்டின் ஒரு துணைச் செயல்முறையாக இயங்கி stdio வழியாகப் பேசும்; பெரும்பாலான கோப்பு-அமைப்பு மற்றும் தரவுத்தள சேவையகங்கள் இப்படித்தான் வேலை செய்கின்றன. தொலைநிலைச் சேவையகம் ஒரு URL-க்குப் பின்னால் இருந்து, Streamable HTTP மொழியில் பேசும்; இது விவரக்குறிப்பின் 2025 மார்ச் திருத்தத்தில், பழைய HTTP-plus-SSE (server-sent events) போக்குவரத்தை மாற்றியது. கிளையன்ட் ஒவ்வொரு கோரிக்கையையும் அனுப்பும், சேவையகம் அதே இணைப்பில் பதில் சொல்லும்; இறுதி முடிவுக்கு முன் அது சொல்ல வேண்டியவை எதுவாக இருந்தாலும் அதற்கு முன்னதாக ஸ்ட்ரீம் செய்யப்படும். தற்போதைய விவரக்குறிப்புக்கு ஏற்ப எழுதப்பட்ட எந்தக் கிளையன்டும் இரண்டு வகையையும் பயன்படுத்த முடியும்.
VocalStack சேவையகம் தொலைநிலை வகையைச் சேர்ந்தது; அது {{api}}/v1/mcp-இல் உள்ளது. அதைப் பயன்படுத்தும் செலவு API-இன் செலவுதான். உங்களுக்குத் தேவையானது URL மட்டுமே.
{{app}}/developers இல் டாஷ்போர்டின் டெவலப்பர்கள் பகுதியைத் திறவுங்கள். முதல் தாவலான Connect an AI agent, சேவையகத்தின் URL-ஐயும் ஒவ்வொரு கிளையன்டுக்கும் ஓர் அமைப்புத் துணுக்கையும் காட்டும். கீழே உள்ள மூன்று துணுக்குகளும் அங்கே காட்டப்படுவதற்குப் பொருந்தும்.
உங்கள் டெர்மினலில் இதை இயக்குங்கள்:
claude mcp add --transport http vocalstack {{api}}/v1/mcp
இதை உங்கள் திட்டத்தில் உள்ள .cursor/mcp.json-இல் சேருங்கள்; அல்லது ஒவ்வொரு திட்டத்துக்கும் பொருந்த வேண்டுமென்றால் ~/.cursor/mcp.json-இல் சேருங்கள்:
{"mcpServers":{"vocalstack":{"url":"{{api}}/v1/mcp"}}}
Streamable HTTP-ஐ ஆதரிக்கும் எந்தக் கிளையன்டும் இந்த URL-உடன் சேவையகத்தைச் சேர்க்கலாம். டாஷ்போர்டு காட்டும் பொதுவான வடிவம் இது:
{
"vocalstack": {
"type": "streamable-http",
"url": "{{api}}/v1/mcp"
}
}
தொடங்குவதற்கு உங்களுக்கு API விசை தேவையில்லை. கிளையன்ட் முதல் முறை இணையும்போது, உலாவியில் உங்கள் VocalStack கணக்கில் உள்நுழைவீர்கள்; கிளையன்ட் டோக்கனை வைத்துக்கொள்ளும். டாஷ்போர்டு இதை ஒரே வரியில் சொல்கிறது: "முதல் முறை உங்கள் VocalStack கணக்கில் உள்நுழைவீர்கள். விசை தேவையில்லை."
இது VocalStack தந்திரம் இல்லை; MCP-இன் அங்கீகார விவரக்குறிப்பு செயல்படுகிறது. தொலைநிலைச் சேவையகம், அங்கீகரிக்கப்படாத கோரிக்கைக்கு 401 பதில் அளிக்கும்; அது பாதுகாக்கப்பட்ட-வளத் தரவுக்கு (protected-resource metadata) சுட்டும். அது ஒரு சிறிய JSON ஆவணம்: அங்கீகார சேவையகத்தையும், சேவையகத்துக்குத் தேவைப்படும் scopes-ஐயும் பெயரிடும். கிளையன்ட் அதைப் படித்து, உங்கள் உலாவியில் ஒரு நிலையான OAuth 2.1 ஓட்டத்தை நடத்தி, அந்தச் சேவையகத்துக்கு மட்டும் வழங்கப்பட்ட டோக்கனுடன் திரும்பும். விவரக்குறிப்பைப் பின்பற்றும் எந்தத் தொலைநிலை MCP சேவையகமும் உங்களை இதே முறையில் உள்நுழைக்கும்; அதனால்தான் மேலே உள்ள கிளையன்ட்கள் VocalStack பற்றி எதுவும் அறியாமலேயே இதைச் செய்ய முடிகிறது.
சர்வரிலோ ஸ்கிரிப்டிலோ இயங்கும் கிளையன்டுக்கு API விசையும் வேலை செய்யும். அதை Authorization: Bearer vs_key_... என்ற தலைப்பாக அனுப்புங்கள்; REST API ஏற்கும் அதே தலைப்பு இது. விசைகள் Developers → API keys-இன் கீழ் உருவாக்கப்படுகின்றன. இரண்டு டிரான்ஸ்கிரைப் கருவிகளுக்கும் Write மற்றும் Stream audio அனுமதிகள் தேவை. ஒரு கோப்புக்கு இரண்டாவது விசித்திரமாகத் தோன்றலாம், ஆனால் கருவிகள் ஒவ்வொரு டிரான்ஸ்கிரிப்ஷனும் செல்லும் அதே உருவாக்கும் புள்ளி வழியாகச் செல்கின்றன—நேரலை ஒன்றும் உட்பட—அந்தப் புள்ளி இரண்டையும் சரிபார்க்கிறது. வாசிப்புக் கருவிகளுக்கு Read தேவை; list_voices-க்கு செல்லுபடியாகும் நற்சான்று மட்டுமே தேவை.
நீங்கள் உள்நுழைந்ததும், முகவர் ஒன்பது கருவிகளைக் காணும். அவற்றை நீங்களே அரிதாகவே பெயர் சொல்லி அழைப்பீர்கள்; ஆனால் அவை என்னவென்று தெரிந்திருந்தால், முகவர் அடுத்து என்ன செய்கிறது என்பது விளங்கும்.
ஒவ்வொரு கருவியும் camelCase JSON-ஐ ஏற்று, திருப்பித் தரும்; அவற்றின் புலப் பெயர்கள் /v1 wire வகைகளின் பெயர்களே; ஒரு டிரான்ஸ்கிரிப்ஷனின் கைப்பிடி அதன் transcriptionId.
transcribe_url பொது URL-இல் உள்ள ஒலி அல்லது ஒளிப்பதிவை டிரான்ஸ்கிரைப் செய்யத் தொடங்கும்: கோப்பு இணைப்பு, பாட்காஸ்ட் அத்தியாயம், YouTube ஒளிப்பதிவு. நேரலை ஸ்ட்ரீம்கள் ஏற்கப்படாது. விருப்பத் தேர்வுகள்: name, spokenLanguage (மொழியைக் கண்டறிய விட்டுவிடுங்கள்), speakerLabels (auto, on அல்லது off) மற்றும் ஒலியின் ஒரு பகுதியை மட்டும் டிரான்ஸ்கிரைப் செய்ய startS/endS.transcribe_file முகவர் வைத்திருக்கும் ஒரு கோப்புக்கு இதையே செய்யும்; அது filename-உடன் fileBase64-ஆக அனுப்பப்படும். டிகோட் செய்யப்பட்ட அளவு 10 MiB-ஆக வரையறுக்கப்பட்டது; இது சுமார் 128 kbps MP3-இல் பத்து நிமிடங்கள். அதைவிடப் பெரியதற்கு, முகவருக்கு ஓர் இணைப்பைக் கொடுங்கள்.இரண்டும் உடனடியாக transcriptionId, state: "queued" மற்றும் காத்திருப்புக் கருவியைக் குறிக்கும் next குறிப்புடன் திரும்பும். முகவர் உருவாக்கிய டிரான்ஸ்கிரிப்ஷன்கள் தனிப்பட்டவையாகத் தொடங்கும்; பகிர்வு இணைப்பு இருக்காது.
நேரலை ஒளிபரப்பை ஒரு முகவர் உங்களைவிடப் பொறுமையாக அமர்ந்து பார்க்க முடியாது; யாராவது மடிக்கணினியை எடுத்துச் செல்லும் வரை அது காத்திருப்புக் கருவியை அழைத்துக்கொண்டே இருக்கும். முடிந்த பதிவுக்கு ஒரு முடிவு உண்டு; அடுத்த இரண்டு கருவிகள் காத்திருப்பது அதுவே.
ஒரு கருவி அழைப்பு ஒரு HTTP கோரிக்கை; HTTP கோரிக்கைகள் ஒரு மணி நேரம் நீடிக்க வடிவமைக்கப்படவில்லை. கிளையன்ட்கள் அவற்றைக் கைவிடும், ப்ராக்ஸிகள் அவற்றை மூடும், ஒரு கருவியில் தடைபட்ட மாதிரி வேறு எதையும் செய்ய முடியாது. ஆகவே MCP-க்குப் பின்னால் உள்ள எந்த நீண்ட வேலைக்கான முறையும், REST API பயன்படுத்தும் அதே முறைதான்: வேலையைத் தொடங்கி ஒரு கைப்பிடியைப் பெறுங்கள், அதற்காக வரையறுக்கப்பட்ட நேரம் காத்திருங்கள், முடியவில்லையென்றால் மீண்டும் அழையுங்கள். நிலையைச் சுமப்பது இணைப்பு அல்ல, கைப்பிடி.
wait_for_transcription வேலை done அல்லது failed ஆகும் வரை, அல்லது timeoutS கடக்கும் வரை தடுத்து நிறுத்தும் (இயல்பு 50 வினாடிகள், அதிகபட்சம் 60; இது பெரும்பாலான கிளையன்ட்களும் ப்ராக்ஸிகளும் பயன்படுத்தும் நேர வரம்புகளுக்குள் அழைப்பை வைத்திருக்கும்). முடிவு timedOut: true எனச் சொன்னால், வேலை இன்னும் ஓடுகிறது என்று பொருள்; முகவர் கருவியை மீண்டும் அழைக்கும். கருவி காத்திருக்கும்போது, கிளையன்ட் கேட்டிருந்தால், சேவையகம் MCP முன்னேற்ற அறிவிப்புகளை அனுப்பும்: சதவீதமும் "3.1 / 8.0 MB பெறப்படுகிறது" அல்லது "02:00-இல் 01:25 டிரான்ஸ்கிரைப் செய்யப்படுகிறது" போன்ற கட்டமும்.get_transcription நிலையையும், முடிந்ததும் உரையையும் திருப்பித் தரும். format: "text" ஒவ்வொரு பகுதிக்கும் ஒரு வரியை [mm:ss] Speaker 1: ... வடிவில் தரும்; "segments" start, end, speaker மற்றும் speakerName உடன் நேரக் குறியிட்ட வரிகளைத் தரும்; includeWords: true சொல் நேரங்களைச் சேர்க்கும். முடிவுகள் பக்கங்களாகப் பிரிக்கப்படும் (offset, limit, இயல்பு 500 பகுதிகள்); மேலும் இருந்தால் nextOffset தரப்படும்.பக்கமிடல் இருப்பது பிணையத்துக்காக அல்ல, மாதிரிக்காக. ஒரு கருவி திருப்பித் தரும் அனைத்தும் முகவரின் சூழல் சாளரத்தில் ஒட்டப்படுகின்றன; அங்கே அவை உங்கள் உரையாடலுடன் போட்டியிடும், ஒவ்வொரு அடுத்த சுற்றிலும் டோக்கன்களுக்குச் செலவாகும். இரண்டு மணி நேரக் கூட்டம் பல்லாயிரக்கணக்கான சொற்கள்; அனைத்தையும் ஒரே நேரத்தில் திருப்பினால், நீங்கள் கேட்ட கேள்வி சூழலிலிருந்து வெளியே தள்ளப்பட்டுவிடும். நல்ல MCP கருவிகள் ஒரு பக்கத்தையும் ஒரு cursor-ஐயும் திருப்பித் தரும்; எவ்வளவு தேவை என்பதை முகவரே முடிவு செய்யும்.
இணைப்பு துண்டிக்கப்பட்டாலோ நேர வரம்பு கடந்தாலோ வேலை ஒருபோதும் ரத்தாகாது; ஏனெனில் வேலை சேவையகத்தில் வாழ்கிறது, MCP கோரிக்கையில் அல்ல. முடிந்ததும், அது உங்கள் நூலகத்தில் இன்னொரு உள்ளீடு; அடுத்த கருவிகள் அதை மற்ற எதையும் போலவே நடத்தும்.
list_transcriptions கணக்கின் டிரான்ஸ்கிரிப்ஷன்களைப் புதியவை முதலில், நிலை மற்றும் கால அளவுடன் பட்டியலிடும்; lifecycle active, archived அல்லது all ஆக இருக்கலாம்.search_transcriptions ஒவ்வொரு டிரான்ஸ்கிரிப்ஷனிலும், எந்த மொழியிலும், என்ன பேசப்பட்டது என்று தேடி, பொருந்தும் வரிகளைத் திருப்பித் தரும்; ஒவ்வொன்றுடனும் அதன் டிரான்ஸ்கிரிப்ஷனும், அது பேசப்பட்ட வினாடியும் இருக்கும். transcriptionId தேடலை ஒரு டிரான்ஸ்கிரிப்ஷனுக்குக் குறுக்கும்; lang ஒவ்வொரு முடிவுக்கும் ஒரு மொழிபெயர்ப்பைச் சேர்க்கும்.ஒரு வரியைக் கண்டறிவது எளிய பாதி. முழுவதும் என்ன சொல்லப்பட்டது என்பதைக் கண்டறிய மேலும் இரண்டு கருவிகள் உள்ளன.
get_summary முடிந்த டிரான்ஸ்கிரிப்ஷனின் AI தலைப்பையும் சுருக்கத்தையும் திருப்பித் தரும்; விரும்பினால் lang மூலம் மொழிபெயர்க்கப்படும். state: "pending" என்றால் சுருக்கம் இன்னும் எழுதப்பட்டுக்கொண்டிருக்கிறது என்று பொருள் (வேலை முடிந்ததும் பொதுவாக சில வினாடிகளில் தயாராகிவிடும்); முகவர் மீண்டும் கேட்கும்.translate_transcription முடிந்த டிரான்ஸ்கிரிப்டை வேறொரு மொழியில், உரையாகவோ நேரக் குறியிட்ட பகுதிகளாகவோ, get_transcription போலவே பக்கங்களாகப் பிரித்துத் திருப்பித் தரும். மொழிபெயர்ப்புகள் சேமிக்கப்படுகின்றன; ஆகவே மீண்டும் கேட்டால் வேலை மீண்டும் செய்யப்படாது.list_voices ஒரு மொழியில் டிரான்ஸ்கிரிப்டைப் படிக்கக்கூடிய குரல்களைப் பட்டியலிடும்: id, பெயர், தெரிந்திருந்தால் பாலினம் மற்றும் உச்சரிப்பு, தர மதிப்பீடு, அது இயல்புக் குரலா அல்லது உங்கள் குளோன் செய்த குரல்களில் ஒன்றா என்பது. அது குரல்களை விவரிக்கும்; ஒன்றைப் பேச வைக்காது (சேவையகம் என்ன செய்யாது என்பது கீழே மேலும்).நடைமுறையில் கருவிகள் ஒன்றோடொன்று எப்படி இணைகின்றன என்பது இதோ.
சேவையகம் சேர்க்கப்பட்டதும், Claude Code-இல் ஓர் உரையாடல் இப்படிப் போகும். ஒரு பாட்காஸ்ட் இணைப்பை ஒட்டி, அதன் சாரத்தைப் பிரெஞ்சு மொழியில் கேட்கிறீர்கள்.
முகவர் transcribe_url-ஐ அழைக்கிறது:
{ "url": "https://example.org/episodes/42.mp3", "name": "Episode 42", "speakerLabels": "auto" }
அது transcriptionId மற்றும் state: "queued" பெறுகிறது; next குறிப்பைப் பின்பற்றுகிறது:
{ "transcriptionId": "4f1c...", "timeoutS": 50 }
ஐம்பது நிமிட அத்தியாயம் ஓடும் வேகத்தைவிடப் பல மடங்கு வேகமாக டிரான்ஸ்கிரைப் செய்யப்படும்; ஆனால் ஒரே காத்திருப்பில் அல்ல. முதல் காத்திருப்பு, எடுத்துக்காட்டாக 61 சதவீத முன்னேற்றத்துடன் timedOut: true தரும்; ஆகவே முகவர் கருவியை இன்னொரு முறை அழைத்து state: "done" பெறுகிறது.
இப்போது முகவர் lang: "fr" உடன் get_summary-ஐ அழைக்கிறது:
{ "transcriptionId": "4f1c...", "lang": "fr" }
சுருக்கம் இன்னும் pending ஆக இருந்தால், முகவர் சில வினாடிகள் காத்திருக்கும்; இல்லையென்றால் பிரெஞ்சு மொழியில் தலைப்பும் சுருக்கமும் உங்களிடம் தரும். "விலை நிர்ணயம் பற்றி எங்கே பேசினார்கள்?" என்று கேட்டால், query: "pricing" மற்றும் அதே transcriptionId-உடன் search_transcriptions-ஐ அழைக்கும்; பொருந்தும் வரிகளையும் அவற்றின் நேரக்குறிகளையும் மேற்கோளிடும். முழுவதையும் பிரெஞ்சில் கேட்டால், அது translate_transcription-ஐ அழைக்கும்.
ஒரு சில கருவி அழைப்புகள், குறியீடு இல்லை, உங்கள் நூலகத்தில் ஒரு டிரான்ஸ்கிரிப்ஷன். அந்த அழைப்புகள் ஒவ்வொன்றும் REST கோரிக்கையின் அதே வாயில்கள் வழியாகச் சென்றன; கட்டணத்தையும் வரம்புகளையும் நிர்ணயிப்பவை அந்த வாயில்களே.
MCP சேவையகம் என்பது வேறொரு நுழைவாயில் வழியாகச் செல்லும் API; வரம்புகளும் அதே, கட்டணமும் அதே.
POST /v1/transcriptions-உடன் அதே உருவாக்கும் புள்ளி வழியாகச் செல்கின்றன: திட்டத்தின் உருவாக்க வீதம் (மணிக்கு 10, 100 அல்லது தொடங்கப்படும் டிரான்ஸ்கிரிப்ஷன்களின் தனிப்பயன் எண்ணிக்கை), அதன் ஒரேநேர டிரான்ஸ்கிரிப்ஷன் உச்சவரம்பு (1, 5 அல்லது வரம்பற்றது) மற்றும் அதன் கிரெடிட் அனைத்தும் பொருந்தும். $5 பதிவு கிரெடிட் முதல் அமர்வுக்குப் போதுமானது; கார்டு தேவையில்லை.isError: true, மாதிரி செயல்படக்கூடிய ஒரு வாக்கியம், மற்றும் retryable, retryAfterS புலங்களுடன் திரும்பும். insufficient_credit ஒரு topUpUrl-ஐக் கொண்டிருக்கும்; rate_limited எவ்வளவு நேரம் காத்திருக்க வேண்டும் என்று சொல்லும். இது தோன்றுவதைவிட முக்கியமானது: மாதிரி பிழை உரையைப் படிக்கிறது; அதனால் அது செயல்படக்கூடிய ஒரு வாக்கியம், முடிவற்ற பாதையை அடுத்த கருவி அழைப்பாக மாற்றும்./v1/mcp கோரிக்கைக்கும் பொருந்தும்: சுழலும் முகவர் எந்தக் கருவியும் இயங்கும் முன்பே Retry-After-உடன் HTTP 429 பெறும்.idempotencyKey-ஐ ஏற்கும்: முடிந்த அழைப்பின் விசையை மீண்டும் பயன்படுத்தினால் முதல் முடிவு மீண்டும் இயக்கப்படும்; வேறு வாதங்களுடன் அதை மீண்டும் பயன்படுத்தினால் மறுக்கப்படும்; ஆகவே தானாக மீண்டும் முயலும் முகவர் இரண்டாவது வேலையைத் தொடங்காது. பணம் செலவழிக்கும் எந்தக் கருவியும் இதை வழங்க வேண்டும்; முகவர்கள் மனிதர்களைவிட மிக எளிதாக மீண்டும் முயல்கின்றன.சேவையகம் செய்வதன் எல்லைகள் இவை. இரண்டு விஷயங்கள் வேண்டுமென்றே அவற்றுக்கு வெளியே உள்ளன.
எந்த உரையையும் பேச்சாக மாற்றும் கருவி சேவையகத்தில் இல்லை; அது திட்டமிடப்படவும் இல்லை. VocalStack டிரான்ஸ்கிரிப்டுகளையும் அவற்றின் மொழிபெயர்ப்புகளையும், ஆயத்தக் குரலிலோ குளோன் செய்த குரலிலோ பேசும்; வேறெதையும் பேசாது. list_voices ஒரு மொழியில் டிரான்ஸ்கிரிப்டைப் படிக்கக்கூடிய குரல்களை முகவருக்குச் சொல்கிறது; ஒரு குரலைப் புதிதாக எதையாவது பேச வைக்கும் வழியை அல்ல.
டிரான்ஸ்கிரைப் கருவிகள் நேரலை ஸ்ட்ரீம்களையும் மறுக்கும். YouTube நேரலை ஸ்ட்ரீமுக்கோ வானொலி ஸ்ட்ரீமுக்கோ நேரலை டிரான்ஸ்கிரிப்ஷன் தேவை; அதை டாஷ்போர்டிலிருந்தோ API குறிப்பில் உள்ள POST /v1/transcriptions/live வழியாகவோ தொடங்கலாம். முடிந்துவிட்ட YouTube ஒளிப்பதிவு ஒரு கோப்பு; அதை transcribe_url ஏற்கும்.
குறியீட்டை நீங்களே எழுத விரும்பினால், API மூலம் கோப்பை டிரான்ஸ்கிரைப் செய்வது அதே படிகளை HTTP அழைப்புகளாக விளக்கும்; நிகழ்நேர டுடோரியல் WebSocket-ஐ விவரிக்கும்.