1 ポイント 投稿者 GN⁺ 2025-06-01 | 2件のコメント | WhatsAppで共有
  • Buttplug MCP は、Buttplug.io エコシステム内のアダルト向けデバイスを 大規模言語モデル(LLM) ベースのプログラムと連携させる MCP サーバー
  • ユーザーは Claude Desktop などの LLM ツールを通じて、デバイス情報の参照や、振動、バッテリー状態、信号強度などの各種機能を制御可能
  • 現時点では 機能の完成度と安定性 が不足しており、全機能がスムーズに動作せず、実機の制御にも難しさがある
  • Ollama、mcphost などの MCP ホストと連携してツールベースのテストは可能だが、一部機能(リソース探索など)には制限がある
  • このプロジェクトは、ほかの MCP サービス と比べて LLM ベースのスマートデバイス制御に特化しており、オープンソースとして無料提供されている

プロジェクト概要

  • buttplug-mcp は Model Context Protocol(MCP)サーバーで、Buttplug.io エコシステム専用
  • Claude Desktop のような ツール対応 LLM プログラム から、自分の Buttplug デバイスを問い合わせ・制御できる
    • コマンド例: "接続されている buttplug デバイスは?", "LELO F1S の 2 番目のモーターを 50% に", "Lovense Max 2 のバッテリー残量は?", "WeWibe の信号は弱い?"
  • 上記の例は目指している方向性に近いが、現在の実装で得られる実際の体験は 不安定で期待外れな状態

対応リソースとツール構成

  • API リソース
    • /devices: 接続済み Buttplug デバイス一覧(JSON)
    • /device/{id}: 各デバイスの詳細情報
    • /device/{id}/rssi: デバイスの信号強度(RSSI)
    • /device/{id}/battery: デバイスごとのバッテリー残量
  • ツール
    • device_vibrate: id、motor、strength パラメータ(必須: id、strength)。必要に応じて motor を指定して振動を制御

JSON スキーマ例(リソース)

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

JSON スキーマ例(ツール)

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

現在の状態

  • 2025 年 4 月 1 日(エイプリルフール)に始まった実験的な短期プロジェクト
  • go-buttplug ライブラリの接続管理が不安定で、デバイス一覧の問い合わせはできるものの、振動機能など一部の制御は円滑に行えない
  • テスト目的では仮想デバイスが必要だが、Buttplug.io は物理デバイスのみをサポート
  • エンドツーエンドテスト が十分に行われていない初期段階
  • 今後は go-buttplug ライブラリの接続問題と、MCP プロトコルのホスト側の状況(ツール中心の実装など)をさらに検討する予定

インストール案内

  • マルチプラットフォーム向けバイナリが GitHub Releases で配布されている
  • Homebrew によるインストールにも対応:
    • brew tap conacademy/homebrew-tap
    • brew install conacademy/tap/buttplug-mcp

使い方

  • デバイス管理は Intiface Central ハブアプリが担当(デフォルトポート 12345)
  • Claude Desktop で MCP サーバーとして buttplug-mcp を使えるようにするには、ホストプログラム側で設定が必要
    • 設定例(JSON ファイル):
    {
      "mcpServers": {
        "buttplug": {
          "command": "/opt/homebrew/bin/buttplug-mcp",
          "args": ["--ws-port", "12345"]
        }
      }
    }
    
  • 上記設定後、Claude Desktop のチュートリアルを参考に適用でき、Claude と対話しながらデバイスの問い合わせ・制御が可能
  • HomeAssistant MCP を通じた照明制御など、追加の連携も活用可能

Ollama および mcphost との統合

  • MCP ホストのひとつとして Ollama を利用でき、ツール対応 LLM と連携可能
  • mcphost(mcp-go 開発者が管理)と組み合わせ、buttplug-mcp 用の MCP JSON 設定で利用可能
    • 例:
    $ go install github.com/mark3labs/mcphost@latest
    $ mcphost -m ollama:llama3.3 --config mcp.json
    
  • "Tools" のみ対応で、"Resources" には制限があるため、デバイス一覧や属性の探索はできない
  • 実例ではデバイス振動コマンドに対する成功メッセージは返るものの、デバイスが反応しない場合がある

ビルド

  • task ベースのビルドシステムを採用
    • 実行: $ task
  • 便利なテストツール:
    • task stdio-schema | jq(JSON スキーマ確認)
    • npx @modelcontextprotocol/inspector node build/index.js(MCP Inspector Web GUI)

CLI 引数

  • 主なオプション:
    • -h, --help: ヘルプ
    • -l, --log-file: ログファイル出力先を指定
    • -j, --log-json: JSON ログ形式
    • --sse: SSE 転送を使用
    • --sse-host: SSE 接続用ホスト / ポート
    • -v, --verbose: 詳細ログ
    • --ws-port: Buttplug Websocket サーバー接続ポート

貢献と行動規範

  • Pull Request やフォークなどは自由に歓迎
  • Code of Conduct の遵守が必要

クレジットとライセンス

  • go-buttpluggo-mcp のオープンソースプロジェクトを活用
    • Buttplug.io の Golang ライブラリおよびサンプル、Model Context Protocol の Golang ライブラリを含む
  • 2025 Neomantra BV、Evan Wies(ConAcademy)著作
  • MIT ライセンス で公開(詳細なライセンスは LICENSE.txt を参照)

2件のコメント

 
bbulbum 2025-06-03

