返回市场
buttplug-MCP

buttplug-MCP

作者:ConAcademy121 星标更新:2025-05-31

项目介绍

buttplug-mcp - Buttplug.io MCP 服务器

buttplug-mcp 是一个用于 Buttplug.io 生态系统模型上下文协议 (MCP) 服务器。它允许支持工具的大型语言模型程序(如 Claude Desktop)查询并控制你的生殖接口设备。

|插入由AI生成的机器人做坏事的图像| <br>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_vibrateid, motor, strength通过 id 振动设备,选择 strength 和可选的 motor
<details> <summary>资源的 JSON Schema。点击展开</summary>

schema_resources.json

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "resources": [
      {
        "uri": "devices",
        "name": "设备列表",
        "description": "以 JSON 格式列出已连接的 Buttplug 设备。",
        "mimeType": "application/json"
      }
    ]
  }
}
</details> <details> <summary>工具的 JSON Schema。点击展开</summary>

schema_tools.json

{
  "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 上。

你也可以通过 Homebrewconacademy/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 集成来调低灯光……

Ollama 和 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 GUI

命令行参数

R 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