- Buttplug MCP เป็น เซิร์ฟเวอร์ MCP ที่เชื่อมต่ออุปกรณ์สำหรับผู้ใหญ่ในระบบนิเวศของ Buttplug.io เข้ากับโปรแกรมที่ใช้ โมเดลภาษาขนาดใหญ่ (LLM)
- ผู้ใช้สามารถดูข้อมูลอุปกรณ์หรือควบคุมฟังก์ชันต่าง ๆ เช่น การสั่น สถานะแบตเตอรี่ และความแรงสัญญาณ ผ่านเครื่องมือ LLM อย่าง Claude Desktop ได้
- ขณะนี้ยังขาดทั้ง ความสมบูรณ์ของฟังก์ชันและความเสถียร ทำให้การทำงานโดยรวมยังไม่ลื่นไหล และมีความยากในการควบคุมอุปกรณ์จริง
- สามารถเชื่อมต่อกับโฮสต์ MCP อย่าง Ollama, mcphost เพื่อทดสอบแบบใช้เครื่องมือได้ แต่บางฟังก์ชัน (เช่น การสำรวจทรัพยากร) ยังมีข้อจำกัด
- โปรเจ็กต์นี้แตกต่างจาก บริการ MCP อื่น ๆ ตรงที่เน้นการควบคุมสมาร์ตดีไวซ์ด้วย LLM โดยเฉพาะ และเผยแพร่เป็นโอเพนซอร์สให้ใช้งานฟรี
ภาพรวมโปรเจ็กต์
- buttplug-mcp เป็นเซิร์ฟเวอร์ Model Context Protocol (MCP) สำหรับ ระบบนิเวศ Buttplug.io โดยเฉพาะ
- สามารถถามข้อมูลและควบคุมอุปกรณ์ Buttplug ของตนเองได้จาก โปรแกรม LLM ที่รองรับเครื่องมือ เช่น Claude Desktop
- ตัวอย่างคำสั่ง: "อุปกรณ์ buttplug ที่เชื่อมต่ออยู่ของฉันมีอะไรบ้าง?", "ตั้งมอเตอร์ตัวที่สองของ LELO F1S เป็น 50%", "แบตเตอรี่คงเหลือของ Lovense Max 2 เท่าไร?", "สัญญาณของ WeWibe อ่อนหรือไม่?"
- ตัวอย่างข้างต้นสะท้อนทิศทางที่ต้องการ แต่ประสบการณ์ที่มีอยู่จริงในตอนนี้ยัง ไม่เสถียรและน่าผิดหวัง
โครงสร้างทรัพยากรและเครื่องมือที่รองรับ
- ทรัพยากร API
/devices: รายการอุปกรณ์ Buttplug ที่เชื่อมต่ออยู่ (JSON)
/device/{id}: ข้อมูลรายละเอียดของอุปกรณ์แต่ละตัว
/device/{id}/rssi: ความแรงสัญญาณของอุปกรณ์ (RSSI)
/device/{id}/battery: ปริมาณแบตเตอรี่คงเหลือของอุปกรณ์แต่ละตัว
- เครื่องมือ
device_vibrate: พารามิเตอร์ id, motor, strength (จำเป็น: id, strength) และสามารถระบุมอเตอร์เพื่อควบคุมการสั่นได้ตามต้องการ
ตัวอย่าง JSON schema (ทรัพยากร)
{
"resources": [
{
"uri": "devices",
"name": "Device List",
"description": "List of connected Buttplug devices in JSON",
"mimeType": "application/json"
}
]
}
ตัวอย่าง JSON schema (เครื่องมือ)
{
"tools": [
{
"description": "Vibrates device by `id`, selecting `strength` and optional motor",
"inputSchema": {
"type": "object",
"properties": {
"id": {"description": "Device ID to query, sourced from `/devices`", "type": "number"},
"motor": {"description": "Motor number to vibrate, defaults to 0", "type": "number"},
"strength": {"description": "Strength from 0.0 to 1.0, with 0.0 being off and 1.0 being full", "type": "number"}
},
"required": ["id", "strength"]
},
"name": "device_vibrate"
}
]
}
สถานะปัจจุบัน
- เป็นโปรเจ็กต์ทดลองระยะสั้นที่เริ่มเมื่อวันที่ 1 เมษายน 2025 (April Fools' Day)
- การจัดการการเชื่อมต่อของไลบรารี go-buttplug ยังไม่เสถียร ทำให้แม้จะดึงรายการอุปกรณ์ได้ แต่การควบคุมบางอย่าง เช่น ฟังก์ชันสั่น ยังทำงานได้ไม่ราบรื่น
- ต้องใช้อุปกรณ์เสมือนเพื่อการทดสอบ แต่ Buttplug.io รองรับเฉพาะอุปกรณ์จริง
- ยังอยู่ในระยะเริ่มต้นที่ การทดสอบแบบ end-to-end ยังไม่เพียงพอ
- ในอนาคตมีแผนจะตรวจสอบเพิ่มเติมทั้งปัญหาการเชื่อมต่อของไลบรารี go-buttplug และสถานะของโฮสต์ในโปรโตคอล MCP (เช่น การเน้นใช้งานแบบเครื่องมือ)
วิธีติดตั้ง
- มีการเผยแพร่ไฟล์ไบนารีสำหรับหลายแพลตฟอร์มผ่าน GitHub Releases
- รองรับการติดตั้งผ่าน Homebrew:
brew tap conacademy/homebrew-tap
brew install conacademy/tap/buttplug-mcp
วิธีใช้งาน
การผสานรวมกับ Ollama และ mcphost
การบิลด์
- ใช้ระบบบิลด์บนพื้นฐานของ task
- เครื่องมือทดสอบที่มีประโยชน์:
task stdio-schema | jq (ตรวจสอบ JSON schema)
npx @modelcontextprotocol/inspector node build/index.js (MCP Inspector Web GUI)
อาร์กิวเมนต์ CLI
- ตัวเลือกหลัก:
-h, --help: วิธีใช้
-l, --log-file: ระบุปลายทางไฟล์ล็อก
-j, --log-json: รูปแบบล็อกแบบ JSON
--sse: ใช้การส่งข้อมูลแบบ SSE
--sse-host: โฮสต์/พอร์ตสำหรับการเชื่อมต่อ SSE
-v, --verbose: ล็อกแบบละเอียด
--ws-port: พอร์ตสำหรับเชื่อมต่อกับเซิร์ฟเวอร์ Buttplug Websocket
การมีส่วนร่วมและจรรยาบรรณโค้ด
- ยินดีรับ Pull Request, fork และการมีส่วนร่วมในรูปแบบต่าง ๆ
- ต้องปฏิบัติตาม Code of Conduct
เครดิตและไลเซนส์
- ใช้งานโปรเจ็กต์โอเพนซอร์ส go-buttplug, go-mcp
- รวมถึงไลบรารี Golang และตัวอย่างของ Buttplug.io ตลอดจนไลบรารี Golang สำหรับ Model Context Protocol
- ลิขสิทธิ์ 2025 Neomantra BV, Evan Wies(ConAcademy)
- เผยแพร่ภายใต้ MIT License (ดูรายละเอียดไลเซนส์ใน LICENSE.txt)
2 ความคิดเห็น
โอ้โห.. คงต้องบอกว่านี่มันเร็วเกินไปสำหรับพวกเราล่ะมั้ง..
ความเห็นจาก Hacker News