guides

MCP สำหรับ AI

ต่อ Claude Code · Cursor · Claude Desktop เข้ากับ SlipBolt — ให้ AI อ่านเอกสารจริง ดูโควตา ค้นสลิป ดึงใบยืนยัน และตรวจสลิปด้วยคีย์ของร้านคุณ

⏱ ใหม่

SlipBolt มี MCP server (Model Context Protocol) ให้ AI ที่คุณใช้เขียนโค้ดอยู่แล้ว คุยกับ SlipBolt ได้ตรง ๆ ไม่ต้องก๊อปเอกสารไปวางในแชต ไม่ต้องเดาชื่อ endpoint

URL
https://docs.slip-bolt.com/mcp
ทำอะไรได้ต้องมีคีย์ไหม
ค้นและอ่านเอกสารนี้ทั้งชุด (TH/EN · รวมตัวอย่างโค้ด)ไม่ต้อง
ดูร้าน · แพ็ก · โควตาคงเหลือ · ค้นสลิปย้อนหลัง · ดึงใบยืนยันคีย์ scope read
ตรวจสลิปใบใหม่ (หักโควตาจริง)คีย์ scope verify

ลองถาม AI แบบนี้ได้เลย:

  • "เขียน endpoint Express รับสลิปจากลูกค้าแล้วปิดออเดอร์ ตามเอกสาร SlipBolt"
  • "สลิปเลขอ้างอิง 015170106978BTF01234 ผ่านไหม ขอเลขใบยืนยันกับลิงก์เช็คด้วย"
  • "เดือนนี้เหลือโควตากี่ใบ"

MCP ไม่มีสิทธิ์อะไรมากกว่า REST API — ทุก tool แค่ส่งคีย์ของคุณต่อไปที่ Public API ชุดเดียวกัน scope ของคีย์ · rate limit · กติกาแพ็ก · โควตา ทำงานตามที่เขียนในเอกสารนี้ทุกอย่าง


1. สร้าง API key

ไปที่ Settings → API Keys (app.slip-bolt.com/settings/api-keys) แล้วสร้างคีย์ใหม่

  • ช่วงพัฒนาใช้ sk_test_ · ใช้กับข้อมูลจริงของร้านค่อยเปลี่ยนเป็น sk_live_
  • แนะนำให้ติ๊กแค่ scope read ถ้าต้องการให้ AI แค่อ่านข้อมูล — AI จะตรวจสลิปใหม่ (ที่หักโควตา) ไม่ได้เลยแม้จะพยายาม
  • เก็บคีย์ไว้ใน environment variable ชื่อ SLIPBOLT_API_KEY — อย่าวางคีย์ลงในแชตกับ AI
Terminal
export SLIPBOLT_API_KEY="sk_test_xxxxxxxxxxxxxxxx"

ใช้แค่เอกสารอย่างเดียว (ไม่ดูข้อมูลร้าน) ข้ามขั้นนี้ได้ แล้วตั้งค่าแบบไม่มี header

2. ตั้งค่าใน AI tool

คีย์ไปใน header Authorization: Bearer sk_… เท่านั้น — ไม่รับคีย์ใน URL (URL ไปโผล่ใน log ทุกชั้น)

Claude Code

แบบเร็ว — คำสั่งเดียว (คีย์ถูกเก็บใน ~/.claude.json ของเครื่องคุณ):

Terminal
claude mcp add --transport http slipbolt https://docs.slip-bolt.com/mcp \
  --header "Authorization: Bearer $SLIPBOLT_API_KEY"

แบบใช้ร่วมกันทั้งทีม — วางไฟล์ .mcp.json ที่รากโปรเจกต์ commit ได้เพราะไม่มีตัวคีย์ Claude Code อ่าน ${SLIPBOLT_API_KEY} จาก environment ของแต่ละคนตอนเชื่อมต่อ:

JSON
{
  "mcpServers": {
    "slipbolt": {
      "type": "http",
      "url": "https://docs.slip-bolt.com/mcp",
      "headers": { "Authorization": "Bearer ${SLIPBOLT_API_KEY}" }
    }
  }
}

