คอนโซล

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 แต่ละอิลิเมนต์คือหนึ่งช่วงราคา:

ฟิลด์ประเภทคำอธิบาย
regionstringภูมิภาคชั้น V2 ของโมเดลข้อความ เช่น GLOBAL / NON_GLOBAL / us-central1 เป็น null สำหรับโมเดลภาพ/วิดีโอ
bandMinlongขอบล่างของช่วง input token ของโมเดลข้อความ (รวม) null = ไม่จำกัด
bandMaxlongขอบบนของช่วง input token ของโมเดลข้อความ (รวม) null = ไม่จำกัด
resolutionstringความละเอียดของภาพ/วิดีโอ เช่น 1080p / 4K เป็น null สำหรับโมเดลข้อความ
claritystringระดับความคมชัด
unitstringหน่วยเรียกเก็บ: token (ข้อความ) / image (ภาพ) / video (วิดีโอ)
quantityintegerจำนวนหน่วย (เช่น ต่อ 1000 token, ต่อ 1 ภาพ)
descriptionstringคำอธิบายราคา
inputPricedecimalราคาหน่วยอินพุตที่มีผล ของผู้เรียก
outputPricedecimalราคาหน่วยเอาต์พุตที่มีผล ของผู้เรียก
cachePricedecimalราคาแคช (โมเดลทั่วไป, สูตรเรียกเก็บเดิม)
cacheReadPricedecimalราคาหน่วยอ่านแคช (เฉพาะ Bedrock Claude)
cacheWritePricedecimalราคาหน่วยเขียนแคช (เฉพาะ Bedrock Claude)
ratiodecimalตัวคูณเรียกเก็บ เป็น 1 ในโหมด FIXED ตัวคูณผู้ใช้/กลุ่มในโหมด RATIO
modestringโหมดราคา: RATIO / FIXED
planIdstringid แผนราคาที่ตรง อาจเป็น null

โมเดล 3 ประเภทใช้โครงสร้างเดียวกัน ต่างเพียงฟิลด์คำอธิบาย และฟิลด์ที่ไม่ใช้จะเป็น null:

ประเภทโมเดลunitฟิลด์คำอธิบายที่มีผล
ข้อความtokenregion / bandMin / bandMax
ภาพimageresolution / clarity
วิดีโอvideoresolution / 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