MCP สำหรับ AI
ต่อ Claude Code · Cursor · Claude Desktop เข้ากับ SlipBolt — ให้ AI อ่านเอกสารจริง ดูโควตา ค้นสลิป ดึงใบยืนยัน และตรวจสลิปด้วยคีย์ของร้านคุณ
SlipBolt มี MCP server (Model Context Protocol) ให้ AI ที่คุณใช้เขียนโค้ดอยู่แล้ว คุยกับ SlipBolt ได้ตรง ๆ ไม่ต้องก๊อปเอกสารไปวางในแชต ไม่ต้องเดาชื่อ endpoint
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
export SLIPBOLT_API_KEY="sk_test_xxxxxxxxxxxxxxxx"
ใช้แค่เอกสารอย่างเดียว (ไม่ดูข้อมูลร้าน) ข้ามขั้นนี้ได้ แล้วตั้งค่าแบบไม่มี header
2. ตั้งค่าใน AI tool
คีย์ไปใน header Authorization: Bearer sk_… เท่านั้น — ไม่รับคีย์ใน URL (URL ไปโผล่ใน log ทุกชั้น)
Claude Code
แบบเร็ว — คำสั่งเดียว (คีย์ถูกเก็บใน ~/.claude.json ของเครื่องคุณ):
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 ของแต่ละคนตอนเชื่อมต่อ:
{
"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 (เฉพาะโปรเจกต์นี้):
{
"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 ใหม่:
{
"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 ก็ได้:
# รายชื่อ 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 key | client ไม่ได้ส่ง 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 |
