เซิร์ฟเวอร์ MCP
@paxalabs/mcp มอบ Paxa API ให้ MCP client ในรูปแบบเครื่องมือ ทั้งพูดออกลำโพงของเครื่อง ออกแบบเสียงใหม่จากคำบรรยาย บันทึกเสียงพูดเป็นไฟล์พร้อมคำบรรยาย ฟังผ่านไมโครโฟน ถอดเสียงไฟล์บันทึกและวิดีโอ OCR และสกัดข้อมูลจากเอกสาร และแปลเป็นภาษาไทย ติดตั้งได้กับ Claude Code, Claude Desktop, Cursor หรือ VS Code และเปลี่ยน Claude Code ให้เป็นโหมดเสียงด้วยฮุก paxa say
@paxalabs/mcp คือเซิร์ฟเวอร์ Model Context Protocol อย่างเป็นทางการของ Paxa API เมื่อเชื่อมต่อแล้ว agent จะพูดผ่านลำโพงของเครื่อง อ่านเนื้อหายาวออกเสียงผ่านคิวเล่นเสียง ออกแบบเสียงใหม่จากคำบรรยาย บันทึกเสียงพูดเป็นไฟล์พร้อมคำบรรยายที่ตรงกัน และฟังคำตอบที่ผู้ใช้พูดกลับมาได้ เครื่องมืออื่นใช้ถอดเสียงไฟล์บันทึกหรือวิดีโอ อ่าน PDF กับรูปภาพด้วย OCR สกัดฟิลด์ที่มีชนิดข้อมูลจากเอกสาร และแปลจากภาษาใดก็ได้เป็นภาษาไทย แต่ละเครื่องมือคิดเครดิตเท่ากับเอนด์พอยต์ API ที่อยู่เบื้องหลัง ซอร์สโค้ดอยู่บน GitHub
หมายเหตุ
เซิร์ฟเวอร์ยังอยู่ในช่วงเบต้า ชุดเครื่องมือครบและผ่านการทดสอบตั้งแต่ต้นจนจบแล้ว แต่ชื่อเครื่องมือและการทำงานอาจเปลี่ยนได้ก่อนเวอร์ชัน 1.0 แจ้งปัญหาได้ที่ https://github.com/paxalabs/mcp/issues
ติดตั้ง#
คุณต้องมี API key ก่อน บัญชีใหม่ได้รับเครดิตฟรี 100 เครดิต
claude mcp add paxa -e PAXA_API_KEY=pxa_your_key_here -- npx -y @paxalabs/mcp{
"mcpServers": {
"paxa": {
"command": "npx",
"args": [
"-y",
"@paxalabs/mcp"
],
"env": {
"PAXA_API_KEY": "pxa_your_key_here"
}
}
}
}รายการ JSON นี้ใช้ได้กับ Claude Desktop (claude_desktop_config.json), Cursor (~/.cursor/mcp.json), VS Code และ client อื่นที่เรียกเซิร์ฟเวอร์แบบ stdio แทนที่ค่าตัวอย่างด้วยคีย์ของคุณ
Claude Desktop ติดตั้งจากไฟล์ส่วนขยายในหน้า releases ได้เช่นกัน ดาวน์โหลดไฟล์ .mcpb เปิดด้วย Claude Desktop แล้วกรอกคีย์ในหน้าตั้งค่าส่วนขยาย ไฟล์นี้บรรจุเซิร์ฟเวอร์และไลบรารีที่ต้องใช้ไว้ครบ จึงใช้ได้โดยไม่ต้องติดตั้ง Node.js
เครื่องมือ#
| เครื่องมือ | หน้าที่ | เครดิต |
|---|---|---|
| speak | สังเคราะห์ประโยคสั้นแล้วเล่นออกลำโพง รอจนเล่นจบก่อนตอบกลับ | 10 ต่อ 1,000 ตัวอักษร หรือ 1.25 เท่าเมื่อใช้เสียงที่ออกแบบเอง |
| queue_speech | อ่านเนื้อหายาวออกเสียง แบ่งข้อความเป็นช่วง สังเคราะห์ล่วงหน้าระหว่างเล่น และตอบกลับทันที | 10 ต่อ 1,000 ตัวอักษร หรือ 1.25 เท่าเมื่อใช้เสียงที่ออกแบบเอง |
| control_playback | ควบคุมคิวเสียงที่ใช้ร่วมกัน: status, pause, resume, skip, clear | ฟรี |
| play_audio | เล่นไฟล์เสียงในเครื่องออกลำโพง | ฟรี |
| text_to_speech | สังเคราะห์เสียงเป็นไฟล์ (mp3, opus, wav) โดยไม่เล่น สคริปต์ยาวจะถูกแบ่งแล้วรวมเป็นไฟล์เดียว และ subtitles จะเขียนไฟล์คำบรรยาย SRT หรือ VTT ที่ตรงกับเสียง | 10 ต่อ 1,000 ตัวอักษร คูณ 1.25 เมื่อขอคำบรรยาย คูณ 1.25 เมื่อใช้เสียงที่ออกแบบเอง หรือคูณ 1.5 เมื่อใช้ทั้งสองอย่าง |
| design_voice | สร้างเสียงใหม่จากคำบรรยาย แล้วเล่นประโยคตัวอย่างของเสียงนั้น | 5 ต่อครั้ง |
| refine_voice | ปรับเสียงร่างด้วยคำพูด เช่น "ทุ้มลงและช้าลงอีกนิด" แล้วเล่นประโยคใหม่ | 5 ต่อครั้ง |
| save_voice | บันทึกเสียงร่างเป็นเสียงของคุณ พร้อม id ที่เครื่องมือเสียงพูดใช้ได้ | ฟรี |
| rename_voice | เปลี่ยนชื่อเสียงที่ออกแบบไว้ โดย id และเสียงคงเดิม | ฟรี |
| delete_voice | ลบเสียงที่ออกแบบไว้และคืนช่องเก็บเสียง | ฟรี |
| listen | อัดเสียงพูดหนึ่งเทิร์นจากไมโครโฟนแล้วส่งบทถอดกลับมา โดย API ตรวจจับเองว่าผู้พูดหยุดพูดเมื่อไร | 12.5 ต่อนาทีที่ฟัง รวมช่วงเงียบ |
| transcribe_audio | ถอดเสียงไฟล์บันทึกหรือวิดีโอในเครื่อง พร้อมช่วงผู้พูด เวลาระดับคำ คำบรรยาย SRT หรือ VTT รูปแบบแบบพูดหรือแบบเขียน คลังคำศัพท์ และรายการช่วงเงียบที่ควรตัด | 8.33 ต่อนาทีของเสียง |
| ocr_document | OCR ไฟล์ PDF, PNG, JPEG หรือ WebP ในเครื่องเป็น Markdown หรือบล็อกแบบมีโครงสร้าง | 6.5 ต่อหน้า |
| extract_fields | กรอกสคีมาของฟิลด์ที่มีชนิดข้อมูล (เลขประจำตัวประชาชน วันที่ จำนวนเงิน ธนาคาร รายการสินค้า) จาก PDF หรือรูปภาพในเครื่อง ทุกค่าเป็นข้อความที่พิมพ์อยู่ในเอกสาร หรือเป็น null พร้อมเหตุผล | 13 ต่อหน้า หรือ 19.5 เมื่อสคีมามีเกิน 50 ฟิลด์ |
| translate_to_thai | แปลจากภาษาใดก็ได้เป็นภาษาไทย พร้อมควบคุมระดับภาษา อภิธานศัพท์ และบริบท | 25 ต่อ 1,000 ตัวอักษร |
| send_feedback | ให้คะแนนผลลัพธ์หรือแจ้งปัญหาถึงทีม Paxa โดยผูกกับ request id ที่เครื่องมือแสดง | ฟรี |
| list_voices | เสียงที่คุณออกแบบไว้และจำนวนช่องที่ใช้ ตามด้วยรายชื่อเสียงพร้อมคำอธิบายบุคลิก | ฟรี |
| list_models | โมเดลที่ใช้ได้ ขีดจำกัด และราคา | ฟรี |
| get_account | ยอดเครดิต แพ็กเกจ และขีดจำกัดอัตราคำขอ | ฟรี |
เสียงทั้งหมดไหลผ่านคิวเดียวตามลำดับ จึงไม่มีเสียงซ้อนกัน ประโยคจาก speak จะแทรกขึ้นก่อนช่วงเนื้อหายาวที่รอคิวอยู่ ส่วน queue_speech ทำให้หนังสือหรือบทความไหลต่อเนื่องด้วยการสังเคราะห์ช่วงถัดไประหว่างที่ช่วงปัจจุบันกำลังเล่น หากติดตั้งโปรแกรมเล่นเสียงที่รองรับสตรีมไว้ เสียงจะเริ่มตั้งแต่ไบต์แรกที่มาจาก API หากไม่มี เสียงจะเล่นหลังดาวน์โหลดเสร็จ
ออกแบบเสียงของคุณเอง#
เมื่อไม่มีเสียงในแคตตาล็อกที่ตรงใจ ให้บรรยายเสียงที่ต้องการ design_voice เปลี่ยนคำบรรยายหนึ่งถึงสองประโยค (ใครเป็นผู้พูด เสียงเป็นอย่างไร จะได้ยินที่ไหน และพูดภาษาอะไร) ให้เป็นเสียง แล้วเล่นประโยคตัวอย่าง refine_voice ปรับทีละอย่าง เช่น "ทุ้มลงและช้าลงอีกนิด" โดยส่วนอื่นของเสียงคงเดิม save_voice เก็บเสียงร่างที่ชอบไว้ด้วย id (voice_...) ที่ speak, queue_speech และ text_to_speech ใช้ได้บน Paxa TTS Flash v2 ตั้งเป็น PAXA_DEFAULT_VOICE เพื่อใช้เป็นเสียงเริ่มต้น
การออกแบบหรือปรับแต่ละครั้งคิด 5 เครดิต การบันทึกฟรี และเสียงพูดด้วยเสียงที่ออกแบบเองคิด 1.25 เท่าของอัตราปกติ แพ็กเกจกำหนดจำนวนเสียงที่เก็บได้ ดูช่องเก็บเสียงและขีดจำกัดได้ที่เสียงที่ออกแบบเอง
โหมดเสียงสำหรับ Claude Code#
สามส่วนนี้ทำให้คุณเดินออกจากหน้าจอ Claude Code ได้ มันจะพูดเมื่อมีเรื่องแจ้ง และเรียกคุณเมื่อต้องการคำตอบ ติดตั้งเซิร์ฟเวอร์ตามข้างต้น บอก Claude ว่าควรพูดเมื่อไร แล้วตั้งฮุกสำหรับช่วงที่โมเดลหยุดรอ
บอก Claude ว่าควรพูดเมื่อไร#
เพิ่มข้อความนี้ใน ~/.claude/CLAUDE.md หรือใน CLAUDE.md ของโปรเจกต์ใดโปรเจกต์หนึ่ง:
## Voice
I have the Paxa MCP server (tools: speak, queue_speech, control_playback).
I am often away from the screen, so use voice like this:
- At the end of a turn where you did real work, call speak with a one or
two sentence summary before writing the final message: what you did,
what is next, and anything you need from me.
- When you need a decision from me, speak the question too.
- Keep it short and conversational. Never read code, file paths, logs, or
long lists aloud. Those stay in text.
- Do not speak for quick back-and-forth or trivial answers.
- If I ask to hear something long, use queue_speech.
- Speak in the language I write in.ให้ Claude เรียกเมื่อต้องการคุณ#
ระหว่างที่ Claude Code รอสิทธิ์อนุญาตหรือรอคำตอบ โมเดลจะหยุดทำงานและเรียก speak ไม่ได้ Claude Code จะยิงฮุกในจังหวะนั้นแทน และ paxa say จะเปลี่ยนฮุกเป็นเสียงพูดสั้นๆ เช่น "Permission needed." ติดตั้งคำสั่งลง PATH ด้วย npm install -g @paxalabs/mcp แล้วเพิ่มฮุกใน ~/.claude/settings.json:
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt|idle_prompt|agent_needs_input",
"hooks": [
{
"type": "command",
"command": "paxa say"
}
]
}
]
}
}paxa say อ่านคีย์จาก PAXA_API_KEY หรือจากรายการ paxa ใน ~/.claude.json เมื่อไม่ได้ตั้งค่าไว้ วลีในตัวจะถูกสังเคราะห์ครั้งเดียวต่อเสียงแล้วเก็บไว้ในโฟลเดอร์แคชของผู้ใช้ การแจ้งเตือนครั้งถัดไปจึงเล่นจากดิสก์โดยไม่ต้องต่อเครือข่ายและไม่เสียเครดิต ฮุก Stop ที่ตั้งค่าแบบเดียวกันจะพูดว่า "Done." เมื่อจบทุกเทิร์น
paxa say "Build finished" ใช้เดี่ยวๆ ได้เช่นกัน และ --voice ใช้เลือกเสียง README อธิบายการตั้งวลีเอง แฟล็ก --cache และโปรแกรมเล่นเสียงที่เร็วกว่าบน macOS
งานสร้างคอนเทนต์#
transcribe_audio รับวิดีโอได้เช่นเดียวกับไฟล์เสียง โดย ffmpeg แยกแทร็กเสียงออกในเครื่องแล้ว API ถอดเสียงนั้น เมื่อตั้ง pauses_over ผลลัพธ์จะแสดงทุกช่วงเงียบที่ยาวกว่าจำนวนวินาทีนั้นพร้อมเวลาเริ่มและจบ ซึ่งคือช่วงที่ควรตัดทิ้ง และ save: ["srt"] จะส่งไฟล์คำบรรยายกลับมาด้วย
text_to_speech ที่ตั้ง subtitles: "srt" หรือ "vtt" จะเขียนไฟล์คำบรรยายไว้ข้างไฟล์เสียง โดยจับเวลาจากคำที่สังเคราะห์จริง คิวแบ่งที่เครื่องหมายจบประโยค ที่ช่วงหยุด และที่ความยาวบรรทัด ไม่ตัดกลางคำ และบรรทัดภาษาไทยจบตรงที่ผู้เขียนเว้นวรรคไว้ สคริปต์ที่ยาวเกิน 5,000 ตัวอักษรจะถูกแบ่งตามย่อหน้าและประโยค สังเคราะห์ทีละส่วน แล้วรวมเป็นไฟล์ mp3, opus หรือ wav ไฟล์เดียว พร้อมเลื่อนเวลาคำบรรยายให้ตรงกัน
การรับวิดีโอและการรวมไฟล์ต้องใช้ ffmpeg (brew install ffmpeg บน macOS) เครื่องมืออื่นทั้งหมดใช้ได้โดยไม่ต้องมี
การฟัง#
listen ทำให้ไมโครโฟนเป็นช่องทางรับคำตอบ ถามคำถามด้วย speak แล้วเรียก listen คำตอบที่ผู้ใช้พูดจะกลับมาเป็นข้อความทันทีที่หยุดพูด เพราะระบบถอดเสียงแบบเรียลไทม์ตรวจจับจุดจบของเทิร์นเอง
เครื่องมือนี้ต้องใช้โปรแกรมอัดเสียงแบบ command line ซึ่ง macOS และ Windows ไม่มีมาให้ บน macOS ใช้ ffmpeg หรือ sox (brew install ffmpeg หรือ brew install sox) บน Windows ใช้ sox (หรือ ffmpeg โดยตั้ง PAXA_MIC เป็นชื่ออุปกรณ์ DirectShow) และบน Linux ใช้ ffmpeg, sox, parecord หรือ arecord นอกจากนี้ต้องใช้ Node 22 ขึ้นไป และแอปที่เปิดเซิร์ฟเวอร์ (Terminal, VS Code, Claude Desktop) ต้องได้รับสิทธิ์ใช้ไมโครโฟน
ตัวแปรสภาพแวดล้อม#
| ตัวแปร | จำเป็น | ค่าเริ่มต้น | หน้าที่ |
|---|---|---|---|
| PAXA_API_KEY | ใช่ | API key ของคุณ เซิร์ฟเวอร์เริ่มทำงานได้แม้ไม่มีคีย์ แต่ทุกเครื่องมือที่เรียก API จะล้มเหลวพร้อมคำแนะนำการตั้งค่าที่ agent ส่งต่อให้คุณได้ | |
| PAXA_OUTPUT_DIR | ไม่ | โฟลเดอร์ปัจจุบัน | ตำแหน่งที่ text_to_speech บันทึกไฟล์ |
| PAXA_TTS_MODEL | ไม่ | paxa-tts-flash-v2 | โมเดลเสียงพูดสำหรับทุกการเรียกที่ไม่ได้ระบุโมเดล ตั้งเป็น paxa-tts-flash-v1 เฉพาะเมื่อต้องการสำเนียงไทยถิ่น แท็กอารมณ์แบบตายตัวของสองเสียง หรือเสียงที่ Paxa TTS Flash v2 ไม่มี |
| PAXA_DEFAULT_VOICE | ไม่ | foithong | เสียงที่ใช้เมื่อคำสั่งไม่ได้ระบุเสียง เป็นเสียงจากแคตตาล็อกหรือเสียงที่คุณออกแบบไว้ (voice_...) ก็ได้ ทุกเสียงของ Paxa TTS Flash v2 พูดได้ทั้งภาษาไทย อังกฤษ และจีนกลาง |
| PAXA_DEFAULT_SPEED | ไม่ | 1 | ความเร็วการพูดที่ใช้เมื่อคำสั่งไม่ได้ระบุ ตั้งได้ตั้งแต่ 0.5 ถึง 1.5 ระดับเสียงคงเดิมและราคาเท่าเดิม ค่า 1.2 ถึง 1.3 เหมาะกับการอ่านยาว |
| PAXA_MIC | ไม่ | ค่าเริ่มต้นของระบบ | อุปกรณ์ไมโครโฟนสำหรับ listen คือชื่ออุปกรณ์ AVFoundation บน macOS อุปกรณ์ PulseAudio หรือ ALSA บน Linux และชื่ออุปกรณ์ DirectShow บน Windows |
| PAXA_VOCABULARY | ไม่ | ชื่อและศัพท์คั่นด้วยจุลภาคที่บทถอดควรสะกดตามที่เขียนไว้ (ชื่อสินค้า ชื่อคน ศัพท์เฉพาะ) ใช้กับทุกการเรียก transcribe_audio และ listen | |
| PAXA_VOCABULARY_FILE | ไม่ | ไฟล์ข้อความที่มีศัพท์บรรทัดละหนึ่งคำ (# เริ่มคอมเมนต์) ใช้แบบเดียวกัน เซิร์ฟเวอร์อ่านไฟล์นี้ทุกครั้งที่เรียก และแก้ไขได้โดยไม่ต้องรีสตาร์ต | |
| PAXA_BASE_URL | ไม่ | https://api.paxalabs.com | เปลี่ยน origin ของ API |
หากต้องการใช้รายการคำต่างกันในแต่ละโปรเจกต์ ให้ตั้งตัวแปรคลังคำศัพท์ในรายการเซิร์ฟเวอร์ระดับโปรเจกต์ (project scope ของ Claude Code, .cursor/mcp.json, .vscode/mcp.json) แต่ละการเรียกจะใช้คำที่ส่งมากับการเรียกก่อน ตามด้วยคำที่ตั้งค่าไว้ ตัดคำซ้ำ และตัดที่ขีดจำกัดของ API ที่ 50 คำ แล้วรายงานว่าใช้ไปกี่คำ
การเล่นเสียงที่รองรับ#
| แพลตฟอร์ม | เล่นจากไฟล์ | เล่นแบบสตรีม | หยุดชั่วคราวและเล่นต่อ |
|---|---|---|---|
| macOS | afplay (มีในระบบ) | mpg123, ffplay หรือ mpv หากติดตั้งไว้ | ได้ |
| Linux | ffplay, mpv, mpg123, paplay หรือ aplay | mpg123, ffplay หรือ mpv | ได้ |
| Windows | ffplay หากติดตั้งไว้ มิฉะนั้นใช้ PowerShell (wav) | mpg123, ffplay หรือ mpv หากติดตั้งไว้ | ไม่ได้ |
การสตรีมต้องใช้โปรแกรมเล่นเสียงที่อ่านจาก stdin ได้ บน macOS ติดตั้งด้วย brew install mpg123 (เริ่มเล่นเร็วที่สุด) หรือ brew install ffmpeg หากไม่มี เสียงจะเล่นผ่าน afplay หลังดาวน์โหลดเสร็จ หากไม่พบโปรแกรมเล่นเสียงเลย เครื่องมือพูดจะแจ้งให้ทราบ และ text_to_speech ยังใช้งานได้ตามปกติ