buttplug-mcp は Buttplug.io エコシステム向けの Model Context Protocol サーバーで、Claude Desktop のようなツール対応 LLM プログラムが、接続された Genital Interface Devices を参照・制御できるようにする
- 提供機能は
/devices、/device/{id}、/device/{id}/rssi、/device/{id}/battery リソースと device_vibrate ツールで、振動強度は 0.0~1.0 の範囲で指定する
- 現在の状態は実験的で不安定。2025-04-01 に短期間の教育用プロジェクトとして始まり、
go-buttplug の 接続処理の不安定さ のため、エンドツーエンドテストは十分に完了していない
- 利用するには Intiface Central を実行して WebSocket サーバーポートを確認し、Claude Desktop のような MCP ホスト設定に
buttplug-mcp 実行ファイルと --ws-port 12345 のような引数を登録する必要がある
- Ollama ベースのローカル推論では
mcphost でツール呼び出しを試したが、その環境では Tools のみ対応で Resources は未対応のため、デバイス列挙や詳細参照はできなかった
プロジェクトの目的と対応範囲
buttplug-mcp は Model Context Protocol サーバーで、Buttplug.io ecosystem に接続されたデバイスを LLM プログラムから参照・制御できるようにする
- Claude Desktop のような ツール対応 LLM プログラムで、次のようなプロンプトを目標としている
- 接続された Buttplug デバイスの参照
- 特定デバイスの特定モーターを 50% 強度に設定
- Lovense Max 2 のバッテリー残量を確認
- WeWibe の信号が弱いかどうかを確認
- README では、上記の体験は 目標状態 であり、現時点の体験は不安定でフラストレーションがあると注意書きしている
MCP リソースとツール
- 対応リソースは、接続デバイスとデバイス状態を JSON 形式で参照することに重点を置いている
/devices: 接続された Buttplug デバイス一覧
/device/{id}: /devices で得た数値 ID に基づくデバイス情報
/device/{id}/rssi: デバイス ID に基づく RSSI 信号レベル
/device/{id}/battery: デバイス ID に基づくバッテリーレベル
- 対応ツールは
device_vibrate の 1 つのみ
- パラメータは
id、任意の motor、strength
motor のデフォルト値は 0
strength は 0.0 がオフ、1.0 が最大強度 を意味する数値範囲
- README には、リソースとツールの JSON Schema の例として
schema_resources.json、schema_tools.json が含まれている
現在の状態と制限
- プロジェクトは 2025-04-01 のエイプリルフールに始まり、前日に作成した金融市場データ向け実験的 MCP サービス
dbn-go に続いて作られた短期の教育用プロジェクトである
- 動作はするが、基盤ライブラリ
go-buttplug の 接続処理 が不安定だとされている
- Claude でデバイス一覧の参照は可能だったが、特定デバイスは Intiface Central 単体でも振動せず、「読み取り専用モード」のように見えたとされている
- 物理デバイスに依存せずテストできる 仮想 Buttplug.io デバイス があると望ましいという制約もある
- README では、まだ真の意味での エンドツーエンドテスト は完了していないと明記している
- 今後は
go-buttplug の接続不安定の原因をさらに調べることと、MCP ホストが Tools、Resources、Resource Templates を現状どのようにサポートしているかを理解する必要があるとしている
インストールと Claude Desktop での利用
brew tap conacademy/homebrew-tap
brew install conacademy/tap/buttplug-mcp
- 利用するには Intiface Central ハブアプリケーションをダウンロードしてデバイスを管理し、サーバーポートを確認する必要がある
- デフォルトポートは
12345 のようだとされている
- Claude Desktop では MCP サーバー設定に実行ファイルと WebSocket ポートを登録する
- MacOS Homebrew インストールパスの例は
/opt/homebrew/bin/buttplug-mcp
- 設定例では
--ws-port 12345 を使用する
{
"mcpServers": {
"buttplug": {
"command": "/opt/homebrew/bin/buttplug-mcp",
"args": [
"--ws-port", "12345"
]
}
}
}
Ollama と mcphost の実験
- ローカル推論では Ollama をサポートする MCP ホストを利用できる
- ツールに対応した Ollama LLM を使う必要がある
- 実験には
mcphost が使われ、このプロジェクトは mcp-go ライブラリの開発者が作成した MCP ホストである
- 実行例では
mcp.json に前述の設定を保存し、その後 llama3.3 モデルで実行する
go install github.com/mark3labs/mcphost@latest
mcphost -m ollama:llama3.3 --config mcp.json
- README 時点では、
mcphost は Tools のみ対応で Resources には未対応のため、デバイスを列挙したり詳細を参照したりすることはできなかった
phi4-mini で device_vibrate ツール呼び出しは成功レスポンスを返したが、前述の現在の状態の問題により、実際のデバイスは振動しなかった
ビルド、テストツール、CLI
- ビルドは task で実行し、生成されるバイナリは
bin/buttplug-mcp となる
task
- ビルド処理では
go mod tidy の後、go build -o bin/buttplug-mcp cmd/buttplug-mcp/main.go を実行する
- 便利なテストツールは次のとおり
task stdio-schema | jq: JSON Schema を出力
npx @modelcontextprotocol/inspector node build/index.js: MCP Inspector Web GUI
- CLI オプションは、ヘルプ、ログファイル、JSON ログ、SSE トランスポート、SSE ホスト、verbose ログ、Buttplug WebSocket サーバーポート設定をサポートする
--ws-port int: Buttplug WebSocket サーバーに接続するポート
--sse: デフォルトの STDIO の代わりに SSE Transport を使用
--log-file string: ログファイルの出力先、または MCP_LOG_FILE 環境変数を使用
--log-json: JSON ログを使用
--verbose: 詳細ログを使用
2件のコメント
うわ……私たちにはまだ早すぎると言うべきか……
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
なぜこの市場は違うのだろう? 大企業がこの市場を避けていて、まだ台無しにできていないからなのか?
この記事を見るまでは、電動自転車コミュニティが日常的な電子機器をいじる最大のハッカーコミュニティだと思っていた。ヨーロッパでは電動自転車のコンピューターのハッキングがかなり多く、速度制限を解除しようとするケースもあるが、違法であり、デンマークの大都市では見つかる可能性も高い
私は主に統計のためにやっていた。自分の電動自転車のコンピューターは「現在の」走行距離を500kmごとにリセットし、総走行距離は別の場所に保存していたが、整備工場に入るとそれもリセットされていた。標準画面には時計もなかったので、ディスプレイに時計を表示したいというのが主な理由で、今では走行距離のバックアップと遊び用の統計も追加してある
整備工場に送るときは工場出荷時設定に再フラッシュする。私はデバイスハッカーではまったくないが、検索するだけで自分のブランドに合うツールを見つけ、やりたいことができた。日常的な機器の大半には、セキュリティはあまりないと思う。Google CameraでNSAに覗かれたくないヨーロッパの人々が大手テック企業の製品ではないものを買っているからかもしれないが、Boschのような大手ブランドの製品もかなりハッキング可能だ。ハードウェアを手元に持てば、結局ほとんどのものはハッキング可能なのではないか?
LovenseのようなところはAPIを公開する意思があると言っていたが、GitHubには空のリポジトリがある程度だ。Lovenseは妙な会社で、あらゆる状況証拠が台湾の1人か2人程度を指しており、かなり不透明だ
怪しい事例もあった。Hytto/Lush [0]やWe-Vibe [1]のようなブランドを相手取った集団訴訟があった
[0] [https://www.courthousenews.com/judge-forwards-class-action-s...](https://www.courthousenews.com/judge-forwards-class-action-suit-against-adult-toy-maker/)
[1] https://topclassactions.com/lawsuit-settlements/lawsuit-news...
「Intimate Haptics Control Standard and Library」と説明されており、さらに詳しい説明は https://buttplug-spec.docs.buttplug.io/docs/spec にある
個人情報が流出したり、機器がユーザーを「閉じ込め」たうえで身代金を要求したりするケースだった。デスクで笑っていたが、あまりに NSFW な内容だったので、なぜ笑っているのか説明できなかった
すでにトップページではかなり下のほうに行っていますが、何でも聞いてください
この特定の MCP サーバーはかなり役に立たず、性的なインタラクションを望む方法としては絶対に違う、ということを README に書こうと思っていました。それでもどこかから始める必要はありますし、good-giving-game 的なやり方が私たちの流儀なので GitHub に上げました
皮肉なことに、2年前のプロジェクトは Charm ベースの SSH チャットルームと BubbleTea TUI に Buttplug を統合するものでした。SSH キーでデジタル同意の一部を扱い、どのエンティティが別のエンティティの機器に対して何をできるのかを匿名グラフにしました。エージェントが制御する MCP の未来には、そうした要素が必要になると思います
私は Buttplug.io のメンテナーではありませんが、Discord で彼らとしばらく話していました。せっかく見てくださっているので、関心のある Rustacean がいれば、あのプロジェクトは追加メンテナーを探しています。この MCP サーバーは Golang で書かれていますが、Buttplug エコシステム内では Rust で書かれているほうが望ましいでしょう
初期のキャリアはハプティクス研究で、Immersion を通じて関連特許も複数持っています。修士論文は 3D ハプティックレンダラーを書き、VRML にハプティクスを統合するというものでした。覚えていればですが! 性機能障害診断機器に関する NIH 助成プロジェクトもやりましたし、自作のおもちゃも作りました。今は Neurable の EEG ヘッドセットを受け取ったばかりで、Biaerolar Beats の研究 [1] をしています
vibe coding の話に戻ると、これで LELO F1 を振動させたのは確かですが、このプロジェクトは本当に手作りです。数週間前に Claude と Gemini で
a2a4a2aを vibe coding しようとしましたが、A2A プロトコルが新しすぎて、モデルに A2A を教えるのが難しかったです。一般的に、みんなこういうことをどう処理しているのか気になります全体として楽しかったし、ツール呼び出し LLM について多くを学びました。その週に MCP サーバーを3つ作りました。お金用 [2]、性用 [3]、薬物用 [4] です。
mark3labs/mcp-goのおかげです最後の AgentDank [4] はまだフォローアップ作業ができていませんが、公開データと実際の AI 結果という点では、おそらく一番クールです。そこの動画を見るといいです。カスタムデータと SQL エンドポイントをツール呼び出し LLM につなぐのは、ばかげているほど強力です
[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