DormBix · สำหรับนักพัฒนา

ต่อ DormBix ผ่าน MCP & OAuth

DormBix เปิดให้เข้าถึงระบบบริหารหอพักแบบ programmatic ผ่าน Model Context Protocol (MCP) — endpoint เดียว, ยืนยันตัวตนด้วย OAuth 2.1, ทุก tool จำกัดด้วย scope และแยกข้อมูลรายหอ งานที่แก้ข้อมูลเดินผ่าน plan → approve → execute เสมอ หน้านี้อธิบายทุกส่วนตามจริง

ถ้าคุณเป็นเจ้าของหอและแค่อยากต่อแอป AI (Claude/ChatGPT) แบบคลิก ๆ ดูที่ เอกสารการเชื่อมต่อ AI แทน — หน้านี้เป็นเชิงเทคนิค

ภาพรวม

Base URLhttps://www.dormbix.com
MCP endpointhttps://www.dormbix.com/api/mcp
ProtocolModel Context Protocol over HTTP (JSON-RPC 2.0)
AuthOAuth 2.1 (authorization code + PKCE S256, public client)
Isolation1 token = 1 หอ · ข้ามหอไม่ได้
ทิศทางหลักบริหารหอสำหรับเจ้าของ (อ่าน/วิเคราะห์/สั่งงาน)

MCP endpoint

DormBix เป็น MCP server แบบ HTTP (JSON-RPC 2.0) — ประกาศเฉพาะ tools (ไม่มี resources/prompts/sampling) method ที่รองรับ: initialize, tools/list, tools/call, ping

Protocol version ที่รองรับ (ใหม่→เก่า):

2025-06-18   2025-03-26   2024-11-05

ต่อจาก Claude Code / Claude Desktop:

claude mcp add --transport http dormbix \
  https://www.dormbix.com/api/mcp \
  --header "Authorization: Bearer <TOKEN>"

เรียกตรงด้วย initialize:

curl -s https://www.dormbix.com/api/mcp \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize",
       "params":{"protocolVersion":"2025-06-18"}}'

tools/list คืนเฉพาะ tool ที่ scope ของ token นั้นเรียกได้จริง — เมื่อ DormBix เพิ่ม tool ใหม่ ให้ลบแล้วเพิ่ม connector ใหม่เพื่อดึงรายการล่าสุด

การยืนยันตัวตน (OAuth 2.1)

ยิงไม่มี token → /api/mcp ตอบ 401 พร้อม header WWW-Authenticate ที่ชี้ไป resource metadata client อ่าน metadata แล้วเดิน OAuth ต่อ

Discovery endpoint:

GET /.well-known/oauth-protected-resource     (RFC 9728)
GET /.well-known/oauth-authorization-server   (RFC 8414)
authorization_endpoint/api/oauth/authorize
token_endpoint/api/oauth/token
registration_endpoint/api/oauth/register (Dynamic Client Registration)
grant_typesauthorization_code
PKCEบังคับ code_challenge_method = S256
client authnone (public client — ไม่มี client_secret)
อายุ token30 วัน · เพิกถอนได้ทุกเมื่อ
ส่ง tokenheader: Authorization: Bearer <TOKEN>

กรณีล็อกอิน DormBix คนละเบราว์เซอร์ (เช่นผ่าน LINE) แอป AI จะโชว์รหัส 6 หลัก — เจ้าของหอเปิด /connect บนเครื่องที่ล็อกอินอยู่แล้วกรอกรหัสเพื่ออนุมัติ

ขอบเขตสิทธิ์ (scopes)

ผู้ใช้ติ๊กเลือก scope ตอน consent (ค่าเริ่มต้น = ดูอย่างเดียว) DormBix บังคับ สองชั้น: scope ต้องอยู่ใน token และ role ของบัญชีต้องมีสิทธิ์นั้นจริง — ติ๊ก scope เกินสิทธิ์ role ก็ยังทำไม่ได้

