关于 buttplug-mcp - Buttplug.io MCP Server
buttplug-mcp 是 Buttplug.io 生态的 MCP 服务,允许支持工具调用的 LLM 程序查询并控制已连接的设备。项目以 Go 编写,以 MIT 协议发布,README 中说明其目前仍不稳定,尚未经过完整的端到端测试。
主要功能
- 01列出已连接的 Buttplug 设备及其信息
- 02查询设备的 RSSI 信号与电池电量
- 03通过 device_vibrate 工具控制振动强度与电机
- 04支持通过 Intiface Central 连接设备
适用场景
- 01在 Claude Desktop 中查询已连接设备的状态
- 02通过 mcphost 与 Ollama 模型测试工具调用
- 03作为 Buttplug.io 生态的 MCP 实验项目参考
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露设备列表、设备信息、信号与电池等资源,以及 device_vibrate 工具。README 指出部分 MCP 主机仅支持工具而不支持资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
buttplug-mcp - Buttplug.io MCP 服务
buttplug-mcp 是适用于 Buttplug.io 生态系统的 Model Context Protocol (MCP) 服务。它允许支持工具的 LLM 程序(如 Claude Desktop)查询和控制你的生殖器接口设备。
|插入一张 AI 生成的机器人做不雅之事的低质图片|
LLM|=> - - (__(__)
设置完成后,你可以向 LLM 提示:
- “我有哪些已连接的 buttplug 设备?”
- “将我的 LELO F1S 的第二个马达设置为 50% 强度”
- “我的 Lovense Max 2 还剩多少电量?”
- “我的 WeWibe 信号弱吗?”
注意:以上只是愿景,实际上目前的体验并不稳定,而且令人沮丧。
它支持以下资源和工具:
| 资源 | 描述 |
|---|---|
/devices | 以 JSON 格式列出已连接的 Buttplug 设备。 |
/device/{id} | 根据设备 ID 获取设备信息,其中 id 是 /devices 中的数字 |
/device/{id}/rssi | 根据设备 ID 获取 RSSI 信号强度,其中 id 是 /devices 中的数字 |
/device/{id}/battery | 根据设备 ID 获取电量,其中 id 是 /devices 中的数字 |
| 工具 | 参数 | 描述 |
|---|---|---|
device_vibrate | id、motor、strength | 通过 id 控制设备振动,并选择 strength 和可选的 motor |
资源的 JSON Schema。点击展开
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"resources": [
{
"uri": "devices",
"name": "Device List",
"description": "List of connected Buttplug devices in JSON",
"mimeType": "application/json"
}
]
}
}
工具的 JSON Schema。点击展开
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"description": "Vibrates device by `id`, selecting `strength` and optional `motor`",
"inputSchema": {
"type": "object",
"properties": {
"id": {
"description": "Device ID to query, sourced from `/devices`",
"pattern": "^[0-9]*$",
"type": "number"
},
"motor": {
"description": "Motor number to vibrate, defaults to 0",
"pattern": "^[0-9]*$",
"type": "number"
},
"strength": {
"description": "Strength from 0.0 to 1.0, with 0.0 being off and 1.0 being full",
"pattern": "^(0(\\.\\d+)?|1(\\.0+)?)$",
"type": "number"
}
},
"required": [
"id",
"strength"
]
},
"name": "device_vibrate"
}
]
}
}
当前状态
我在 2025-04-01,也就是愚人节那天,开始着手开发这个项目。前一天,我刚创建了另一个实验性的 MCP 服务 dbn-go(金融市场数据)。因此,这是个刚起步的项目,原本只是一个快速、有趣的教育项目。
虽然它可以运行,但我发现底层的 go-buttplug 库在连接处理方面不稳定。我可以让 Claude 查询设备,但即使只使用 Intiface Central,我的特定设备也无法振动——就像处于只读模式一样!我也希望能有一个虚拟的 buttplug.io 设备用于测试,而不必依赖实体设备。
所以,它还没有真正经过“端到端”测试 :wink:
我会深入研究 go-buttplug 库,看看连接为何不稳定。我还需要了解 MCP 主机当前对 MCP 协议的支持情况——它们似乎更关注工具,而不是资源和资源模板。
安装二进制文件
多个平台的二进制文件已通过 GitHub Actions 发布到 GitHub。
你也可以通过 conacademy/homebrew-tap 使用 Homebrew 为各种平台安装:
brew tap conacademy/homebrew-tap
brew install conacademy/tap/buttplug-mcp
使用方法
下载 Intiface Central 集线器应用来管理设备。启动应用并记下服务端口(默认似乎是 12345)。
要使用 buttplug-mcp MCP 服务,必须将主机程序配置为使用它。下面以 Claude Desktop 为例。我们需要在系统中找到 buttplug-mcp 程序;下方示例展示了使用 MacOS Homebrew 安装 buttplug-mcp 的位置(也可以自行构建,并指向对应位置)。
以下 JSON 配置可完成设置:
{
"mcpServers": {
"buttplug": {
"command": "/opt/homebrew/bin/buttplug-mcp",
"args": [
"--ws-port", "12345"
]
}
}
}
使用 Claude Desktop 时,可以按照其配置教程操作,但将配置替换为上面的内容。完成设置后,可以向 Claude 提问,它会使用 buttplug-mcp 服务。以下是一些对话示例:
也许你可以使用 HomeAssistant MCP 集成来调暗灯光……
Ollama 和 mcphost
对于本地推理,有一些支持 Ollama 的 MCP 主机。你可以使用任何支持“Tools”的 Ollama 大模型。我们尝试了 mcphost,它由 mcp-go 库的开发者编写;该库为我们完成了繁重的工作。
以下是使用上述配置,通过它安装并运行的方式;配置保存在 mcp.json 中:
$ go install github.com/mark3labs/mcphost@latest
$ mcphost -m ollama:llama3.3 --config mcp.json
...chat away...
看起来它只支持“Tools”,不支持“Resources”,所以我无法枚举和检查我的设备。不过,我进行过以下工具交互(但如上文所述,我的设备实际上并没有振动):
$ mcphost -m ollama:phi4-mini --config mcp.json
2025/04/02 09:25:05 INFO Model loaded provider=ollama model=phi4-mini
2025/04/02 09:25:05 INFO Initializing server... name=buttplug
2025/04/02 09:25:05 INFO Server connected name=buttplug
2025/04/02 09:25:05 INFO Tools loaded server=buttplug count=1
2025/04/02 09:28:31 INFO Model loaded provider=ollama model=phi4-mini
2025/04/02 09:28:31 INFO Initializing server... name=buttplug
2025/04/02 09:28:31 INFO Server connected name=buttplug
2025/04/02 09:28:31 INFO Tools loaded server=buttplug count=1
/servers
# buttplug
Command /opt/homebrew/bin/buttplug-mcp
Arguments --ws-port 12345
/tools
• buttplug
• device_vibrate
• Vibrates device by ID, selecting strength and optional motor
You: buttplug device_vibrate id 0 at strength 1
Assistant:
<|tool_call|>[start_processing]
[{"type":"function","function":{"name":"buttplug__device_vibrate","description":"Vibrates device by ID, selecting strength and optional
motor","parameters":{"id":0,"strength":1}}]
{}
{"status":"success","message":"Device with id 0 is vibrating at full strength."}
构建
使用 task 进行构建,生成的二进制文件位于 bin/buttplug-mcp。
$ task
task: [tidy] go mod tidy
task: [build] go build -o bin/buttplug-mcp cmd/buttplug-mcp/main.go
实用的测试工具:
task stdio-schema | jq—— 输出 JSON 架构npx @modelcontextprotocol/inspector node build/index.js—— MCP Inspector Web GUI
CLI 参数
R buttplug-mcp --help
usage: buttplug-mcp [opts]
-h, --help Show help
-l, --log-file string Log file destination (or MCP_LOG_FILE envvar). Default is stderr
-j, --log-json Log in JSON (default is plaintext)
--sse Use SSE Transport (default is STDIO transport)
--sse-host string host:port to listen to SSE connections
-v, --verbose Verbose logging
--ws-port int port to connect to the Buttplug Websocket server
贡献与行为准则
与所有 ConAcademy 项目一样,欢迎提交拉取请求。也可以 Fork。随你。
无论如何,请遵守我们的行为准则。可以行事不光明磊落,但别做混蛋。
致谢与许可证
感谢 go-buttplug 提供 Golang Buttplug.io 库及其 buttplughttp 示例,也感谢 go-mcp 提供 Golang Model Context Protocol 库。
版权所有 (c) 2025 Neomantra BV。由 Evan Wies 为 ConAcademy 编写。
根据 MIT 许可证发布,详见 LICENSE.txt。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。