うわ……私たちにはまだ早すぎると言うべきか……

 
GN⁺ 2025-06-01
Hacker Newsの反応
  • 以前 Hacker News で Buttplug 標準について何度も議論されていたのを思い出したので共有
  • Teledildonics という単語そのものがすごいと思う
    • BO.io にコミットして履歴書に載せたい気もするが、ペンテストの実績欄が変な質問のネタを増やすだけになりそうで、少し複雑な気分でもある
  • Emacs で動くセックストイ制御および teledildonics モード Deldo に関して参考になりそうな情報 (https://news.ycombinator.com/item?id=29207607) を共有
  • これがあの有名な vibe coding なのかと面白がって尋ねる
    • buttplug.io のメインページにある We were vibe coding before it was cool という文句をそのまま引用
    • こういうプロジェクトの UAT (User Acceptance Testing) はいったいどんなものなのか気になる
    • OP はこういうハードウェアにかなり気を使っているようだ
    • https://github.com/profullstack/mcp-server も vibe coding で作られた例
  • こうした玩具を制御する API が昔から公開されている事実が興味深い
    • 普通なら各デバイスはクローズドな専用アプリしか提供しないほうが自然だと思うが、現実は違う
    • 大企業がこの市場に参入していないからこうなったのではないかと気になる
    • ベンダーが公式に API を仕様化しているのではなく、ほとんどがコミュニティによるリバースエンジニアリングの産物だという説明
      • 製品はたいてい Bluetooth 接続なので、セキュリティはペアリングと近接性の確保程度で十分とされがち
    • デンマークでは家庭内の電子機器の大半は閉鎖的ではなく、ハックもそれほど難しくない
      • 電子レンジ、電動歯ブラシ、ルーター、e-bike のような機器も簡単なハック対象
      • セックストイのハッカーがはるかに多いのは、こちらにより強い情熱が集まっているから
      • 以前は e-bike ハックのコミュニティが最大だと思っていたが、セックストイ界隈のほうが大きいかもしれないと推測
      • e-bike をハックする理由はたいてい速度制限の解除や統計機能のため
      • 自分はデバイスハッカーではないが、検索するだけで必要なツールは簡単に見つけられた
      • 実際、日常の機器でセキュリティが堅牢でないことは多い
      • ヨーロッパには主要テック企業製品ではなくノーブランド品を買いたがる文化もある
      • 大手ブランド製品もハックしやすいことが多く、ハードウェアさえあればたいていは可能だと感じる
    • カムストリーマーが自分向けのデバイス拡張を作りやすくする必要があったため、コミュニティへの開放性が高まったのではという意見
      • Lovense がストリーミングサイトで「チャットで操作される玩具」の代名詞になった例に言及
    • この業界ではユーザー満足が最優先なので、こうしたオープンさにつながっているように見える
    • 中国製のオープンな機器が多く、安価な汎用チップやプロトコルをそのまま使っていることが大半だろうと推測
      • 信頼性やセキュリティも軽視されがちで、リバースエンジニアリングも難しくない
      • Bluetooth 接続は安価で粗い設計に見え、人体の影響で接続が切れやすいことさえある
      • コントローラーは単純な信号を流すだけで、追加の演算やエラー処理もほとんどないようだ
  • Buttplug は、アダルトトイのような親密なハードウェアを制御するためのオープンソース標準およびソフトウェアプロジェクト
  • .io TLD はこのプロジェクトに本当にぴったりの選択だと感じる
    • これに対して面白がる反応がある
  • qDot であり、https://buttplug.io の創設者兼プロジェクトリード
    • すでにメインページからは外れているが、質問があればいつでも AMA 歓迎とのこと
  • このシステムに ChatGPT の予約タスクを足せば、本当に変わった目覚まし時計になりそうだと思う
    • Home Assistant 統合にも対応しているので、ガレージドアが開いた通知のような用途にも使えそう
  • 誰かがビッグテックが望まない AI 機能を無理やり入れていると言い出したら、このサイトをブックマークして見せたくなる
  • 本人(作者)だが、このプロジェクトはエイプリルフールに作られた「無意味な」個人プロジェクト
    • 毎年エイプリルフールに遊びで作ったものが GitHub に上がるようになった
    • この MCP サーバー自体に実用上の大きな意味はないが、出発点は重要なので公開してある
    • 2 年前には Buttplug を SSH チャットルームと連携させ、デジタル同意と SSH キーを組み合わせて匿名化されたアクセスグラフを構成した経験を説明
    • 今も Buttplug.io のメンテナーではないが、Discord でいろいろ議論してきた
    • Rustacean(Rust コミュニティのメンバー)の中から新しいメンテナーも探していると伝える
    • MCP サーバーは Golang で書いたが、Buttplug のエコシステムには Rust のほうが合っていそう
    • 以前はハプティクス研究をしており、関連特許や VRML 統合の経験もある
    • NIH の研究費で作った性機能診断デバイスや、自作した玩具の経験も持っている
    • 今は Neurable EEG ヘッドセットで Biaerolar Beats の研究を進めている (https://github.com/ConAcademy/biareolar-beats)
    • vibe coding で LELO F1 を振動させてみたが、このプロジェクト自体は実際に手でコードを書いた成果物
    • 最近は Claude や Gemini とともに A2A プロトコルで vibe code も試したが、実装難度が高かった
    • その週に MCP サーバーを 3 つ(お金・セックス・ドラッグ)作ったが、オープンデータと AI 実利用の観点では AgentDank (https://github.com/AgentDank/dank-mcp) が最も面白い
    • カスタムデータと SQL エンドポイントをツール呼び出し型 LLM につなぐのは、とてつもない可能性があると感じる
  • 「そのやり方は非効率な性的相互作用だ」という発言に対して、「それは人それぞれだ」と返す
  • さまざまなサービスにおけるプライバシー問題をどう考えるか気になる
    • 昔はただ製品を買えばベンダーとは何の関係もなく使えたのに、今は VR ゴーグルや他のサービスのように状況が大きく変わったという意見