ตารางนี้คือคำศัพท์ scope ทั้งหมด — จะขอสิทธิ์ได้จริงเฉพาะ scope ที่มี tool รองรับแล้ว (write.tenants / write.payment / send.line ยังไม่เปิดให้ AI ทำ — งานแตะเงิน/ข้อความหาผู้เช่า ตั้งใจกันไว้ให้ทำในระบบเอง) ตารางนี้สร้างจาก registry ของจริง รายการสด ๆ ดูที่ /.well-known/agent-card.json หรือ get_capabilities

scopeทำอะไรได้tool
read.roomsดูข้อมูลห้องพัก11 ตัว
read.tenantsดูข้อมูลผู้เช่า3 ตัว
read.financeดูข้อมูลการเงินและบิล11 ตัว
read.metersดูมิเตอร์น้ำ-ไฟ4 ตัว
read.expenseดูรายจ่าย3 ตัว
read.maintดูงานแจ้งซ่อม2 ตัว
write.roomsเพิ่ม-แก้ห้องพัก2 ตัว
write.settingsแก้การตั้งค่าหอพัก4 ตัว
write.tenantsเพิ่ม-แก้ข้อมูลผู้เช่ายังไม่เปิด
write.meterจดมิเตอร์2 ตัว
write.billingออกบิล / ยกเลิกบิล2 ตัว
write.paymentบันทึกการชำระเงินยังไม่เปิด
write.expenseบันทึกรายจ่าย3 ตัว
write.maintจัดการงานซ่อม1 ตัว
send.lineส่งข้อความเข้า LINE ของผู้เช่ายังไม่เปิด

รายการ tool

56 tool แบ่งเป็น ดู · วิเคราะห์ · สั่งงาน — ตารางนี้สร้างจาก registry ของจริง จึงตรงกับที่เซิร์ฟเวอร์ประกาศเสมอ · ที่มีป้าย ต้องยืนยัน ต้องผ่าน plan→execute (ดูหัวข้อถัดไป) รายการที่ token ของคุณเรียกได้จริงดูสด ๆ ที่ get_capabilities

ดูข้อมูล (read-only)

list_roomsรายการห้องทั้งหมดread.rooms
get_vacant_roomsห้องว่างread.rooms
get_long_vacanciesห้องที่ว่างนาน + จำนวนวันที่ว่างread.rooms
get_roomรายละเอียดห้องเดียวread.rooms
search_tenantsค้นหาผู้เช่าread.tenants
get_tenantรายละเอียดผู้เช่า (ไม่รวมข้อมูลอ่อนไหว)read.tenants
get_expiring_leasesสัญญาใกล้หมด/ใครกำลังย้ายออกread.tenants
get_unpaid_invoicesบิลค้างชำระและยอดรวมread.finance
get_invoiceรายละเอียดบิลread.finance
get_meter_readingsเลขมิเตอร์น้ำ–ไฟread.meters
get_meter_reading_statusห้องที่ยังไม่ได้จดมิเตอร์ประจำเดือนรอบนี้read.meters
get_meter_baselinesค่ามิเตอร์ตั้งต้นที่ยังขาดread.meters
list_maintenance_ticketsใบแจ้งซ่อมและสถานะread.maint
get_room_inspectionใบตรวจสภาพห้องวันย้ายเข้า — อะไรปกติ/ชำรุด/ยังไม่ตรวจ (ส่งจำนวนรูป ไม่ส่งตัวรูปหรือลายเซ็น)read.rooms
list_moveoutsรายการย้ายออก + ติดอยู่ขั้นไหน + เงินที่ยังค้างในกระบวนการread.rooms
get_dorm_overviewภาพรวมหอ (ห้อง รายได้ ยอดค้าง)read.finance
get_action_itemsสรุปงานที่ต้องจัดการวันนี้ (บิลค้าง/สัญญาใกล้หมด/มิเตอร์/ซ่อม)read.finance
get_setup_checklistสิ่งที่ยังตั้งค่าไม่ครบก่อนออกบิล/ลงประกาศread.rooms
get_dorm_profileโปรไฟล์หอสำหรับหน้าประกาศสาธารณะread.rooms
get_contract_templateแบบฟอร์มสัญญาเช่าของหอ — ข้อความรายข้อ (ไม่มีข้อมูลผู้เช่า)read.rooms
get_room_typesประเภทห้องและราคาread.rooms
get_tenant_import_templateเทมเพลตนำเข้าผู้เช่าread.rooms
get_capabilitiesความสามารถและสิทธิ์ของ token นี้ (เรียกก่อนเสมอ)
get_pending_approvalsรายการที่รอเจ้าของหอตัดสิน และผลที่เพิ่งตัดสินไป
get_whats_newเกิดอะไรขึ้นบ้างตั้งแต่ครั้งก่อน — ให้ AI มาเช็คเองตอนเริ่มงาน
get_helpคู่มือวิธีใช้งาน DormBix
send_feedbackส่งฟีดแบ็กถึงทีม DormBix

