buttplug-mcp là máy chủ Model Context Protocol cho hệ sinh thái Buttplug.io, cho phép các chương trình LLM hỗ trợ công cụ như Claude Desktop truy vấn và điều khiển các Genital Interface Devices đã kết nối
- Các chức năng được cung cấp gồm các resource
/devices, /device/{id}, /device/{id}/rssi, /device/{id}/battery và công cụ device_vibrate, với cường độ rung được chỉ định trong khoảng 0.0~1.0
- Trạng thái hiện tại là thử nghiệm và không ổn định; dự án bắt đầu vào 2025-04-01 như một project giáo dục làm nhanh, và do xử lý kết nối không ổn định của
go-buttplug nên kiểm thử end-to-end vẫn chưa thể hoàn tất đúng cách
- Để sử dụng, cần chạy Intiface Central để kiểm tra cổng máy chủ WebSocket, rồi đăng ký file thực thi
buttplug-mcp cùng các đối số như --ws-port 12345 trong cấu hình host MCP như Claude Desktop
- Với suy luận cục bộ dựa trên Ollama, đã thử gọi công cụ bằng
mcphost, nhưng trong môi trường đó chỉ hỗ trợ Tools mà không hỗ trợ Resources, nên không thể liệt kê thiết bị hay truy vấn chi tiết
Mục đích dự án và phạm vi hỗ trợ
buttplug-mcp là máy chủ Model Context Protocol, cho phép chương trình LLM truy vấn và điều khiển các thiết bị được kết nối với hệ sinh thái Buttplug.io
- Dự án hướng tới các prompt như sau trong chương trình LLM hỗ trợ công cụ như Claude Desktop
- Truy vấn các thiết bị Buttplug đang kết nối
- Đặt một motor cụ thể của một thiết bị nhất định ở mức cường độ 50%
- Kiểm tra dung lượng pin còn lại của Lovense Max 2
- Kiểm tra xem tín hiệu của WeWibe có yếu hay không
- README nêu rõ trải nghiệm trên là trạng thái mục tiêu, còn trải nghiệm hiện tại thì không ổn định và gây bực bội
Resource và công cụ MCP
- Các resource được hỗ trợ tập trung vào việc truy vấn thiết bị đã kết nối và trạng thái thiết bị ở dạng JSON
/devices: danh sách các thiết bị Buttplug đang kết nối
/device/{id}: thông tin thiết bị dựa trên ID số lấy từ /devices
/device/{id}/rssi: mức tín hiệu RSSI theo ID thiết bị
/device/{id}/battery: mức pin theo ID thiết bị
- Chỉ có một công cụ được hỗ trợ là
device_vibrate
- Các tham số gồm
id, motor tùy chọn, strength
- Giá trị mặc định của
motor là 0
strength là khoảng số trong đó 0.0 là tắt, 1.0 là cường độ tối đa
- Trong README có kèm ví dụ JSON Schema cho resource và công cụ trong
schema_resources.json, schema_tools.json
Trạng thái hiện tại và các giới hạn
- Dự án được bắt đầu vào ngày Cá tháng Tư 2025-04-01, là một project giáo dục làm nhanh được tạo sau dịch vụ MCP thử nghiệm cho dữ liệu thị trường tài chính
dbn-go được làm từ hôm trước
- Dự án hoạt động được, nhưng phần xử lý kết nối của thư viện nền tảng
go-buttplug được mô tả là không ổn định
- Có thể truy vấn danh sách thiết bị bằng Claude, nhưng một số thiết bị cụ thể không rung ngay cả khi chỉ dùng Intiface Central, và có vẻ như đang ở “chế độ chỉ đọc” (read-only mode)
- Một hạn chế khác là sẽ rất hữu ích nếu có thiết bị Buttplug.io ảo để có thể kiểm thử mà không phụ thuộc vào thiết bị vật lý
- README nêu rõ rằng kiểm thử end-to-end theo đúng nghĩa vẫn chưa hoàn tất
- Trong tương lai, cần tìm hiểu thêm nguyên nhân gây mất ổn định kết nối của
go-buttplug, đồng thời hiểu rõ các host MCP hiện đang hỗ trợ Tools, Resources và Resource Templates như thế nào
Cài đặt và sử dụng với Claude Desktop
brew tap conacademy/homebrew-tap
brew install conacademy/tap/buttplug-mcp
- Để sử dụng, cần tải ứng dụng hub Intiface Central để quản lý thiết bị và kiểm tra cổng máy chủ
- Cổng mặc định được cho là
12345
- Trong Claude Desktop, đăng ký file thực thi và cổng WebSocket trong cấu hình máy chủ MCP
- Ví dụ đường dẫn cài đặt Homebrew trên MacOS là
/opt/homebrew/bin/buttplug-mcp
- Ví dụ cấu hình dùng
--ws-port 12345
{
"mcpServers": {
"buttplug": {
"command": "/opt/homebrew/bin/buttplug-mcp",
"args": [
"--ws-port", "12345"
]
}
}
}
- Cấu hình Claude Desktop làm theo MCP user quickstart, nhưng thay phần thiết lập bằng cấu hình ở trên
Thử nghiệm với Ollama và mcphost
- Với suy luận cục bộ, có thể dùng host MCP hỗ trợ Ollama
- Cần dùng Ollama LLM có hỗ trợ công cụ
- Trong thử nghiệm, dự án dùng
mcphost, một host MCP do tác giả thư viện mcp-go tạo ra
- Ví dụ chạy là lưu cấu hình ở trên vào
mcp.json, rồi chạy với model llama3.3
go install github.com/mark3labs/mcphost@latest
mcphost -m ollama:llama3.3 --config mcp.json
- Theo README, trong
mcphost chỉ hỗ trợ Tools chứ không hỗ trợ Resources, nên không thể liệt kê thiết bị hoặc truy vấn chi tiết
- Với
phi4-mini, lời gọi công cụ device_vibrate đã nhận phản hồi thành công, nhưng do các vấn đề trạng thái hiện tại đã nêu ở trên nên thiết bị thực tế vẫn không rung
Build, công cụ kiểm thử và CLI
- Việc build được thực hiện bằng task, và binary kết quả được tạo tại
bin/buttplug-mcp
task
- Quá trình build chạy
go mod tidy rồi go build -o bin/buttplug-mcp cmd/buttplug-mcp/main.go
- Các công cụ kiểm thử hữu ích gồm
task stdio-schema | jq: xuất JSON Schema
npx @modelcontextprotocol/inspector node build/index.js: MCP Inspector Web GUI
- Các tùy chọn CLI hỗ trợ trợ giúp, file log, log JSON, truyền SSE, host SSE, log verbose, và cấu hình cổng máy chủ Buttplug WebSocket
--ws-port int: cổng để kết nối tới máy chủ Buttplug WebSocket
--sse: dùng SSE Transport thay cho STDIO mặc định
--log-file string: đích file log hoặc dùng biến môi trường MCP_LOG_FILE
--log-json: dùng log JSON
--verbose: dùng log chi tiết
2 bình luận
Ôi... có lẽ thứ này đến với chúng ta quá sớm...
Các ý kiến trên Hacker News
Buttplug: An open-source software suite for teledildonics (https://buttplug.io/) 5 years ago | 249 comments
Empathy for the user having sex with your software (https://docs.buttplug.io/docs/dev-guide/intro/buttplug-ethic...) 10 months ago | 127 comments
T-code – A protocol for implementing UART serial communications to an adult toy (https://stpihkal.docs.buttplug.io/protocols/tcode.html) 2 years ago | 74 comments
An open-source standards and software project for intimate hardware (maybe NSFW) (https://buttplug.io/) 7 years ago | 39 comments
Buttplug Sex Toy Control Project Implemented in Rust (https://buttplug.io/) 2 years ago | 3 comments
Deldo is a sex toy control and teledildonics mode for Emacs (github.com/qdot) (2021) https://news.ycombinator.com/item?id=29207607 | 126 comments
Vì sao thị trường này lại khác vậy? Có phải vì các tập đoàn lớn né thị trường này nên vẫn chưa kịp phá hỏng nó không?
Trước khi đọc bài này, tôi từng nghĩ cộng đồng xe đạp điện là cộng đồng hacker lớn nhất đụng vào đồ điện tử hằng ngày. Ở châu Âu có khá nhiều vụ hack máy tính xe đạp điện; một số là để gỡ giới hạn tốc độ, nhưng việc đó bất hợp pháp và ở các thành phố lớn của Đan Mạch cũng khá dễ bị bắt
Tôi làm chủ yếu vì thống kê. Máy tính trên xe đạp điện của tôi cứ mỗi 500 km lại đặt lại quãng đường “hiện tại”, còn tổng quãng đường thì lưu ở chỗ khác, nhưng khi đem vào tiệm bảo dưỡng thì cả cái đó cũng bị đặt lại. Màn hình mặc định cũng không có đồng hồ, nên lý do chính là muốn hiện đồng hồ trên màn hình; giờ thì tôi đã thêm cả sao lưu quãng đường và vài thống kê cho vui
Khi gửi đi bảo dưỡng, tôi flash lại về thiết lập nhà máy. Tôi hoàn toàn không phải dân hack thiết bị, nhưng chỉ cần tìm kiếm là đã kiếm được công cụ phù hợp với nhãn xe của mình để làm điều mình muốn. Tôi cho rằng hầu hết thiết bị hằng ngày không có nhiều bảo mật. Có thể vì người châu Âu không muốn NSA nhìn lén qua Google Camera nên họ mua đồ không phải của các công ty công nghệ lớn, nhưng sản phẩm của các thương hiệu lớn như Bosch cũng vẫn khá hack được. Một khi đã cầm phần cứng trong tay thì rốt cuộc đa số chẳng phải đều có thể hack được sao?
Những nơi như Lovense từng nói là sẵn sàng công khai API, nhưng trên GitHub thì chỉ ở mức có kho rỗng. Lovense là một công ty kỳ lạ; mọi dấu hiệu đều trỏ về khoảng một hai người ở Đài Loan và khá mập mờ
Cũng từng có các trường hợp đáng ngờ. Đã có các vụ kiện tập thể nhắm vào những thương hiệu như Hytto/Lush [0] hay We-Vibe [1]
[0] https://www.courthousenews.com/judge-forwards-class-action-s...
[1] https://topclassactions.com/lawsuit-settlements/lawsuit-news...
Nó được mô tả là “Intimate Haptics Control Standard and Library”, và phần giải thích chi tiết hơn có tại https://buttplug-spec.docs.buttplug.io/docs/spec
Hoặc là dữ liệu cá nhân bị rò rỉ, hoặc thiết bị “nhốt” người dùng rồi đòi tiền chuộc. Tôi ngồi cười ở bàn, nhưng nội dung quá NSFW nên không thể giải thích vì sao mình cười
Dù nó đã tụt khá xa khỏi trang đầu rồi, cứ hỏi tôi bất cứ điều gì
Tôi đã định viết trong README rằng MCP server cụ thể này khá vô dụng, và tuyệt đối không phải cách tôi muốn tương tác tình dục diễn ra. Dù vậy, phải bắt đầu từ đâu đó, và kiểu good-giving-game hợp gu chúng tôi nên tôi đã đưa lên GitHub
Trớ trêu là dự án của tôi 2 năm trước là tích hợp Buttplug vào một phòng chat SSH dựa trên Charm và BubbleTea TUI. Tôi dùng khóa SSH để xử lý một phần sự đồng thuận số, và tạo một đồ thị ẩn danh về việc thực thể nào có thể làm gì với thiết bị của thực thể khác. Tôi nghĩ tương lai của MCP do agent điều khiển sẽ cần những yếu tố như vậy
Tôi không phải maintainer chính của Buttplug.io, nhưng đã trò chuyện với họ trên Discord một thời gian. Nhân tiện mọi người đang xem, nếu có Rustacean nào quan tâm thì dự án đó đang tìm thêm maintainer chính. MCP server này được viết bằng Golang, nhưng trong hệ sinh thái Buttplug thì có lẽ viết bằng Rust sẽ phù hợp hơn
Giai đoạn đầu sự nghiệp của tôi là nghiên cứu haptic, và tôi cũng có vài bằng sáng chế liên quan thông qua Immersion. Luận văn thạc sĩ của tôi là viết một trình kết xuất haptic 3D và tích hợp haptic vào VRML. Nếu bạn còn nhớ! Tôi cũng từng làm một dự án tài trợ NIH về thiết bị chẩn đoán rối loạn chức năng tình dục, và tự chế đồ chơi tại nhà. Giờ tôi vừa nhận được headset EEG Neurable và đang nghiên cứu Biaerolar Beats [1]
Quay lại chuyện vibe coding, đúng là tôi đã dùng cái này để làm rung LELO F1, nhưng dự án này thực sự được làm thủ công. Vài tuần trước tôi thử vibe coding
a2a4a2avới Claude và Gemini, nhưng giao thức A2A còn quá mới nên rất khó dạy A2A cho mô hình. Tôi tò mò nói chung mọi người xử lý chuyện kiểu này như thế nàoNhìn chung rất vui và tôi đã học được nhiều về LLM gọi công cụ. Tuần đó tôi làm ba MCP server: cho tiền [2], cho tình dục [3], và cho ma túy [4]. Nhờ
mark3labs/mcp-gocảCái cuối cùng, AgentDank [4], tôi vẫn chưa kịp làm tiếp, nhưng xét về dữ liệu công khai và kết quả AI thực tế thì có lẽ nó là cái ngầu nhất. Hãy xem video ở đó. Việc nối dữ liệu tùy chỉnh và endpoint SQL vào LLM gọi công cụ mạnh đến mức vô lý
[1] https://github.com/ConAcademy/biareolar-beats
[2] https://github.com/NimbleMarkets/dbn-go/blob/main/cmd/dbn-go...
[3] https://github.com/ConAcademy/buttplug-mcp
[4] https://github.com/AgentDank/dank-mcp