buttplug-mcp 是一个用于 Buttplug.io 生态系统 的 模型上下文协议 (MCP) 服务器。它允许支持工具的大型语言模型程序(如 Claude Desktop)查询并控制你的生殖接口设备。
|插入由AI生成的机器人做坏事的图像|
<br>LLM|=> - - (__(__)
一旦设置好,你可以提示你的大型语言模型:
注意:以上是理想状态,实际上当前体验不稳定且令人沮丧。
它支持以下资源和工具:
| 资源 | 描述 |
|---|---|
/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 |
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"resources": [
{
"uri": "devices",
"name": "设备列表",
"description": "以 JSON 格式列出已连接的 Buttplug 设备。",
"mimeType": "application/json"
}
]
}
}
</details>
<details>
<summary>工具的 JSON Schema。点击展开</summary>
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"description": "通过 `id` 振动设备,选择 `strength` 和可选的 `motor`",
"inputSchema": {
"type": "object",
"properties": {
"id": {
"description": "要查询的设备ID,来源于 `/devices`",
"pattern": "^[0-9]*$",
"type": "number"
},
"motor": {
"description": "要振动的电机编号,默认为 0",
"pattern": "^[0-9]*$",
"type": "number"
},
"strength": {
"description": "力度从 0.0 到 1.0,0.0 表示关闭,1.0 表示全开",
"pattern": "^(0(\\.\\d+)?|1(\\.0+)?)$",
"type": "number"
}
},
"required": [
"id",
"strength"
]
},
"name": "device_vibrate"
}
]
}
}
</details>
我在愚人节当天,即 2025 年 4 月 1 日,开始着手这个项目,此前一天我创建了另一个实验性的 MCP 服务,即用于金融市场数据的 dbn-go。因此这是一个新鲜出炉的项目,旨在成为一个快速有趣的教育项目。
虽然它可以工作,但我发现底层的 go-buttplug 库在连接处理方面不够稳定。我可以向 Claude 查询我的设备,但我的特定设备即使只是用 Intiface Central 也无法振动——就像处于只读模式一样!我也希望有一个虚拟的 buttplug.io 设备用于测试,而不是依赖于物理设备。
所以,它还没有真正经过“端到端”的测试 :wink:
我将进一步研究 go-buttplug 库,看看为什么连接不稳定。我还需要理解当前 MCP 主机的状态——似乎它们更关注工具而不是资源和资源模板。
多个平台的二进制文件通过 GitHub Actions 发布在 GitHub 上。
你也可以通过 Homebrew 从 conacademy/homebrew-tap 安装:
brew tap conacademy/homebrew-tap
brew install conacademy/tap/buttplug-mcp
下载 Intiface Central 集中应用来管理你的设备。启动它并记下服务器端口(默认似乎是 12345)。
要使用 buttplug-mcp MCP 服务器,必须配置你的主机程序来使用它。我们将使用 Claude Desktop 来演示。我们需要找到系统上的 buttplug-mcp 程序;下面的例子显示了 buttplug-mcp 在 MacOS Homebrew 中的安装位置(也许你可以自己构建并指向那个位置)。
以下 配置 JSON 设置了这一点:
{
"mcpServers": {
"buttplug": {
"command": "/opt/homebrew/bin/buttplug-mcp",
"args": [
"--ws-port", "12345"
]
}
}
}
使用 Claude Desktop,你可以按照 他们的配置教程 进行操作,但要替换上面的配置。有了这些设置,你可以向 Claude 提问,它会使用 buttplug-mcp 服务器。这里有一些示例对话:
也许你可以使用 HomeAssistant MCP 集成来调低灯光……
mcphost对于本地推理,有支持 Ollama 的 MCP 主机。你可以使用任何支持“工具”的 Ollama 大型语言模型。我们尝试了由 mcp-go 库 的开发者编写的 mcphost,该库为我们做了大量的工作。
这里是使用上述配置安装和运行的方法,存储在 mcp.json 中:
$ go install github.com/mark3labs/mcphost@latest
$ mcphost -m ollama:llama3.3 --config mcp.json
...聊天进行中...
似乎只有“工具”被支持,而没有“资源”,所以我无法枚举和检查我的设备。但我有这个工具交互(但如上所述,我的设备实际上并没有振动):
$ mcphost -m ollama:phi4-mini --config mcp.json
2025/04/02 09:25:05 INFO 加载模型提供者=ollama 模型=phi4-mini
2025/04/02 09:25:05 INFO 初始化服务器... 名称=buttplug
2025/04/02 09:25:05 INFO 服务器连接 名称=buttplug
2025/04/02 09:25:05 INFO 工具加载 服务器=buttplug 数量=1
2025/04/02 09:28:31 INFO 加载模型提供者=ollama 模型=phi4-mini
2025/04/02 09:28:31 INFO 初始化服务器... 名称=buttplug
2025/04/02 09:28:31 INFO 服务器连接 名称=buttplug
2025/04/02 09:28:31 INFO 工具加载 服务器=buttplug 数量=1
/servers
# buttplug
命令 /opt/homebrew/bin/buttplug-mcp
参数 --ws-port 12345
/tools
• buttplug
• device_vibrate
• 通过ID振动设备,选择力度和可选的电机
你: buttplug device_vibrate id 0 力度 1
助手:
<|tool_call|>[start_processing]
[{"type":"function","function":{"name":"buttplug__device_vibrate","description":"通过ID振动设备,选择力度和可选的电机","parameters":{"id":0,"strength":1}}]
{}
{"status":"success","message":"ID 0 的设备正在全功率振动。"}
构建使用 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 GUIR buttplug-mcp --help
用法: buttplug-mcp [选项]
-h, --help 显示帮助
-l, --log-file 字符串 日志文件目的地(或 MCP_LOG_FILE 环境变量)。默认是 stderr
-j, --log-json 使用 JSON 格式日志(默认是纯文本)
--sse 使用 SSE 传输(默认是 STDIO 传输)
--sse-host 字符串 监听 SSE 连接的 host:port
-v, --verbose 详细日志
--ws-port 整数 连接到 Buttplug Websocket 服务器的端口
像所有 ConAcademy 项目一样,欢迎提交拉取请求。或者 fork 它。你做你自己的事情。
无论哪种方式,请遵守我们的 行为准则。可以阴暗,但不要粗鲁。
感谢 go-buttplug 提供的 Golang Buttplug.io 库及其 buttplughttp 示例,以及 go-mcp 提供的 Golang 模型上下文协议库。
版权所有 (c) 2.025 Neomantra BV。由 Evan Wies 为 ConAcademy 编写。
根据 MIT 许可证发布,参见 LICENSE.txt。