วิเคราะห์ (read-only)

get_monthly_revenueรายได้รายเดือนread.finance
get_revenue_trendแนวโน้มรายได้ย้อนหลัง แยกค่าเช่า/ไฟ/น้ำread.finance
get_collection_riskห้องเสี่ยงเก็บเงินไม่ได้ (จัดระดับ)read.finance
get_billing_readinessออกบิลรอบนี้ได้หรือยัง — บอกทุกเหตุผลที่ยังไม่ได้ในครั้งเดียวread.finance
get_billing_run_statusรอบออกบิลที่สั่งไปจบหรือยัง และบิลลงจริงกี่ใบ (งานเข้าคิว ≠ ออกบิลแล้ว)read.finance
find_abnormal_metersมิเตอร์ที่ค่าพุ่งผิดปกติread.meters
get_maintenance_summaryสรุปงานซ่อมตามหมวด + ห้องที่แจ้งซ้ำread.maint
get_moveout_settlementที่มาของยอดปิดบัญชีย้ายออกรายห้อง — ค่าห้องตามวันอยู่จริง/ค่าน้ำไฟ/บิลเก่าที่รวมเข้ามา/ค่าเสียหาย แล้วหักเงินประกันread.finance
get_expense_summaryสรุปค่าใช้จ่ายของหอread.expense
list_expensesรายการรายจ่ายรายตัว (มี expense_id)read.expense
list_expense_categoriesหมวดรายจ่ายที่ใช้ได้read.expense
get_occupancy_trendแนวโน้มอัตราการเข้าพักread.finance

สั่งงาน

plan_generate_billing_cycleเตรียมแผนออกบิลรอบเดือน — พรีวิวยอดจริงรายห้องจากเครื่องยนต์ตัวเดียวกับที่ออกบิล ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอwrite.billing
plan_void_invoiceเตรียมแผนยกเลิกบิล (ใบที่มีเงินเข้าแล้วทำไม่ได้) ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอwrite.billing
plan_set_meter_baselinesเตรียมแผนตั้งค่ามิเตอร์ตั้งต้น ต้องยืนยันwrite.meter
plan_record_meter_readingsเตรียมแผนจดเลขมิเตอร์น้ำ-ไฟประจำเดือน ต้องยืนยันwrite.meter
plan_update_maintenance_ticketเตรียมแผนอัปเดตสถานะงานซ่อม ต้องยืนยันwrite.maint
plan_add_expenseเตรียมแผนบันทึกค่าใช้จ่าย ต้องยืนยันwrite.expense
plan_void_expenseเตรียมแผนยกเลิกรายจ่าย ต้องยืนยันwrite.expense
plan_add_expense_categoryเตรียมแผนสร้างหมวดรายจ่าย ต้องยืนยันwrite.expense
plan_update_dorm_settingsเตรียมแผนแก้ตั้งค่าหอ ต้องยืนยันwrite.settings
plan_update_contract_templateเตรียมแผนแก้แบบฟอร์มสัญญาเช่า — เกลาถ้อยคำ เพิ่ม/ลบ/สลับข้อ (เลขข้อนับใหม่ให้เอง · ย้อนได้) ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอwrite.settings
plan_create_room_typesเตรียมแผนสร้างประเภทห้อง ต้องยืนยันwrite.settings
plan_update_room_typeเตรียมแผนแก้ประเภทห้อง ต้องยืนยันwrite.settings
plan_create_roomsเตรียมแผนสร้างห้อง ต้องยืนยันwrite.rooms
plan_update_roomsเตรียมแผนแก้ห้อง ต้องยืนยันwrite.rooms
execute_planยืนยันลงมือตาม plan_id
plan_undoเตรียมแผนย้อนรายการที่ทำไปแล้ว (ออกบิล/จดมิเตอร์/รายจ่าย ภายใน 7 วัน) ต้องยืนยันเจ้าของหอต้องอนุมัติเสมอ
cancel_planยกเลิกแผนที่ยังไม่ execute