เช็คว่าต่อติด: พิมพ์ /mcp ใน Claude Code แล้วต้องเห็น slipbolt พร้อม tools 9 ตัว

Cursor

แก้ ~/.cursor/mcp.json (ทุกโปรเจกต์) หรือ .cursor/mcp.json (เฉพาะโปรเจกต์นี้):

JSON
{
  "mcpServers": {
    "slipbolt": {
      "url": "https://docs.slip-bolt.com/mcp",
      "headers": { "Authorization": "Bearer ${env:SLIPBOLT_API_KEY}" }
    }
  }
}

เปิด Cursor จาก terminal ที่ export SLIPBOLT_API_KEY แล้ว (หรือตั้งตัวแปรนี้ระดับระบบ) แล้วดูสถานะที่ Settings → MCP

Claude Desktop

Claude Desktop ต่อ MCP แบบ remote ที่ใช้ header เองไม่ได้ ⇒ ใช้ mcp-remote เป็นตัวกลาง (ต้องมี Node.js 18+) แก้ไฟล์ claude_desktop_config.json (Settings → Developer → Edit Config) แล้วเปิด Claude Desktop ใหม่:

JSON
{
  "mcpServers": {
    "slipbolt": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://docs.slip-bolt.com/mcp", "--header", "Authorization:${SLIPBOLT_AUTH}"],
      "env": { "SLIPBOLT_AUTH": "Bearer sk_test_xxxxxxxxxxxxxxxx" }
    }
  }
}
  • Authorization:${SLIPBOLT_AUTH} ไม่มีเว้นวรรคหลัง : โดยตั้งใจ — Claude Desktop บน Windows ตัดอาร์กิวเมนต์ที่มีเว้นวรรคผิด
  • คีย์อยู่ในไฟล์นี้บนเครื่องคุณ — อย่าส่งไฟล์ให้คนอื่น
  • ใช้แค่เอกสาร: Settings → Connectors → Add custom connector แล้วใส่ URL https://docs.slip-bolt.com/mcp ได้เลย ไม่ต้องใช้ mcp-remote

client อื่น

ทุกตัวที่รองรับ Streamable HTTP ใช้ค่าชุดเดียวกัน: URL https://docs.slip-bolt.com/mcp + header Authorization: Bearer <คีย์> ตัวที่รองรับแค่ stdio ให้ใช้ mcp-remote แบบเดียวกับ Claude Desktop

3. Tools ทั้งหมด

ToolทำอะไรEndpoint ที่เรียกโควตา
search_docsค้นเอกสาร (ไทย/อังกฤษ) คืนหัวข้อ + ลิงก์—ไม่ใช้คีย์
read_docอ่านทั้งหน้า หรือหัวข้อเดียว (markdown + โค้ด)—ไม่ใช้คีย์
whoamiร้าน · แพ็ก · scope ของคีย์ · rate limit · บัญชีรับเงินGET /api/v1/meไม่หัก
get_quotaโควตาคงเหลือรอบนี้ + เครดิตGET /api/v1/quotaไม่หัก
list_transactionsค้นสลิปย้อนหลัง กรองด้วย status · source · transRef · ช่วงเวลาGET /api/v1/transactionsไม่หัก
get_transactionผลตรวจ 1 รายการ (id จากผลตรวจหรือ webhook)GET /api/v1/transactions/:idไม่หัก
get_receiptเลขใบยืนยัน SB-XXXX-XXXX + ลิงก์หน้าเช็ค + รูปใบยืนยัน (PNG)…/:id + …/:id/receipt.pngไม่หัก
verify_slipตรวจสลิปใหม่จาก imageUrl · qr · imageBase64 (อย่างใดอย่างหนึ่ง) · async: true = เข้าคิวแล้วได้ vrf_… ทันทีPOST /api/v1/verify · …/verify/asyncหักโควตา
get_verificationผลของ verify_slip แบบ async: true (PENDING → COMPLETED/FAILED)GET /api/v1/verifications/:idไม่หัก
  • verify_slip เป็น tool เดียวที่ประกาศว่า "ไม่ใช่อ่านอย่างเดียว" — client ส่วนใหญ่จะถามคุณก่อนเรียก
  • ส่ง qr (ข้อความใน QR ของสลิป) ถูกและเร็วที่สุด · imageBase64 ส่งได้ราว 3.5 MB (คำขอทั้งก้อนต้องไม่เกิน 5 MB)
  • ใส่ idempotencyKey (เช่นเลขออเดอร์) ได้ — AI ที่ retry หลัง timeout ด้วยค่าเดิมจะได้ผลเดิมโดยไม่ตรวจและไม่หักโควตาซ้ำ (Idempotency-Key)
  • ส่งรูปเดิมซ้ำภายใน 24 ชม. ได้ผลเดิมโดยไม่หักโควตา — เหมือน Idempotency ของ REST API
  • สลิปที่ผ่าน (status: "SUCCESS", verified: true) อาจมี errorCode: "STALE_SLIP" (และ warnings: [{ code: "STALE_SLIP" }]) ติดมาได้ — เป็นคำเตือนว่าสลิปจริงแต่เวลาโอนเกิน 24 ชม. ไม่ใช่ข้อผิดพลาด (ดู Stale slip)
  • คีย์ sk_test_ ไม่กินโควตาของร้าน แต่มีเพดานของตัวเอง ใช้เกินได้ 402 TEST_QUOTA_EXCEEDED

