buttplug-mcp est un serveur Model Context Protocol pour l’écosystème Buttplug.io, qui permet à des programmes LLM compatibles avec les outils, comme Claude Desktop, d’interroger et de contrôler les Genital Interface Devices connectés
- Les fonctions fournies sont les ressources
/devices, /device/{id}, /device/{id}/rssi, /device/{id}/battery ainsi que l’outil device_vibrate, avec une intensité de vibration définie dans la plage 0.0 à 1.0
- L’état actuel est expérimental et instable ; le projet a commencé le 2025-04-01 comme projet pédagogique rapide, et les instabilités de gestion de connexion de
go-buttplug empêchent encore de mener correctement les tests end-to-end
- Pour l’utiliser, il faut lancer Intiface Central, vérifier le port du serveur WebSocket, puis enregistrer dans la configuration de l’hôte MCP, comme Claude Desktop, l’exécutable
buttplug-mcp et des arguments tels que --ws-port 12345
- En inférence locale basée sur Ollama, des appels d’outils ont été testés avec
mcphost, mais dans cet environnement seuls les Tools sont pris en charge et non les Resources, ce qui empêche l’énumération des appareils et la consultation détaillée
Objectif du projet et périmètre de prise en charge
buttplug-mcp est un serveur Model Context Protocol qui permet à des programmes LLM d’interroger et de contrôler les appareils connectés à l’écosystème Buttplug.io
- Il vise des invites de ce type dans des programmes LLM compatibles avec les outils comme Claude Desktop
- lister les appareils Buttplug connectés
- régler un moteur précis d’un appareil donné à 50 % d’intensité
- vérifier le niveau de batterie d’un Lovense Max 2
- vérifier si le signal d’un WeWibe est faible
- Le README précise que cette expérience correspond à l’état visé, tandis que l’expérience actuelle reste instable et frustrante
Ressources et outil MCP
- Les ressources prises en charge se concentrent sur la consultation, au format JSON, des appareils connectés et de leur état
/devices : liste des appareils Buttplug connectés
/device/{id} : informations sur l’appareil à partir de l’ID numérique obtenu via /devices
/device/{id}/rssi : niveau de signal RSSI pour un ID d’appareil
/device/{id}/battery : niveau de batterie pour un ID d’appareil
- Un seul outil est pris en charge :
device_vibrate
- les paramètres sont
id, motor optionnel, et strength
- la valeur par défaut de
motor est 0
strength est une valeur numérique où 0.0 correspond à l’arrêt et 1.0 à l’intensité maximale
- Le README inclut
schema_resources.json et schema_tools.json comme exemples de schémas JSON pour les ressources et les outils
État actuel et limites
- Le projet a démarré le 2025-04-01, jour du poisson d’avril, comme projet pédagogique rapide créé après le service MCP expérimental de données de marché financier
dbn-go, réalisé la veille
- Il fonctionne, mais la gestion des connexions de la bibliothèque sous-jacente
go-buttplug est décrite comme instable
- Avec Claude, il a été possible de récupérer la liste des appareils, mais certains appareils ne vibraient pas même via Intiface Central seul, donnant l’impression d’un « mode lecture seule »
- Une autre limite mentionnée est l’absence d’un appareil Buttplug.io virtuel permettant de tester sans dépendre de matériel physique
- Le README indique explicitement qu’aucun véritable test end-to-end n’a encore été mené à terme
- La suite consiste à examiner plus en détail l’origine de l’instabilité des connexions dans
go-buttplug, et à comprendre comment les hôtes MCP prennent actuellement en charge Tools, Resources et Resource Templates
Installation et utilisation avec Claude Desktop
brew tap conacademy/homebrew-tap
brew install conacademy/tap/buttplug-mcp
- Pour l’utiliser, il faut télécharger l’application hub Intiface Central afin de gérer les appareils et vérifier le port du serveur
- le port par défaut semble être
12345
- Dans Claude Desktop, il faut enregistrer l’exécutable et le port WebSocket dans la configuration du serveur MCP
- un exemple de chemin d’installation Homebrew sur macOS est
/opt/homebrew/bin/buttplug-mcp
- l’exemple de configuration utilise
--ws-port 12345
{
"mcpServers": {
"buttplug": {
"command": "/opt/homebrew/bin/buttplug-mcp",
"args": [
"--ws-port", "12345"
]
}
}
}
- La configuration de Claude Desktop suit le quickstart utilisateur MCP, en remplaçant toutefois la configuration par celle ci-dessus
Expériences avec Ollama et mcphost
- En inférence locale, il est possible d’utiliser un hôte MCP compatible avec Ollama
- Il faut utiliser un LLM Ollama compatible avec les outils
- Les essais ont été réalisés avec
mcphost, un hôte MCP créé par le développeur de la bibliothèque mcp-go
- L’exemple d’exécution consiste à enregistrer la configuration précédente dans
mcp.json, puis à lancer le modèle llama3.3
go install github.com/mark3labs/mcphost@latest
mcphost -m ollama:llama3.3 --config mcp.json
- D’après le README, dans
mcphost, seuls les Tools sont pris en charge et non les Resources, ce qui empêchait de lister les appareils ou d’en consulter les détails
- Avec
phi4-mini, l’appel de l’outil device_vibrate a bien renvoyé une réponse de succès, mais à cause des problèmes d’état actuel mentionnés plus haut, l’appareil réel n’a pas vibré
Build, outils de test et CLI
- Le build s’effectue avec task, et le binaire généré est
bin/buttplug-mcp
task
- Le processus de build exécute
go mod tidy, puis go build -o bin/buttplug-mcp cmd/buttplug-mcp/main.go
- Outils de test utiles
task stdio-schema | jq : sortie du schéma JSON
npx @modelcontextprotocol/inspector node build/index.js : MCP Inspector Web GUI
- Les options CLI prennent en charge l’aide, le fichier de logs, les logs JSON, le transport SSE, l’hôte SSE, les logs verbeux et la configuration du port du serveur WebSocket Buttplug
--ws-port int : port auquel se connecter pour le serveur WebSocket Buttplug
--sse : utilise le transport SSE au lieu du STDIO par défaut
--log-file string : destination du fichier de logs ou utilisation de la variable d’environnement MCP_LOG_FILE
--log-json : active les logs JSON
--verbose : active les logs détaillés
2 commentaires
Ouh… on va peut-être dire que c’est encore trop tôt pour nous…
Avis sur Hacker News
Buttplug: An open-source software suite for teledildonics (https://buttplug.io/) il y a 5 ans | 249 commentaires
Empathy for the user having sex with your software (https://docs.buttplug.io/docs/dev-guide/intro/buttplug-ethic...) il y a 10 mois | 127 commentaires
T-code – A protocol for implementing UART serial communications to an adult toy (https://stpihkal.docs.buttplug.io/protocols/tcode.html) il y a 2 ans | 74 commentaires
An open-source standards and software project for intimate hardware (maybe NSFW) (https://buttplug.io/) il y a 7 ans | 39 commentaires
Buttplug Sex Toy Control Project Implemented in Rust (https://buttplug.io/) il y a 2 ans | 3 commentaires
Deldo is a sex toy control and teledildonics mode for Emacs (github.com/qdot) (2021) https://news.ycombinator.com/item?id=29207607 | 126 commentaires
Pourquoi ce marché est-il différent ? Est-ce parce que les grandes entreprises l’évitent et n’ont pas encore réussi à le gâcher ?
Avant de voir cet article, je pensais que la communauté des vélos électriques était la plus grosse communauté de hackers s’intéressant aux appareils du quotidien. En Europe, il y a pas mal de hacking d’ordinateurs de vélos électriques, parfois pour supprimer la limitation de vitesse, même si c’est illégal et qu’on a de bonnes chances de se faire prendre dans les grandes villes danoises
Moi, je l’ai surtout fait pour les statistiques. L’ordinateur de mon vélo électrique remettait à zéro le kilométrage « actuel » tous les 500 km et stockait le kilométrage total ailleurs, mais celui-ci était aussi réinitialisé quand le vélo passait à l’atelier. L’écran de base n’avait même pas d’horloge, donc ma principale motivation était d’afficher l’heure sur l’écran ; maintenant j’ai aussi ajouté une sauvegarde du kilométrage et des statistiques juste pour le fun
Quand je l’envoie à l’atelier, je le reflashe avec les réglages d’usine. Je ne suis absolument pas hacker hardware, mais une simple recherche m’a permis de trouver les outils adaptés à ma marque et de faire ce que je voulais. Je pense que la plupart des appareils du quotidien ont très peu de sécurité. C’est peut-être parce que les Européens qui ne veulent pas que la NSA les observe via Google Camera achètent des produits qui ne viennent pas des grandes entreprises tech, mais même les produits de grandes marques comme Bosch sont assez hackables. Une fois qu’on a le matériel entre les mains, la plupart des choses ne finissent-elles pas par être hackables ?
Des entreprises comme Lovense ont dit être prêtes à publier une API, mais sur GitHub cela se résume à des dépôts vides. Lovense est une entreprise étrange : tout semble pointer vers une ou deux personnes à Taïwan, et c’est très opaque
Il y a aussi eu des cas douteux. Des recours collectifs ont été intentés contre des marques comme Hytto/Lush [0] ou We-Vibe [1]
[0] https://www.courthousenews.com/judge-forwards-class-action-s...]
[1] https://topclassactions.com/lawsuit-settlements/lawsuit-news...
Il est décrit comme un « Intimate Haptics Control Standard and Library », avec une explication plus détaillée sur https://buttplug-spec.docs.buttplug.io/docs/spec
Il s’agissait soit de fuites de données personnelles, soit d’appareils qui « enfermaient » l’utilisateur avant de demander une rançon. Je riais à mon bureau, mais le contenu était tellement NSFW que je ne pouvais pas expliquer pourquoi je riais
C’est déjà bien descendu de la première page, mais vous pouvez me demander n’importe quoi
Je voulais écrire dans le README que ce serveur MCP en particulier est assez inutile, et que ce n’est absolument pas la façon dont j’aimerais avoir des interactions sexuelles. Mais il faut bien commencer quelque part, et l’approche good-giving-game correspond à notre style, alors je l’ai mis sur GitHub
Ironiquement, mon projet d’il y a deux ans consistait à intégrer Buttplug à un salon de chat SSH basé sur Charm et à une TUI BubbleTea. J’utilisais des clés SSH pour gérer une partie du consentement numérique, et je construisais un graphe anonyme de ce qu’une entité pouvait faire aux appareils d’une autre. Je pense que l’avenir du MCP contrôlé par des agents aura besoin de ce genre d’éléments
Je ne suis pas mainteneur principal de Buttplug.io, mais j’ai échangé avec eux sur Discord pendant un moment. Puisque vous y jetez un œil, si des Rustaceans sont intéressés, ce projet cherche des mainteneurs supplémentaires. Ce serveur MCP est écrit en Golang, mais dans l’écosystème Buttplug, il serait probablement préférable qu’il soit en Rust
Au début de ma carrière, je faisais de la recherche haptique, et j’ai plusieurs brevets liés via Immersion. Mon mémoire de master portait sur l’écriture d’un moteur de rendu haptique 3D et l’intégration de l’haptique dans VRML. Si vous vous en souvenez ! J’ai aussi travaillé sur un projet financé par le NIH autour d’appareils de diagnostic des troubles sexuels, et j’ai fabriqué des jouets maison. Là, je viens de recevoir un casque EEG Neurable et je travaille sur Biaerolar Beats [1]
Pour revenir au vibe coding, oui, j’ai bien fait vibrer un LELO F1 avec ça, mais ce projet a vraiment été fait à la main. Il y a quelques semaines, j’ai essayé de vibe coder
a2a4a2aavec Claude et Gemini, mais le protocole A2A était tellement récent qu’il était difficile d’enseigner A2A au modèle. Je me demande comment les gens gèrent ce genre de choses en généralDans l’ensemble, c’était amusant et j’ai beaucoup appris sur les LLM avec appels d’outils. Cette semaine-là, j’ai créé trois serveurs MCP : pour l’argent [2], pour le sexe [3] et pour les drogues [4]. Merci à
mark3labs/mcp-goLe dernier, AgentDank [4], n’a pas encore eu de suite, mais en matière de données publiques et de vrais résultats IA, c’est probablement le plus cool. Regardez la vidéo là-bas. Brancher des données personnalisées et des endpoints SQL à un LLM avec appels d’outils, c’est absurdement puissant
[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