plan → approve → execute

tool ชื่อ plan_* ไม่แก้ข้อมูล — มันคืน พรีวิว: plan_id, จำนวนที่กระทบ, ยอดรวม, คำเตือน และเวลาหมดอายุ ต้องเอาสรุปให้ผู้ใช้ยืนยันก่อน แล้วจึงเรียก execute_plan พร้อม plan_id นั้น

คุณสั่ง → plan_*  →  พรีวิว (plan_id, กระทบกี่รายการ, คำเตือน)
        → ผู้ใช้ยืนยัน → execute_plan(plan_id) → บันทึกจริง + log
  • แผน หมดอายุได้ — execute หลังหมดอายุจะถูกปฏิเสธ
  • execute ครั้งเดียว: ต่อให้ยิงซ้อนกัน มีแค่คำขอเดียวที่ได้ผล (plan_id เป็น idempotency key ในตัว)
  • งานเขียนหนัก (เช่นออกบิลทั้งหอ) เข้าคิวแบบ idempotent — ไม่ทำซ้ำแม้ retry
  • ยกเลิกก่อนลงมือได้ด้วย cancel_plan

error

แยก 2 แบบ: protocol พัง → คืน JSON-RPC error (LLM แก้ไม่ได้) ส่วน tool ทำงานแล้วไม่สำเร็จ (เช่น input ผิด) → คืน result ที่มี isError: true พร้อมข้อความไทย + hint เพื่อให้ LLM ปรับ input แล้วลองใหม่ได้

codeความหมาย
-32700Parse error — payload ไม่ใช่ JSON ที่ถูกต้อง
-32600Invalid request — ไม่ใช่ JSON-RPC 2.0 ที่ถูกต้อง
-32601Method not found — เรียก method ที่ไม่รองรับ
-32602Invalid params — พารามิเตอร์ไม่ครบ/ผิด (เช่นไม่มีชื่อ tool)
-32603Internal error — ข้อผิดพลาดฝั่งเซิร์ฟเวอร์

rate limit

จำกัดต่อ token ต่อวัน (รีเซ็ตเที่ยงคืน) — เกินแล้วตอบว่าเต็มโควตาพร้อมเวลารีเซ็ต:

ชนิดต่อวันครอบคลุม
อ่าน1000การเรียกดู/วิเคราะห์
เขียน100การสั่งงานที่แก้ข้อมูล
ส่งออก300การส่งข้อความ LINE

ความปลอดภัย

  • 1 token ผูก 1 หอ ทุกคิวรีตั้ง app.dorm_id — ข้ามไปหออื่นไม่ได้
  • ไม่ส่งข้อมูลอ่อนไหวออก: เลขบัตรประชาชน รูปบัตร ที่อยู่ วันเกิด เลขบัญชีธนาคาร
  • ทุก action ลง audit log ของหอ (ใคร ผ่าน AI ตัวไหน ทำอะไร เมื่อไหร่)
  • Kill switch หลายระดับ: ทั้งแพลตฟอร์ม, รายหอ (opt-in ค่าเริ่มต้นปิด), รายโทเคน
  • เพิกถอน token ได้ทุกเมื่อ — งานที่แก้ข้อมูลต้องผ่านการยืนยันเสมอ

หมายเหตุ: ตอนนี้ ยังไม่มี webhooks สาธารณะ สำหรับให้ agent รับ event — การเข้าถึงเป็นแบบ request/response ผ่าน MCP เท่านั้น

ติดต่อ

คำถามเชิงเทคนิค: [email protected] · ภาพรวมสำหรับ AI: /ai · คู่มือต่อแอป AI: /docs/ai-connector