4. ทดสอบด้วย cURL

MCP ใช้ JSON-RPC ผ่าน HTTP POST ธรรมดา — ลองโดยไม่มี AI ก็ได้:

Terminal
# รายชื่อ tools (ไม่ต้องใช้คีย์)
curl -s https://docs.slip-bolt.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

# เรียก get_quota ด้วยคีย์ของร้าน
curl -s https://docs.slip-bolt.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Authorization: Bearer $SLIPBOLT_API_KEY" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_quota","arguments":{}}}'

ผลของ tool อยู่ที่ result.content[0].text (JSON) · ผิดพลาดได้ result.isError: true พร้อมข้อความที่บอกว่าต้องแก้อะไร

5. ความปลอดภัย

  • คีย์อยู่ใน header ของแต่ละคำขอเท่านั้น — เราไม่เก็บคีย์ ไม่เขียนลง log และไม่รับคีย์ทาง URL หรืออาร์กิวเมนต์ของ tool
  • server ไม่มีสถานะ (stateless) ทุกคำขอจบในตัว ไม่มี session ค้าง
  • เว็บไซต์อื่นยิงเข้า /mcp จากเบราว์เซอร์ไม่ได้ (ตรวจ Origin · ได้ 403)
  • ให้ AI ใช้คีย์ read อย่างเดียว ถ้าไม่จำเป็นต้องตรวจสลิปใหม่ · เพิกถอนคีย์ได้ทันทีที่ Settings → API Keys (มีผลกับ MCP ทันที)
  • ผลของ tool เป็นข้อมูลสลิปของร้านคุณ (ชื่อผู้โอน · เลขบัญชีบางส่วน) — AI tool บางตัวส่งข้อความในแชตไปยังผู้ให้บริการของมัน ดู Security & PDPA

6. แก้ปัญหา

อาการสาเหตุ / ทางแก้
tool ตอบ This tool needs a SlipBolt API keyclient ไม่ได้ส่ง header — เช็คว่า SLIPBOLT_API_KEY มีค่าใน environment ที่เปิด client
SlipBolt API 401คีย์ผิด/ถูกเพิกถอน — สร้างใหม่ที่ Settings → API Keys
SlipBolt API 403คีย์ไม่มี scope ที่ tool ต้องการ (verify_slip ต้องการ verify) หรือแพ็กไม่รวม REST API
SlipBolt API 402โควตา/เครดิตหมด หรือเพดานของ sk_test_ เต็ม — รอให้ทำซ้ำไม่ช่วย
SlipBolt API 429ยิงถี่เกิน rate limit — รอตาม Retry after ในข้อความ
เปิด URL ในเบราว์เซอร์แล้วเด้งมาหน้านี้ปกติ — /mcp รับเฉพาะ POST จาก MCP client