1 điểm bởi GN⁺ 2025-06-01 | 2 bình luận | Chia sẻ qua WhatsApp
  • Buttplug MCP là một máy chủ MCP dùng để kết nối các thiết bị người lớn trong hệ sinh thái Buttplug.io với các chương trình dựa trên mô hình ngôn ngữ lớn (LLM)
  • Người dùng có thể dùng các công cụ LLM như Claude Desktop để truy vấn thông tin thiết bị hoặc điều khiển nhiều tính năng như rung, trạng thái pin, cường độ tín hiệu
  • Hiện tại, dự án vẫn thiếu độ hoàn thiện chức năng và độ ổn định, nên toàn bộ tính năng chưa vận hành mượt mà và việc điều khiển thiết bị thực tế còn khó khăn
  • Có thể tích hợp với các host MCP như Ollama, mcphost để thử nghiệm theo kiểu công cụ, nhưng một số tính năng (như khám phá tài nguyên) còn bị hạn chế
  • So với các dịch vụ MCP khác, dự án này tập trung vào điều khiển thiết bị thông minh dựa trên LLM và được phát hành miễn phí dưới dạng mã nguồn mở

Tổng quan dự án

  • buttplug-mcp là máy chủ Model Context Protocol (MCP), dành riêng cho hệ sinh thái Buttplug.io
  • Trong các chương trình LLM có hỗ trợ công cụ như Claude Desktop, người dùng có thể truy vấn và điều khiển thiết bị Buttplug của mình
    • Ví dụ lệnh: "Các thiết bị buttplug nào của tôi đang được kết nối?", "Đặt động cơ thứ hai của LELO F1S ở mức 50%", "Pin còn lại của Lovense Max 2 là bao nhiêu?", "Tín hiệu của WeWibe có yếu không?"
  • Các ví dụ trên gần với định hướng mục tiêu, nhưng trải nghiệm hiện tại được triển khai thực tế vẫn không ổn định và gây thất vọng

Cấu trúc tài nguyên và công cụ được hỗ trợ

  • Tài nguyên API
    • /devices: danh sách thiết bị Buttplug đang kết nối (JSON)
    • /device/{id}: thông tin chi tiết của từng thiết bị
    • /device/{id}/rssi: cường độ tín hiệu (RSSI) của thiết bị
    • /device/{id}/battery: dung lượng pin còn lại của từng thiết bị
  • Công cụ
    • device_vibrate: tham số id, motor, strength (bắt buộc: id, strength), có thể chỉ định thêm motor để điều khiển rung

Ví dụ JSON schema (tài nguyên)

{
  "resources": [
    {
      "uri": "devices",
      "name": "Device List",
      "description": "List of connected Buttplug devices in JSON",
      "mimeType": "application/json"
    }
  ]
}

Ví dụ JSON schema (công cụ)

{
  "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"
    }
  ]
}

Trạng thái hiện tại

  • Đây là một dự án thử nghiệm ngắn hạn được bắt đầu vào ngày 1/4/2025 (Cá tháng Tư)
  • Khả năng quản lý kết nối của thư viện go-buttplug không ổn định, nên dù có thể truy vấn danh sách thiết bị, một số điều khiển như rung vẫn chưa hoạt động trơn tru
  • Cần thiết bị ảo cho mục đích thử nghiệm, nhưng Buttplug.io chỉ hỗ trợ thiết bị vật lý
  • Đây là giai đoạn đầu, chưa có kiểm thử end-to-end đầy đủ
  • Trong tương lai, dự án sẽ tiếp tục xem xét vấn đề kết nối của thư viện go-buttplug và trạng thái của các host trong giao thức MCP (chẳng hạn triển khai thiên về công cụ)

Hướng dẫn cài đặt

  • Các tệp nhị phân đa nền tảng được phát hành qua GitHub Releases
  • Cũng hỗ trợ cài đặt bằng Homebrew:
    • brew tap conacademy/homebrew-tap
    • brew install conacademy/tap/buttplug-mcp

Cách sử dụng

  • Việc quản lý thiết bị do ứng dụng hub Intiface Central đảm nhiệm (cổng mặc định 12345)
  • Cần cấu hình trong chương trình host để Claude Desktop có thể sử dụng buttplug-mcp làm máy chủ MCP
    • Ví dụ cấu hình (tệp JSON):
    {
      "mcpServers": {
        "buttplug": {
          "command": "/opt/homebrew/bin/buttplug-mcp",
          "args": ["--ws-port", "12345"]
        }
      }
    }
    
  • Sau khi cấu hình như trên, có thể áp dụng theo hướng dẫn của Claude Desktop và trò chuyện với Claude để truy vấn/điều khiển thiết bị
  • Cũng có thể tận dụng tích hợp bổ sung như điều khiển đèn qua HomeAssistant MCP

