MCP
คู่มือ MCP ของ BasicRouter
รวม BasicRouter (เกตเวย์ LLM ที่เข้ากันได้กับ OpenAI) ให้เป็นเซิร์ฟเวอร์ MCP เพื่อให้เครื่องมือ AI ของคุณสามารถเรียกใช้เอนด์พอยต์แชท โมเดล การเรียกเก็บเงิน รูปภาพ และวิดีโอของ BasicRouter ได้โดยตรง
ฟีเจอร์
- 🤖 แชทหลาย API: รองรับเอนด์พอยต์ที่เข้ากันได้กับ OpenAI Chat Completions, Anthropic Messages และ OpenAI Responses
- 🖼️ การสร้างมัลติมีเดีย: นอกจากแชทข้อความแล้ว ยังรองรับงานแบบอะซิงโครนัสสำหรับสร้างภาพและวิดีโอ (ข้อความเป็นภาพ, ภาพเป็นภาพ, เฟรมแรก/สุดท้าย, สินทรัพย์อ้างอิง)
- 🔍 การค้นหาโมเดลและบัญชี: แสดงรายการโมเดลที่พร้อมใช้งาน รายละเอียดโมเดล ยอดคงเหลือในบัญชี รายละเอียดการใช้งาน/การเรียกเก็บเงิน และธุรกรรมการเติมเงิน
- 🔑 ส่งคีย์ผ่านส่วนหัว: การเรียกทุกครั้งจะอ่านคีย์ API จากส่วนหัวของคำขอ ดังนั้นการติดตั้งใช้งานเพียงครั้งเดียวสามารถใช้ร่วมกันได้หลายบัญชี — เซิร์ฟเวอร์จะไม่จัดเก็บหรือแคชคีย์ใด ๆ ไว้เลย
เริ่มต้นอย่างรวดเร็ว
ใช้งานผ่าน Claude Code (แนะนำ) เพิ่ม -s user เพื่อลงทะเบียนในระดับผู้ใช้ (ใช้ได้กับทุกโปรเจกต์ของคุณ)
ขั้นตอนที่ 1: เพิ่มการเชื่อมต่อ
claude mcp add --transport http basicrouter https://api.basicrouter.ai/mcp \
--header "X-Basicrouter-Api-Key: <your BasicRouter API key>" \
-s userขั้นตอนที่ 2: ตรวจสอบการเชื่อมต่อ
claude mcp list # should show ✓ Connected
claude mcp get basicrouter # should show Scope: User config (available in all your projects)ขั้นตอนที่ 3: เริ่มใช้งาน
คุณสามารถขอให้ Claude ทำสิ่งต่าง ๆ ได้ เช่น
- "ใช้ BasicRouter เรียก claude-sonnet-5 แล้วเขียนบทกวีเกี่ยวกับฤดูใบไม้ร่วง"
- "แสดงรายการโมเดลที่พร้อมใช้งานในบัญชี BasicRouter ของฉัน"
- "ตรวจสอบยอดคงเหลือและการใช้งานล่าสุดของ BasicRouter ของฉัน"
- "ใช้ BasicRouter สร้างภาพเมืองยามค่ำคืนสไตล์ไซเบอร์พังก์"
Claude จะเรียกใช้เครื่องมือ MCP ที่ตรงกันโดยอัตโนมัติและส่งคืนผลลัพธ์
การใช้งานกับ Claude Desktop
เพิ่มสิ่งนี้ลงในส่วน mcpServers
{
"mcpServers": {
"basicrouter": {
"type": "http",
"url": "https://api.basicrouter.ai/mcp",
"headers": {
"X-Basicrouter-Api-Key": "<your BasicRouter API key>"
}
}
}
}การใช้งานกับ Codex CLI
แนะนำ: ใช้ env_http_headers เพื่ออ่านคีย์จากตัวแปรสภาพแวดล้อม
ตั้งค่าตัวแปรสภาพแวดล้อมในเชลล์ของคุณก่อน
export BASICROUTER_API_KEY=<your BasicRouter API key>จากนั้นใน ~/.codex/config.toml
[mcp_servers.basicrouter]
url = "https://api.basicrouter.ai/mcp"
env_http_headers = { "X-Basicrouter-Api-Key" = "BASICROUTER_API_KEY" }อีกวิธี: ใช้ http_headers เพื่อเขียนคีย์ลงในไฟล์ตั้งค่าโดยตรง (สะดวกหากคุณไม่ต้องการจัดการตัวแปรสภาพแวดล้อมแยก แต่โปรดทราบว่าคีย์จะถูกจัดเก็บเป็นข้อความล้วนในไฟล์ตั้งค่า)
[mcp_servers.basicrouter]
url = "https://api.basicrouter.ai/mcp"
http_headers = { "X-Basicrouter-Api-Key" = "<your BasicRouter API key>" }หากเพิ่มผ่านหน้าตั้งค่าของ Codex
- ประเภท: HTTP / Streamable HTTP
- ชื่อ: basicrouter
- ที่อยู่ URL:
https://api.basicrouter.ai/mcp - ชื่อส่วนหัว:
X-Basicrouter-Api-Key - ค่าส่วนหัว: คีย์ API BasicRouter ของคุณ
ตรวจสอบการเชื่อมต่อ
หลังจากเปิด Codex CLI คำสั่ง /mcp จะแสดงรายการเซิร์ฟเวอร์ MCP ที่ตั้งค่าไว้และสถานะการเชื่อมต่อ — เพียงยืนยันว่าโหลด สำเร็จ รูปแบบการใช้งานเหมือนกับ Claude คือ Codex จะเลือกเครื่องมือที่ถูกต้อง โดยอัตโนมัติ
หากไฟล์ตั้งค่าของคุณมีเซิร์ฟเวอร์ MCP อื่นอยู่แล้ว ให้เพิ่มรายการนี้ในระดับเดียวกัน ปิด Claude Desktop ให้สนิทแล้วเปิดใหม่หลังแก้ไข
เครื่องมือ
เซิร์ฟเวอร์ MCP นี้มีเครื่องมือ 14 รายการ แบ่งเป็นห้าหมวดหมู่
1. แชท
1. chat_completion — Chat Completions
ส่งคำขอสนทนาหนึ่งครั้งและส่งกลับคำตอบเต็มของโมเดล (ไม่สตรีม) นอกจากข้อความแล้ว ยังรับภาพเพื่อการเข้าใจภาพได้ (โมเดลต้องรองรับ vision) — เปลี่ยน content ของข้อความจาก string เป็นarray ของบล็อกเนื้อหา ผสม text กับ image_url
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| model | ✅ | รหัสโมเดล เช่น "claude-sonnet-5" — ตรวจสอบด้วย list_models ก่อน |
| messages | ✅ | รายการข้อความ แต่ละรายการรูปแบบ {"role": "user"|"assistant"|"system", "content": "..."}; สำหรับอินพุตหลายโมดัล content เป็น array ของบล็อกเนื้อหา (ดู อินพุตหลายโมดัล ด้านล่าง) |
| temperature | ❌ | อุณหภูมิการสุ่มตัวอย่าง — ค่าสูงขึ้นสุ่มมากขึ้น |
| max_tokens | ❌ | จำนวนโทเค็นสูงสุดที่จะสร้าง |
อินพุตหลายโมดัล (text / image / video)
อินพุตภาพ (URL):
{"role": "user", "content": [
{"type": "text", "text": "ในภาพนี้มีอะไร?"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
]}อินพุตภาพ (Base64):
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,<BASE64_STRING>"}}รูปแบบที่รองรับ: PNG, JPEG, GIF (เฉพาะเฟรมแรก), WebP. ขนาดรูปภาพเดียวจำกัด 20MB.
หมายเหตุ: รูปภาพขนาดใหญ่ที่เข้ารหัส Base64 จะได้สตริงที่ยาวมาก อาจล้มเหลวเนื่องจากเนื้อความคำขอใหญ่เกินไป แนะนำให้ส่งภาพผ่าน URL
พารามิเตอร์ detail (ไม่บังคับ ตั้งใน object image_url) ควบคุมความละเอียดการประมวลผลภาพ: "auto" (ค่าเริ่มต้น — โมเดลตัดสินตามขนาด) / "low" (ภาพย่อ 512x512 เร็วและประหยัด เหมาะกับการจำแนกง่าย ๆ) / "high" (ความละเอียดเต็ม เหมาะกับอ่านอักษรเล็ก/รายละเอียด) ใน array content ของข้อความหนึ่งสามารถใส่บล็อก image_url หลายบล็อกเพื่อส่งภาพหลายภาพได้
อินพุตวิดีโอ (URL):
{"role": "user", "content": [
{"type": "text", "text": "อธิบายสิ่งที่เกิดขึ้นในวิดีโอนี้"},
{"type": "video_url", "video_url": {"url": "https://example.com/video.mp4"}}
]}อินพุตวิดีโอ (Base64):
{"type": "video_url", "video_url": {"url": "data:video/mp4;base64,<BASE64_STRING>"}}โมเดลที่รองรับการป้อนข้อมูลวิดีโอบน BasicRouter ได้แก่ โมเดลบางรุ่นจากซีรีส์ Qwen, Doubao (dola-seed), Kimi, MiniMax — ตรวจสอบ input_modalities ที่ส่งกลับโดย list_models มาตรฐาน Chat Completions อย่างเป็นทางการของ OpenAI ไม่รองรับวิดีโอแบบ native แต่ BasicRouter gateway รองรับผ่าน
{"type": "video_url", "video_url": {"url": "..."}}รูปแบบส่วนขยาย รูปแบบนี้สอดคล้องกับรูปแบบ video_url ที่ใช้โดย OpenRouter, NVIDIA NIM, vLLM และแพลตฟอร์มอื่น ๆ
2. create_message — เข้ากันได้กับ Anthropic Messages
เรียก endpoint ที่รองรับ Anthropic Messages (ไม่สตรีม) บล็อกเนื้อหารองรับ text, image, tool_use, tool_result, thinking, redacted_thinking ส่งภาพผ่านบล็อกเนื้อหา
{"type": "image", "source": {...}}| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| model | ✅ | รหัสโมเดล เช่น "claude-sonnet-4.6" |
| messages | ✅ | รายการข้อความ; content อาจเป็นสตริงหรืออาร์เรย์ของบล็อกเนื้อหา (text/image/tool_use/tool_result/thinking เป็นต้น) |
| max_tokens | ✅ | จำนวนโทเค็นเอาต์พุตสูงสุด |
| system | ❌ | พรอมต์ระบบ เป็นสตริงหรือ [{"type": "text", "text": "..."}] |
| temperature / top_p / top_k | ❌ | พารามิเตอร์การสุ่มตัวอย่าง |
| tools | ❌ | คำนิยามเครื่องมือ แต่ละรายการมีรูปแบบ {"name", "description", "input_schema", ...} |
| tool_choice | ❌ | กลยุทธ์การเลือกเครื่องมือ |
| thinking | ❌ | การตั้งค่าการคิดแบบขยาย |
| stop_sequences | ❌ | ลำดับหยุดที่กำหนดเอง |
| metadata | ❌ | ข้อมูลเมทาดาต้าเพิ่มเติม |
| anthropic_beta | ❌ | ตัวระบุฟีเจอร์เบต้าสำหรับส่วนหัว anthropic-beta |
อินพุตหลายโมดัล (text / image / video)
อินพุตภาพรองรับ source สามแบบ:
1. เข้ารหัส Base64 (หมายเหตุ: ฟิลด์ data เป็น string Base64 ล้วน ไม่มีคำนำหน้า data:); media_type รองรับ image/jpeg, image/png, image/gif, image/webp:
{"type": "image", "source": {
"type": "base64",
"media_type": "image/jpeg",
"data": "<BASE64_STRING>"
}}2. อ้างอิง URL:
{"type": "image", "source": {
"type": "url",
"url": "https://example.com/image.jpg"
}}3. File ID (อัปโหลดภาพผ่าน Files API ด้วย purpose="vision" ก่อนเพื่อรับ file_id):
{"type": "image", "source": {
"type": "file",
"file_id": "<file_id>"
}}ใน array content ของข้อความหนึ่งสามารถใส่บล็อก image หลายบล็อกเพื่อส่งภาพหลายภาพ
หมายเหตุ: รูปภาพขนาดใหญ่ที่เข้ารหัส Base64 จะได้สตริงที่ยาวมาก อาจล้มเหลวเนื่องจากเนื้อความคำขอใหญ่เกินไป แนะนำให้ส่งภาพผ่าน URL
อินพุตวิดีโอ: API Anthropic Messages ไม่รองรับไฟล์วิดีโอโดยกำเนิด สำหรับเข้าใจวิดีโอ ให้สกัดคีย์เฟรมด้วย ffmpeg หรือเครื่องมือทำนองเดียวกันก่อน แล้วส่งแต่ละเฟรมเป็นบล็อกเนื้อหา image สำหรับโมเดลที่รองรับการป้อนข้อมูลวิดีโอบน BasicRouter (ตรวจสอบ input_modalities ที่ส่งกลับโดย list_models) ให้ใช้อินเทอร์เฟซ chat_completion หรือ create_response เพื่อรองรับวิดีโอแบบเนทีฟ
3. create_response — เข้ากันได้กับ OpenAI Responses
ใช้ input แทน messages, instructions แทนข้อความระบบ และ text.format แทน response_format นอกจากข้อความแล้ว ยังรับภาพเพื่อการเข้าใจภาพได้ (โมเดลต้องรองรับ vision) — ตั้ง input เป็น array ของ object ข้อความ โดย content เป็น array ของบล็อกเนื้อหาผสมข้อความกับภาพ
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| model | ✅ | รหัสโมเดล เช่น "glm-5.2" |
| input | ✅ | string ล้วน (เป็นข้อความผู้ใช้หนึ่งข้อความ) หรือ array ของ object ข้อความ (ใช้สำหรับอินพุตหลายโมดัล ดูด้านล่าง) |
| instructions | ❌ | พรอมต์ระบบ |
| max_output_tokens | ❌ | จำนวนโทเค็นเอาต์พุตสูงสุด |
| temperature / top_p | ❌ | พารามิเตอร์การสุ่มตัวอย่าง |
| tools | ❌ | คำนิยามเครื่องมือ โครงสร้างระดับบนสุด {"type", "name", "description", "parameters"} |
| tool_choice | ❌ | "auto" / "none" / "required" หรือ {"type", "name"} |
| text | ❌ | การตั้งค่ารูปแบบเอาต์พุต เช่น {"format": {"type": "text" | "json_object" | "json_schema", ...}} |
| previous_response_id | ❌ | รหัสการตอบกลับก่อนหน้าสำหรับการสนทนาแบบหลายรอบ |
| parallel_tool_calls | ❌ | อนุญาตให้เรียกเครื่องมือแบบพร้อมกันหรือไม่ |
| metadata | ❌ | ข้อมูลเมทาดาต้าเพิ่มเติม |
อินพุตหลายโมดัล (text / image / video)
หมายเหตุ: Responses API ใช้ประเภทบล็อกเนื้อหา input_text / input_image / input_video (ไม่ใช่ text / image_url / video_url ของ Chat Completions) และ image_url / video_url เป็น string ตรง ๆ ไม่ใช่ object ซ้อน
อินพุตภาพ (URL):
[{"role": "user", "content": [
{"type": "input_text", "text": "ในภาพนี้มีอะไร?"},
{"type": "input_image", "image_url": "https://example.com/image.jpg"}
]}]อินพุตภาพ (Base64):
{"type": "input_image", "image_url": "data:image/jpeg;base64,<BASE64_STRING>"}รูปแบบที่รองรับ: PNG, JPEG, GIF (เฉพาะเฟรมแรก), WebP. ขนาดรูปภาพเดียวจำกัด 20MB.
หมายเหตุ: รูปภาพขนาดใหญ่ที่เข้ารหัส Base64 จะได้สตริงที่ยาวมาก อาจล้มเหลวเนื่องจากเนื้อความคำขอใหญ่เกินไป แนะนำให้ส่งภาพผ่าน URL
อินพุตภาพ (File ID):
{"type": "input_image", "file_id": "<file_id>"}file_id ได้จากการอัปโหลดภาพผ่าน Files API ด้วย purpose="vision"
พารามิเตอร์ detail (ไม่บังคับ ใน object input_image) ควบคุมความละเอียดการประมวลผล: "auto" (ค่าเริ่มต้น) / "low" (ภาพย่อ 512x512 เร็วและประหยัด) / "high" (ความละเอียดเต็ม อ่านอักษรเล็ก/รายละเอียด) / "original" (ความละเอียดดั้งเดิม) ใน array content ของข้อความหนึ่งสามารถใส่บล็อก input_image หลายบล็อกเพื่อส่งภาพหลายภาพได้
อินพุตวิดีโอ (URL):
[{"role": "user", "content": [
{"type": "input_text", "text": "อธิบายสิ่งที่เกิดขึ้นในวิดีโอนี้"},
{"type": "input_video", "video_url": "https://example.com/video.mp4"}
]}]อินพุตวิดีโอ (Base64):
{"type": "input_video", "video_url": "data:video/mp4;base64,<BASE64_STRING>"}อินพุตวิดีโอ (File ID):
{"type": "input_video", "file_id": "<file_id>"}โมเดลที่รองรับการป้อนข้อมูลวิดีโอบน BasicRouter ได้แก่ โมเดลบางรุ่นจากซีรีส์ Qwen, Doubao (dola-seed), Kimi, MiniMax — ตรวจสอบ input_modalities ที่ส่งกลับโดย list_models มาตรฐาน Responses API อย่างเป็นทางการของ OpenAI ไม่รองรับวิดีโอแบบ native แต่ BasicRouter gateway รองรับผ่าน
{"type": "input_video", "video_url": "..."}รูปแบบส่วนขยาย รูปแบบนี้สอดคล้องกับรูปแบบ input_video ที่ใช้โดย BytePlus/Volcengine และแพลตฟอร์มอื่น ๆ
2. โมเดลและบัญชี
4. list_models — แสดงรายการโมเดลที่พร้อมใช้งาน
ส่งคืนโมเดลที่พร้อมใช้งานสำหรับบัญชีปัจจุบัน พร้อมเมทาดาต้าผู้ให้บริการ โมดัลลิตี้ ความสามารถ และราคา ไม่มีพารามิเตอร์ แต่ละรายการในลิสต์มีช่วงราคา price_tiers ซึ่งเป็นราคาเรียกเก็บที่มีผลของผู้เรียก ตรงกับการหักเงินจริง (ดู คู่มือฟิลด์ช่วงราคา)
5. get_model — ดูรายละเอียดโมเดลเดียว
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| model | ✅ | รหัสโมเดล เช่น "gpt-5.5" — จะส่งคืนข้อผิดพลาดที่ชัดเจนหากไม่มีอยู่ |
ผลลัพธ์มีช่วงราคา price_tiers (ดู คู่มือฟิลด์ช่วงราคา) เมื่อโมเดลไม่มีอยู่จะส่ง 404 โดยไม่มีฟิลด์ราคา
6. get_balance — ตรวจสอบยอดคงเหลือในบัญชี
ส่งคืนการใช้งานและยอดคงเหลือของบัญชีปัจจุบัน ไม่มีพารามิเตอร์
3. การเรียกเก็บเงิน
7. list_usage — รายละเอียดการใช้งาน/การเรียกเก็บเงินของโมเดล
รายละเอียดการเรียกเก็บเงินจากการใช้งานโมเดลแบบแบ่งหน้า เรียงตามเวลาที่สร้างคำสั่งจากใหม่ไปเก่า มีเฉพาะค่าใช้จ่ายจากการใช้งานปกติเท่านั้น — ไม่รวมการเติมเงินหรือการปรับปรุง
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| page | ❌ | หมายเลขหน้า เริ่มที่ 1 ค่าเริ่มต้น 1 |
| size | ❌ | ขนาดหน้า ค่าเริ่มต้น 20 |
| start_time | ❌ | เวลาเริ่มต้น รูปแบบ "yyyy-MM-ddTHH:mm:ss" (เช่น "2026-07-01T00:00:00") |
| end_time | ❌ | เวลาสิ้นสุด รูปแบบเดียวกัน |
8. list_transactions — ธุรกรรมการเติมเงิน/แพ็กเกจ
ธุรกรรมการเติมเงิน / การซื้อแพ็กเกจที่ชำระเงินแล้วแบบแบ่งหน้า เรียงตามเวลาที่สร้างจากใหม่ไปเก่า
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| page | ❌ | หมายเลขหน้า เริ่มที่ 1 ค่าเริ่มต้น 1 |
| size | ❌ | ขนาดหน้า ค่าเริ่มต้น 20 |
| start_time | ❌ | เวลาเริ่มต้น รูปแบบ "yyyy-MM-dd HH:mm:ss" (หมายเหตุ: เป็นเว้นวรรค ไม่ใช่ "T" ระหว่างวันที่และเวลา) |
| end_time | ❌ | เวลาสิ้นสุด รูปแบบเดียวกัน |
4. การสร้างภาพ
9. list_image_models — แสดงรายการโมเดลสร้างภาพ
ส่งคืนโมเดลสร้างภาพที่รองรับ พร้อมความละเอียด สัดส่วนภาพ จำนวนภาพสูงสุด (maxCount) และจำนวนภาพอ้างอิงสูงสุด (fileMax) ไม่มีพารามิเตอร์ ตรวจสอบสิ่งนี้ก่อนสร้างภาพ — คุณสามารถส่งค่าที่ระบุไว้เท่านั้น แต่ละรายการในลิสต์มีช่วงราคา priceTiers (ดู คู่มือฟิลด์ช่วงราคา)
10. create_image_generation — ส่งงานสร้างภาพ
ส่งแบบอะซิงโครนัสและส่งคืน taskId ทันที; จะหักเครดิตของบัญชี
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| text | ✅ | พรอมต์สำหรับสร้างภาพ |
| model | ✅ | ชื่อโมเดล จาก id ที่ list_image_models ส่งคืน |
| count | ❌ | จำนวนภาพที่จะสร้าง |
| resolution | ❌ | ความละเอียด จาก resolutions ของ list_image_models |
| ratio | ❌ | สัดส่วนภาพ จาก ratios ของ list_image_models |
| image_urls | ❌ | URL ภาพอ้างอิง (ภาพเป็นภาพ) จำนวนไม่เกิน fileMax ของโมเดลนั้น |
| callback_url | ❌ | เว็บฮุกที่ถูกเรียกเมื่อเสร็จสิ้น; ไม่ระบุเพื่อใช้การโพลแทน |
11. get_image_generation — โพลงานสร้างภาพ
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| task_id | ✅ | taskId ที่ create_image_generation ส่งคืน |
ผลลัพธ์: status คือ pending / success / failed; images คืออาร์เรย์สตริง JSON ของ URL ภาพ; text ให้ข้อความเพิ่มเติมจากโมเดล (เช่น เอาต์พุตมัลติโมดัลของ Gemini)
5. การสร้างวิดีโอ
12. list_video_models — แสดงรายการโมเดลสร้างวิดีโอ
ส่งคืนโมเดลสร้างวิดีโอที่รองรับ พร้อม allowedVideoTypes ช่วงระยะเวลา (videoDurationMin/Max) ความละเอียด สัดส่วนภาพ และขีดจำกัดสินทรัพย์อ้างอิง (fileMax) ไม่มีพารามิเตอร์ ตรวจสอบสิ่งนี้ก่อนสร้างวิดีโอ แต่ละรายการในลิสต์มีช่วงราคา priceTiers (ดู คู่มือฟิลด์ช่วงราคา)
13. create_video_generation — ส่งงานสร้างวิดีโอ
ส่งแบบอะซิงโครนัสและส่งคืน taskId ทันที; จะหักเครดิตของบัญชี
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| text | ✅ | พรอมต์สำหรับสร้างวิดีโอ; เมื่อ video_type=5 ให้อ้างอิงสินทรัพย์ด้วย "@Image N"/"@Video N"/"@Audio N" |
| model | ✅ | ชื่อโมเดล จาก id ที่ list_video_models ส่งคืน |
| video_type | ✅ | รหัสรูปแบบการสร้าง (1-5 ดูด้านล่าง) — ใช้ได้เฉพาะค่าที่อยู่ใน allowedVideoTypes ของโมเดลนั้นเท่านั้น |
| image_urls | ❌ | URL สินทรัพย์ภาพ; ความหมายขึ้นอยู่กับ video_type |
| video_urls | ❌ | URL สินทรัพย์วิดีโอ ใช้เฉพาะ video_type=5 |
| audio_urls | ❌ | URL สินทรัพย์เสียง ใช้เฉพาะ video_type=5 |
| resolution / ratio | ❌ | ความละเอียด / สัดส่วนภาพ จาก list_video_models |
| duration | ❌ | ความยาววิดีโอเป็นวินาที ต้องอยู่ในช่วง videoDurationMin/Max |
| callback_url | ❌ | เว็บฮุกที่ถูกเรียกเมื่อเสร็จสิ้น; ไม่ระบุเพื่อใช้การโพลแทน |
ความหมายของ video_type:
| ค่า | รูปแบบ | ข้อกำหนดสินทรัพย์ |
|---|---|---|
| 1 | ข้อความเป็นวิดีโอ | ไม่ต้องใช้สินทรัพย์ |
| 2 | ภาพเป็นวิดีโอ (เฟรมแรก) | image_urls ระบุเฟรมเริ่มต้นเพียงหนึ่งภาพ |
| 3 | ภาพเป็นวิดีโอ (เฟรมแรก/สุดท้าย) | image_urls ระบุ [เฟรมแรก, เฟรมสุดท้าย] ตามลำดับ |
| 4 | ภาพเป็นวิดีโอ (อ้างอิง) | image_urls ระบุภาพอ้างอิงสไตล์/เนื้อหาหนึ่งภาพขึ้นไป |
| 5 | อ้างอิงทั้งหมด | ผสมผสาน image_urls/video_urls/audio_urls โดยอ้างอิงตามตำแหน่งใน text |
14. get_video_generation — โพลงานสร้างวิดีโอ
| พารามิเตอร์ | จำเป็น | คำอธิบาย |
|---|---|---|
| task_id | ✅ | taskId ที่ create_video_generation ส่งคืน |
คู่มือฟิลด์ช่วงราคา
ผลลัพธ์ของเครื่องมือค้นหาโมเดล 4 ตัวนี้ — list_models, get_model, list_image_models, list_video_models — ส่ง ราคาเรียกเก็บที่มีผล ของผู้เรียก (ผู้ใช้ API Key) ซึ่งตรงกับการหักเงินจริงทุกประการ และรวม ช่วงราคาทั้งหมด ของโมเดล
ความแตกต่างของชื่อ: list_models / get_model ใช้ snake_case ของ OpenAI (price_tiers); list_image_models / list_video_models ใช้ camelCase (priceTiers) โครงสร้างเหมือนกัน
price_tiers / priceTiers เป็น array แต่ละอิลิเมนต์คือหนึ่งช่วงราคา:
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
region | string | ภูมิภาคชั้น V2 ของโมเดลข้อความ เช่น GLOBAL / NON_GLOBAL / us-central1 เป็น null สำหรับโมเดลภาพ/วิดีโอ |
bandMin | long | ขอบล่างของช่วง input token ของโมเดลข้อความ (รวม) null = ไม่จำกัด |
bandMax | long | ขอบบนของช่วง input token ของโมเดลข้อความ (รวม) null = ไม่จำกัด |
resolution | string | ความละเอียดของภาพ/วิดีโอ เช่น 1080p / 4K เป็น null สำหรับโมเดลข้อความ |
clarity | string | ระดับความคมชัด |
unit | string | หน่วยเรียกเก็บ: token (ข้อความ) / image (ภาพ) / video (วิดีโอ) |
quantity | integer | จำนวนหน่วย (เช่น ต่อ 1000 token, ต่อ 1 ภาพ) |
description | string | คำอธิบายราคา |
inputPrice | decimal | ราคาหน่วยอินพุตที่มีผล ของผู้เรียก |
outputPrice | decimal | ราคาหน่วยเอาต์พุตที่มีผล ของผู้เรียก |
cachePrice | decimal | ราคาแคช (โมเดลทั่วไป, สูตรเรียกเก็บเดิม) |
cacheReadPrice | decimal | ราคาหน่วยอ่านแคช (เฉพาะ Bedrock Claude) |
cacheWritePrice | decimal | ราคาหน่วยเขียนแคช (เฉพาะ Bedrock Claude) |
ratio | decimal | ตัวคูณเรียกเก็บ เป็น 1 ในโหมด FIXED ตัวคูณผู้ใช้/กลุ่มในโหมด RATIO |
mode | string | โหมดราคา: RATIO / FIXED |
planId | string | id แผนราคาที่ตรง อาจเป็น null |
โมเดล 3 ประเภทใช้โครงสร้างเดียวกัน ต่างเพียงฟิลด์คำอธิบาย และฟิลด์ที่ไม่ใช้จะเป็น null:
| ประเภทโมเดล | unit | ฟิลด์คำอธิบายที่มีผล |
|---|---|---|
| ข้อความ | token | region / bandMin / bandMax |
| ภาพ | image | resolution / clarity |
| วิดีโอ | video | resolution / clarity |
ความหมายของราคา: inputPrice / outputPrice / cacheReadPrice / cacheWritePrice ฯลฯ ที่ส่งกลับ คือราคาหน่วยเรียกเก็บสุดท้าย สำหรับผู้ใช้ API Key ปัจจุบัน ที่คำนวณผ่าน chain → guidance → ราคาพื้นฐาน และตรงกับการหักเงินจริง ราคาหน่วยที่ผู้เรียกเห็นจะต่างกันตาม chain ราคาของตน (reseller / distributor / องค์กร / การตั้งค่าระดับผู้ใช้)
การหักเงินจริง = ปริมาณ ÷ quantity × ราคาหน่วย × ratio สำหรับเรียกเก็บวิดีโอต่อวินาที: การหักเงินจริง = duration × outputPrice × ratio
กรณีขอบและการจัดการข้อผิดพลาด (endpoint แบบอ่านอย่างเดียวจะไม่ส่ง 500 เพราะปัญหาคอนฟิกราคา):
| สถานการณ์ | พฤติกรรม |
|---|---|
| ช่วงเดียวแก้ไขไม่สำเร็จ (นโยบายราคาปฏิเสธการเข้าถึง, ขาดคอนฟิก) | ข้ามช่วงนั้น, บันทึก warn log, แก้ไขช่วงที่เหลือต่อ |
| ช่วงทั้งหมดของโมเดลแก้ไขไม่สำเร็จ | array ว่าง [] โมเดลยังส่งกลับปกติ |
| โมเดลไม่มีคอนฟิกราคาเลย | array ว่าง [] |
| การแก้ไขราคาโยน exception ที่ไม่ถูกจับ | try-catch ทั้งหมด ส่ง array ว่าง endpoint ยัง 200 |
ตัวอย่างการตอบ (list_models, โมเดลข้อความ):
{
"object": "list",
"data": [
{
"id": "gpt-4o",
"object": "model",
"display_name": "gpt-4o",
"context_length": 128000,
"description": "...",
"price_tiers": [
{
"region": "GLOBAL",
"bandMin": null,
"bandMax": null,
"resolution": null,
"clarity": null,
"unit": "token",
"quantity": 1000,
"description": "ต่อ 1K token",
"inputPrice": 0.0025,
"outputPrice": 0.01,
"cachePrice": 0.00125,
"cacheReadPrice": 0,
"cacheWritePrice": 0,
"ratio": 1,
"mode": "RATIO",
"planId": null
}
]
}
]
}ตัวอย่างการตอบ (list_image_models, โมเดลภาพ; priceTiers โครงสร้างเหมือนกัน unit เป็น image):
{
"object": "list",
"data": [
{
"id": "dall-e-3",
"object": "image_model",
"displayName": "dall-e-3",
"resolutions": ["1024x1024", "1792x1024", "1024x1792"],
"priceTiers": [
{
"region": null,
"bandMin": null,
"bandMax": null,
"resolution": "1024x1024",
"clarity": "standard",
"unit": "image",
"quantity": 1,
"description": "ต่อภาพ",
"inputPrice": 0,
"outputPrice": 0.04,
"cachePrice": 0,
"cacheReadPrice": 0,
"cacheWritePrice": 0,
"ratio": 1,
"mode": "RATIO",
"planId": null
}
]
}
]
}ตัวอย่าง
ตัวอย่างที่ 1: คำขอแชทแบบพื้นฐาน
ถาม: "ใช้ BasicRouter เรียก claude-sonnet-5 แล้วถามว่า GIL ของ Python คืออะไร"
AI จะเรียก chat_completion ด้วย
{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "What is Python's GIL?"}]
}ตัวอย่างที่ 2: การใช้เครื่องมือผ่านเอนด์พอยต์ Anthropic Messages
ถาม: "ใช้เอนด์พอยต์ Messages ของ BasicRouter แล้วให้โมเดลตัดสินใจว่าจะตรวจสอบสภาพอากาศหรือไม่"
AI จะเรียก create_message โดยส่งคำนิยามเครื่องมือและ tool_choice; การตอบกลับจะมีบล็อกเนื้อหา tool_use รวมอยู่ด้วย
ตัวอย่างที่ 3: แสดงรายการโมเดลที่พร้อมใช้งาน
ถาม: "แสดงรายการโมเดลในบัญชี BasicRouter ของฉัน"
AI จะเรียก list_models ซึ่งส่งคืนรหัส ผู้ให้บริการ โมดัลลิตี้ ราคา และข้อมูลอื่น ๆ ของโมเดลที่พร้อมใช้งานทั้งหมด
ตัวอย่างที่ 4: ตรวจสอบยอดคงเหลือและการใช้งาน
ถาม: "ตรวจสอบการใช้งาน BasicRouter ของฉันในเดือนนี้"
AI จะเรียก get_balance เพื่อดูยอดคงเหลือ จากนั้นเรียก list_usage (กำหนด start_time ให้อยู่ในเดือนนี้) เพื่อดูรายละเอียดการใช้งาน
ตัวอย่างที่ 5: สร้างภาพ
ถาม: "ใช้ BasicRouter สร้างภาพเมืองยามค่ำคืนสไตล์ไซเบอร์พังก์"
AI จะเรียก list_image_models ก่อนเพื่อตรวจสอบข้อกำหนด จากนั้นเรียก create_image_generation เพื่อรับ taskId แล้วโพล get_image_generation เพื่อดู URL ของภาพ
ตัวอย่างที่ 6: ข้อความเป็นวิดีโอ
ถาม: "ใช้ BasicRouter สร้างวิดีโอ 5 วินาทีของเนบิวลาในอวกาศ"
AI จะเรียก list_video_models ก่อนเพื่อตรวจสอบข้อกำหนด จากนั้นเรียก create_video_generation (video_type=1, duration=5) และหลังจาก ได้ taskId แล้ว จะโพล get_video_generation
คำถามที่พบบ่อย
การเรียกเครื่องมือล้มเหลวด้วย "missing BasicRouter API Key"
- คุณรัน
claude mcp addโดยไม่ใส่--headerหรือคีย์ไม่ถูกต้อง - หากแก้ไขไฟล์ตั้งค่า JSON โดยตรง ชื่อฟิลด์
headersไม่ถูกต้อง (ควรเป็นX-Basicrouter-Api-Key) - รันในเครื่องโดยไม่ได้ตั้งค่าตัวแปรสภาพแวดล้อม
BASICROUTER_API_KEY
การเรียกเครื่องมือล้มเหลวด้วย "BasicRouter returned 401 unauthorized"
คีย์ API เองไม่ถูกต้องหรือหมดอายุ — สร้างใหม่ในคอนโซล BasicRouter
Claude ไม่เรียกเครื่องมือของ BasicRouter — ต้องทำอย่างไร
- ยืนยันว่าการเชื่อมต่อแสดง ✓ Connected ผ่าน
claude mcp list - ตรวจสอบสถานะการเชื่อมต่อ:
claude mcp get basicrouter - ลองระบุให้ชัดเจน: "ใช้เครื่องมือ
chat_completionของ BasicRouter เรียกclaude-sonnet-5…"
การสร้างภาพ/วิดีโอค้างสถานะ pending ตลอดไป
- โพลงานภาพด้วย
get_image_generationและงานวิดีโอด้วยget_video_generation— โปรดทราบว่าสถานะของงานวิดีโอที่กำลังทำงานคือ "running" ไม่ใช่ "pending" - การสร้างใช้เวลา ปกติไม่กี่ถึงหลายสิบวินาที นานกว่านั้นสำหรับวิดีโอ
- หากคุณส่ง
callback_urlไว้ งานจะเรียกกลับเมื่อเสร็จสิ้น — ไม่ต้องโพล
list_image_models / list_video_models เกิดข้อผิดพลาด
ทั้งสองเครื่องมือนี้ไม่หักเครดิตเอง — ข้อผิดพลาดมักชี้ไปที่ปัญหาคีย์หรือเครือข่าย ให้ยืนยันก่อนว่า list_models ทำงานได้ตามปกติ
ข้อควรทราบ
- ชื่อส่วนหัว:MCP ส่งคีย์ผ่าน
X-Basicrouter-Api-Key - การหักเครดิต:
chat_completion/create_message/create_response/create_image_generation/create_video_generationทั้งหมดหักเครดิตของบัญชี — ตรวจสอบget_balanceก่อนหากต้องการรู้ยอดคงเหลือล่วงหน้า - ตรวจสอบข้อกำหนดก่อนสร้าง:พารามิเตอร์การสร้างภาพ/วิดีโอ เช่น model, resolution, ratio, count, duration และ video_type ต้องใช้เฉพาะค่าที่ระบุโดย
list_image_models/list_video_modelsเท่านั้น ไม่เช่นนั้นการเรียกจะเกิดข้อผิดพลาด - ไม่มีการสตรีม:เอนด์พอยต์แชททั้งสามไม่รองรับการสตรีม — แต่ละเอนด์พอยต์จะส่งคืนผลลัพธ์ทั้งหมดในครั้งเดียว
- การออกแบบแบบไม่มีสถานะ:คำขอทุกครั้งเป็นอิสระจากกันและไม่มีการจัดเก็บเซสชัน สำหรับการสนทนาแบบหลายรอบ ให้ใช้
create_responseกับprevious_response_idหรือดูแลประวัติด้วยตัวเองในmessages
