buttplug-mcp - Buttplug.io MCP Server について
buttplug-mcp は、Buttplug.io エコシステム向けの MCP サーバーで、ツール呼び出しに対応した LLM プログラムから接続済みデバイスの照会と制御を行えます。Go で書かれ MIT ライセンスで公開されていますが、README では動作が不安定でエンドツーエンドの検証は未実施とされています。
主な機能
- 01接続済み Buttplug デバイスの一覧と詳細情報の取得
- 02デバイスの RSSI 信号とバッテリー残量の取得
- 03device_vibrate ツールによる強度とモーターの制御
- 04Intiface Central を経由したデバイス接続
活用シーン
- 01Claude Desktop から接続済みデバイスの状態を照会
- 02mcphost と Ollama のモデルでツール呼び出しを検証
- 03Buttplug.io エコシステムにおける実験的な MCP プロジェクトの参照
MCP 対応
本プロジェクトは MCP サーバーとして、デバイス一覧、デバイス情報、信号とバッテリーのリソース、および device_vibrate ツールを MCP クライアントに公開します。README では、一部の MCP ホストがリソースを扱えずツールのみ対応している点が指摘されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
buttplug-mcp - Buttplug.io MCP サーバー
buttplug-mcp は、Buttplug.io エコシステム向けの Model Context Protocol (MCP) サーバーです。Claude Desktop のようなツール対応の LLM プログラムを使って、Genital Interface Devices を照会し、操作できます。
|insert AI-generated slop image of robots doing nasty things|
LLM|=> - - (__(__)
セットアップすると、LLM に次のようなプロンプトを入力できます。
- 「接続されている Buttplug デバイスを教えてください」
- 「LELO F1S の 2 番目のモーターの強さを 50% に設定してください」
- 「Lovense Max 2 のバッテリー残量はどれくらいですか?」
- 「WeWibe の信号は弱いですか?」
注:上記はあくまで理想で、実際には現状は不安定で、非常に使いづらいです。
次のリソースとツールに対応しています。
| リソース | 説明 |
|---|---|
/devices | 接続されている Buttplug デバイスの一覧(JSON)。 |
/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 LLMを使用できます。私たちは、難しい処理を担ってくれた mcp-go ライブラリの開発者が作成した mcphostを試しました。
上記の設定を 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 のすべてのプロジェクトと同様に、プルリクエストを歓迎します。フォークしてもかまいません。お好きなようにどうぞ。
いずれの場合も、行動規範を守ってください。型破りでもかまいませんが、他人に迷惑をかけないでください。
クレジットとライセンス
go-buttplug のGolang Buttplug.io ライブラリと、その buttplughttp の例、および go-mcp のGolang Model Context Protocol ライブラリに感謝します。
Copyright (c) 2025 Neomantra BV。ConAcademyのために Evan Wies が執筆しました。
MIT Licenseの下で公開されています。詳しくは LICENSE.txt をご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。