Tích hợp với Ollama và mcphost

  • Trong số các host MCP, dự án có thể hoạt động với Ollama và kết nối với LLM có hỗ trợ công cụ
  • Có thể dùng cùng mcphost (được maintainer của mcp-go quản lý) bằng cấu hình MCP JSON cho buttplug-mcp
    • Ví dụ:
    $ go install github.com/mark3labs/mcphost@latest
    $ mcphost -m ollama:llama3.3 --config mcp.json
    
  • Chỉ hỗ trợ "Tools" còn "Resources" bị hạn chế, nên không thể liệt kê thiết bị hay khám phá thuộc tính
  • Trong ví dụ thực tế, hệ thống có thể trả về thông báo thành công cho lệnh rung thiết bị, nhưng thiết bị có thể không phản hồi

Build

  • Áp dụng hệ thống build dựa trên task
    • Chạy: $ task
  • Công cụ kiểm thử hữu ích:
    • task stdio-schema | jq (kiểm tra JSON schema)
    • npx @modelcontextprotocol/inspector node build/index.js (MCP Inspector Web GUI)

Tham số CLI

  • Các tùy chọn chính:
    • -h, --help: trợ giúp
    • -l, --log-file: chỉ định đích tệp log
    • -j, --log-json: định dạng log JSON
    • --sse: sử dụng truyền tải SSE
    • --sse-host: host/cổng cho kết nối SSE
    • -v, --verbose: log chi tiết
    • --ws-port: cổng kết nối tới máy chủ Buttplug Websocket

Đóng góp và quy tắc ứng xử

  • Hoan nghênh tự do gửi Pull Request, fork, v.v.
  • Cần tuân thủ Code of Conduct

Ghi công và giấy phép

  • Sử dụng các dự án mã nguồn mở go-buttplug, go-mcp
    • Bao gồm thư viện Golang của Buttplug.io và ví dụ, cùng thư viện Golang cho Model Context Protocol
  • Bản quyền 2025 Neomantra BV, Evan Wies (ConAcademy)
  • Phát hành theo giấy phép MIT (xem LICENSE.txt để biết chi tiết)

2 bình luận

 
bbulbum 2025-06-03

Ôi... có lẽ thứ này đến với chúng ta quá sớm...

 
GN⁺ 2025-06-01
Ý kiến trên Hacker News
  • Nhớ là trước đây trên Hacker News đã có nhiều lần thảo luận về tiêu chuẩn Buttplug, nên chia sẻ lại
  • Tôi thấy bản thân từ "Teledildonics" đã quá ấn tượng rồi
    • Cũng từng nghĩ đến chuyện commit vào BO.io để đưa vào CV, nhưng lại có cảm giác lấn cấn rằng mục pentest trong hồ sơ của mình chỉ khiến người ta đặt thêm những câu hỏi kỳ quặc
  • Chia sẻ thông tin tham khảo về Deldo, chế độ điều khiển sextoy và teledildonics chạy trong Emacs (https://news.ycombinator.com/item?id=29207607)
  • Đùa hỏi đây có phải là thứ vibe coding nổi tiếng đó không
    • Trích nguyên văn câu trên trang chính buttplug.io: We were vibe coding before it was cool
    • Tò mò không biết UAT (User Acceptance Testing) của mấy dự án kiểu này trông sẽ như thế nào
    • Có vẻ OP đã đầu tư khá nhiều công sức cho phần cứng này
    • https://github.com/profullstack/mcp-server cũng là một ví dụ được làm bằng vibe coding
  • Thật thú vị khi API để điều khiển những món đồ chơi này đã được công khai từ khá lâu
    • Bình thường thì cứ nghĩ mỗi thiết bị sẽ chỉ cung cấp ứng dụng độc quyền, khép kín của riêng nó mới là điều tự nhiên hơn, nhưng thực tế lại khác
    • Tò mò liệu có phải vì các tập đoàn lớn không nhảy vào thị trường này nên mới thành ra như vậy không
    • Giải thích rằng trong đa số trường hợp, không phải nhà cung cấp chính thức đặc tả API mà là cộng đồng tự reverse engineering để tạo ra
      • Vì sản phẩm đa phần kết nối qua Bluetooth nên bảo mật thường chỉ dừng ở mức pairing và tính gần kề
    • Ở Đan Mạch, phần lớn thiết bị điện tử trong nhà không quá đóng kín và cũng không khó để hack
      • Những thiết bị như lò vi sóng, bàn chải điện, router, e-bike cũng đều là mục tiêu hack tương đối đơn giản
      • Lý do số hacker sextoy đông hơn hẳn là vì bên này tập trung nhiều đam mê hơn
      • Trước đây từng nghĩ cộng đồng hack e-bike là lớn nhất, nhưng đoán là phía sextoy có thể còn lớn hơn
      • Lý do hack e-bike chủ yếu là để gỡ giới hạn tốc độ hoặc lấy thêm tính năng thống kê
      • Tôi không phải kiểu hacker thiết bị, nhưng chỉ cần tìm kiếm là cũng dễ dàng tìm được các công cụ cần thiết
      • Thực tế là nhiều thiết bị dùng hằng ngày không có bảo mật thật sự vững chắc
      • Ở châu Âu cũng tồn tại văn hóa muốn mua sản phẩm không thương hiệu thay vì sản phẩm của các công ty công nghệ lớn
      • Ngay cả sản phẩm của thương hiệu lớn cũng khá dễ hack, và có cảm giác là chỉ cần có phần cứng thì đa số đều hack được
    • Có ý kiến rằng vì các cam streamer cần dễ dàng tự làm phần mở rộng thiết bị của riêng họ nên khả năng tiếp cận từ cộng đồng đã cao hơn
      • Nhắc đến trường hợp Lovesense đã trở thành cái tên tiêu biểu cho “đồ chơi điều khiển bằng chat” trên các trang streaming
    • Có vẻ trong ngành này người ta đặt sự hài lòng của người dùng lên ưu tiên cao nhất nên mới cởi mở như vậy
    • Phỏng đoán rằng có nhiều thiết bị mở sản xuất tại Trung Quốc, và phần lớn chỉ dùng nguyên các chip cùng giao thức phổ thông giá rẻ
      • Độ tin cậy và bảo mật cũng bị xem nhẹ nên không khó để reverse engineering
      • Kết nối Bluetooth có cảm giác rẻ tiền và thiết kế lỏng lẻo, thậm chí còn dễ bị ngắt do cơ thể con người
      • Bộ điều khiển dường như chỉ stream tín hiệu đơn giản, hầu như không có xử lý bổ sung hay xử lý lỗi gì
  • Buttplug là một tiêu chuẩn mã nguồn mở và dự án phần mềm để điều khiển phần cứng thân mật như đồ chơi người lớn
  • Cảm giác TLD .io thực sự là lựa chọn quá hợp cho dự án này
    • Có phản ứng đùa cợt về điều đó
  • Tôi là qDot, người sáng lập và là project lead của https://buttplug.io
    • Dù bài đã rời khỏi trang chính, nhưng nếu có câu hỏi thì lúc nào AMA cũng được chào đón
  • Nghĩ rằng nếu thêm tác vụ hẹn giờ của ChatGPT vào hệ thống này thì có thể thành một chiếc đồng hồ báo thức rất khác biệt
    • Nó còn hỗ trợ tích hợp Home Assistant nên có lẽ cũng có thể dùng làm thông báo kiểu cửa garage mở
  • Có người nói nếu ai đó cố nhồi vào AI những tính năng mà Big Tech không muốn, thì họ muốn bookmark trang này để đưa ra xem
  • Tôi là tác giả đây, và dự án này là một dự án cá nhân “vô dụng” được làm vào dịp Cá tháng Tư
    • Mỗi năm tôi lại làm một thứ vui vui cho ngày Cá tháng Tư và cuối cùng nó được đưa lên GitHub
    • MCP server này không có nhiều ý nghĩa cho sử dụng thực tế, nhưng điểm khởi đầu là quan trọng nên tôi vẫn đăng nó lên
    • Hai năm trước tôi từng tích hợp Buttplug với phòng chat SSH, và mô tả trải nghiệm kết hợp đồng thuận số với khóa SSH để tạo một đồ thị truy cập ẩn danh
    • Hiện tôi không còn là maintainer của Buttplug.io nữa, nhưng trước đây đã có nhiều trao đổi trên Discord
    • Cũng muốn truyền đạt rằng họ đang tìm một maintainer mới trong cộng đồng Rustacean
    • MCP server được viết bằng Golang, nhưng có vẻ Rust sẽ hợp với hệ sinh thái Buttplug hơn
    • Trước đây tôi từng nghiên cứu về haptics, và có kinh nghiệm với bằng sáng chế liên quan cùng việc tích hợp VRML
    • Tôi cũng từng có kinh nghiệm với thiết bị chẩn đoán chức năng tình dục được tạo bằng tài trợ nghiên cứu của NIH và cả đồ chơi do tự tay làm
    • Hiện tại đang nghiên cứu Biaerolar Beats với headset EEG của Neurable (https://github.com/ConAcademy/biareolar-beats)
    • Tôi đã thử làm LELO F1 rung bằng vibe coding, nhưng dự án này là thành quả được tự tay code thật sự
    • Gần đây cũng thử vibe code bằng giao thức A2A với Claude và Gemini, nhưng độ khó triển khai khá cao
    • Trong tuần đó tôi đã làm 3 MCP server (tiền, tình dục, ma túy), và xét về dữ liệu mở cùng kết quả ứng dụng AI thực tế thì AgentDank (https://github.com/AgentDank/dank-mcp) là thứ thú vị nhất
    • Tôi thấy việc gắn dữ liệu tùy biến và endpoint SQL vào LLM kiểu gọi công cụ có tiềm năng cực lớn
  • Với câu “đó là một tương tác tình dục kém hiệu quả”, có người đáp lại rằng “đó là tự do của mỗi người”
  • Tò mò mọi người nghĩ sao về vấn đề quyền riêng tư trên nhiều loại dịch vụ khác nhau
    • Trước đây chỉ cần mua sản phẩm rồi dùng, không có bất kỳ quan hệ nào với nhà cung cấp, nhưng hiện nay mọi thứ đã thay đổi khá nhiều, giống như với kính VR hay các dịch vụ khác vậy